轻松检测Windows二进制安全特性:Winchecksec工具详解

Winchecksec是一款开源的Windows PE二进制安全特性检测工具,可检测ASLR、DEP、CFG等防护机制,支持文本和JSON输出格式,相比同类工具具有更高准确性和性能。

轻松实现安全特性检测:Winchecksec工具

我们自豪地发布Winchecksec——一款检测Windows二进制文件安全特性的新型开源工具。该工具为满足我们的分析和研究需求而开发,旨在深度、准确性和性能方面超越现有开源安全特性检测工具,同时保持简洁性。

特性检测,化繁为简

Winchecksec以Windows PE二进制文件作为输入,输出构建时内置的安全特性报告。常见特性包括:

  • 地址空间布局随机化(ASLR)及64位高熵ASLR(HEASLR)
  • 真实性/完整性保护(Authenticode、强制完整性)
  • 数据执行保护(DEP),又称W^X或No eXecute(NX)
  • 清单隔离
  • 结构化异常处理(SEH)和SafeSEH
  • 控制流防护(CFG)和返回流防护(RFG)
  • 防护栈(GS),又称栈Cookie或金丝雀

Winchecksec的两种输出模式通过一个标志(-j)控制:默认的纯文本表格模式供人工阅读,JSON模式供机器处理。

深入解析:动态基址与ASLR的区别

您是否注意到Winchecksec区分了"动态基址"和ASLR?这是因为构建时设置/DYNAMICBASE并不能保证地址空间随机化。Windows在没有重定位表的情况下无法执行ASLR,因此明确请求ASLR但缺少重定位条目(由映像头标志中的IMAGE_FILE_RELOCS_STRIPPED指示)的二进制文件会在没有随机化地址空间的情况下静默加载。

这种边界情况直接导致VLC 2.2.8中的中度释放后使用漏洞转变为严重漏洞(CVE-2017-17670)。mingw-w64中的底层工具链错误至今未修复。

类似地,在CLR下运行的应用程序保证使用ASLR和DEP,无论动态基址/NX兼容性标志的状态或重定位表的存在如何。因此,Winchecksec将在任何指示在CLR下运行的二进制文件上报告ASLR和DEP已启用。CLR还提供安全异常处理,但不是通过SafeSEH,因此除非启用,否则不会指示SafeSEH。

与其他工具的对比

其他工具表现不佳:

  • Microsoft于2014年发布的BinScope现已停止维护。它执行多项安全特性检查并提供XML和HTML输出,但依赖.pdb文件进行二进制分析。因此,在Microsoft安全开发生命周期之外的使用场景中不实用。
  • BinSkim似乎是BinScope的精神继承者并积极维护,但使用晦涩的过度工程化格式供机器使用。与BinScope类似,它似乎也依赖调试信息的可用性。
  • Visual Studio工具链提供dumpbin.exe,可用于转储给定二进制文件中的某些安全属性。但dumpbin.exe不提供机器可用的输出,因此开发人员被迫编写临时解析器。更糟糕的是,dumpbin.exe提供的是转储而非分析。例如,它不会解释具有剥离重定位条目和启用动态基址的程序与ASLR不兼容。需要用户自行推断。
  • NetSPI维护PESecurity,这是一个用于测试许多常见PE安全特性的PowerShell脚本。虽然它提供CSV输出选项供程序化使用,但性能落后于dumpbin.exe(及其他编译工具),更不用说Winchecksec。
  • 还有一些小型特性检测器散布在插件和代码片段中,但这些通常不完整(检查方面)、难以程序化交互、维护 sporadic 和/或执行临时PE解析。

Winchecksec旨在在静态检查领域实现完整性,得到维护,并使用官方Windows API进行PE解析。

立即尝试!

Winchecksec是作为我们集成模糊测试和分类系统Sienna Locomotive的一部分开发的。作为多个分类组件之一,Winchecksec为我们的可利用性评分系统提供信息(例如,如果DEP和ASLR均启用,则降低缓冲区溢出的可利用性),并允许我们向用户提供关于改进应用程序基线安全性的即时建议。

我们期望其他人开发更多使用场景,例如:

  • CI/CD集成,使一组基本安全特性对所有构建成为强制要求。
  • 审计整个生产服务器中部署的缺乏关键安全特性的应用程序。
  • 评估应用程序中安全特性的有效性(例如,在具有大量包含vtable对象缓冲区的C++应用程序中,栈Cookie是否有效)。

立即在GitHub上获取Winchecksec。如果您有兴趣帮助我们开发,请尝试这些首批问题。

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计