轻松实现安全特性检测: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模式(适合机器处理)。
实际运行中: 您是否注意到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,但随后任其自生自灭。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。
插件和代码片段领域流传着一些小型特性检测器,如这个、这个和这个。这些通常不完整(就检查而言),难以以编程方式交互,维护零星和/或执行临时PE解析。Winchecksec旨在在静态检查领域实现完整性,得到维护,并使用官方Windows API进行PE解析。
尝试使用!
Winchecksec是作为Sienna Locomotive(我们的集成模糊测试和分类系统)的一部分开发的。作为几个分类组件之一,Winchecksec为我们的可利用性评分系统提供信息(例如,如果DEP和ASLR都启用,则降低缓冲区溢出的可利用性),并允许我们向用户提供关于提高应用程序基线安全性的即时建议。我们期望其他人开发其他用例,例如:
- CI/CD集成,使一组基本安全特性对所有构建成为强制要求。
- 审计整个生产服务器,查找缺乏关键安全特性的已部署应用程序。
- 评估应用程序中安全特性的有效性(例如,在具有大量包含vtable对象缓冲区的C++应用程序中,栈Cookie是否有效)。
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News
页面内容 特性检测,化繁为简 其他工具表现如何? 尝试使用!
最近文章 构建安全消息传递很难:对Bitchat安全辩论的细致看法 使用Deptective调查您的依赖项 系好安全带,Buttercup,AIxCC的评分回合正在进行中! 使您的智能合约超越私钥风险 Go解析器中意外的安全陷阱
© 2025 Trail of Bits。 使用Hugo和Mainroad主题生成。