动态污点分析
污点分析可以抽象成一个三元组<sources,sinks,sanitizers>的形式,
source 即污点源,代表直接引入不受信任的数据或者机密数据到系统中;sink即污点汇聚点,代表直接产生安全敏感操作(违反数据完整性)或者泄露隐私数据到外界(违反数据保密性),一般是某些敏感函数,可能是已经暴露出来的漏洞点;sanitizer即无害处理,代表通过数据加密或者移除危害操作等手段使数据传播不再对软件系统的信息安全产生危害.
污点分析就是分析程序中由污点源引入的数据是否能够不经无害处理,而直接传播到污点汇聚点.如果不能,说明系统是信息流安全的;否则,说明系统产生了隐私数据泄露或危险数据操作等安全问题。
污点分析的定义:把数据标记为污点或非污点,当污点数据根据信息流传播策略可能影响到非污点数据时,则将该非污点数据的标记修改为污点。 当污点标签最终随数据传播到指定的存储区域或者信息泄漏点时,则认定该系统违反了信息流策略。
-
基本概念
- 静态:不运行,根据语法和词法分析等方法分析变量之间数据和控制的依赖关系,以检测污点数据能否从污点传播到污点汇聚点。
- 动态:在目标程序运行过程中,通过实时跟踪并记录程序变量、寄存器和内存的值,确定污点数据能否从污点源传播到污点汇聚点。
污点数据分析通过数据间的依赖关系在系统或应用程序中进行传播,分为数据依赖和控制依赖。
- 数据依赖:调用关系图,赋值,函数调用和别名。
- 控制依赖:递归