このハードウェア・ハッキング・シリーズの第 1 回では,ハードウェア・ハッキングの基本的な例をいくつか示し, 脆弱性調査活動においてフラッシュ・メモリの内容を抽出できることがなぜ重要なのかを説明しました.また,ハードウェア・ハッキング活動に必要な主なツールと,プリント回路基板(PCB)のコンポーネントの中からフラッシュ・メモリを特定するための最も効果的なテクニックについても説明します.最後に,前回のブログでは,SPIメモリ・チップの正しいピン・アウトを取得するためのさまざまなテクニックを探りました.
このブログでは,WSONとSOP/SOICという2つの異なる種類のメモリー・パッケージのメモリー内容をダンプする方法を紹介する.
SPIプロトコルのインターフェース信号を理解する
組み込み機器向けのフラッシュ・メモリー・チップのほとんどは,マイクロプロセッサーやマイクロコントローラーとメモリー本体との間の通信ポートとして,シリアル・ペリフェラル・インターフェース(SPI)を活用しています.このインターフェースは1980年代半ばにモトローラによって開発され,標準規格となりました.主にメモリとマイクロプロセッサのインターフェースに使用されていますが,LCD(Liquid Digital Display)やその他多くのアプリケーションにも使用されています.
SPIデバイスは全二重通信を行い,マスター・スレーブ・アーキテクチャで,通常はマスターが1つ,スレーブが1つ以上ある.選択されたスレーブはチップ・セレクト(CS)信号で識別され,マスターの要求に応答する.
通常,SPIインターフェースには8つの信号がある:
- SCLK:シリアルクロック(マスターから出力)
- MOSI:マスター・アウト・スレーブ・イン(マスターからのデータ出力)
- MISO:マスター・イン・スレーブ・アウト(スレーブからのデータ出力)
- CS /SS:チップ/スレーブ・セレクト(マスターから出力)
- VDD:電圧ドレインドレイン(スレーブデバイスの電源オン用)
- GND:グランド・リファレンス
- HOLD:ホールド信号(複数スレーブ通信用)
- WP:ライトプロテクト
WPシグナルとホールドシグナルは,その意味と挙動について深く調査する価値がある.
ライト・プロテクト信号は,メモリへの意図しない書き込みを避けるために使用される.WP信号がアクティブの場合,メモリの内容は変更できず,アクティブでない場合は,メモリの書き込みや消去が可能です.この信号が書き込み/消去動作のみを制御しているように見えても,不正な読み出しからメモリーを保護するためにも使用できるため,ダンプ動作中はこの信号を非アクティブにする必要があります.
HOLD信号は,複数のスレーブ通信で使用します.CS/SS信号と併用することで,1つのスレーブからの通信以外はマスタコントローラでHOLD信号を使用して読み書きを保持することができます.
ダンプ手順の間,この信号は非アクティブに保たれなければならない.

データ抽出用メモリーチップの配線
メモリとPCの間で適切な通信を確立するには,バス・インターフェースを使う必要がある(第1回参照).
図1はSPIフラッシュ・メモリとバス・インターフェース間の正しい配線を示している.MISOとMOSIの接続が反転していることに注意することが重要です.実際,マスター・アウトがスレーブの入力(スレーブ入力)になり,その逆も同様です.
さらに,WP信号とHOLD信号は,3V3(3.3ボルト電源出力,論理1)またはGND(グランド基準,論理0)の両方に接続できる.実際,WP信号がアクティブ・ハイの場合はGNDに,アクティブ・ローの場合は3V3に接続しなければならない.同じ方法はHOLD信号にも有効である.


バスインターフェイスをメモリチップに接続するには,グラバーとSOP/SOICテストクリップの両方を使用することができます.図2aはSOIC/SOPテストクリップの使用法を示し,図2bは一般的なグラバーのオプションを示しています.
フラッシュROMデータの読み出し
これで,ターゲット・メモリのダンプを開始する準備はすべて整った.そのためには,メモリとのSPI通信を正しく処理するために,PC上で動作するソフトウェアが必要となる.このブログでは,フラッシュメモリーの識別,読み出し,書き込み,検証,消去を行うソフトウェア,Flashromを紹介する.これはオープンソースのプロジェクトで,Unixベースのシステム上で動作し,非常に多くのメモリーチップをサポートしている.
ターゲットメモリがFlashromでサポートされているかどうかを確認するには,Flashromのサポートされているハードウェアリストでチップモデルを探すことができる.

