


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/>.