3.3.2 漏洞发掘技巧
可以利用研究中所发现的漏洞模式,采用静态和动态分析技术对程序中可能存在的竞争条件漏洞进行分析。
静态分析工具通过检查程序源代码来寻找可能出现竞争条件漏洞的地方。由于不同的计算机系统有不同的环境,如果分析程序利用了某种系统的环境,在另一系统上就有可能得出错误的结论。而且,由于文件别名、设备的低级表示等原因,都增加了判断动态条件的复杂性。因此,静态分析工具只能报告产生编程条件的调用之间的间隔,也就是说只能报告编程条件的存在可能性,而对环境条件,一般需要根据软件所在的具体的系统,由人工来分析。
已有一些工具能对竞争条件漏洞进行静态分析。静态分析技术用于发现程序中竞争条件漏洞的基本思路是(以C语言为例):根据竞争条件发生的漏洞模式,对C程序进行解析,构造程序的控制依赖图和数据流图。通过控制依赖图,分析器可以确定潜在的编程间隔;通过数据流图,分析器可以确定传给系统调用的参数是否会产生编程间隔。具体来说,如果两个系统调用都使用了文件名,静态分析器分析参数是否相同;如果一个调用使用文件名,而另一个使用文件描述符,分析器便确定程序在创建描述符时是否把名字和描述符绑定在一起。
还可以通过动态分析技术检测程序中竞争条件漏洞的出现。动态分析工具在程序的执行过程中分析程序中竞争条件漏洞的出现。针对UNIX文件系统中的竞争条件漏洞,一般可以通过两种方法进行动态分析和检测。
一种方法是修改或截断系统调用,如通过修改动态链接库及使用Hook技术,使系统在调用这些敏感的系统调用时,先要经过分析或检测,执行分析或检测的软件要跟踪检查所传递参数中的描述符或名字,如果两个相继调用的系统调用构成了编程条件,产生了编程间隔,分析检测软件便报告。由于目标程序可能通过低级的方式访问文件系统(如通过直接访问磁盘块号),从而跳过各种检查,使这种方法的精确性受到限制。
另一种方法是通过检查各种日志。许多系统或应用具有较为详细的审计功能,如果这些日志中包含文件访问的各种参数信息,就可以通过分析日志检测编程间隔的存在,甚至在某些给定的条件下,可以检测环境条件的出现。但是,这种方法要依赖于日志系统是否完备和详细。
动态分析器在执行时进行检测,因此有些动态分析器实际上是一种入侵检测系统(IDS),当有竞争条件漏洞出现时便发出报警,甚至做出一定的响应。从另一个角度来说,有些入侵检测系统也可以作为竞争条件漏洞的动态分析器,可以将竞争条件漏洞模式作为检测信号输入入侵检测系统中。一般来说,竞争条件漏洞模式可以较为方便地表示为基于规则说明或基于序列的IDS的检测信号。