污点分析

在污点分析中,所有来源不可信的数据都被标记为污点数据,通过跟踪污点数据的传播来判断污点数据是否可能被以不恰当的方式使用,进而判断是否可能存在漏洞。例如,如果在某程序点存在能够把污点数据转为执行代码的函数调用, 那么就可能存在任意代码执行的漏洞。代码注入漏洞是当前危害最大的软件漏洞之一,代码注入漏洞能够将输入的数据作为代码来执行,从而导致在目标系统上可以执行攻击者的任意代码,SQL 注入漏洞和 XSS 漏洞属于典型的代码注入漏洞,污点分析在检测该类型的漏洞时效果显著。污点分析具体又可分为动态污点分析和静态污点分析。

  1. 动态污点分析 动态污点分析通过标记用户输入数据为污点数据,在程序动态执行中跟踪污点数据在内存中的传播踪迹,当污点数据被以危险的方式使用时,污点分析引擎即报告发现疑似漏洞。动态污点分析由于真实执行待测程序,因此误报率低,但由于执行过程中,增加了额外的检测和污点传播跟踪的开销,因而待测程序执行速度被降低,同时,由于动态污点分析只能检测到其执行路径上的可疑漏洞,因此漏报率高。BitBlaze 是一个二进制分析平台,它利用污点分析和符号执行实现了漏洞利用的检测和防御,其包含的 TEMU 模块的主要功能是进行动态污点分析。 BuzzFuzz 提出了一种利用动态污点分析进行模糊测试关键数据段标定的方法,它通过动态污点追踪来找出影响程序关键点(如关键分支条件变量)的数据输入字段,并对这些字段进行重点模糊测试,从而避免了盲目的模糊测试。

  2. 静态污点分析 静态污点分析一般用于对源代码的分析,它通过对代码的分析而不是实际执行来对污点进行跟踪,相对于动态污点分析,这样做的主要优点是它能够同时计算所有程序路径的污点传播情况,但另一方面,由于没有程序运行时信息,它的分析结果可能不准确。

最后更新于