owasp-dep-scan/blint
GitHub: owasp-dep-scan/blint
一款基于 LIEF 的二进制静态检查与 SBOM 生成工具,聚焦安全属性审计与组件识别。
Stars: 440 | Forks: 45
# blint
`blint` 是一个二进制文件检查工具,用于检查可执行文件的安全属性和功能。它由 [lief](https://github.com/lief-project/LIEF) 提供支持,能够为支持的二进制文件生成软件物料清单(SBOM)。
## 什么是 blint?
`blint` 是一个面向逆向工程师、安全分析人员和开发者的工具,用于快速评估二进制文件的安全态势和组成。在静态链接的 Golang、Rust 和 .NET 应用盛行的今天,了解二进制文件内部的内容比以往任何时候都更加重要。`blint` 自动化了最初的分类分析过程。
**支持的二进制格式:**
- ELF(适用于 GNU 和 musl libc)
- PE(Windows 可执行文件和 DLL)
- Mach-O(macOS 和 iOS,x64 和 arm64)
- Android(APK、AAB,包括深度模式下的 DEX 文件)
- 反汇编引擎:支持 AArch64、x86/x86-64、ARM、Mips、MicroMips
## 主要功能与使用场景
- **全面的安全审计**:自动检查常见的安全缓解措施,如 PIE、ASLR、NX、栈保护、RELRO。适用于确保 CI/CD 流水线生成 hardened 二进制文件。
- **软件物料清单(SBOM)生成**:为使用 Go、Rust、.NET 和 Android 工具链构建的二进制文件创建 CycloneDX SBOM,提供第三方组件的清晰清单,便于漏洞管理。
- **深度二进制检查**:反汇编、提取并分析大量信息,包括符号、函数、依赖关系和构建工具链。这些原始数据会保存为详细的 JSON 文件。
- 有关该文件中所有属性的完整指南,请参阅 [技术元数据文档](./docs/METADATA.md)。
- 请访问 [反汇编指南](./docs/DISASSEMBLE.md)。
- **功能能力分析**:通过检查导入的函数和符号,识别潜在敏感功能,例如网络访问、文件系统操作或加密 API 的使用。
- **CI/CD 集成**:可添加到构建流水线中,以强制执行安全策略,例如要求对所有发布构件进行代码签名。
- **模糊测试目标识别**:根据函数名中的常见模式(如 `parse`、`decode`、`copy`)建议适合模糊测试的函数。
- **可扩展的自定义规则**:使用简单的 [YAML 规则文件](./docs/RULES.md) 定义自己的功能和检查项。
## 安装
`blint` 需要 Python >= 3.10。
```
pip install blint
```
若要**支持反汇编**(可对函数进行指令级分析),请安装 `extended` 版本。这包含了 [nyxstone](https://github.com/emproof-com/nyxstone) 反汇编器。
```
pip install blint[extended]
```
### 通过容器镜像运行
你也可以使用 GitHub Container Registry 上的官方容器镜像运行 `blint`。这是在不安装 Python 或任何依赖到主机的情况下运行 `blint` 的便捷方式。
```
docker run --rm -it -v $(pwd):/app -w /app ghcr.io/owasp-dep-scan/blint:latest -i /path/to/your/binary
```
## 快速开始
分析一个二进制文件并将报告保存到 `/tmp/blint` 目录:
```
blint -i /bin/netstat -o /tmp/blint
```
```
docker run --rm -it -v /tmp:/tmp -v /bin:/app/bin -w /app ghcr.io/owasp-dep-scan/blint:latest -i /app/bin/netstat -o /tmp/blint
```
分析一个 Go 或 Rust 二进制文件并获取模糊测试目标建议:
```
blint -i /path/to/my-binary --suggest-fuzzable
```
为 Android 应用程序生成 CycloneDX SBOM:
```
blint sbom -i /path/to/app.apk -o sbom.cdx.json
```
```
docker run --rm -it -v /path/to:/app -w /app ghcr.io/owasp-dep-scan/blint:latest sbom -i /app/app.apk -o sbom.cdx.json
```
## 理解输出
`blint` 在指定的报告目录中生成多个 JSON 工件。
| 文件名 | 用途 | 详细信息 |
| --- | --- | --- |
| `exename-metadata.json` | **原始详细元数据**,从二进制文件中提取。这是所有其他报告的来源。 | 包含所有信息:头部、符号、函数、依赖关系、签名信息等。详见 **[技术元数据文档](./docs/METADATA.md)**。 |
| `findings.json` | **安全属性审计**的摘要。设计用于 CI/CD 集成。 | 列出安全缓解措施,如 PIE、NX 和栈保护,并标明是否存在。 |
| `reviews.json` | **功能审查**的摘要。 | 列出检测到的功能(如 “networking”、“file-read”、“crypto”),基于发现的符号和函数。 |
| `fuzzables.json` | **建议模糊测试的函数列表**,在使用 `--suggest-fuzzable` 标志时生成。 | 识别名称暗示数据解析或操作的函数,这些通常是模糊测试的良好候选。 |
| `sbom-*.cdx.json` | **软件物料清单(SBOM)**,由 `sbom` 子命令生成。 | 以 CycloneDX 格式生成的 JSON 文件,详细说明二进制的组件和依赖关系。 |
## 高级用法:使用 blintdb 进行 SBOM 生成
对于 C/C++ 二进制文件,仅凭符号识别组件可能不够精确。`blint` 可使用 **blintdb**(一个预编译的数据库,包含来自流行开源库的符号,例如 vcpkg 提供的库),显著提升组件识别能力。
工作流程分为两步:
1. **下载 blintdb 数据库:**
```
blint db --download
```
该命令将数据库下载到由 `BLINTDB_HOME` 环境变量指定的目录。
2. **启用 blintdb 生成 SBOM:**
```
blint sbom -i /path/to/binary -o sbom.cdx.json --use-blintdb
```
该命令会将二进制文件中发现的符号与数据库进行交叉引用,以识别 OpenSSL、zlib 等组件。
## 命令行参考
## 参考文档
- [lief 示例](https://github.com/lief-project/LIEF/tree/master/examples)
- [checksec.py](https://github.com/slimm609/checksec.py)
## 赞助
如果你喜欢 `blint`,请考虑 [为我们的项目捐款](https://owasp.org/donate?reponame=www-project-dep-scan&title=OWASP+dep-scan)。此外,`blint` 的实现离不开 LIEF 项目的出色工作。也请考虑赞助他们。
- [LIEF 项目](https://github.com/sponsors/lief-project/)
`blint` 是一个二进制文件检查工具,用于检查可执行文件的安全属性和功能。它由 [lief](https://github.com/lief-project/LIEF) 提供支持,能够为支持的二进制文件生成软件物料清单(SBOM)。
## 什么是 blint?
`blint` 是一个面向逆向工程师、安全分析人员和开发者的工具,用于快速评估二进制文件的安全态势和组成。在静态链接的 Golang、Rust 和 .NET 应用盛行的今天,了解二进制文件内部的内容比以往任何时候都更加重要。`blint` 自动化了最初的分类分析过程。
**支持的二进制格式:**
- ELF(适用于 GNU 和 musl libc)
- PE(Windows 可执行文件和 DLL)
- Mach-O(macOS 和 iOS,x64 和 arm64)
- Android(APK、AAB,包括深度模式下的 DEX 文件)
- 反汇编引擎:支持 AArch64、x86/x86-64、ARM、Mips、MicroMips
## 主要功能与使用场景
- **全面的安全审计**:自动检查常见的安全缓解措施,如 PIE、ASLR、NX、栈保护、RELRO。适用于确保 CI/CD 流水线生成 hardened 二进制文件。
- **软件物料清单(SBOM)生成**:为使用 Go、Rust、.NET 和 Android 工具链构建的二进制文件创建 CycloneDX SBOM,提供第三方组件的清晰清单,便于漏洞管理。
- **深度二进制检查**:反汇编、提取并分析大量信息,包括符号、函数、依赖关系和构建工具链。这些原始数据会保存为详细的 JSON 文件。
- 有关该文件中所有属性的完整指南,请参阅 [技术元数据文档](./docs/METADATA.md)。
- 请访问 [反汇编指南](./docs/DISASSEMBLE.md)。
- **功能能力分析**:通过检查导入的函数和符号,识别潜在敏感功能,例如网络访问、文件系统操作或加密 API 的使用。
- **CI/CD 集成**:可添加到构建流水线中,以强制执行安全策略,例如要求对所有发布构件进行代码签名。
- **模糊测试目标识别**:根据函数名中的常见模式(如 `parse`、`decode`、`copy`)建议适合模糊测试的函数。
- **可扩展的自定义规则**:使用简单的 [YAML 规则文件](./docs/RULES.md) 定义自己的功能和检查项。
## 安装
`blint` 需要 Python >= 3.10。
```
pip install blint
```
若要**支持反汇编**(可对函数进行指令级分析),请安装 `extended` 版本。这包含了 [nyxstone](https://github.com/emproof-com/nyxstone) 反汇编器。
```
pip install blint[extended]
```
### 通过容器镜像运行
你也可以使用 GitHub Container Registry 上的官方容器镜像运行 `blint`。这是在不安装 Python 或任何依赖到主机的情况下运行 `blint` 的便捷方式。
```
docker run --rm -it -v $(pwd):/app -w /app ghcr.io/owasp-dep-scan/blint:latest -i /path/to/your/binary
```
## 快速开始
分析一个二进制文件并将报告保存到 `/tmp/blint` 目录:
```
blint -i /bin/netstat -o /tmp/blint
```
```
docker run --rm -it -v /tmp:/tmp -v /bin:/app/bin -w /app ghcr.io/owasp-dep-scan/blint:latest -i /app/bin/netstat -o /tmp/blint
```
分析一个 Go 或 Rust 二进制文件并获取模糊测试目标建议:
```
blint -i /path/to/my-binary --suggest-fuzzable
```
为 Android 应用程序生成 CycloneDX SBOM:
```
blint sbom -i /path/to/app.apk -o sbom.cdx.json
```
```
docker run --rm -it -v /path/to:/app -w /app ghcr.io/owasp-dep-scan/blint:latest sbom -i /app/app.apk -o sbom.cdx.json
```
## 理解输出
`blint` 在指定的报告目录中生成多个 JSON 工件。
| 文件名 | 用途 | 详细信息 |
| --- | --- | --- |
| `exename-metadata.json` | **原始详细元数据**,从二进制文件中提取。这是所有其他报告的来源。 | 包含所有信息:头部、符号、函数、依赖关系、签名信息等。详见 **[技术元数据文档](./docs/METADATA.md)**。 |
| `findings.json` | **安全属性审计**的摘要。设计用于 CI/CD 集成。 | 列出安全缓解措施,如 PIE、NX 和栈保护,并标明是否存在。 |
| `reviews.json` | **功能审查**的摘要。 | 列出检测到的功能(如 “networking”、“file-read”、“crypto”),基于发现的符号和函数。 |
| `fuzzables.json` | **建议模糊测试的函数列表**,在使用 `--suggest-fuzzable` 标志时生成。 | 识别名称暗示数据解析或操作的函数,这些通常是模糊测试的良好候选。 |
| `sbom-*.cdx.json` | **软件物料清单(SBOM)**,由 `sbom` 子命令生成。 | 以 CycloneDX 格式生成的 JSON 文件,详细说明二进制的组件和依赖关系。 |
## 高级用法:使用 blintdb 进行 SBOM 生成
对于 C/C++ 二进制文件,仅凭符号识别组件可能不够精确。`blint` 可使用 **blintdb**(一个预编译的数据库,包含来自流行开源库的符号,例如 vcpkg 提供的库),显著提升组件识别能力。
工作流程分为两步:
1. **下载 blintdb 数据库:**
```
blint db --download
```
该命令将数据库下载到由 `BLINTDB_HOME` 环境变量指定的目录。
2. **启用 blintdb 生成 SBOM:**
```
blint sbom -i /path/to/binary -o sbom.cdx.json --use-blintdb
```
该命令会将二进制文件中发现的符号与数据库进行交叉引用,以识别 OpenSSL、zlib 等组件。
## 命令行参考
主命令帮助
``` usage: blint [-h] [-i SRC_DIR_IMAGE [SRC_DIR_IMAGE ...]] [-o REPORTS_DIR] [--no-error] [--no-banner] [--no-reviews] [--suggest-fuzzable] [--use-blintdb] {sbom} ... Binary linter and SBOM generator. options: -h, --help show this help message and exit -i, --src SRC_DIR_IMAGE [SRC_DIR_IMAGE ...] Source directories, container images or binary files. Defaults to current directory. -o, --reports REPORTS_DIR Reports directory. Defaults to reports. --no-error Continue on error to prevent build from breaking. --no-banner Do not display banner. --no-reviews Do not perform method reviews. --suggest-fuzzable Suggest functions and symbols for fuzzing based on a dictionary. --use-blintdb Use blintdb for symbol resolution. Use environment variables: BLINTDB_IMAGE_URL, BLINTDB_HOME, and BLINTDB_REFRESH for customization. --disassemble Disassemble functions and store the instructions in the metadata. Requires blint extended group to be installed. --custom-rules-dir CUSTOM_RULES_DIR Path to a directory containing custom YAML rule files (.yml or .yaml). These will be loaded in addition to default rules. -q, --quiet Disable logging and progress bars. sub-commands: Additional sub-commands {sbom} sbom Command to generate SBOM for supported binaries. db Command to manage the pre-compiled database. ```SBOM 子命令帮助
``` usage: blint sbom [-h] [-i SRC_DIR_IMAGE [SRC_DIR_IMAGE ...]] [-o SBOM_OUTPUT] [--deep] [--stdout] [--exports-prefix EXPORTS_PREFIX [EXPORTS_PREFIX ...]] [--bom-src SRC_DIR_BOMS [SRC_DIR_BOMS ...]] options: -h, --help show this help message and exit -i SRC_DIR_IMAGE [SRC_DIR_IMAGE ...], --src SRC_DIR_IMAGE [SRC_DIR_IMAGE ...] Source directories, container images or binary files. Defaults to current directory. -o SBOM_OUTPUT, --output-file SBOM_OUTPUT SBOM output file. Defaults to sbom-binary-postbuild.cdx.json in current directory. --deep Enable deep mode to collect more used symbols and modules aggressively. Slow operation. --stdout Print the SBOM to stdout instead of a file. --exports-prefix EXPORTS_PREFIX [EXPORTS_PREFIX ...] prefixes for the exports to be included in the SBOM. --bom-src SRC_DIR_BOMS [SRC_DIR_BOMS ...] Directories containing pre-build and build BOMs. Use to improve the precision. ```DB 子命令帮助
``` usage: blint db [-h] [--download] [--image-url IMAGE_URL] options: -h, --help show this help message and exit --download Download the pre-compiled database to the /Volumes/Work/blintdb/ directory. Use the environment variable `BLINTDB_HOME` to override. --image-url IMAGE_URL blintdb image url. Defaults to ghcr.io/appthreat/blintdb-vcpkg-arm64:v1. The environment variable `BLINTDB_IMAGE_URL` is an alternative way to set this value. ```标签:AAB, AArch64, Android APK, ASLR, CI/CD 安全, CycloneDX, DEX, Disassembler, ELF, GPT, LIEF, LLM防护, Mach-O, MicroMIPS, MIPS, NX, PE, PIE, RELRO, SBOM, Stack Canary, WebSocket, x86-64, 二进制分析, 二进制审计工具, 二进制检查, 云安全监控, 云安全运维, 云资产清单, 依赖分析, 加密API, 可执行文件安全, 可视化界面, 多人体追踪, 安全特性检查, 数据投毒防御, 文件系统操作, 日志审计, 构建管道集成, 漏洞管理, 硬ening, 硬件无关, 符号分析, 第三方组件清单, 网络访问检测, 能力分析, 请求拦截, 软件供应链安全, 远程方法调用, 逆向工具, 逆向工程, 静态分析