IoTデバイスのファームウェア抽出方法:初心者から上級者までの完全ガイド

ファームウェアの抽出方法

IoTデバイスの脆弱性を見つけるための最初のステップは、そのファームウェアを取得することです。5〜10年前は、メーカーのウェブサイトから簡単にファームウェアをダウンロードできましたが、今ではそうはいかなくなってきました。現在は、一律に通用する方法は存在せず、ファームウェアを入手する手段も非常に簡単なものから難しいものまでさまざまです。

まず、簡単な方法として考えられるのがダウンロードです。もしメーカーが依然として一般向けにファームウェアを提供しているなら、それが一番良いでしょう。また、たとえ公式には提供されていなくても、一部のファームウェアやその断片が漏洩したり、他の場所で入手可能だったりする場合もあります。そのため、GitHubなど特定のプラットフォームで検索してみる価値がありますし、自分の地域の法律に反しない限りはダウンロードしてみると良いでしょう。

ダウンロードする簡単な方法

もし前の方法がうまくいかなかった場合、デバイスに「アップデートをインストール」という光るボタンが一つだけあるなら、押してみる価値はあります。ただし、その前に適切なMITM(中間者攻撃)を行ってトラフィックをキャプチャする準備を整えておくことが重要です。BettercapやMitm-proxyなど、さまざまなツールがあります。この考え方としては、HTTPSが広く普及していても、一部の開発者は依然としてHTTP CDNを使ってアップデートを配信することがあるためです。その場合、トラフィックから更新パッケージを簡単に抽出したり、URLをキャプチャして追跡したりできます。しかし、ターゲットがHTTPSを使用しているとしましょう。そうすると2つの異なるシナリオがあります。

Comparison Table:
ステップ方法詳細利点注意点
ファームウェアの取得ダウンロードメーカーのウェブサイトやGitHubから入手する。公式なソースから簡単に入手できる。最新ファームウェアが常に公開されているとは限らない。
トラフィックキャプチャMITM攻撃の準備BettercapやMitm-proxyを使用してアップデートトラフィックを捕捉する。HTTPSでもHTTP CDNの場合、更新パッケージを抽出できる可能性がある。SSLピンニングによって接続が妨げられる場合がある。
認証後脆弱性探しブラックボックステスト実施認証なしで悪用可能な脆弱性を探すことも一つの手段。低リスクでコード実行につながる隙間を見つけやすい。
ハードウェアアクセス法1UARTシェル利用法UARTポートへの接続でコンソールアクセスを得る方法。 比較的簡単に内部構造の解析が可能になる。
ハードウェアアクセス法2フラッシュチップ読み取りフラッシュメモリから直接内容を読み取る方法.デバイス起動時の信号スニッフィングが有効かもしれない.追加セキュリティ措置に注意が必要。

MITM攻撃によるアップデートプロセスの把握

### 1. 自立したターゲット
ターゲットが独自に機能し、制御のためのモバイルアプリやデスクトップクライアントを持っていない場合でも、自己署名のHTTPS証明書を使用することができるかもしれません。成功する可能性は十分にあります。

### 2. モバイルアプリを持つターゲット
多くのスマートデバイスは自体にはUIを持たず、操作にはスマートフォンアプリが必要です。この場合、ファームウェアのダウンロードがアプリ内で実装されていることがあります。そのため、自分の自己署名ルート証明書を使用しているスマートフォンやエミュレーターにインストールできます。ただし、もしアプリのインターネット接続機能が動作しなくなったら、それはSSLピンニングが使われている可能性があります。もちろん、この問題を回避するためにFridaなどを利用したさまざまなテクニックがあります。

脆弱性を利用したファームウェアのダンプ

