18 个稳定版本
1.3.1 | 2024年3月27日 |
---|---|
1.2.12 | 2024年1月20日 |
1.2.11 | 2023年8月9日 |
1.2.10 | 2023年4月19日 |
1.2.1 | 2020年12月31日 |
#25 在 开发工具
96KB
2K SLoC
可执行二进制文件中安全特性的分析器
binary-security-check
是一个命令行工具,用于分析可执行二进制文件,寻找提高可执行文件安全性或降低某些漏洞易损性的特性。
安装说明
要在您的计算机上使用此工具,您需要从源代码构建它
-
为您的计算机安装 C 工具链。例如在 Debian Linux 上
sudo apt-get install build-essential
-
构建源代码
cargo install binary-security-check
-
您应该可以直接运行此工具
binary-security-check -h
支持格式
目前支持不同的可执行文件格式
ELF
格式(32位和64位变体)。它用于例如 Linux 和 BSD 的可执行程序和共享库。这些文件通常没有扩展名,或具有.so
扩展名。Archive
格式,用于存储对象文件的静态库。它用于例如 Linux 和 Windows 的静态库。这些文件通常具有以下扩展名之一:.a
、.lib
等。PE32
格式(32位变体)和PE32+
格式(64位变体),用于 Windows 可执行程序和共享库。这些文件通常具有以下扩展名之一:.exe
、.scr
、.dll
、.sys
等。不支持16位可执行二进制文件。
报告的安全特性
binary-security-check
分析的安全特性列表取决于分析格式。每个安全特性都有一个关键字在报告中标识它。
对于 ELF
格式,分析的特性包括
- 地址空间布局随机化:
ASLR
选项。 - 堆栈损坏保护:
STACK-PROT
选项。 - 执行页面在重定位后变为只读:
READ-ONLY-RELOC
选项。 - 导入符号在二进制加载时立即绑定:
IMMEDIATE-BIND
选项。 - 可能不安全的 C 库函数调用被更安全的变体所替代:
FORTIFY-SOURCE
选项。
对于 Archive
格式,分析的功能包括
- 堆栈损坏保护:
STACK-PROT
选项。
对于 PE32
和 PE32+
格式,分析的功能包括
- 地址空间布局随机化:
ASLR
,ASLR-EXPENSIVE
,ASLR-LOW-ENTROPY-LT-2GB
,ASLR-LOW-ENTROPY
,ASLR-LT-2GB
选项。 - 数据执行保护:
DATA-EXEC-PREVENT
选项。 - 控制流保护:
CONTROL-FLOW-GUARD
选项。 - 处理大于 2GB 的地址:
HANDLES-ADDR-GT-2GB
选项。 - 可执行文件的数据有校验和:
CHECKSUM
选项。 - 仅允许在 AppContainer 内运行:
RUNS-IN-APP-CONTAINER
选项。 - 基于数字签名进行完整性验证:
VERIFY-DIGITAL-CERT
选项。 - 加载可执行文件时必须考虑清单文件:
CONSIDER-MANIFEST
选项。 - 安全的结构化异常处理:
SAFE-SEH
选项。
报告格式
程序可以分析多个二进制文件。对于每个文件,它显示文件路径和已检查安全功能的状况。
在关键字之前的一个字母表示二进制中安全功能的状况
+
表示功能存在/受支持。!
表示功能不存在/不受支持。~
表示功能可能存在/受支持。?
表示功能状况未知。
例如,!ASLR
表示二进制不支持地址空间布局随机化。
用法
Usage: binary-security-check [OPTIONS] <INPUT_FILES>...
Arguments:
<INPUT_FILES>...
Binary files to analyze
Options:
-v, --verbose
Verbose logging
-c, --color <COLOR>
Use color in standard output [default: auto] [possible values: auto, always, never]
-l, --libc <LIBC>
Path of the C runtime library file
-s, --sysroot <SYSROOT>
Path of the system root for finding the corresponding C runtime library
-i, --libc-spec <LIBC_SPEC>
Use an internal list of checked functions as specified by a specification
[possible values: lsb1, lsb1dot1, lsb1dot2, lsb1dot3, lsb2, lsb2dot0dot1, lsb2dot1, lsb3,
lsb3dot1, lsb3dot2, lsb4, lsb4dot1, lsb5]
-n, --no-libc
Assume that input files do not use any C runtime libraries
-h, --help
Print help
-V, --version
Print version
If --libc-spec is specified, then its value can be one of the following versions
of the Linux Standard Base specifications:
- lsb1: LSB 1.0.0.
- lsb1dot1: LSB 1.1.0.
- lsb1dot2: LSB 1.2.0.
- lsb1dot3: LSB 1.3.0.
- lsb2: LSB 2.0.0.
- lsb2dot0dot1: LSB 2.0.1.
- lsb2dot1: LSB 2.1.0.
- lsb3: LSB 3.0.0.
- lsb3dot1: LSB 3.1.0.
- lsb3dot2: LSB 3.2.0.
- lsb4: LSB 4.0.0.
- lsb4dot1: LSB 4.1.0.
- lsb5: LSB 5.0.0.
By default, this tool tries to automatically locate the C library in the
following directories:
- /lib/
- /usr/lib/
- /lib64/
- /usr/lib64/
- /lib32/
- /usr/lib32/
The tools "readelf" and "ldd" can be used to help find the path of the C library
needed by the analyzed files, which is given by the --libc parameter.
杂项功能
- 在包括 Linux、FreeBSD 和 Windows 在内的多个平台上运行。
- 支持所有二进制可执行格式,无论使用哪种平台运行工具。
- 在合理的情况下并行操作。
- 输出彩色文本。
- 支持多种方法来识别二进制的依赖C库(如果有的话),包括Linux标准库(LSB)规范。
- 设计为易于扩展。
许可证
版权所有 2018-2024 Koutheir Attouchi。请参阅此分发顶级目录中的 LICENSE.txt
文件。本软件遵循MIT许可证。除非根据这些条款,否则不得复制、修改或分发此文件。
依赖关系
~8–18MB
~223K SLoC