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

目录

EmTaint 的工作价值
EmTaint的工作原理
1. 固件预处理(Firmware Preprocessing)
2. 基于 SSE 的按需别名分析(SSE-Based On-Demand Alias Analysis)
3. 间接调用解析(Indirect Call Resolution)
4. 污点初始化与传播(Taint Initialization and Propagation)
4.1 识别污点源(Taint Sources)
4.2 污点传播(Taint Propagation)
5. 漏洞检测模块(Taint-Style Vulnerability Check)
5.1 找到污点到达的危险点(Security-Sensitive Sinks)
5.2 判断是否构成潜在漏洞

EmTaint 的工作价值

  1. 解决固件后端间接调用难以解析的问题 Linux-based 固件后端大量存在间接调用(indirect calls),传统方法无法解析,导致大量潜在漏洞路径无法被发现。 EmTaint 针对这一核心难点提出改进,使得更多真实的可疑路径能够被揭示。

  2. 提升变量别名(variable alias)场景下的数据流分析能力 变量别名频繁出现会导致数据流追踪断裂,隐含漏洞路径无法识别。 EmTaint 通过改进分析机制,使得在别名复杂的情况下仍能保持可靠的数据流追踪。

  3. 减少传统方法带来的误识别问题 之前的研究依赖启发式方式识别“中介污点源(mediate taint source)”,可能误识别,从而产生大量误报(false positives)。 EmTaint 通过更精确的分析方式避免此类启发式错误,使结果更准确。

  4. 揭示传统方法遗漏的大量潜在漏洞路径 由于未处理间接调用和别名问题,现有方法会遗漏许多真实路径(false negatives)。 EmTaint 提供更完整的路径覆盖,使漏洞挖掘更全面。

EmTaint的工作原理

image.png

下面是 EmTaint 如何进行漏洞分析的完整流程,使用 Markdown 列表结构清晰呈现,并用中文表达技术要点。

1. 固件预处理(Firmware Preprocessing)

  • 对固件进行解压与文件提取,定位并抽取其中的二进制可执行文件。
  • 将提取出的二进制代码转换为中间表示(IR)。
  • 在 IR 基础上构建控制流图(CFG)与部分调用图(CG),为后续分析(别名、间接调用、污点传播)提供结构信息。

2. 基于 SSE 的按需别名分析(SSE-Based On-Demand Alias Analysis)

  • 引入一种新的 结构化符号表达式(Structured Symbolic Expression, SSE),用来精确表达变量及内存块之间的别名关系。

  • 设计别名更新机制,用于在整个二进制执行范围内持续追踪变量别名变化。

  • 按需分析:只计算与“关注变量”相关的别名关系,而不是对全局所有变量进行计算。

    • 避免无关变量带来的巨大开销。
    • 使得别名分析可以在复杂固件中高效运行。

3. 间接调用解析(Indirect Call Resolution)

  • 使用别名分析提供的数据依赖信息,解析间接调用的真实目标。
  • 通过检查:间接调用点(indirect callsite)被引用的函数指针之间的数据依赖关系来判断可能的调用目标。
  • 该机制允许污点分析跨越更多函数边界,提高对真实漏洞路径的覆盖能力。

4. 污点初始化与传播(Taint Initialization and Propagation)

4.1 识别污点源(Taint Sources)

  • 对攻击者可控制的输入点进行标记,例如:

    • recv()
    • 文件读取
    • 用户输入缓冲区
  • 这些源头的变量被初始化为“污点”。

4.2 污点传播(Taint Propagation)

  • 在程序的指令执行路径上持续跟踪污点流动,依据:

    • 传播规则(赋值、算术、指针操作等)
    • 按需别名分析返回的别名关系
  • 污点可通过直接赋值、指针、结构体、数组等复杂路径向前传播。

5. 漏洞检测模块(Taint-Style Vulnerability Check)

5.1 找到污点到达的危险点(Security-Sensitive Sinks)

典型危险操作包括:

  • system()
  • exec*()
  • 内存拷贝、缓冲区写入(如 strcpy
  • 关键权限操作函数

5.2 判断是否构成潜在漏洞

在危险点,如果:

  • 对应变量 受到污点影响(被攻击者控制)
  • 且该变量 未经过约束/校验 则标记为潜在漏洞(Potential Vulnerability)。

这一检测逻辑与传统污点分析一致,但借助 EmTaint 的别名分析与间接调用解析,使得更多真实漏洞路径可以被发现,减少 false negatives。

本文作者:barrenham

本文链接:

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