もしこれらが不十分なら、逆アセンブルの準備をしなければいけませんね。SSLピンニングの実装方法や、できれば更新自体のダウンロード方法を探して理解する必要があります(時には文字列を抽出するだけでも大きな手助けになります)。## 脆弱性を利用したファームウェアのダンプ:中程度 - ??? あるターゲットは非常に特別な場合もあります。たとえば、開発中のデバイスやソフトウェア更新機能がないデバイス、高額な技術者による認定が必要で、メーカー専用の特別ツールを使わないと更新できないようなデバイスなどです。この場合は、本格的に始まりますよ。

自分で脆弱性を探す低リスクの手法

運が良ければ、あなたのデバイスには未修正の古い脆弱性があって、それを利用してルートシェルや他のコード実行を得て、その内容をダンプできるかもしれません。もしその脆弱性に対する公開エクスプロイトも存在すれば、宝くじを買うことをお勧めします。そうでなければ、自分でエクスプロイトを開発しなければなりませんが、基本的な脆弱性の説明があればそれはずっと簡単です。

### 新しいが低リスクな方法
ほとんどの場合、自分で脆弱性を見つける必要があります。「ファームウェアがないと脆弱性を探せないだろう?」と思っているかもしれませんが、ブラックボックステストは今でも行われています。もちろんファームウェアなしでは難しいですが、少しだけ簡単にしましょう。最も危険視され、価値のある脆弱性は認証なしで悪用できるものです。このタイプの問題は多くのセキュリティ研究者によって探求されており、多くの製造業者もこれらからデバイスを守るために注力しています。しかし、管理者権限など認証後に悪用可能な脆弱性もあります。この場合は攻撃面が広くなる上にターゲットも柔らかいため、低リスクでコード実行につながる隙間を見つけやすくなることがあります。その結果としてファームウェアをダンプしてより興味深いものを探し出すチャンスがあります。

## ハードウェイ:中程度から非常に難しい
ハードウェイは一般的には難易度が高いですが、それでも前述した選択肢より簡単になる場合もあります。これは主に2つのカテゴリーに分類されます:ハードウェア脆弱性の発見とそれを書き込むフラッシュストレージから直接読み取る方法です。

### ハードウェア脆弱性
ここでは特にUARTシェルやJTAG/SWDなど露出したデバッグインターフェースについて関心があります。

#### UARTシェル
UARTインターフェースはIoTデバイスによく見られ、診断用としてアクセス可能になっていることがあります。これらのUARTポートへ接続することで、ときにはコンソールアクセス(つまりroot/ブートローダーシェル)を得られることがあります。

ハードウェア的な手法とは何か

このプロセスの鍵は、TX、RX、およびGNDピンを特定することにあります。それから、シリアル-USB変換器を使い、ターミナルエミュレーターでデバイスと通信を行うことで、このIoTデバイスの内部構造を解明するための第一歩となります。この方法は比較的簡単で効果的な手段と言えるでしょう。

UARTシェルへのアクセス方法

チップレベルでのテストとデバッグを目的として設計されたこれらのインターフェースは、デバイスのCPUに低レベルでアクセスすることを可能にします。まず最初に、詰め込まれたPCB上でJTAGまたはSWDピンを特定することが重要です(もちろん、それらが公開されている場合ですが)。次に、J-LinkやST-Linkなどのデバッガーと接続します。接続が完了すると、ファームウェアの実行を停止したり、メモリを検査したりできるようになります。一部のメーカーはこのことを認識していて、これらのインターフェースを無効化したり隠したりしている場合がありますし、パスワードで保護することもあります。しかし、逆に言えば、一部はそうではありません。そして私たちがハッカーならば、その挑戦には必ず取り組むでしょうね。

JTAG/SWDインターフェースの活用法

