概念

污点分析将程序中的数据分为两类:

  1. 我们对所关心的敏感数据打上标签,称之为「污点数据」
  2. 其他数据则称为「无污点数据」

污点分析就是追踪污点数据在程序中如何流动,观察它最终是否流到敏感的地方。其中,污点数据产生的地方称为源头( source ),我们不希望污点数据到达的敏感地带称为水槽或者汇聚点( sink )

污点分析可以抽象成一个三元组 <sources,sinks,sanitizers> 的形式

  • source 代表直接引入不受信任的数据或者机密数据到系统中
  • sink 代表直接产生安全敏感操作(违反数据完整性)或者泄露隐私数据到外界(违反数据保密性)
  • sanitizer 即无害处理, 代表通过数据加密或者移除危害操作等手段使数据传播不再对软件系统的信息安全产生危害

显式流分析

通过直接或间接赋值形成的污染路径

隐式流污染分析

分析污点数据如何随程序中变量之间的 控制依赖关系 传播(从条件指令传播到其所控制的语句)