Firmware Analysis
導入
ファームウェアは、デバイスが正しく動作するための不可欠なソフトウェアであり、ハードウェアコンポーネントとユーザーがやり取りするソフトウェアとの間の通信を管理し、容易にします。デバイスが電源を入れた瞬間から重要な命令にアクセスできるように、永続メモリに保存され、オペレーティングシステムの起動につながります。ファームウェアの調査および可能な変更は、セキュリティの脆弱性を特定するための重要なステップです。
情報収集
情報収集は、デバイスの構成と使用されているテクノロジーを理解するための重要な初期ステップです。このプロセスには、次のデータの収集が含まれます:
CPUアーキテクチャと実行されているオペレーティングシステム
ブートローダーの詳細
ハードウェアレイアウトとデータシート
コードベースのメトリクスとソースの場所
外部ライブラリとライセンスタイプ
更新履歴と規制認証
アーキテクチャとフローダイアグラム
セキュリティアセスメントと特定された脆弱性
この目的のために、**オープンソースインテリジェンス(OSINT)**ツールが非常に有用であり、利用可能なオープンソースソフトウェアコンポーネントの手動および自動レビュープロセスを通じて分析することも重要です。Coverity ScanやSemmle’s LGTMなどのツールは、潜在的な問題を見つけるために活用できる無料の静的解析を提供しています。
ファームウェアの取得
ファームウェアの取得は、それぞれ異なる複雑さレベルを持つさまざまな手段を通じてアプローチできます:
ソースから(開発者、製造業者)直接
提供された手順に従ってビルドする
公式サポートサイトからダウンロード
ホストされているファームウェアファイルを見つけるためのGoogleドーククエリを利用する
S3Scannerなどのツールを使用して、クラウドストレージに直接アクセスする
中間者攻撃技術を使用して更新を傍受する
UART、JTAG、またはPICitなどの接続を介してデバイスから抽出
デバイス通信内の更新リクエストをスニッフィング
ハードコードされた更新エンドポイントを特定して使用する
ブートローダーまたはネットワークからダンプ
適切なハードウェアツールを使用して、他の手段が失敗した場合に、ストレージチップを取り外して読み取る
もしそれらのツールであまり情報が見つからない場合は、binwalk -E <bin>
で画像のエントロピーをチェックしてください。エントロピーが低い場合、暗号化されていない可能性が高いです。エントロピーが高い場合、暗号化されている可能性が高いです(または何らかの方法で圧縮されています)。
さらに、これらのツールを使用してファームウェアに埋め込まれたファイルを抽出することができます:
pageFile/Data Carving & Recovery Toolsまたはbinvis.io (code) を使用してファイルを検査できます。
ファイルシステムの取得
以前にコメントアウトされたbinwalk -ev <bin>
のようなツールを使用すると、ファイルシステムを抽出できるはずです。
通常、Binwalkはファイルシステムの種類と同じ名前のフォルダ内に抽出します。ファイルシステムの種類は通常、次のいずれかです:squashfs、ubifs、romfs、rootfs、jffs2、yaffs2、cramfs、initramfs。
手動ファイルシステムの抽出
時々、binwalkにはシグネチャにファイルシステムのマジックバイトが含まれていないことがあります。そのような場合は、binwalkを使用してファイルシステムのオフセットを見つけ、バイナリから圧縮されたファイルシステムを切り出し、以下の手順に従ってファイルシステムを手動で抽出してください。
以下のddコマンドを実行して、Squashfsファイルシステムを彫刻してください。
ファームウェアの解析
ファームウェアを取得したら、その構造と潜在的な脆弱性を理解するために解析することが不可欠です。このプロセスには、ファームウェアイメージから価値あるデータを抽出し、分析するためのさまざまなツールを利用します。
初期解析ツール
バイナリファイル(<bin>
と呼ばれる)の初期検査のために、以下のコマンドセットが提供されています。これらのコマンドは、ファイルタイプの識別、文字列の抽出、バイナリデータの解析、およびパーティションやファイルシステムの詳細の理解に役立ちます。
画像の暗号化状態を評価するために、エントロピーはbinwalk -E <bin>
でチェックされます。低いエントロピーは暗号化の不足を示し、高いエントロピーは暗号化または圧縮の可能性を示します。
埋め込まれたファイルを抽出するためには、file-data-carving-recovery-toolsのドキュメントやファイル検査のためのbinvis.ioなどのツールやリソースが推奨されます。
ファイルシステムの抽出
binwalk -ev <bin>
を使用すると、通常ファイルシステムを抽出でき、ファイルシステムの種類(例:squashfs、ubifs)に基づいてディレクトリに抽出されます。ただし、binwalkがマジックバイトが不足しているためにファイルシステムの種類を認識できない場合は、手動で抽出する必要があります。これには、binwalk
を使用してファイルシステムのオフセットを特定し、その後dd
コマンドを使用してファイルシステムを切り出す作業が含まれます。
ファイルシステムの解析
ファイルシステムを抽出した後、セキュリティの脆弱性を探す作業が始まります。セキュリティの脆弱性を見つけるために、不安定なネットワークデーモン、ハードコードされた資格情報、APIエンドポイント、更新サーバー機能、未コンパイルのコード、起動スクリプト、オフライン解析用のコンパイルされたバイナリに注意が払われます。
検査すべき主要な場所とアイテムには次のものがあります:
ユーザーの資格情報のためのetc/shadowとetc/passwd
etc/ssl内のSSL証明書とキー
潜在的な脆弱性のための構成ファイルとスクリプトファイル
追加の解析のための埋め込みバイナリ
一般的なIoTデバイスのWebサーバーとバイナリ
ファイルシステム内の機密情報や脆弱性を明らかにするのに役立ついくつかのツールがあります:
機密情報の検索のためのLinPEASとFirmwalker
包括的なファームウェア解析のためのThe Firmware Analysis and Comparison Tool (FACT)
静的および動的解析のためのFwAnalyzer、ByteSweep、ByteSweep-go、およびEMBA
コンパイルされたバイナリのセキュリティチェック
ファイルシステム内で見つかったソースコードとコンパイルされたバイナリの両方は、脆弱性を検査する必要があります。Unixバイナリ用のchecksec.shやWindowsバイナリ用のPESecurityなどのツールを使用して、悪用される可能性のある保護されていないバイナリを特定するのに役立ちます。
ダイナミック解析のためのファームウェアのエミュレーション
ファームウェアをエミュレートするプロセスは、デバイスの動作または個々のプログラムのダイナミック解析を可能にします。このアプローチはハードウェアやアーキテクチャの依存関係に関する課題に直面する可能性がありますが、ルートファイルシステムや特定のバイナリを、Raspberry Piなどのアーキテクチャとエンディアンが一致するデバイスや、事前に構築された仮想マシンに転送することで、さらなるテストを容易にすることができます。
個々のバイナリのエミュレーション
単一のプログラムを調査するために、プログラムのエンディアンとCPUアーキテクチャを特定することが重要です。
MIPSアーキテクチャの例
MIPSアーキテクチャのバイナリをエミュレートするには、次のコマンドを使用できます:
そして、必要なエミュレーションツールをインストールします:
MIPSアーキテクチャのエミュレーション
MIPS(ビッグエンディアン)の場合、qemu-mips
が使用され、リトルエンディアンバイナリの場合はqemu-mipsel
が選択されます。
ARMアーキテクチャのエミュレーション
ARMバイナリの場合、qemu-arm
エミュレータが使用されます。
フルシステムエミュレーション
Firmadyne、Firmware Analysis Toolkitなどのツールは、フルファームウェアエ
Last updated