Firmware Analysis
AWSハッキングの学習と練習:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングの学習と練習:
HackTricks Training GCP Red Team Expert (GRTE)
はじめに
ファームウェアは、デバイスが正しく動作するためにハードウェアコンポーネントとユーザーがやり取りするソフトウェアとの間の通信を管理し、促進することで、デバイスが電源を入れた瞬間から重要な命令にアクセスできるようにするための不可欠なソフトウェアです。ファームウェアの調査および可能な変更は、セキュリティの脆弱性を特定するための重要なステップです。
情報収集
情報収集は、デバイスの構成と使用されているテクノロジーを理解するための重要な初期ステップです。このプロセスには、以下のデータの収集が含まれます:
CPUアーキテクチャと実行されているオペレーティングシステム
ブートローダーの詳細
ハードウェアレイアウトとデータシート
コードベースのメトリクスとソースの場所
外部ライブラリとライセンスタイプ
更新履歴と規制認証
アーキテクチャとフローダイアグラム
セキュリティアセスメントと特定された脆弱性
この目的のために、**オープンソースインテリジェンス(OSINT)**ツールが非常に有用であり、利用可能なオープンソースソフトウェアコンポーネントの手動および自動レビュープロセスを通じた分析も重要です。Coverity ScanやSemmle’s LGTMのようなツールは、潜在的な問題を見つけるために活用できる無料の静的解析を提供しています。
ファームウェアの取得
ファームウェアの取得は、それぞれ異なる複雑さレベルを持つさまざまな手段を通じてアプローチできます:
直接ソース(開発者、製造業者)から
提供された手順に従ってビルドする
公式サポートサイトからダウンロード
ホストされているファームウェアファイルを見つけるためのGoogleドーククエリを利用する
S3Scannerなどのツールを使用して、クラウドストレージに直接アクセスする
中間者攻撃技術を使用して更新を傍受する
UART、JTAG、またはPICitなどの接続を介してデバイスから抽出
デバイス通信内での更新リクエストをスニッフィング
ハードコードされた更新エンドポイントの特定と使用
ブートローダーまたはネットワークからのダンプ
適切なハードウェアツールを使用して、すべてが失敗した場合にストレージチップを取り外して読み取る
もし、それらのツールであまり情報が見つからない場合は、binwalk -E <bin>
を使用して画像のエントロピーをチェックしてください。エントロピーが低い場合、それはおそらく暗号化されていない可能性があります。エントロピーが高い場合、それはおそらく暗号化されています(または何らかの方法で圧縮されています)。
さらに、これらのツールを使用してファームウェアに埋め込まれたファイルを抽出することができます:
File/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などのツールは、完全なファームウェアエミュレーションを容易にし、プロセスを自動化し、ダイナミック分析を支援します。
実践的なダイナミック分析
この段階では、分析のために実際のデバイス環境またはエミュレートされた環境が使用されます。 OSとファイルシステムへのシェルアクセスを維持することが重要です。エミュレーションはハードウェアの相互作用を完璧に模倣しない場合があり、時折エミュレーションを再起動する必要があります。分析では、ファイルシステムを再訪し、公開されたWebページやネットワークサービスを悪用し、ブートローダの脆弱性を調査する必要があります。ファームウェアの整合性テストは、潜在的なバックドアの脆弱性を特定するために重要です。
ランタイム分析技術
ランタイム分析には、gdb-multiarch、Frida、Ghidraなどのツールを使用して、プロセスやバイナリとその運用環境とのやり取りが含まれます。ブレークポイントの設定やファジングなどのテクニックを使用して脆弱性を特定します。
バイナリの悪用と概念の証明
特定の脆弱性のPoCを開発するには、対象アーキテクチャの深い理解と低レベル言語でのプログラミングが必要です。組み込みシステムのバイナリランタイム保護は稀ですが、存在する場合はReturn Oriented Programming(ROP)などのテクニックが必要になる場合があります。
ファームウェア分析用の準備が整ったオペレーティングシステム
AttifyOSやEmbedOSなどのオペレーティングシステムは、ファームウェアセキュリティテスト用に事前に構成された環境を提供し、必要なツールが装備されています。
ファームウェアを分析するための準備が整ったOS
AttifyOS: AttifyOSは、インターネット・オブ・シングス(IoT)デバイスのセキュリティアセスメントとペネトレーションテストを支援するために設計されたディストリビューションです。必要なツールがすべてロードされた事前に構成された環境を提供することで、多くの時間を節約します。
EmbedOS: Ubuntu 18.04ベースの組み込みセキュリティテストオペレーティングシステムで、ファームウェアセキュリティテストツールがプリロードされています。
練習用の脆弱なファームウェア
ファームウェアの脆弱性を発見するための練習として、以下の脆弱なファームウェアプロジェクトを使用できます。
OWASP IoTGoat
The Damn Vulnerable Router Firmware Project
Damn Vulnerable ARM Router (DVAR)
ARM-X
Azeria Labs VM 2.0
Damn Vulnerable IoT Device (DVID)
参考文献
トレーニングと認定
Last updated