使用Winchecksec轻松检测安全特性 - Trail of Bits博客
William Woodruff
2018年9月26日
engineering-practice, mitigations
我们自豪地宣布发布Winchecksec,这是一款新的开源工具,用于检测Windows二进制文件中的安全特性。为满足我们的分析和研究需求而开发,Winchecksec旨在在深度、准确性和性能上超越当前的开源安全特性检测工具,同时不牺牲简洁性。
特性检测,变得简单
Winchecksec以Windows PE二进制文件作为输入,并输出构建时内置的安全特性报告。常见特性包括:
- 地址空间布局随机化(ASLR)和64位感知的高熵ASLR(HEASLR)
- 真实性/完整性保护(Authenticode、Forced Integrity)
- 数据执行预防(DEP),更常称为W^X或No eXecute(NX)
- 清单隔离
- 结构化异常处理(SEH)和SafeSEH
- 控制流防护(CFG)和返回流防护(RFG)
- 防护栈(GS),更常称为栈cookie或canary
Winchecksec的两种输出模式由一个标志(-j)控制:默认的纯文本表格模式供人类阅读,以及JSON模式供机器使用。实际操作中:
您是否注意到Winchecksec在上面区分了“动态基址”和ASLR?这是因为在构建时设置/DYNAMICBASE并不能保证地址空间随机化。Windows没有重定位表无法执行ASLR,因此明确请求ASLR但缺少重定位条目(由映像头标志中的IMAGE_FILE_RELOCS_STRIPPED指示)的二进制文件会在没有随机化地址空间的情况下静默加载。这种边缘情况直接导致VLC 2.2.8中的一个中等use-after-free漏洞变成了一个大漏洞(CVE-2017-17670)。mingw-w64中的底层工具链错误仍未修复。
类似地,在CLR下运行的应用程序保证使用ASLR和DEP,无论动态基址/NX兼容性标志的状态或重定位表的存在如何。因此,Winchecksec将在任何指示在CLR下运行的二进制文件上报告ASLR和DEP已启用。CLR还提供安全异常处理,但不是通过SafeSEH,因此除非启用,否则不会指示SafeSEH。
其他工具如何比较?
不太好:
- Microsoft在2014年发布了BinScope,但让其逐渐衰落。BinScope执行多项安全特性检查并提供XML和HTML输出,但依赖于.pdb文件进行分析。因此,在Microsoft安全开发生命周期之外的任何用例中都不实用。BinSkim似乎是BinScope的精神继承者并积极维护,但使用一种晦涩的过度工程化格式供机器使用。与BinScope一样,它似乎也依赖于调试信息的可用性。
- Visual Studio工具链提供dumpbin.exe,可用于转储给定二进制文件中的一些安全属性。但dumpbin.exe不提供机器可用的输出,因此开发人员被迫编写临时解析器。更糟糕的是,dumpbin.exe提供的是转储,而不是分析。例如,它不会解释具有剥离重定位条目和启用动态基址的程序不兼容ASLR。用户需要自己推断。
- NetSPI维护PESecurity,一个PowerShell脚本,用于测试许多常见的PE安全特性。虽然它提供CSV输出选项供程序化使用,但性能落后于dumpbin.exe(以及下面列出的其他编译工具),更不用说Winchecksec。
- 还有一些小的特性检测器在插件和gist中流传,比如这个、这个和这个(用于x64dbg!)。这些通常不完整(在检查方面)、难以以编程方式交互、维护 sporadic 和/或执行临时PE解析。Winchecksec旨在在静态检查领域实现完整性,得到维护,并使用官方Windows API进行PE解析。
试试看!
Winchecksec是作为Sienna Locomotive的一部分开发的,这是我们集成的模糊测试和分类系统。作为几个分类组件之一,Winchecksec为我们的可利用性评分系统提供信息(例如,如果DEP和ASLR都启用,则减少缓冲区溢出的可利用性),并允许我们向用户提供即时建议以改进其应用程序的基线安全性。我们期望其他人开发更多用例,例如:
- CI/CD集成,使一组基本安全特性对所有构建成为强制要求。
- 审计整个生产服务器中部署的应用程序是否缺少关键安全特性。
- 评估应用程序中安全特性的有效性(例如,在包含大量缓冲区的C++应用程序中,栈cookie是否有效,这些缓冲区在包含vtable的对象中)。
立即在GitHub上获取Winchecksec。如果您有兴趣帮助我们开发它,请尝试这些首批问题。
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News
页面内容 特性检测,变得简单 其他工具如何比较? 试试看! 近期文章 非传统创新者奖学金 在您的PajaMAS中劫持多代理系统 我们构建了MCP一直需要的安全层 利用废弃硬件中的零日漏洞 Inside EthCC[8]:成为智能合约审计员 © 2025 Trail of Bits。 使用Hugo和Mainroad主题生成。