私たちが探しているこの素晴らしいファームウェアは、どこかに保存されているはずです。大多数のスマートデバイスでは、それはフラッシュチップに格納されています。そこに保存されていれば、読み出すことも可能です。実際、ターゲットデバイスのCPUが起動するときに行っている作業も同じです。しかし、私たちはCPUにはアクセスできないため、別の方法を見つける必要があります。それはチップと直接インターフェースするか、基板からフラッシュチップを取り外して特別な装置で読み出すことです。この際には信号品質を確保するために適切なケーブルやコネクタを選ぶことが重要であり、ターゲットボードとの接続時にはピン配置や電源供給の確認も忘れずに。また、デバッグ中にはオシロスコープを使って信号波形を観察し通信エラーの原因を突き止めることが効果的と言えます。このようなハードウェア環境の最適化が成功への鍵となります。

フラッシュメモリからファームウェアを直接読み取る技術

フラッシュチップは、CPUやMCU、SoCとSPIのようなプロトコルを使って通信します。これらのプロトコルは標準化されているため、私たちも利用できます。デバイスが起動すると、そのCPUはフラッシュメモリから読み取ります。このタイミングはロジカルアナライザーを使用してデータをスニッフィングする絶好の機会です。ただし、注意点があります。それは、デバイスによってファームウェアの一部しか読み取れない場合があるということです。全体を読み出すためには、チップへの完全な制御が必要になるかもしれません。そしてもちろん、フラッシュチップは動作するために電源が必要です。チップの一部を取り外さずにその脚に電源を供給すると、基板全体が起動してしまい、あなたとCPUとの間でフラッシュメモリをめぐる「引き合い」が発生する可能性があります。その対策として、一つの方法はVCC脚だけを外すことですが、この手法は手間が少ない反面、チップにダメージを与えるリスクもあります。またもう一つのアプローチとしては、チップ全体を取り外すことで、それによってフラッシュプログラマーで使いやすくなるでしょう。

特殊な保護機能に対抗するための戦略

QFP(クワッドフラットパッケージ)のフラッシュチップを取り外すプロセスは、基板やチップ自体を損傷することなく、慎重にハンダを加熱して行います。チップが外れた後は、フラッシュプログラマを使用してその内容を読み取ることができます。一つの工夫として、低融点合金を使用する方法があります。この技術では、特別な合金をチップの脚部に適用します。この合金は標準のハンダと混ざり、その全体の融点が下がります。これにより、周辺エリア全体を小さな炎のように高温にせずにチップを持ち上げることができるのです。

次に、BGA(ボールグリッドアレイ)パッケージでのeMMCフラッシュには独自の課題があります。BGAパッケージの脱ハンダは精密さと技術力が要求されます。というのも、ソルダーボールはチップの下側にあり、一様に加熱することが難しく、それによってチップや基板を損傷しないよう注意しなければならないからです。取り外した後は、BGAソケットアダプタまたは直接ハンダ付け方式でフラッシュリーダーと接続します。この手法には専門的な機器と安定した手元が必要ですが、それでもファームウェアへ直接アクセスするためには信頼できる方法と言えます。

さらに、この作業は前述よりも難易度が高いだけでなく、コスト面でも厳しいかもしれません。それというのも、新しいUFS(ユニバーサル フラッシュ ストレージ)は、高速なプロトコルであるため、そのプログラム装置は非常に希少で高価です。「ガレージ」で誰かが低コストなUFSプログラマーをDIYする可能性もありますが、とりあえず今あるものでは対応しきれません。また、一部の場合ではメーカーによって追加セキュリティ措置—例えば読出保護やファームウェア暗号化など— が実施されています。こうした対策にはより繊細なアプローチが求められ、それぞれ異なる手法や組み合わせとなります。そのため、ハードウェアおよびソフトウェア逆解析スキルとの融合によってこれら保護機能へのバイパス技術も駆使されます。しかし、その分挑戦的なのもまた楽しいところですね。

Related to this topic:

Comments

  1. Guest 2025-06-11 Reply
    ちょっと気になるんですけど、こういった技術的な探求って、合法的な範囲内でやるんですよね?セキュリティリサーチって面白そうだけど、倫理的な線引きが難しそう…