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 检查污点信息
