cwe_checker:静态分析检测ELF二进制文件中常见CWE漏洞,支持多架构与Ghidra集成

cwe_checker finds vulnerable patterns in binary executables

分支5Tags8
文件最后提交记录最后更新时间
2 年前
5 年前
4 年前
3 年前
5 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
7 年前
2 年前
2 年前

cwe_checker logo

cwe_checker

Acceptance tests Unit tests Docker-Pulls Documentation

什么是 cwe_checker?

cwe_checker 是一套用于检测常见漏洞类别的检查工具,例如空指针解引用和缓冲区溢出。 这些漏洞类别在形式上被称为常见弱点枚举(CWEs)。 这些检查基于多种分析技术,从简单的启发式方法到基于抽象解释的数据流分析。 其主要目标是帮助分析人员快速发现潜在的易受攻击的代码路径。

其主要关注点是常见于 Linux 和 Unix 操作系统上的 ELF 二进制文件。 cwe_checker 使用 Ghidra 将二进制文件反汇编为一种通用的中间表示, 并在此 IR 上实现其自身的分析。 因此,这些分析可以运行在 Ghidra 能够反汇编的大多数 CPU 架构上, 这使得 cwe_checker 成为固件分析中的宝贵工具。

以下几点理由足以让你尝试使用 cwe_checker

  • 设置非常简单,只需构建 Docker 容器!
  • 它能够分析多种 CPU 架构的 ELF 二进制文件,包括 x86、ARM、MIPS 和 PPC
  • 由于其插件式架构,它具有良好的扩展性
  • 它是可配置的,例如可以对新的 API 应用分析
  • 可以在 Ghidra 中查看带注释的结果
  • cwe_checker 可以作为插件集成到 FACT

使用示例

安装

使用 Docker 镜像

最简单的方法是从 Github 容器注册表 拉取最新的 Docker 镜像:

  • docker pull ghcr.io/fkie-cad/cwe_checker:latest 获取基于当前 master 分支的镜像。
  • docker pull ghcr.io/fkie-cad/cwe_checker:stable 获取基于最新稳定版本的镜像。
  • docker pull ghcr.io/fkie-cad/cwe_checker:v0.8 获取基于 v0.8 稳定版本的镜像。 不过,建议在新稳定版本发布后尽快切换到新版本,因为稳定版本之间的改进可能相当显著。

如果你想自己构建 Docker 镜像,只需运行

docker build -t cwe_checker .

这样,您还可以为基于ARM的PC(例如,新型苹果Mac电脑)构建原生Docker镜像。目前,预构建的Docker镜像仅支持x86架构。

本地安装

为了在本地构建和安装cwe_checker,必须安装以下依赖项:

  • Rust 版本号需大于等于1.76
  • Ghidra 版本号需大于等于10.2

运行命令 make all GHIDRA_PATH=/path/to/ghidra_folder(并将正确的本地Ghidra安装路径填入)以编译并安装cwe_checker。如果您省略GHIDRA_PATH参数,安装程序将在文件系统中搜索Ghidra的本地安装。

使用方法

cwe_checker接受二进制文件作为输入, 对二进制文件执行多项基于静态分析的检查, 然后输出分析过程中发现的CWE警告列表。

如果您使用官方Docker镜像,只需运行

docker run --rm -v /PATH/TO/BINARY:/input ghcr.io/fkie-cad/cwe_checker /input

如果您已在本地主机安装了 cwe_checker,请执行以下操作:

cwe_checker BINARY

您可以通过位于 src/config.json 的配置文件调整大多数检查的行为。 如果您对其进行了修改,请添加命令行标志 --config=src/config.json,以告诉 cwe_checker 使用修改后的文件。 关于其他可用的命令行标志的信息,您可以向 cwe_checker 传递 --help 标志。

已提供对分析 Linux 可加载内核模块(LKMs)的实验性支持。cwe_checker 将识别您传递的 LKM,并对用户空间程序可用的 CWE 检查的一个子集执行。 分析可通过一个单独的 配置文件 进行配置。

如果您使用的是稳定版本,还可以查看 在线文档 获取更多信息。

针对裸机二进制文件

cwe_checker 提供了分析裸机二进制文件的实验性支持。 为此,需要通过 --bare-metal-config 命令行选项提供一个裸机配置文件。 此类配置文件的示例可以在 bare_metal/stm32f407vg.json 中找到(该文件是为 STM32F407VG 微控制器创建和测试的)。

更多信息,请查阅 在线文档

文档和测试

测试套件的可执行文件可以通过执行 make compile_test_files(需要安装 Docker!)来构建。然后可以通过 make test 运行测试套件。

