


CWE_CHECKER是一套检查套件,用于检测常见的错误类,例如NULL指针启动和缓冲区溢出。这些错误类正式称为常见弱点(CWES)。这些检查基于各种ANAYLSIS技术,从简单的启发式学到基于抽象解释的数据流分析。它的主要目标是帮助分析师快速找到潜在的脆弱代码路径。
它的主要重点是在Linux和Unix操作系统上常见的精灵二进制文件。 CWE_CHECKER使用Ghidra将二进制文件分解为一个常见的中间表示,并在此IR上实施了自己的分析。因此,分析可以在Ghidra可以拆卸的大多数CPU架构上进行,这使得CWE_CHECKER成为固件分析的宝贵工具。
以下论点应该说服您尝试CWE_CHECKER :

最简单的方法是从GitHub容器注册表中获取最新的Docker映像:
docker pull ghcr.io/fkie-cad/cwe_checker:latest产生基于当前主分支的图像。docker pull ghcr.io/fkie-cad/cwe_checker:stable产生基于最新稳定版本版本的图像。docker pull ghcr.io/fkie-cad/cwe_checker:v0.9产生基于v0.9稳定版本版本的图像。但是,建议在发布后立即切换到较新的稳定版本,因为稳定版本之间的改进可能非常重要。如果您想自己构建Docker映像,只需运行
docker build -t cwe_checker .
这样,您还可以为基于ARM的PC(例如较新的Apple Mac)构建本地Docker图像。预建的码头图像目前仅基于x86。
必须安装以下依赖项才能在本地构建和安装CWE_CHECKER :
运行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如果您使用nix薄片,请运行
nix run github:fkie-cad/cwe_checker -- BINARY您可以通过位于src/config.json上的配置文件调整大多数支票的行为。如果修改它,请添加命令行标志--config=src/config.json ,告诉cwe_checker使用修改后的文件。有关其他可用命令行标志的信息,您可以将--help标志传递给CWE_CHECKER 。
有实验支持可分析可负载核模块(LKMS)。 CWE_CHECKER将识别您是否通过LKM,并执行可用于用户空间程序的CWE检查子集。分析可通过单独的配置文件进行配置。
如果使用稳定版本,也可以查看在线文档以获取更多信息。
CWE_CHECKER提供了用于分析裸机二进制文件的实验支持。为此,需要通过--bare-metal-config命令行选项提供裸机的金属配置文件。可以在bare_metal/stm32f407vg.json (由STM32F407VG MCU创建并测试)的一个示例。
有关更多信息,请查看在线文档。
可以使用make compile_test_files (需要安装的Docker!)来构建我们的测试套件的测试二进制文件。然后可以通过make test来运行测试套件。
源代码文档可以使用make documentation构建。对于稳定版本,可以在此处找到文档。
到目前为止,已实施以下分析:
请注意,由于捷径和静态分析的性质以及过度评价,都应期望误报和假否定。您可以找到有关每次检查的内部工作的信息,以及在特定于检查的文档页面上的误报和虚假负面因素的已知原因。
CWE_CHECKER配备了Ghidra的脚本,该脚本解析了CWE_CHECKER的输出,并注释了拆卸器中的CWES,以易于手动分析。该脚本位于ghidra_plugin/cwe_checker_ghidra_plugin.py上,用法说明包含在文件中。

CWE_CHECKER也被整合为插件。如果要将CWE_CHECKER集成到自己的分析工具链中,则可以使用--json命令行标志(结合 - --quiet或--out=...命令行选项),以易于放松的JSON输出格式生成CWE警告。
使用cargo doc --open --document-private-items --no-deps将为您提供有关CWE_CHECKER内部结构的更多信息。但是,最好的文档仍然是源代码本身。如果您有疑问,请务必在我们的讨论页面上询问他们!我们一直在努力提高可扩展性和文档,您的问题将帮助我们实现这一目标!
要快速/初始概述其内部内容,您还可以查看DOC文件夹中CWE_CHECKER的会议演示幻灯片。到目前为止,我们在以下会议上介绍了CWE_CHECKER:
总是欢迎捐款。只是分叉并打开拉动请求!
该项目部分由德国联邦信息安全办公室(BSI)资助。
特别感谢BAP社区(尤其是官方吉特)回答问题并讨论解决方案。
Copyright (C) 2018 - 2024 Fraunhofer FKIE ([email protected])
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/>.