驯服文件解析风险的两款新工具
Evan Sultanik | 2019年11月1日
解析文件格式是困难的——即使规范明确定义时也是如此。当规范存在歧义时,会导致解析器和解释器出现意外行为,进而引发安全漏洞。在DARPA SafeDocs项目支持下,我们开发了两款工具来解决这一根本问题:
解析为何困难?
- 多语言文件(Polyglots):单个文件可被不同解释器有效解析(如既是PDF又是ZIP)
- 精神分裂文件(Schizophrenic):不同解析器对同一文件产生不同解释(如Adobe与Foxit解析同一PDF显示不同内容)
- 复杂设计决策(如嵌入式图灵完备语言、流解码器任意链接等)加剧了攻击面
工具创新
-
PolyFile:
- 支持10,000+文件格式的层次化语义标注
- 生成交互式HTML分析报告(示例:简历文件同时是PDF/NES游戏/ZIP/git仓库)
- 开源地址:https://github.com/trailofbits/polyfile
-
PolyTracker:
- 基于LLVM的高效污点跟踪框架
- 改进数据结构使内存需求从指数级降至线性级
- 支持闭源代码分析(通过McSema等二进制提升技术)
- 开源地址:https://github.com/trailofbits/polytracker
技术突破
- 数据流消毒器(DFSan)优化:突破原16位污点标签限制,实现稀疏联合数据结构
- 动态分析:通过构建解析器函数与输入字节偏移的映射关系,逆向推导解析逻辑
- 容器化部署:提供预构建Docker镜像简化使用流程
应用场景
- 识别规范与实现间的"不安全"差异
- 检测解析器中的隐蔽通道
- 辅助模糊测试与差分测试