
ファームウェア解析・比較ツール
ファームウェア分析は、いくつかの興味深い目標を達成するために使用できます。主なものは、ブラックボックスファームウェアの機能、コンポーネント、潜在的なセキュリティ上の脆弱性を特定することです。
ファームウェア分析・比較ツール (FACT) は、手動によるファームウェア分析作業を可能な限り自動化することを目的としています。FACTは、強力な分析セットを組み合わせ、任意のファームウェアサンプルから完成した分析結果へとユーザーを導く統一インターフェースを提供します。FACT分析の主な特徴のいくつかは、結果が
であることです。さらに、FACTは分析結果やファームウェアコンテンツのナビゲーションと可視化のための複数の方法を提供し、アクセスしやすくしています。メインのFACTインターフェースは、ローカルでホストしたりネットワークを通じて共有できるHTML/JS/CSSベースのWebインターフェースです。さらに、FACTは統合されたSwaggerUIで探索可能なREST風HTTP APIも提供します。Webインターフェースの主な機能は以下の通りです。
FACTは研究プロトタイプとして維持されていますが、プロジェクトは十分にテストされ、基本的なドキュメントを含み、多数のプロダクションレベルの機能を提供しています。常にフィードバックや機能リクエストを歓迎しています。
詳細とスクリーンショットは、プロジェクトページでご覧いただけます。
FACTはマルチプロセスアプリケーションとして設計されており、コアとRAMが多いほど良いです。
| 最小 | 推奨 |
|---|---|
| 4 コア | 16 コア |
| 8 GB RAM | 64 GB RAM |
| 10 GB ディスク容量 | 10* GB ディスク容量 |
[!NOTE] FACTのコード、コンテナ、バイナリをセットアップするには約10 GB必要です。 解凍されたファイルと分析結果を保存するには追加の容量が必要です。 これは別のパーティションやドライブに配置できます。
FACTを任意のLinuxディストリビューションにインストールすることは基本的に可能ですが、インストーラは以下に限定されています。
古いディストリビューション(例:Debian 11 "Bullseye" や Ubuntu 20.04 "Focal")へのインストールは動作する可能性がありますが、これらのディストリビューションはサポート終了に達しているため、安定しているとは見なされません。
FACTにはPython 3.10~3.14が必要です(サポートされているすべてのディストリビューションでデフォルトであるはずです)。
セットアッププロセスはほとんど自動化されており、単一のスクリプトにラップされています。一部の機能は特に選択できます。FACTのインストールに関する詳細なガイドは、INSTALL.mdを参照してください。
[!IMPORTANT] コンテナを広範囲に使用していますが、FACTには多くの依存関係が含まれており(アンインストールは提供されていません)、システムをクリーンに保ちたい場合は、以下に示すセットアップオプションのいずれかを試すことができます。
毎月、すぐに使えるVagrantボックスを提供しています。Vagrantは、マシンにインストールせずにFACTを使い始めるための簡単で便利な方法です。Vagrantをセットアップして、提供されたボックスをVirtualBoxにインポートするだけです。ボックスはVagrantupのウェブサイトにあります!
FACTとVagrantを使い始める方法については、チュートリアルをご覧ください。
Docker版も利用可能ですが、現在はメンテナンスされていません(詳細はFACT_dockerリポジトリを参照)。
start_fact.pyスクリプトを実行することでFACTを起動できます。スクリプトはインストールされているすべてのコンポーネントを自動的に検出します。
src/start_fact.py
その後、FACTにはhttp://localhost:5000(デフォルト)またはhttps://localhost(nginxでインストールした場合)でアクセスできます。
Ctrl + cを押すか、start_fact.pyスクリプトにSIGTERMを送信することでシステムをシャットダウンできます。
[!CAUTION] FACTはパブリックインターネットサービスとして使用することを意図していません。Webインターフェースは堅牢なアプリケーションではありません。SecDevOpsを適用することでセキュリティ問題を限定しようとしていますが、FACTには脆弱性が残っている可能性があります。完全に信頼されていないネットワークでFACTをホストする予定がある場合は、必ずFACT設定のすべてのパスワードをリセットしてください。
[!TIP] FACTの使い方に関する詳細なドキュメントは、Wikiページにあります。
私たちのSphinxドキュメントもご覧いただけます。
FACTが何であり、どのように動作するかについての情報は、docsフォルダ内のスライドにもあります。
FACTはREST APIを提供しています。詳細はWikiページをご覧ください。
FACTはオプションの基本認証、ロール、ユーザー管理を提供しています。詳細はWikiページをご覧ください。
貢献する最も簡単な方法は、独自のプラグインを作成することです。開発者マニュアルはGitHubのWikiにあります。
現在利用可能な追加プラグイン:
src/firmware_import_export.pyスクリプトを使用して、解凍されたファイルと分析結果をエクスポートし、別のFACTインスタンスにインポートできます。データはZIPアーカイブとして保存され、これがインポート時にスクリプトが期待する形式でもあります。分析済みファームウェアイメージのファイルと分析データをエクスポートするには、次のコマンドを実行します。
python3 firmware_import_export.py export FW_UID [FW_UID_2 ...] [-o OUTPUT_DIR]
[!NOTE] エクスポートされたアーカイブはかなりのディスク容量を消費する可能性があります。固定された関係はありませんが、元のファームウェアのサイズの2倍から10倍を超えることがあります。
その後、エクスポートされたファイルを次のコマンドでインポートできます。
python3 firmware_import_export.py import FW.zip [FW_2.zip ...]
私たちは数多くのBlackHat ArsenalセッションでFACTを紹介できたことを嬉しく思います。
最初にVagrantfileを提供してくれた@botlabsDevに感謝します。ただし、現在は非推奨です。
このプロジェクトは、ドイツ連邦情報セキュリティ庁 (BSI) などから一部資金提供を受けています。
ファームウェア分析・比較ツール (FACT)
Copyright (C) 2015-2026 Fraunhofer FKIE
このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行されたGNU一般公衆ライセンス(バージョン3、または(あなたの選択により)それ以降のバージョン)の条件の下で再配布および/または改変することができます。 このプログラムは有用であることを期待して配布されていますが、いかなる保証も提供しません。商品性や特定目的への適合性の黙示の保証も含めません。詳細はGNU一般公衆ライセンスをご覧ください。 あなたはこのプログラムとともにGNU一般公衆ライセンスのコピーを受け取っているはずです。受け取っていない場合は、http://www.gnu.org/licenses/ をご覧ください。
一部のプラグインは異なるライセンスを持つ場合があります。その場合、プラグインのフォルダにライセンスファイルが提供されます。