编辑
2025-12-01
系统安全
00

目录

OctopusTaint 的工作价值
静态污点分析中的挑战
1. 栈变量与全局变量识别
2. 间接调用处理
3. 函数参数恢复
4. 清洗(Sanitization)检查
OctopusTaint的工作原理
固件解包(Firmware Unpacking)
后端文件选择(Back-end Files Selection)
二进制函数选择(Binary Functions Selection)
静态污点引擎与回溯(Static Taint-Engine and Backtracking)
清洗检查(Sanitization Inspection)
执行路径连接与过滤(Connect Execution Paths and Filtering)
OctopusTaint可取之处
OctopusTaint参考工作
多二进制路径追踪
Web 接口静态分析与符号执行
SSE 与别名分析
定义-使用链与数据依赖图(DDG)

OctopusTaint 的工作价值

  1. 采用静态污点分析的方法,同时融合数据流的分析

  2. 解决间接调用问题

  3. 可追踪 NVRAM 的变形 taint,识别用户自定义 taint source

  4. 强化 Sanitization 检测

静态污点分析中的挑战

1. 栈变量与全局变量识别

挑战: 精确识别用于创建、更新或获取栈内存定义所需的栈变量偏移量存在较大难度,尤其在出现间接内存寻址或复制传播的情况下。

原因: 基于 VEX-IR 的到达定义分析(RDA)有时会将用于计算内存引用地址的寄存器操作误判为数学运算,导致所需内存定义更新失败。

2. 间接调用处理

挑战: 被分析的固件中间接函数调用非常普遍,且常与潜在漏洞路径相关。

angr RDA 的问题: 在存在间接调用的情况下,angr RDA 无法判断应探索的具体函数,缺乏指导信息。

3. 函数参数恢复

挑战: 在分析过程中,angr 框架经常无法完整恢复函数的所有预期参数。

原因:

  • 调用约定恢复不足
  • 栈帧重建不完整
  • 参数识别启发式有限

4. 清洗(Sanitization)检查

挑战: 识别污点路径中的安全检查和长度约束(如边界检查、格式验证)十分困难。

原因: 在回溯阶段,需要遍历数据依赖图(DDG)以定位对最终污点汇有贡献的定义,但:

  • 清洗操作节点可能无法被识别
  • 某些定义在图中表示不一致
  • 安全检查可能以非标准形式实现

OctopusTaint的工作原理

image.png

固件解包(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)
    • 基于 use-def 链和 def-use 链
  • 集成 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可取之处

  1. 采用RDA到达定义分析,有较好的分析价值
  2. 采取Sink2Source方法
  3. 面向多系统,而不是局限于linux系统
  4. 对于系统内部的清洗函数,进行过滤,提高运行效率

可以参考的图:

image.png

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

本文作者:barrenham

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!