IoT およびOT デバイスの脆弱性研究は,Nozomi Networks Labs の主な活動のひとつです.このユニークな焦点により,私たちは業界に対して価値あるサイバーセキュリティの貢献をすることができます.私たちの主な目標は,電力網,製造工場,輸送システム,スマートシティ,ヘルスケアなどの重要なOT およびIoT インフラにおけるデバイスのセキュリティを高めることです.この挑戦で成功するために,私たちはハードウェアとソフトウェアの両方のコンポーネントに研究を集中し,ハッカーにリアルタイムプロセスを混乱させる攻撃ベクトルを与える可能性のある脆弱性を発見しようとしています.
サイバーセキュリティ研究にとって最も困難な活動のひとつは,OT デバイスの基本的なファイルシステムにアクセスして,デバイスの操作と潜在的な攻撃ベクトルを完全に分析することである.デバイスのファームウェアは,通常,インターネット上では一般に公開されておらず,ベンダ ーから提供されている場合でも,多くの場合,独自のアルゴリズムで圧縮されているか,あるいは暗号化 されている.このブログでは,ハードウェアから直接ファームウェアを抽出し,フラッシュ・コンテンツを読 み取るためのテクニックを説明する.この情報は,IT やOT のエンジニアが,ネットワーク・デバイスを保護するのに役立つセキュリ ティ情報を得るのにも役立つだろう.
この 2 部構成のブログ・シリーズの第 1 部では,フラッシュ・メモリ・ファームウェアのダンプ の背後にある基本的なコンセプトについて,様々なユースケースとプロセッサをカバーする実際 的な例を挙げながら説明する.
フラッシュメモリーのパッケージの種類
PCBに実装される電子部品には,その部品をPCBにはんだ付けするためのハードウェア・インターフェースがあります.このブログでは,PCB実装メモリ・デバイスに使用される最も一般的な3つのパッケージ設計を紹介します.



小外形集積回路(SOIC)パッケージ(図1a)は,特に小型の組み込みデバイスで最も一般的である.標準的な形は平らな長方形のボディで,リードが2つの側面から伸びている.リードは,PCBへの組み立て時にしっかりと固定できるよう,ガルウィング状に形成されている.この種のパッケージは,ファームウェア・ダンプのプロセスを簡素化する.なぜなら,ピンをグラバーと呼ばれるツール(ブログの後半で紹介)でつかむことによって,簡単にプローブできるからである.
極薄小型ノーリード(WSON)パッケージ(図1b)は,SOIC設計に比べてわずかに薄い.長方形からリードが伸びる代わりに,いくつかの導電パッドがあります.脆弱性リサーチャーにとって,このパッケージは,グラバーが使えないため,メモリの内容を読み取るのに若干の困難を伴う.代わりに,いくつかのジャンパーをはんだ付けするか,PCBからメモリをはんだ付け解除しなければならない.
最後のパッケージはBGA(Ball Grid Array)である(図1c).これは集積回路に使用される表面実装パッケージの一種で,デュアル・インライン・パッケージやフラット・パッケージに搭載できるよりも多くの相互接続ピンを提供できる.SOICやWSONとは異なり,BGAパッケージはデバイスの底面全体を使用できる.
このパッケージのピンは,PCB の上面からアクセスできないため,プローブするのが最も難しい.PBCの裏側からアクセス可能でない限り,パッケージのピンアウトにアクセスする唯一の方法は,PCBからメモリを半田付け解除し,ソケットアダプターに入れることである.
ファームウェアはどこにある?フラッシュメモリーの認識方法
フラッシュ・メモリがどのようなものか分かったので,ターゲット・デバイスのPCBを分析し,PCB上の数百のコンポーネントの中からメモリを見つけよう.通常,ファームウェアを含むフラッシュ・メモリは,シリアル・ペリフェラル・インターフェース(SPI)を通じてCPUと通信します.SPIは8ピンのインターフェースを使用するので,8ピンのフラッシュメモリチップを探す必要がある.
下の図2は,Annke N48PBBのPCBを示しており,これを解析してフラッシュ・メモリーを見つける.


8ピンの部品を探し始めましょう.良い候補が赤丸でハイライトされています.この部品をよく見ると,Macronix MXIC MX25L12835Fフラッシュメモリーであることがわかる.そのマニュアル(インターネット上で見つかる)から,通信プロトコルとしてSPIをサポートしていることが読み取れる.PCB上に他のメモリー・コンポーネントがないことから,これがターゲットであることは間違いない.このブログ・シリーズのパート2では,その内容を読み取る方法を説明する.
プロのアドバイスPCB上の部品が摩耗してラベルが読めないことがある.アルコールをしみこませた綿で部品の表面を拭いて乾かし,チョークの粉をまぶしてください.余分なチョークの粉を取り除くと,読めるようになります!
拡大レンズ
箱を開けてプリント基板にたどり着くと,プリント基板にはんだ付けされた部品はどれも非常に小さく,ラベルも読みにくいことに気づく.良い拡大レンズは,部品に印刷された情報を読むのに役立ちます.以下は拡大レンズの例です:


はんだ付け・はんだ吸取ステーション
WSONまたはBGAパッケージを扱う場合,いくつかのジャンパーをはんだ付けするか,PCBからフラッシュメモリーを完全にはんだ除去する必要があります.ホットエアーはんだ吸取器付きの優れたはんだ付けステーションをお勧めします.部品を損傷しないように,はんだ先とはんだ吸取器の温度を設定できるはんだ付け/はんだ吸取ステーションを必ず購入してください.

