PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

HDDの中身をのぞく:ファームウェア解析と改造の第一歩

記事のキーポイント

HDDのファームウェアって、そんなに触れるものなの?

この記事は、HDDやSSDの「firmware hacking」を扱った連載の第1回です。
firmwareというのは、ざっくり言うと機器の中で動いている制御用プログラムのこと。スマホやルーターでも同じですが、HDD/SSDの場合は「ただ回る円盤」や「ただの保存箱」ではなく、内部でかなり複雑な制御が走っています。

image_0001.png

筆者はもともとXbox 360向けのexploitを研究していて、その中でHDDの応答を少し遅らせたいという欲求にぶつかります。
理由は、あるrace condition(競合状態)を狙うため。race conditionは、​処理のタイミング次第で成功したり失敗したりするバグです。こういう攻撃は、数十ミリ秒〜数百ミリ秒の差で成否が変わるので、かなりシビアです。

そこで筆者は、「いっそHDDのfirmwareをいじって、特定のsector(記憶領域の区画)を読むときだけ少し待たせればいいのでは?」と考えます。
この発想、かなり荒っぽいけど筋は通っていて、私はちょっと好きです。攻撃を成立させるために“周辺機器そのもの”を操ろうとするのは、いかにも低レベル攻撃の世界という感じがします。

image_0002.png

まずは対象ドライブ集め

筆者が用意したのは、主に次のドライブです。

image_0003.png

Xbox 360で使われる可能性が高いドライブを優先しつつ、Western Digitalは過去にvendor command​(メーカー独自コマンド)で低レベルアクセスできる話があるので選定。
Samsung SSDも手元にあったため対象に含めています。

ここで重要なのは、ただ「firmwareがある」だけではダメで、

image_0005.png

  1. firmwareを入手する
  2. 解析できる形にする
  3. 改造したものを書き戻せる

image_0006.png

この3つ全部が必要なことです。
特に3番目、​書き戻しができないと、どれだけ逆解析しても実験になりません。ここが地味に最大の壁ではないかと思います。

いちばん大事なのは「読めるようにする」こと

筆者の作戦はかなり王道です。

image_0007.png

ここで出てくるIDAは、​バイナリ解析ツールです。要するに、コンパイル後の機械語を人間が追える形に見せてくれる道具です。
こういう作業は、見た目はハッカーっぽいですが、実態はかなり「地道な考古学」です。1行のコードを見つけるために何時間も掘る。私はこの泥臭さこそ逆解析の本質だと思っています。

image_0009.png

firmwareの入手方法がまた渋い

筆者はHDD Guruフォーラムなどを調べ、過去のdumpデータや知見を集めます。

特に便利だったのが、​PC-3000という業務用データ復旧ツールの存在です。
これはメーカー独自コマンドを使ってHDDを診断・修復したり、firmwareをdumpしたりできる高級機材。一般ユーザーにはまず縁がないですが、こういう世界では本当に強い味方です。

image_0011.png

収穫はこんな感じです。

image_0012.png

Samsung PM871aの件が特に面白いです。
firmware update utilityを解析すると、​firmware本体だけでなく、書き込みに必要な手順まで分かることがあるからです。つまり「ただ配るツール」に見えて、実は復号やflashのヒントが詰まっているわけです。これはかなりおいしい。OEMサイトの更新ツールは、逆解析者にとって宝箱ではないかと思います。

image_0013.png

Western Digital編:圧縮されたfirmwareをほどく

WDのfirmware imageは、最初は単純な構造に見えます。
ざっくり言うと、​ヘッダ付きのセクションが並ぶフラットなファイルです。各セクションには8-bit summationのchecksumも付いていて、壊れていないか確認できるようになっています。

ところが、開いてみると最初のセクション以外は圧縮されていました。
ここで出てくるのが、最初のセクションに入ったloader stubです。これは、HDDのbootloaderが最初に動かし、残りのセクションを解凍してメモリに展開するための小さな起動用コードです。

