OctopusTaint 的工作价值
-
采用静态污点分析的方法,同时融合数据流的分析
-
解决间接调用问题
-
可追踪 NVRAM 的变形 taint,识别用户自定义 taint source
-
强化 Sanitization 检测
静态污点分析中的挑战
1. 栈变量与全局变量识别
挑战:
精确识别用于创建、更新或获取栈内存定义所需的栈变量偏移量存在较大难度,尤其在出现间接内存寻址或复制传播的情况下。
原因:
基于 VEX-IR 的到达定义分析(RDA)有时会将用于计算内存引用地址的寄存器操作误判为数学运算,导致所需内存定义更新失败。
2. 间接调用处理
挑战:
被分析的固件中间接函数调用非常普遍,且常与潜在漏洞路径相关。
angr RDA 的问题:
在存在间接调用的情况下,angr RDA 无法判断应探索的具体函数,缺乏指导信息。
3. 函数参数恢复
挑战:
在分析过程中,angr 框架经常无法完整恢复函数的所有预期参数。
原因:
- 调用约定恢复不足
- 栈帧重建不完整
- 参数识别启发式有限
4. 清洗(Sanitization)检查
挑战:
识别污点路径中的安全检查和长度约束(如边界检查、格式验证)十分困难。
原因:
在回溯阶段,需要遍历数据依赖图(DDG)以定位对最终污点汇有贡献的定义,但:
- 清洗操作节点可能无法被识别
- 某些定义在图中表示不一致
- 安全检查可能以非标准形式实现
OctopusTaint的工作原理

固件解包(Firmware Unpacking)
- 使用 binwalk 解包固件
- 提取前端网页文件(HTML, XML, Ajax, ASP)
- 提取二进制文件供后续分析
后端文件选择(Back-end Files Selection)
筛选潜在漏洞区域
利用关键字匹配挑选与漏洞相关的二进制文件
- 提取网页文件中的关键字符串(参考 SaTC 方法)
- 选择关键字匹配或相似的二进制文件
- 针对使用共享内存库(如
libnvram.so)的二进制文件标记
- 追踪跨文件数据交互
二进制函数选择(Binary Functions Selection)
- 优先分析以下函数
- 接收用户输入(如
get_cgi)
- 执行系统命令(如
system)
- NVRAM 操作函数(如
nvram_set, nvram_get)
- 记录新的用户自定义输入函数
- 在后续分析中追踪调用这些函数的二进制函数
静态污点引擎与回溯(Static Taint-Engine and Backtracking)
OctopusTaint 核心模块
精确生成污点传播定义和路径
- 核心采用 Reaching Definition Analysis(RDA)
- 构建 数据依赖图(DDG)
- 集成 AIL 中间语言 和 clinic 模块
- 对关键函数执行污点分析
- 遇到系统调用或危险函数(如
strcpy, sprintf)时检查参数定义
- 使用自底向上的深度优先回溯追踪污点源到污点汇
- 记录路径到 File_get_2_Sink
- 对 NVRAM 操作(如
nvram_set)同样记录到 File_get_2_Set
清洗检查(Sanitization Inspection)
- 分析回溯得到的候选路径
- 提取关键安全检查(条件判断、输入长度限制等)
- 特别关注字符串操作及长度参数
- 已清洗或受限的路径会被过滤
执行路径连接与过滤(Connect Execution Paths and Filtering)
- 固件可能由多个二进制文件组成
- 函数之间通过共享内存、套接字或文件通信
- OctopusTaint 追踪跨文件通信路径,尤其是 NVRAM
- 汇总每个二进制文件的 File_get_2_Set 和 File_get_2_Sink
- 连接成完整执行路径
- 对路径进行过滤,挑选出最关键漏洞进行报告
OctopusTaint可取之处
- 采用RDA到达定义分析,有较好的分析价值
- 采取Sink2Source方法
- 面向多系统,而不是局限于linux系统
- 对于系统内部的清洗函数,进行过滤,提高运行效率
可以参考的图:

OctopusTaint参考工作
多二进制路径追踪
- Karonte
- 跟踪用户可控输入(HTTP headers、环境变量)跨多个二进制文件
- 构建 多二进制图(multi-binary graph)
- 使用 DSE 判断 tainted 输入是否到达关键 sink
- 借鉴点:多二进制交互追踪和 DSE 方法
https://github.com/ucsb-seclab/karonte
Web 接口静态分析与符号执行
- SaTC
- 解包固件,提取 HTML、XML、Ajax 等 Web 文件
- 提取关键字对应后端 API
- 使用无限制符号执行(unconstrained symbolic execution)探索用户输入到系统函数路径
- 输出完整 taint 路径报告
- 借鉴点:Web 前端输入到后端 API 的追踪方法
https://github.com/NSSL-SJTU/SaTC
SSE 与别名分析
- EmTaint
- 使用 SSE 进行别名分析,解决间接调用问题
- 探索更深的 taint 路径,弥补 SaTC 和 Karonte 的遗漏
- 借鉴点:间接调用处理与别名分析
https://github.com/kuc001/EmTaint
定义-使用链与数据依赖图(DDG)
-
HermeScan
- 基于 def-use 构建 top DDG
- 前向 taint 跟踪
- 采用 path-merging 缓解路径爆炸
- 借鉴点:前向 taint 跟踪与路径优化
-
MangoDFA
- 采用反向遍历(sink → source)
- 缓解路径爆炸,加速大规模分析
- 借鉴点:反向 taint 路径分析
github.com/sefcom/operation-mango-public