软件漏洞分析技术第10章动态污点分析读书笔记。

  • 动态污点分析
    • 基本原理
    • 方法实现
    • 实例分析
    • 典型工具
      • TaintCheck
      • Argos
      • TaintDroid

基本原理

动态污点分析在程序运行的基础上,对数据流或者控制流进行监控,从而实现对数据在内存中的显式传播、数据误用等操作进行跟踪和检测。
根据流,动态污点分析可以归类为:

  1. 基于数据流的
  2. 基于控制流的
    根据范围,动态污点分析可以归类为:
  3. 用户进程级
  4. 全系统级

动态污点分析的基本步骤有:

  1. 污点数据标记
  2. 污点动态跟踪
  3. 污点误用检查

优点是低误报和高可信。

缺点是:

  1. 漏报率高
  2. 平台相关性高
  3. 资源消耗大

实现

动态代码插桩:在被分析的程序的控制流中,插入用户定义的代码,从而对程序的行为进行监控的方法。

根据时机的不同,可以被分为:

  1. 源代码插桩
  2. 编译时插桩
  3. 链接时插桩
  4. 运行时插桩

污点敏感点,即 Sink 点,是污点数据有可能被误用的指令或者系统调用。主要可以分为:

  1. 跳转地址
  2. 格式化字符串
  3. 系统调用参数

典型工具

TaintCheck:基于开源的x86模拟器Valgrind设计实现,先将机器指令翻译成为 ucode,然后将 ucode 传递给TaintCheck,根据指令类型执行相应的操作或者报警。
Argos:主要用作主机蜜罐,分析被检测到的攻击,检测 0day 漏洞攻击。
TrainDroid:针对安卓应用的动态监测软件。