论文方法
方法描述
本文提出的功能性干扰测试(Functional Interference Testing,简称FIT)是一种针对容器内核资源隔离漏洞的检测方法。该方法通过在两个容器之间模拟数据流交互,来检测容器内核资源是否被泄露或篡改。具体来说,FIT首先使用动态数据流分析技术识别出可能具有跨容器数据流的系统调用序列,并从中选择出能够触发功能性干扰的组合。然后,FIT执行这些测试用例,在两个容器中分别运行发送器程序和接收器程序,并收集它们之间的系统调用结果。最后,FIT通过对这些结果进行比较和分析,来判断是否存在功能性干扰漏洞。
方法改进
相比于传统的静态分析方法,FIT采用了动态的数据流分析技术,可以更准确地识别出可能存在跨容器数据流的系统调用序列。此外,FIT还引入了聚合测试报告的功能,可以将同一类型的功能性干扰漏洞合并在一起,方便用户进行查看和处理。
解决的问题
FIT解决了传统静态分析方法无法准确识别跨容器数据流、难以区分不同类型的漏洞等问题,提高了容器安全性的检测效率和准确性。同时,FIT也为企业提供了更加全面的安全评估服务,帮助企业更好地保护其业务系统的安全性
功能干扰错误允许攻击者从同一台机器上运行的另一个容器中提取信息或通过修改不正确隔离的内核资源来影响其完整性
资源隔离
要隔离内核资源类型,进程会通过使用unshare系统调用创建并加入名称空间实例,在其中进程可以指定名称空间类型(例如,通过使用CLONE_NEWNET来指定网络名称空间)。名称空间实例可以分配给进程或一组进程。然后,内核确保在同一名称空间组中的进程共享相同的资源视图,并且外部进程无法访问它。对于每个名称空间类型,进程始终与一个名称空间实例相关联,并可以通过setns系统调用(限制地)在不同的名称空间实例之间切换。在创建时,新进程可以加入父进程指定的对应名称空间标志的名称空间实例,或者通过继承父进程的名称空间来实现。
命名空间缺陷。Linux 提供了多种系统调用,用于进程与各种内核资源交互,这使得内核资源隔离特别具有挑战性地实现。因为资源隔离是贯穿整个内核的功能,许多内核服务需要正确实施以确保有效的内核资源隔离。因此,为了保护如此大的接口,开发人员必须考虑直接或间接访问受保护的内核资源的所有系统调用。这使内核开发变得困难和错误百出,特别是实施复杂的语义系统调用时,如使用不同类型的内核资源的系统调用。
测试基础
本文介绍了一个名为KIT的动态测试框架,用于发现操作系统级别的虚拟化机制中的功能性干扰漏洞。该框架通过比较容器在执行前后的系统调用跟踪来检测跨容器的功能性干扰,并包括两个关键组件:一种高效的算法生成测试用例,以及一个系统调用跟踪分析框架来检测功能性干扰漏洞并分组报告
KIT框架通过比较容器在执行前后的系统调用跟踪来检测跨容器的功能性干扰。具体来说,当容器A运行时,会记录其系统调用跟踪;然后,在运行容器B的情况下重新运行容器A,再次记录其系统调用跟踪。接着,KIT框架会将这两个系统调用跟踪进行比较,找出它们之间的差异。如果存在差异,则可能存在功能性干扰漏洞。此外,KIT框架还包括一个系统调用跟踪分析框架,可以自动识别非确定性结果和排除与命名空间受保护资源无关的系统调用结果,从而提高测试效率和准确性。
KIT框架通过生成能够触发跨容器数据流的系统调用序列对来选择测试用例。这些序列设计用于在两个容器之间引发功能性干扰漏洞。为了高效地生成这些测试用例,KIT框架使用基于文件系统数据分析的方法,以尽可能少的测试用例覆盖所有潜在的干扰路径。这种方法是通过对容器中的进程及其相关文件系统操作进行分析来实现的。同时,KIT框架还提供了一个交互式的策略,允许用户逐步提供关于命名空间受保护资源的信息,以便过滤掉与不受保护资源相关的系统调用,并帮助生成更有效的测试用例。
“触发跨容器数据流的系统调用序列”是指一组系统调用,它们被组合在一起并执行,以产生跨容器的数据流。这些系统调用通常涉及到共享资源(如文件、内存等),并且可以导致不同容器之间的功能干扰漏洞。因此,在测试过程中,需要特别关注这些系统调用序列,以确保容器隔离的安全性
评论区