• 我们在哪一颗星上见过 ,以至如此相互思念 ;我们在哪一颗星上相互思念过,以至如此相互深爱
  • 我们在哪一颗星上分别 ,以至如此相互辉映 ;我们在哪一颗星上入睡 ,以至如此唤醒黎明
  • 认识世界 克服困难 洞悉所有 贴近生活 寻找珍爱 感受彼此

第十一章:基于libdft 的动态污点分析

二进制分析实战 云涯 1周前 (11-19) 43次浏览

11.1  libdft 简介

想象你之前要自己搭建整个厨房监控系统(DTA),而现在有了libdft——一个专业的”食品安全监控套装”!

11.1.1 libdft的内部结构 – “工具箱里有什么?”

libdft工具箱包含四个核心组件:

1. 影子内存(标记映射)- “污染记录本”

两种版本选择:

基础版:只能记录”干净/污染”(1种颜色),但速度快、省内存

增强版:可以区分8种不同污染源(8种颜色),功能更强

智能存储技术(STAB):

就像给厨房的每个区域配一个智能索引卡

当需要查看某个食材的污染状态时,先查索引卡,快速找到记录位置

优化技巧:只记录实际使用的区域,忽略永远不会污染的区域

 

2. 虚拟CPU – “厨师状态追踪器”

比喻: 跟踪每个厨师的”手是否干净”

为每个厨师(寄存器)准备一个状态记录

追踪厨师手上是否沾了污染物

还有一个”临时记录本”处理特殊情况

 

3. 污点追踪引擎 – “自动监控逻辑”

这是libdft的核心大脑

自动分析所有厨房操作(指令)

根据预设规则判断污染如何传播

 

4. libdft API – “监控控制面板”

提供现成的控制函数:

tagmap_setb():给食材贴上”污染标签”

tagmap_getb():检查食材是否被污染

系统调用回调:在特定操作前后触发检查

 

11.1.2 污点传播策略 – “五种污染传播规则”

libdft把所有的厨房操作分为5类,每类有不同的污染判断规则:

 

1. ALU类 – “混合操作”

对应指令: add, sub, and, xor等

污染规则: 取所有原料的污染并集

厨房比喻: 把生肉(污染)和蔬菜(干净)一起炒 → 整道菜都被污染

 

2. XFER类 – “搬运操作”

对应指令: mov等移动指令

污染规则: 完全复制污染状态

厨房比喻: 把生肉从A盘移到B盘 → B盘变得和A盘一样污染

 

3. CLR类 – “消毒操作”

对应指令: 自我抵消的运算(如a ⊕ a)

污染规则: 清除所有污染

厨房比喻: 有毒物质与解毒剂混合 → 变得安全

 

4. SPECIAL类 – “特殊操作”

对应指令: xchg(交换), lea(地址计算)

污染规则: 需要特殊处理

厨房比喻: 两个厨师交换食材 → 污染状态也要交换

 

5. 不支持类 – “监控盲区”

对应指令: FPU, MMX, SSE等扩展指令

问题: libdft无法追踪这些操作的污染传播

厨房比喻: 有些新型烹饪设备没有安装监控摄像头

 

libdft的局限性 – “工具箱的不足之处”

只支持32位厨房:不能用于64位的大型餐厅

需要特定版本的Pin:只能用配套的”监视器底座”

某些设备不支持:新型烹饪设备(MMX/SSE指令)无法监控

 

11.2  使用DTA检测远程控制流劫持攻击

想象你的厨房有个规则:只有经过认证的厨师才能使用主厨刀具(execve系统调用)。现在我们要建立一个系统,防止有人通过网络发送假指令,让厨房执行危险操作。

具设计目标

检测什么? 攻击者通过网络发送恶意数据,控制execve系统调用的参数

污点源:网络接收函数(recv, recvfrom)

污点槽:execve系统调用参数检查点

11.2.1  检查污点信息

 

 

 

 

 

 

 

 

 

 


云涯历险记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:第十一章:基于libdft 的动态污点分析
喜欢 (0)