盲点:自动检测被忽略的程序输入
密码学与安全
2023-04-03 v2 编程语言
摘要
盲点是指程序的任意输入,其可被任意篡改而不影响程序输出。盲点可用于隐写或嵌入恶意载荷。若盲点与文件格式关键字重叠,则表明存在可导致可利用差异的解析错误。例如,可构造一份在一个查看器中以一种方式渲染、在另一查看器中以完全不同方式渲染的文档。盲点还被用于规避 Android 二进制中的代码签名、胁迫证书颁发机构行为失当,以及实施 HTTP 请求走私与参数污染攻击。本文形式化了盲点的操作语义,由此引出一种基于动态信息流追踪、可自动检测盲点的技术。我们引入了一个高效实现,并在通过 MuPDF 解析的逾千份多样化 PDF 语料上评估,揭示了解析器中可利用的错误。所有盲点分类均被确认正确,漏检率不高于 11%。平均而言,每个 PDF 文件至少 5% 被解析器完全忽略。我们的结果显示该技术作为一种检测可利用解析器错误、过度宽松与差异的自动化高效手段颇具前景。该技术本身与 PDF 无关,因此可立即应用于 ELF、X.509 和 XML 等其他以难解析著称的格式。
引用
@article{arxiv.2301.08700,
title = {Blind Spots: Automatically detecting ignored program inputs},
author = {Henrik Brodin and Evan Sultanik and Marek Surovič},
journal= {arXiv preprint arXiv:2301.08700},
year = {2023}
}
备注
to appear in proceedings of the Ninth Workshop on Language-Theoretic Security (LangSec) at the IEEE CS Security & Privacy Workshops