#stack-overflow #security #aslr #control-flow-guard #fortify-source

app binary-security-check

可执行二进制文件中安全特性的分析器

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开发工具

MIT 许可证

96KB
2K SLoC

crates.io license

可执行二进制文件中安全特性的分析器

binary-security-check 是一个命令行工具,用于分析可执行二进制文件,寻找提高可执行文件安全性或降低某些漏洞易损性的特性。

安装说明

要在您的计算机上使用此工具,您需要从源代码构建它

  1. 如果您尚未安装 Rust 工具链,请 安装。我建议安装适用于您计算机的最新稳定工具链。

  2. 为您的计算机安装 C 工具链。例如在 Debian Linux 上

    sudo apt-get install build-essential
    
  3. 构建源代码

    cargo install binary-security-check
    
  4. 您应该可以直接运行此工具

    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 选项。

对于 PE32PE32+ 格式,分析的功能包括

  • 地址空间布局随机化:ASLRASLR-EXPENSIVEASLR-LOW-ENTROPY-LT-2GBASLR-LOW-ENTROPYASLR-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