image_0014.png

筆者は圧縮ツールで正体を当てようとしますが失敗。そこで、いっそloader stub自体をARMコードとしてIDAで追います。
結果、圧縮関数を発見し、再実装に成功します。

判明したのは、​LZHUF系の圧縮でした。
ただし通常のLZHUFから少し手が入っていて、

image_0015.png

image_0016.png

という変更がありました。
この「ちょっと変えてあるせいで自動判定ツールが外れる」感じ、実務っぽくて非常にリアルです。逆に言うと、こういう小改変があるだけで市販ツールは簡単に役立たなくなる。低レベル世界は本当に容赦がないです。

最終的に筆者はIDA loader scriptを更新し、WD firmware全体を正しいbase addressで展開して解析可能にしました。
ここまで来ると、やっと「土俵に立った」感じですね。

image_0017.png

Samsung PM871a編:OEMの更新ツールは解析の鍵

Samsung SSDのfirmwareは、しばしば暗号化や難読化されています。
そのため、ただfirmware imageを見つけるだけでは足りず、​update utilityがどうやって復号しているかが重要になります。

筆者が見つけたLenovoの更新ツールには、次の2つの価値がありました。

image_0018.png

これ、かなり強いです。
単にファイルを盗み見るのではなく、「公式ツールの動きを観察してプロトコルを抜く」わけですから。私はこのやり方、かなり賢いと思います。合法・違法の話はさておき、技術的にはとても美しい。

image_0019.png

記事では、Samsung firmwareを解除するためのbit fiddling系アルゴリズムの逆解析が進められています。
bit fiddlingというのは、​ビット単位での細かい入れ替えや変換のこと。暗号というほど重厚でなくても、こうした軽い難読化で外から見えなくすることはよくあります。

image_0020.png

この記事の面白さは「目的が変わっていく」ところ

元々の目的は、Xbox 360 exploitのためにHDDの応答を少し遅らせたい、というかなり実用一点張りのものでした。
でも、調べているうちに筆者は完全にfirmware hackingの沼へ入っていきます。

この流れがすごく自然で、読んでいて楽しいんですよね。

image_0021.png

こうなると、もはや単なる回避策探しではなく、​機器の内部構造そのものを理解する研究になっています。
私はこういう「問題を解くつもりが、気づけば世界の見え方が変わっている」タイプの話が大好きです。

image_0022.png

ここでわかること

この第1回で特に重要なのは、firmware hackingが「魔法」ではなく、かなり手順化された作業だという点です。

image_0023.png

順番にやれば前に進む。もちろん簡単ではないですが、いきなり“神業”をやっているわけではありません。
そして、ドライブの種類ごとに事情が違うので、過去の情報がそのまま通じるとは限らない。ここも実に厄介です。

image_0026.png

この記事はその入口として、「何を見ればいいか」「どこで詰まりやすいか」をかなり具体的に示しています。
技術者目線ではもちろん、一般読者にとっても「ハードディスクの中には、こんなに複雑な制御が入っているのか」と驚ける内容だと思います。

総評

個人的には、この第1回は**“HDDの中身をいじる話”というより、“低レベル機器解析の入り口を丁寧に見せてくれる話”**としてかなり面白いです。
特に印象的なのは、筆者が「まずは動く1台を見つける」という現実的な姿勢を崩していないこと。派手な攻撃より、地道なdumpと逆解析で突破口を作る。この手触りがいい。

image_0027.png

そして何より、HDDやSSDがただの記録媒体ではなく、​**独自のCPU、圧縮データ、更新プロセス、メーカーコマンドを持つ“小さなコンピュータ”**だと分かるのが楽しいです。
見慣れた機器が、急に別物に見えてくる。こういう瞬間が、ハードウェア逆解析の醍醐味ではないでしょうか。


image_0041.png

参考: HDD Firmware Hacking Part 1

同じ著者の記事