漏洞概述 该网页介绍了一个基于LLVM的BOLT二进制分析器,用于验证栈变量初始化。该分析器旨在检测未初始化的栈变量读取,这是一种可能导致安全问题的漏洞。 影响范围 目标平台:x86-64二进制文件 编译器:GCC和Clang 优化级别:包括和不包括 优化级别 修复方案 1. 候选编译器加固选项: - 选择了 作为最合适的目标,因为它被GCC和Clang支持,与当前的加固实践相关,并且具有清晰的二进制级别属性需要检查:自动变量应该被初始化。 2. 两种互补方法: - load-oracle方法:使用栈加载作为栈上存在的自动变量的证据。 - store-witness方法:检查每个栈加载是否在相关控制流路径之前被写入。 3. 实现和测试: - 这些策略在一个新的BOLT-based扫描器中实现,该扫描器发布在Quarkslab的 仓库中。 - 扫描器在GNU coreutils 9.5二进制文件上进行了测试,包括GCC和Clang的x86-64构建,以及不同的优化级别。 4. 初步结果: - 初步结果显示该方法在原理上是可行的,但观察到的残余报告表明静态分析的局限性。 - 大型二进制文件仍然产生过多的误报,使得手动、无辅助的筛选变得过于繁琐。 5. 未来步骤: - 使用符号执行修剪不可行的控制流路径。 - 探索辅助技术,如DWARF辅助变量恢复或差分编译。 POC代码或利用代码 页面中未包含具体的POC代码或利用代码。 总结 该研究展示了通过BOLT-based二进制分析器验证栈变量初始化的方法,尽管存在误报问题,但为未来的改进提供了基础。