
IoTファームウェアの識別と抽出
IoTファームウェアの識別と抽出
moriaはファームウェアやIoTイメージに埋め込まれたファイルや構造(ファイルシステム、カーネル、ブートローダー、アーカイブ、鍵)を識別し、見つけたもののほとんどをroot権限なしで展開します。各検出結果をバイトオフセット、タイプ、信頼スコアとともに報告し、クリーンなJSONで出力するため、スクリプトやLLMエージェントが人間と同じように簡単に操作できます。
upx -dを妨害するためにヘッダーがゼロ化または改変されたスタブも検出します。openat + O_NOFOLLOWを経由し(パストラバーサルやシンボリックリンクエスケープなし)、展開は爆弾に対して制限されています。-j)で、すべての検出結果にオフセットと信頼度を付与します。cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
cmake --install build --prefix ~/.local # or /usr/local (needs sudo)
ビルドにはcmake、C++20コンパイラ、およびzlib、liblzma、lz4、zstdの開発ライブラリ(--extractで使用される展開ツール)が必要です。Debian/Ubuntuでは: sudo apt install cmake g++ zlib1g-dev liblzma-dev liblz4-dev libzstd-dev。いずれかを除いてビルドする場合(最小構成または識別専用ビルド)、-DMORIA_OPTIONAL_CODECS=ONで構成すると、不足しているコーデックは単に無効化されます。
moriaバイナリは自己完結型です。すべてのシグネチャセットはビルド時に埋め込まれるため、バイナリは何もインストールされていない環境でも動作します(cp build/moria ~/.local/binで十分で、ダウンロードしたリリースバイナリはそのまま実行できます)。埋め込みシグネチャの代わりに外部シグネチャを使用する場合(再ビルドせずに新しい.tomlをテストするなど)、--sigs DIRを渡すか$MORIA_SIGDIRを設定します。
出力はデフォルトで人間が読める形式です。JSONには-jを渡します。
moria <file> # identify: a findings tree with offsets, types, and confidence
moria <dir> # scan a tree: a type summary plus the notable files
moria -j <file> # JSON, for tools and agents
moria -e <file> # extract to <file>.extracted/ (-C DIR to choose the output dir)
moria -c <file> # carve raw byte ranges to <file>.carved/ (no parsing)
moria -E <file> # entropy pass: flag unidentified / possibly-encrypted regions
moria --list <archive> # list tar/cpio/zip members without extracting
moria --broad <path> # also load the ~2.5k general file-type signatures
moria --help
-eは認識されたフォーマットを<file>.extracted/以下に展開します。リージョンごとに1つのディレクトリ(0x<offset>-<type>/)を作成し、オフセットをパスにマッピングするmanifest.jsonも生成します。ネストされたコンテナに自動的に再帰し、UBIイメージをボリュームごとに再構築します。ガード(--depth、--max-files、--max-bytes、および展開比率の上限)が敵対的入力を制限します。ガードが作動するとそのブランチを停止し、それでも回復されたすべてのものを返します。
プロセス内で展開、外部ツールなし、sudoなし:
signatures/は手書きのコアです。ファームウェアのファイルシステム、コンテナ、カーネル、一般的なフォーマットがあり、それぞれ構造検証付きです。signatures-firmware/はベンダーのファームウェアコンテナマジックを保持し、デフォルトでロードされます。signatures-generated/はfile(1)のマジックデータベースから派生した約2.5kの一般的なファイルタイプマジックを保持し、--broadでのみロードされます。フォーマットを追加するには、signatures/に.tomlを置きます。小さなC++バリデータは、CRCやクロスブロックポインタなど、宣言レイヤーでは表現できないチェックにのみ必要です。
moriaは構造の識別、抽出、カービングを行います。シークレット/クレデンシャルスキャン、SBOM、CVE、ライセンス分析は別のツール(mithril)です。
MIT、LICENSEを参照。
一部のオンディスクフォーマットの処理は、他のオープンソースプロジェクトのアルゴリズムをクリーンに再実装したもので、moria自身のI/Oレイヤーに対して独立して書かれています(ソースのコピーなし): UPX/UCLのUCL/NRV2B展開ツールとCTOアンフィルタ(GPL-2.0、アルゴリズムのみ)、littlefsのメタデータコミットとCTZスキップリストレイアウト(BSD-3-Clause)、およびSPIFFSのページ/オブジェクトレイアウト(MIT)。