源代码文档可以通过执行 make documentation 构建。对于稳定版本,文档可以在这里找到 这里

实现的检查

迄今为止,以下分析功能已实现:

  • CWE-78:操作系统命令注入(在标准运行中当前禁用)
  • CWE-119 及其变体 CWE-125CWE-787:缓冲区溢出
  • CWE-134:使用外部控制的格式字符串
  • CWE-190:整数溢出或环绕
  • CWE-215:通过调试信息暴露信息
  • CWE-243:创建 chroot 监狱时未更改工作目录
  • CWE-332:PRNG 中熵不足
  • CWE-337:伪随机数生成器(PRNG)中的可预测种子
  • CWE-367:时间检查与时间使用(TOCTOU)竞态条件
  • CWE-416:使用后释放及其变体 CWE-415:双释放
  • CWE-426:不可信搜索路径
  • CWE-467:在指针类型上使用 sizeof()
  • CWE-476:空指针解引用
  • CWE-560:使用 umask() 时带有 chmod 风格的参数
  • CWE-676:使用潜在危险函数
  • CWE-782:暴露的 IOCTL 访问控制不足
  • CWE-789:使用过大大小值的内存分配

请注意,由于快捷方式和静态分析的本质以及过估计,可能会出现假阳性或假阴性。 您可以在 检查特定文档页面 上找到关于每个检查的内部工作原理以及假阳性和假阴性的已知原因的信息。

集成到其他工具中

cwe_checker附带了一个用于 Ghidra 的脚本, 该脚本解析 cwe_checker 的输出并在反汇编器中注释找到的 CWE,以便进行更容易的手动分析。 该脚本位于 ghidra_plugin/cwe_checker_ghidra_plugin.py,使用说明包含在文件中。

Ghidra Integration

cwe_checker 还作为插件集成在 FACT 中。 如果您想将 cwe_checker 集成到您自己的分析工具链中,可以使用 --json 命令行标志(与 --quiet--out=... 命令行选项结合使用)生成易于解析的 JSON 格式的 CWE 警告输出。

cwe_checker 的内部工作原理

使用 cargo doc --open --document-private-items --no-deps 构建文档将为您提供有关 cwe_checker 内部结构的更多信息。 然而,最好的文档仍然是源代码本身。 如果您有问题,请在我们的 讨论页面 上提问! 我们一直在努力改进可扩展性和文档,您的问题将帮助我们实现这一目标!

要快速初步了解其内部原理,您还可以查看会议演讲中关于 cwe_checker 的幻灯片,这些幻灯片位于 doc 文件夹中。 到目前为止,我们已经在以下会议上展示了 cwe_checker:

贡献

贡献总是受欢迎的。只需进行分支并打开一个拉取请求!

鸣谢

本项目部分由 德国联邦信息安全办公室(BSI) 赞助。

特别感谢 BAP 社区(尤其是官方 gitter)回答问题并讨论解决方案。

许可证

    Copyright (C) 2018 - 2024  Fraunhofer FKIE  (firmware-security@fkie.fraunhofer.de)

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 3 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
# 专业翻译服务

## 服务概述
我们提供高质量的文本翻译服务,旨在满足不同领域客户的多样化需求。无论是法律文件、医学文献,还是市场营销材料,我们的团队都能确保翻译的准确性和专业性。

## 服务特点
- **通俗易懂**:我们致力于将复杂的术语转化为易于理解的语言,确保信息传达无障碍。
- **专业精准**:我们的翻译团队由经验丰富的专业人士组成,确保每一项翻译都符合行业标准。
- **优雅流畅**:我们注重语言的优美和流畅性,使翻译文本不仅准确,而且具有良好的阅读体验。

## 服务流程
1. **需求分析**:与客户沟通,了解具体的翻译需求和目标。
2. **文本评估**:对原文进行详细分析,确定翻译的难度和所需时间。
3. **翻译执行**:由专业翻译人员进行翻译,确保内容的准确性和专业性。
4. **校对审核**:经过多轮校对和审核,确保翻译质量达到最高标准。
5. **交付反馈**:将最终翻译文本交付给客户,并收集反馈以持续改进服务质量。

## 适用领域
- **法律**:合同、协议、诉讼文件等。
- **医学**:研究报告、临床试验、医疗器械说明书等。
- **市场营销**:广告文案、品牌故事、市场调研报告等。
- **技术**:用户手册、技术文档、专利文件等。

## 联系我们
如有任何翻译需求或疑问,欢迎随时联系我们的客户服务团队。我们期待为您提供卓越的翻译服务体验。

项目介绍

cwe_checker 能够在二进制可执行文件中发现脆弱模式。【此简介由AI生成】

定制我的领域
251.35 K141访问 GitHub