Skip to content

BinSkim 一款强大的二进制安全分析工具

Updated: at 23:23,Created: at 23:23

在现代软件开发中,确保应用程序的安全性是一个至关重要的任务。为了识别潜在的安全问题,开发者需要使用专业工具对二进制文件进行深入分析。BinSkim 就是一款专为此设计的开源工具,它能够对可移植可执行文件(PE 文件)及其关联的符号文件(PDB)进行检查,从而发现多种安全问题

本文由 GPT-4o 辅助编写

什么是 BinSkim?

BinSkim 是由微软开源的一款静态分析工具,主要用于扫描 Windows 的 PE 文件(如 DLL 和 EXE 文件),以识别以下常见的安全问题:

通过这些检查,BinSkim 能帮助开发者发现潜在的漏洞并提升软件整体安全性。


如何获取 BinSkim?

BinSkim 是一个开源项目,你可以通过以下途径获取它:

  1. GitHub 上查看项目源码。
  2. NuGet 获取最新版本。

下载 NuGet 包之后,用压缩工具将 nupkg 解压缩,即可在 tools\net9.0\win-x64\ 文件夹里找到 BinSkim.exe 文件


如何运行 BinSkim?

快速开始

BinSkim 的主要功能是分析 Windows PE 文件,例如动态链接库(DLL)和可执行文件(EXE)。以下是一些常见使用场景:

  1. 分析单个文件
    例如,分析位于 c:\temp 路径下名为 MyProjectFile.dll 的文件:

    Terminal window
    binskim.exe analyze c:\temp\MyProjectFile.dll
  2. 递归分析多个文件
    分析当前目录及其子目录下所有扩展名为 .dll.exe 的文件:

    Terminal window
    binskim analyze *.exe *.dll --recurse true
  3. 生成 SARIF 格式日志
    分析当前目录下所有 .dll 文件,并将结果输出到指定的 SARIF 日志文件中:

    Terminal window
    binskim analyze *.dll --output MyLog.sarif

常用命令参考

命令类型描述
通用帮助显示 BinSkim 支持的所有内置命令,例如 helpanalyzecapture 等。运行命令:binskim.exe --help
详细帮助查看特定命令的详细说明。例如:
  • binskim.exe help analyze
  • binskim.exe help exportRules

Analyze 命令参数详解

在运行 analyze 命令时,可以使用以下附加参数来配置扫描行为:

参数 (缩写/全称)含义
—trace指定执行跟踪信息,用分号分隔。例如:"PdbLoad;ScanTime"
—sympath提供符号路径,用于定位 PDB 文件。例如:SRV*https://msdl.microsoft.com/download/symbols
—local-symbol-directories指定本地目录路径,用于查找 PDB 文件。
-o, —output指定 SARIF 格式日志输出路径。
-r, —recurse [true|false]是否递归分析子目录中的文件。
-c, —config指定配置文件路径,用于自定义扫描规则(默认值为 default)。
-q, —quiet [true|false]如果为 true,则不在控制台打印结果,仅输出到日志文件中。
-s, —statistics生成统计信息,例如执行时间和有效目标数量等。
—insert将额外数据插入到日志中,例如环境变量、哈希值等。
-e, —environment [true|false]是否记录运行环境信息(可能包含敏感数据)。
—rich-return-code [true|false]输出详细返回码,以标识执行状态。

示例参数解析

--sympath

该参数用于指定符号服务器路径或本地符号缓存位置。例如:

Terminal window
binskim analyze myfile.dll --sympath "Cache*d:\symbols;Srv*https://symweb"

注意:如果未正确加载 PDB 文件,BinSkim 会生成错误代码 ERR97,提示具体原因。

--local-symbol-directories

如果你的构建系统将 PDB 文件存放在其他位置,可以通过该参数指定本地目录。例如:

Terminal window
binskim analyze myfile.dll --local-symbol-directories "d:\pdbs"

-o, --output

将扫描结果保存为 SARIF 格式日志,可用于进一步处理或集成到 IDE 中,如 Visual Studio。

返回码说明

BinSkim 提供了详细的返回码,可帮助开发者快速定位问题。例如:

完整返回码列表请参考官方文档。


BinSkim 支持哪些规则?

BinSkim 提供了一系列内置规则,用于检查不同方面的问题。例如:

规则 ID名称检查内容
BA2002避免使用易受攻击的依赖项检查所有链接模块源代码
BA2006使用安全工具构建检查编译器版本
BA2011启用堆栈保护检查是否启用了 /GS 标志

完整规则列表和详细说明可在 官方文档 中查看。


总结

BinSkim 是一款功能强大的二进制分析工具,通过静态扫描帮助开发者发现潜在的安全问题。从过时的编译器工具集到不安全的编译设置,再到签名问题,BinSkim 覆盖了多种关键场景。同时,其灵活的参数配置和详细的返回码设计,使得它能够轻松集成到自动化构建流水线中,为软件提供更高层次的安全保障。

如果你正在寻找一款高效且专业的二进制静态分析工具,不妨试试 BinSkim!立即前往 GitHubNuGet 下载并体验吧!


知识共享许可协议

原文链接: http://blog.lindexi.com/post/BinSkim-%E4%B8%80%E6%AC%BE%E5%BC%BA%E5%A4%A7%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E5%85%A8%E5%88%86%E6%9E%90%E5%B7%A5%E5%85%B7

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。 欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系