Firmware Analysis
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
ファームウェアは、デバイスが正しく動作するために必要なソフトウェアであり、ハードウェアコンポーネントとユーザーが対話するソフトウェア間の通信を管理し、促進します。これは永続メモリに保存されており、デバイスが電源を入れた瞬間から重要な指示にアクセスできるようにし、オペレーティングシステムの起動につながります。ファームウェアを調査し、潜在的に修正することは、セキュリティの脆弱性を特定するための重要なステップです。
情報収集は、デバイスの構成や使用されている技術を理解するための重要な初期ステップです。このプロセスには、以下のデータを収集することが含まれます:
CPUアーキテクチャと実行されているオペレーティングシステム
ブートローダーの詳細
ハードウェアレイアウトとデータシート
コードベースのメトリクスとソースの場所
外部ライブラリとライセンスの種類
更新履歴と規制認証
アーキテクチャ図とフローダイアグラム
セキュリティ評価と特定された脆弱性
この目的のために、**オープンソースインテリジェンス(OSINT)**ツールは非常に貴重であり、手動および自動レビュープロセスを通じて利用可能なオープンソースソフトウェアコンポーネントの分析も重要です。Coverity ScanやSemmleのLGTMのようなツールは、潜在的な問題を見つけるために活用できる無料の静的分析を提供します。
ファームウェアを取得する方法はいくつかあり、それぞれ異なる複雑さがあります:
ソースから直接(開発者、製造業者)
提供された指示から構築する
公式サポートサイトからダウンロードする
ホストされたファームウェアファイルを見つけるためにGoogle dorkクエリを利用する
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ファイルシステムを切り出します。
代わりに、次のコマンドを実行することもできます。
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
squashfs(上記の例で使用)
$ unsquashfs dir.squashfs
ファイルはその後「squashfs-root
」ディレクトリにあります。
CPIOアーカイブファイル
$ cpio -ivd --no-absolute-filenames -F <bin>
jffs2ファイルシステムの場合
$ jefferson rootfsfile.jffs2
NANDフラッシュを使用したubifsファイルシステムの場合
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
ファームウェアが取得されたら、その構造と潜在的な脆弱性を理解するために解剖することが重要です。このプロセスでは、さまざまなツールを利用してファームウェアイメージから貴重なデータを分析および抽出します。
バイナリファイル(<bin>
と呼ばれる)の初期検査のためのコマンドセットが提供されています。これらのコマンドは、ファイルタイプの特定、文字列の抽出、バイナリデータの分析、パーティションおよびファイルシステムの詳細の理解に役立ちます:
画像の暗号化状態を評価するために、エントロピーはbinwalk -E <bin>
でチェックされます。低エントロピーは暗号化の欠如を示唆し、高エントロピーは暗号化または圧縮の可能性を示します。
埋め込まれたファイルを抽出するために、file-data-carving-recovery-toolsのドキュメントやファイル検査のためのbinvis.ioなどのツールとリソースが推奨されます。
binwalk -ev <bin>
を使用することで、通常はファイルシステムを抽出でき、しばしばファイルシステムタイプ(例:squashfs、ubifs)にちなんだ名前のディレクトリに抽出されます。しかし、binwalkがマジックバイトの欠如によりファイルシステムタイプを認識できない場合、手動抽出が必要です。これには、binwalk
を使用してファイルシステムのオフセットを特定し、その後dd
コマンドを使用してファイルシステムを切り出します:
その後、ファイルシステムのタイプ(例:squashfs、cpio、jffs2、ubifs)に応じて、異なるコマンドを使用して手動で内容を抽出します。
ファイルシステムが抽出されると、セキュリティの欠陥を探す作業が始まります。注意が払われるのは、安全でないネットワークデーモン、ハードコーディングされた認証情報、APIエンドポイント、アップデートサーバーの機能、未コンパイルのコード、スタートアップスクリプト、およびオフライン分析のためのコンパイル済みバイナリです。
確認すべき主要な場所と項目には以下が含まれます:
ユーザー認証情報のためのetc/shadowとetc/passwd
etc/ssl内のSSL証明書と鍵
潜在的な脆弱性のための設定ファイルとスクリプトファイル
さらなる分析のための埋め込まれたバイナリ
一般的なIoTデバイスのウェブサーバーとバイナリ
いくつかのツールがファイルシステム内の機密情報や脆弱性を明らかにするのを助けます:
LinPEASとFirmwalkerによる機密情報の検索
The Firmware Analysis and Comparison Tool (FACT)による包括的なファームウェア分析
FwAnalyzer、ByteSweep、ByteSweep-go、およびEMBAによる静的および動的分析
ファイルシステム内で見つかったソースコードとコンパイル済みバイナリは、脆弱性のために精査されなければなりません。Unixバイナリ用のchecksec.shやWindowsバイナリ用のPESecurityのようなツールは、悪用される可能性のある保護されていないバイナリを特定するのに役立ちます。
ファームウェアをエミュレートするプロセスは、デバイスの動作または個々のプログラムの動的分析を可能にします。このアプローチは、ハードウェアやアーキテクチャの依存関係に関して課題に直面することがありますが、ルートファイルシステムや特定のバイナリを、Raspberry Piのような一致するアーキテクチャとエンディアンネスを持つデバイスや、事前構築された仮想マシンに転送することで、さらなるテストを促進できます。
単一のプログラムを調査するためには、プログラムのエンディアンネスとCPUアーキテクチャを特定することが重要です。
MIPSアーキテクチャのバイナリをエミュレートするには、次のコマンドを使用できます:
必要なエミュレーションツールをインストールするには:
For MIPS (big-endian), qemu-mips
が使用され、リトルエンディアンバイナリの場合はqemu-mipsel
が選択されます。
ARMバイナリの場合、プロセスは似ており、エミュレーションにはqemu-arm
エミュレーターが利用されます。
Firmadyne、Firmware Analysis Toolkitなどのツールは、フルファームウェアエミュレーションを容易にし、プロセスを自動化し、動的分析を支援します。
この段階では、実際のデバイス環境またはエミュレートされたデバイス環境が分析に使用されます。OSとファイルシステムへのシェルアクセスを維持することが重要です。エミュレーションはハードウェアの相互作用を完全に模倣できない場合があるため、時折エミュレーションを再起動する必要があります。分析はファイルシステムを再訪し、公開されたウェブページやネットワークサービスを利用し、ブートローダーの脆弱性を探るべきです。ファームウェアの整合性テストは、潜在的なバックドア脆弱性を特定するために重要です。
実行時分析は、gdb-multiarch、Frida、Ghidraなどのツールを使用して、プロセスまたはバイナリとその動作環境で相互作用し、ブレークポイントを設定し、ファジングやその他の技術を通じて脆弱性を特定します。
特定された脆弱性のPoCを開発するには、ターゲットアーキテクチャの深い理解と低レベル言語でのプログラミングが必要です。組み込みシステムにおけるバイナリ実行時保護は稀ですが、存在する場合は、リターンオリエンテッドプログラミング(ROP)などの技術が必要になることがあります。
AttifyOSやEmbedOSなどのオペレーティングシステムは、必要なツールを備えたファームウェアセキュリティテストのための事前構成された環境を提供します。
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)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)