マルチメーター
優れたマルチメーターは,特にフラッシュ・メモリーのパッドにジャンパーをはんだ付けする際に,はんだ付け箇所が適切に接続されているか,パッド間に接触がないかをチェックするのに非常に役立ちます.

グラバーとSOICクリップ
前述したように,SOICパッケージを扱う場合,フラッシュ・メモリのピンをプロービングする時間を大幅に節約できるツールがいくつかある.


図7aにグラバーの例を示します.ピン実装の集積回路の1ピンをプローブできるので,プローブするピンごとに十分な数のグラバーが必要です.ピンが近接しているため,SOICクリップ(図7b)を使用する方が簡単かもしれません.SOICクリップは端が小さく,ピンの間隔にぴったり合います.もう一方の端には端子があり,ジャンパーとともに,クリップをバス・インターフェースまたはデジタル・アナライザに接続するために使用することができます.
バス・インターフェース
バス・インターフェースはハードウェア・ハッキングの基本ツールです.メモリパッケージのピン/パッドをインターフェースの入力/出力に接続することで,チップからメモリの内容を読み出します.バス・インターフェースは,ピンまたはパッド・パッケージを扱う場合に使用できますが,適切なアダプターがなければ,BGAメモリでは実現できません.
インターネットを見ると,これらのバス・インターフェースにはいくつかのモデルがある.それぞれのモデルは,サポートする通信プロトコルに違いがある.通常,小さなファームウェア・メモリを持つデバイスは,SPIプロトコルで通信するメモリを内蔵しているため,少なくともそのプロトコルをサポートするバス・インターフェースを見つける必要がある.
私たちの研究室にあるバス・インターフェースの例をいくつか紹介しよう:


ピンアウトデータシートがなくても正しいピン配置を得る方法
インターネット上にドキュメントのないフラッシュ・メモリー・チップを扱わなければならないことがある.この場合,バス・インターフェース・カードをどのように接続すればいいのか,パッケージのピンアウト仕様がわからない.
先に見たAnnke N48PBBの使用例を考えてみよう.Macronix MXIC MX25L12835Fメモリのデータシートがないと仮定します.このフラッシュ・メモリが8ピンSOICパッケージであることはわかっていますが,ピン配置もサポートする通信プロトコルもわかりません.そのため,手始めにいくつかの推測をしなければならないかもしれない:SPIで通信し,ピンアウトが一般的なSOIC準拠パッケージの標準的なものであるかどうかを見てみましょう.


上の図は,フラッシュ・メモリーのピン配列(図9a)と,正しい向きを強調するための近接した図(図9b)である.
プロのアドバイスPCBに実装された部品の片隅には,小さな円があります.ピンアウトを正しく識別するためには,回路図と実際の部品の両方で同じ位置に円の向きを合わせることが重要です.
このピン配置は単なる仮説に過ぎないので,各ピンのスイッチング・アクティビティを測定して,仮説を確認する必要がある.そのためには,ロジックアナライザーを使えばよい.

フラッシュ・メモリーの各ピンがロジック・アナライザーに接続されたので,電圧値の測定を開始し,ピン・アウトの最初のアイデアを得ることができる.

図11は,ロジックアナライザの最初のキャプチャである.この最初の解析では,メモリが使用する電圧を理解できるように,すべてのチャンネルをアナログモードに設定した.縦の赤い線は,デバイスの電源が入った瞬間を表している.
さっそくテストしてみよう.図9a(上のピン配置図)から,4番ピンをGNDと仮定します.チャンネルA3(4番ピン)は常に0Vなので,これで確認できました.
同様に,#7 ピンと#8 ピンは常に 3.3V である.これにより,#8 ピンが VCC であることと,#7 ピンが RESET(アクティブロー)であることの両方が確認できる.8つのアクティブチャンネルを持つロジックアナライザのサンプリング周波数は,RESET信号の数サイクルの遅延を見るには低すぎることに注意してください.

さらに,チャンネル5(ピン番号6)をデジタル・モードに設定し,それを拡大すると,上の図12のようになる.ここで,6番ピンがSCLK(シリアルクロック)ピンであることが確認できる.
これで仮説を確認するのに十分な要素が揃った.実際に内容を読み進める前に,ダブルチェックをしよう.ほとんどのロジック・アナライザー・アプリケーションは,SPIを含む一連のプロトコルをデバッグする機能を提供している.
そこで,SPIプロトコルアナライザに,これまで持っていた情報(SCLK,RESET,VCC,GND)と,現在想定している情報(SI,SO,CS)を入力する.書き込み禁止信号はSIと同じく入力なので,出力として検出することはできない.

上の図13からわかるように,SPIアナライザ・ツールは我々の推測を裏付けている.実際,SPIメモリが何を発信しているかを読み取ることができる.
これでようやく,メモリの内容を読み取り,ファームウェアをダンプする準備が整った!次回のブログでは,実際のユースケースに基づいた,完全なメモリ・ダンプ手法の例をいくつか示します.
パート2はこちらからお読みいただけます:"脆弱性研究のためにOT デバイスからファームウェアを抽出する方法"