目录
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 的工作价值
-
解决固件后端间接调用难以解析的问题
Linux-based 固件后端大量存在间接调用(indirect calls),传统方法无法解析,导致大量潜在漏洞路径无法被发现。
EmTaint 针对这一核心难点提出改进,使得更多真实的可疑路径能够被揭示。
-
提升变量别名(variable alias)场景下的数据流分析能力
变量别名频繁出现会导致数据流追踪断裂,隐含漏洞路径无法识别。
EmTaint 通过改进分析机制,使得在别名复杂的情况下仍能保持可靠的数据流追踪。
-
减少传统方法带来的误识别问题
之前的研究依赖启发式方式识别“中介污点源(mediate taint source)”,可能误识别,从而产生大量误报(false positives)。
EmTaint 通过更精确的分析方式避免此类启发式错误,使结果更准确。
-
揭示传统方法遗漏的大量潜在漏洞路径
由于未处理间接调用和别名问题,现有方法会遗漏许多真实路径(false negatives)。
EmTaint 提供更完整的路径覆盖,使漏洞挖掘更全面。
EmTaint的工作原理

下面是 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)
-
对攻击者可控制的输入点进行标记,例如:
-
这些源头的变量被初始化为“污点”。
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
许可协议。转载请注明出处!