この例では,Macronix MXIC MX25L12835F SPIフラッシュメモリを内蔵したAnnke N48PBB Network Video Recorder (NVR)を考えます.
図3からわかるように,MX25L12835FはFlashromでサポートされているので,内容を読み始めることができる.
フラッシュメモリの内容を正しく読み取るために,フラッシュロムは2つの重要なパラメータを必要とする:バス・インターフェースIDとターゲット・メモリ・モデルである.
プログラマーIDパラメーターは,どのバスインターフェースを採用するかによって異なる.今回はSPIプロトコルでメモリと通信するFTDIチップをベースにしたAttify Badgeを使用しました.Flashromのマニュアルでは,この種のバスインターフェイスのプログラマ名はft2232_spi:type=232Hとなっています.
ターゲット・メモリ ID は,Flashrom のサポート・ハードウェア・リストにあるフラッシュ・メモリのモデルである.サポートされているハードウェア・リストから,読み出すチップの名前を特定します:MX25L12835F/MX25L12845E/MX25L12865E.
プログラマーIDを設定できるオプションは-pで,メモリーIDは-cである.
Flashrom コマンドは次のようになります:
flashrom -p ft2232_spi:type=232H -c MX25L12835F/MX25L12845E/MX25L12865E -r image.bin
一方,-rオプションは,Flashromに読み込み操作を指示する.
このコマンドの出力は,最終的にフラッシュ・チップの全内容のダンプとなり,image.binというファイルに保存される.
Verkada IP監視カメラのサンプル分析
ここまで,FlashromがサポートしているSPIメモリの内容をダンプする方法を見てきた.では,Flashromがサポートしていないメモリーチップはどうすればいいのだろうか?

図4にPCBを示したVerkada D40 IP監視カメラを考えてみましょう.PCBを徹底的に分析した結果,HeYangTek HYF2GQ4UAACAEフラッシュメモリを特定することができました.
このメモリチップをさらに詳しく調査すると,3つの問題が浮き彫りになりました:
- メモリはWSONメモリ・パッケージのため,そのピンには簡単に手が届かない;
- マニュアルやデータシートはありません;
- このメモリはFlashromでは正式にサポートしていない.


これらの問題を克服するために,まずPCBからメモリーチップのハンダを外し,メモリーの各パッドに小さなジャンパーワイヤーをハンダ付けし,以前見たようにFlashromで内容を読み取ろうとした.そのチップのメモリーIDがないので,一般的なSPIチップIDをいくつか試してみたが,内容を読み取ることはできなかった.
この時点で,ターゲット・メモリの内容をダンプする唯一の方法は,専用のプログラマを採用することだ.



インターネットでメモリ・モデルを検索したところ,Elnec社のBeeProg2Cがターゲット・チップと互換性があることがわかったので,WSONメモリ・パッケージ用のソケット・アダプタと一緒に購入した.
図6aは,ソケットアダプターが差し込まれたプログラマーを示している.HeYangTekメモリをソケットに挿入した(図6b).最後に,BeeProg2C専用ソフトウェアを通して,その内容を読み取ることができました(図6c).
概要
脆弱性研究は,主に複雑なネットワーク接続デバイスのソフトウェア,機能,システムの研究である.デバイスのファームウェアの分析は,デバイスがどのように振る舞い,どのように様々な入力に反応し, どのように他の周辺システムに影響を与え得るかを理解するために,非常に重要である.しかし,ファームウェアの抽出は,一般的なデバイスの消費者が必要とするスキルではないため, 適切なツールやテクニックがなければ,非常に困難である.
研究者はまた,ファームウェア・チップのピンアウトが十分に文書化されておらず,ファームウェアのコ ンテンツが暗号化されているような場合には,ある程度の探偵的スキルも必要となる.この 2 部構成のブログ・シリーズでは,入手しやすいハードウェアとソフトウェア・ツールを使って,広く使わ れているいくつかのクラスのメモリ・チップに対して,これらの操作を実行するためのテクニックをいくつか示しました.他の設計では,これらの特定のインストラクションをガイドラインとして,若干異なるアプローチが必要になるかもしれません.
あなた自身のファームウェア抽出技術や,研究コミュニティの成功に貢献するかもしれない追加ツールについてのコメントをお待ちしています.
注:Nozomi Networks ,「マスター」と「スレーブ」という用語は使用しないが,このブログではSPIプロトコルの正確な命名法を使用する.