


CWE_CHECKERは、Null Pointerの逆方向やバッファオーバーフローなどの一般的なバグクラスを検出するための一連のチェックです。これらのバグクラスは、正式には一般的な脱力感(CWE)として知られています。チェックは、単純なヒューリスティックから抽象的な解釈ベースのデータフロー分析に至るまで、さまざまなアナイルシス技術に基づいています。その主な目標は、アナリストが潜在的に脆弱なコードパスを迅速に見つけるのを支援することです。
その主な焦点は、LinuxおよびUNIXオペレーティングシステムで一般的に見られるELFバイナリです。 CWE_CHECKERはGhidraを使用してバイナリを1つの一般的な中間表現に分解し、この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 .
これにより、アームベースのPC(新しいApple Macなど)のネイティブDocker画像を作成することもできます。事前に構築されたDocker画像は現在、x86ベースのみです。
cwe_checkerをローカルに構築およびインストールするには、以下の依存関係をインストールする必要があります。
make all GHIDRA_PATH=/path/to/ghidra_folder実行して、CWE_CHECKERをコンパイルしてインストールします。 GHIDRA_PATH引数を省略すると、インストーラーはファイルシステムを検索してGhidraのローカルインストールを検索します。
CWE_CHECKERは入力としてバイナリを取得し、バイナリ上の静的分析に基づいていくつかのチェックを実行し、分析中に見つかったCWE警告のリストを出力します。
公式のDocker画像を使用する場合は、実行するだけです
docker run --rm -v /PATH/TO/BINARY:/input ghcr.io/fkie-cad/cwe_checker /inputcwe_checkerをローカルにインストールした場合は、実行します
cwe_checker BINARYnixフレークを使用する場合は、実行します
nix run github:fkie-cad/cwe_checker -- BINARY src/config.jsonにある構成ファイルを介して、ほとんどのチェックの動作を調整できます。変更する場合は、コマンドラインフラグ--config=src/config.jsonを追加して、 CWE_CHECKERに変更されたファイルを使用するように指示します。他の利用可能なコマンドラインフラグの詳細については、 --helpフラグをCWE_CHECKERに渡すことができます。
Linuxロード可能なカーネルモジュール(LKMS)の分析には実験的なサポートがあります。 CWE_CHECKERは、LKMに合格するかどうかを認識し、ユーザースペースプログラムで利用可能なCWEチェックのサブセットを実行します。分析は、個別の構成ファイルを介して構成可能です。
安定したバージョンを使用する場合は、詳細についてはオンラインドキュメントをご覧ください。
CWE_CHECKERは、裸の金属のバイナリを分析するための実験的サポートを提供します。そのためには--bare-metal-configコマンドラインオプションを介して裸の金属構成ファイルを提供する必要があります。このような構成ファイルの例はbare_metal/stm32f407vg.json (STM32F407VG MCUのために作成およびテストされた)にあります。
詳細については、オンラインドキュメントをご覧ください。
テストスイートのテストバイナリはmake compile_test_files (インストールする必要があります!)で構築できます。テストスイートは、 make testで実行できます。
ソースコードドキュメントはmake documentationで構築できます。安定したバージョンの場合、ドキュメントはここにあります。
これまでのところ、次の分析が実装されています。
ショートカットと静的分析の性質、ならびに過剰近縁分のために、誤検知と偽陰性の両方が予想されることに注意してください。各チェックの内側の仕組みに関する情報や、チェック固有のドキュメンテーションページで誤検知と偽陰性の既知の理由を見つけることができます。
CWE_CHECKERにはGhidraのスクリプトが付属しています。これは、CWE_CHECKERの出力を解析し、手動分析を容易にするために発見されたCWEに発見されたCWEに注釈を付けます。スクリプトはghidra_plugin/cwe_checker_ghidra_plugin.pyにあり、使用手順はファイルに含まれています。

CWE_CHECKERは、実際にはプラグインとしても統合されています。 CWE_CHECKERを独自の分析ツールチェーンに統合する場合は、 --jsonコマンドラインフラグ( --quietまたは--out=...コマンドラインオプションのいずれかと組み合わせて)を使用して、簡単にspecaible JSON出力形式でCWE警告を生成できます。
cargo doc --open --document-private-items --no-deps CWE_CHECHECKERの内部構造に関する詳細情報を提供します。ただし、最良のドキュメントはまだソースコード自体です。ご質問がある場合は、ディスカッションページで必ず尋ねてください!私たちは常に拡張性とドキュメントを改善するために努力しています。あなたの質問はそれを達成するのに役立ちます!
内部の概要/初期概要を取得するには、 DOCフォルダーのCWE_CHECKERの会議プレゼンテーションのスライドを見ることもできます。これまでに次の会議でCWE_CHECKECKERを提示しました。
貢献はいつでも大歓迎です。それをフォークして、プルリクエストを開きます!
このプロジェクトは、ドイツの情報セキュリティ(BSI)のためにドイツの連邦局によって部分的に資金提供されています。
質問に答えてソリューションについて話し合ってくれたBAPコミュニティ(特に公式のGitter)に特別な感謝を申し上げます。
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/>.