2007年1月


ご覧の皆様、あけましておめでとうございます。
今年もひとつ宜しくお願い致します。地味にね。



さてお正月と言えば、初売りに福袋にと、お買い得感溢れるお買い物ができる時期でもあります。
私も何か面白いモノがないか行ってきました。例によって秋葉ですが。


今時のPCパーツ屋では、店によっては福袋だったり鬱袋だったりを売ってたりしますが、流石にそんなヤバい物を買うだけの度胸もなく、普通の巡回ルートで何か出物がないか見て回ってみました。


すると、やたらと大量の2.5インチHDDをワゴン販売している店を発見。
しかも数と値段がハンパない。

段ボール箱に整然と並べられた、ざっと見て30個あろうかと思われる2.5インチ12GBのHDD。
これがなんと1個250円



確認するまでもなく、明らかに地雷



にしては同じ品物が大量にありすぎるので、どういう呪いが掛けられているのか店員さんに軽く聞いてみたところ、


「いや、いつものようにリースアップのノートPCを仕入れてきたのね、で最近はホラ色々うるさいせいか、結構な割合でBIOSパスワードが掛かってるのよ。それはまあCMOSクリアでOKなんだけどさ、一緒にHDDパスワードも掛かってたみたいでディスク読んでくれないのよ。
CMOSクリアしちゃったからHDDパスワードの情報もすっ飛んでるしね。
そんなディスク持っててもしょうがないから、倉庫の整理がてら初売り企画で一挙放出って訳。
あ、でもちゃんと起動はするしSMARTの値も正常だから、パスワードプロテクトさえ突破できれば使えるかもしれないよ?」


との事。



ふーむ....


正月と言えば、餅に雑煮にお年玉、そして一家揃ってのゲーム。


今年のゲームはこれだ。




毎度の事ながら長い前フリですが、さて行きましょうか。



新春企画!
HDDパスワードを突破する!



予備知識として、HDDパスワードとはなんぞやという点についてまずは説明します。



Compass Secutiy発表資料より。クリックでフルサイズ)

このパスワードロック機能は、ATA-3規格で規定されており、それに準拠したATAハードディスク(大雑把にはUATA33以降)には、だいたいその機能が備わっています。

パスワードは、BIOS設定画面上からセットしたり、あるいは専用のツールを使ってセットすることもできますが、まあ通常はBIOSメニュー上で設定することがほとんどでしょう。特にノートパソコンの場合、BIOS設定画面を見ていくと高確率でHDDパスワードの項目があると思います(BIOSパスワードとセットの場合もある)。

パスワードがセットされたハードディスクを使う際には、まず最初にディスクに対してパスワードロック解除のコマンドとパスワードを投げます。
そしてそれがHDDにセットされたパスワードと合致するとロックが解除され、通常通り使うことができるようになります。

このパスワードロック解除のやりとりはBIOSレベルで行われるため、通常我々が意識する必要はありません(手でいちいち解除する必要は無い)。

また、パスワードロックの影響を受けるのはデータの読み書きコマンドだけなので、それ以外のコマンド(HDDの回転停止コマンドやSMART情報取得系)についてはパスワードが掛かっていても使用できます。

こうすることで、仮に本体が盗難に遭いハードディスクを抜き取られたような場合でも、中の情報を守ることができるという仕掛けです。


なお、セットされたパスワードはHDD上のサービスエリアと呼ばれる所に書き込まれています。したがって、パスワードロックを突破しようと基板交換を行ったとしても無駄です。

また、ローレベルフォーマットをかけたところでも同じです。
ローレベルフォーマットではサービスエリアは初期化されませんからね。



というのがHDDパスワードの仕組み。


ここで重要なのは

  • セットされたパスワードはHDD上に保存されている

という点。つまり、HDDに保存されているパスワード情報を読み出せば、HDDパスワードは突破可能ということです。



ここで疑問に思う方が居るかも知れません。


ロックが掛かっているHDDには、データの読み書きはできなんじゃないの?


yes。その通り。
これ、正確に言うと「ロックが掛かっているHDDのユーザ領域には、データの読み書きはできない」です。

つまり、ロックが掛かっているHDDであっても、サービスエリアについては読み書きが可能なのです。


サービスエリアってのは何かというと、ハードディスク自体のファームウェアが書き込まれていたり、機種情報やシリアルナンバーが書かれていたり、バッドセクタの代替情報が書かれていたり、今回対象となるHDDパスワード情報が書かれていたりするディスク領域のこと。
このサービスエリア領域、別名「negative cilinders」と言われたりしますが、その名の通り通常のディスクアクセスではアクセスはおろかその存在すら見えない領域です。

通常我々がハードディスクに対して読み書きする領域はユーザ領域と呼ばれるエリア。
そしてHDDパスワードでロックされるのも、ユーザ領域に対するアクセスです。



話がそれました。
サービスエリアです。


通常のディスクアクセスではアクセス不可能な領域ですが、逆に考えると通常じゃないアクセスをすればアクセス可能な領域です。


そんな事が可能なのか?
yes。可能です。

ただし、サービスエリアへのアクセス方法がディスクベンダーによって異なるため、ベンダー毎に異なる方法をとる必要がありますし、うまくいく保証は何処にもありません。
以下に紹介する方法は、「今回たまたまうまくいった」というレベルに留めておいてください。


その前に、お断りを。




以下に紹介する内容は、HDDのパスワードロックを解除するという
セキュリティ上かなり問題のある内容となります。
従って、その全てを紹介する事は避け、一部マスクしての紹介となりますことを
予めご了承ください。
また、本件についてのお問い合わせはご容赦ください。
(情報は全てネット上に転がっています)




OK?
よし、レッツゴー。


今回のターゲットは、某社製の2.5インチHDD。
UATA66で12GBのHDDです。

先にも説明したとおり、リースアップ品からの抜き取り品で、HDDパスワードが掛かっており一切のアクセスができません。

こいつをハックしていきます。


ハックするつっても、専用の解析機材に掛けるわけではなく、普通にPCに繋げます。
ここで動作確認がてら、HDDのステータスをチェックするソフトで見てみましょう。


はい、正常に認識されています。
SMARTのステータスも問題なし。ただし、パスワードロックが掛かっています。

ターゲットとなるディスクを選択して、もう少し詳しく見てみましょう。


チェックソフトは、私はHDAT2ってソフトを使っています。
同様のソフトにMHDDってソフトもあります。

これ、MaxtorだとPowerMax、SeagateだとSeaTools、富士通だとFJDTといった、自社製品向けのハードディスク診断ソフトが配布されていますが、あれの汎用版+強化版みたいなディスク診断ツールです。
ディスクのSMART情報表示やローレベルフォーマットといった機能に加え、容量制限が掛かっているディスクの容量制限解除、ディスクセクタの直読み出し、HDDパスワードの設定や解除もできますので、HDDを繋げて怪しいことをするような今回のような場合にはうってつけのツールです。

なお、このツールを持ってしてもサービスエリアの読み書きはできないので注意。


他にどんな機能があるかは上のスクリーンショットを見れば、おおよそ分かるかと思いますが、今回使用するのは「Security Menu」の項目。HDDパスワード関連の設定がここで行えます。


「Secutiy Menu」に入った画面。

いくつかの項目が赤字で表示されていますが、これは現段階では利用できないモード。
既にパスワードが設定されているので、"SET PASSWORD"や"FREEZE LOCK"や"DISABLE PASSWORD"が赤字で表示されています。
これらの項目はパスワードロックを解除してからでないと使えない項目ですからね。


今の状態で使用できるのは、"UNLOCK"(パスワード入力で再起動するまでの間ロック解除。再起動後に使用する際は再度パスワード入力が必要)と"ERASE UNIT"(パスワード入力でHDDをゼロクリア)と"Unlock device"(パスワード入力でロック解除+パスワードロック自体も解除)の3つのみ。何れもパスワード入力が伴います。



さて、それでは "Unlock device"メニューで、ロックを解除してみることにしましょう。



と、さらっと書きましたが、私はこのHDDにセットされたパスワードを知りません。
それでは何故ロック解除メニューを選ぶか、ですが、実はこれまで説明してきませんでしたが、HDDパスワードには2つのパスワードが存在します。

ひとつは、ユーザーが任意にセットできるパスワード。これをユーザーパスワードと言います。
そしてもう一つは、HDDメーカーが出荷時にセットするパスワード。これをマスターパスワードと言います。


つまり、仮にユーザーパスワードが分からなくても、マスターパスワードが分かればロックが解除できてしまいます。
そしてそのマスターパスワードは、製品やメーカー毎に共通のものが使われており、このメーカーのマスターパスワードはこれだ!という情報までもが、まことしやかにネット上に流れています。


そしてその中に今回ターゲットとなるHDDのマスターパスワードも含まれていました
凄いよGoogle先生!


早速マスターパスワード入力モードに変更し、入手したマスターパスワードを入力!
この勝負、もらった!





  ∧_∧  +
 (0゜・∀・)   ワクワクテカテカ
 (0゜∪ ∪ +
 と__)__) +






Aborted command. Press any key...


えーと
これはつまり....


ガセネタって事だな?


        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄



このHDAT2ってソフト、HDDパスワードの入力画面において、他にも数種類のいわゆる "Well-Known Master Password"ってやつがプリセットされており、選択入力できるようになっている(それもどうかと思うが)のですが、その何れを試しても駄目。

他にもそれっぽいパスワードを手打ちで入れてみたりと、あれこれ試してみましたが軒並みNG。
そのうち、HDDパスワードのリトライカウンタに引っかかってしまい...



こんな風にHDDパスワード関連のメニューが全て真っ赤っかになり、操作不能になりました。
"Counter Expired"って書いてあるとおり、HDDパスワードについては規定の回数(通常5回)失敗するとロックがかかり、HDDパスワードの絡みの操作を受け付けなくなります。


こうなったら電源ON/OFFかHDDリセットを行うしかありません。




楽をしちゃ、駄目ってことだね。






さてどうしよう。
頼みの綱のマスターパスワードはガセだったし。




ここで先の内容を思い出して欲しい。


  • パスワードはハードディスク中のサービスエリアに書かれている
  • 通常ではサービスエリアを読み書きすることはできない。が、通常じゃない方法ならば読み書きすることはできる。


これより、


  • 通常ではない方法でサービスエリアにアクセスすればパスワードを読むことができる


という結論が導き出される。




言うは易く行うは難しですが、実際にやってみましょう。
専用のツールを使います。


使用するのは■■■■■■■という怪しいツール。
これはこのメーカーのHDD上にあるサービスエリアにアクセスするソフトで、特定のディスクブロックの内容をファイルに書き出したり、逆にファイルの中身を特定のディスクブロックに書き戻してくれるソフトです。

誤解の無いように書いておきますが、このツールはHDDベンダーが提供しているソフトではありません。
何処かの誰かが、独自に解析したか何かで作ったツールです。
関係ないですけど、HDDハック関連の濃い話題ってどういう訳かロシア方面で盛んなようですね...ロシア語頑張って読んじゃいました(さりげなくヒントを与える優しい俺)。


まずは、ターゲットとなるディスクが繋がっているIDEバスを数字で選択。


ディスクの認識に成功すると、Read/Write/Exitのメニューが出てきます。
ここでrかwを入力すると、何番ブロックを読み書きするか聞かれます。


事前の調査により、このメーカーのこのHDDの場合はマスターパスワードが■■■番ブロックに、また、ユーザーパスワードは■■■番ブロックに記録されているらしいという情報を入手。それを信じて、ここではそのように入力してみます。
今度は頼むよGoogle先生!


rを入力して読み込みモードに入り、その後読み込み対象のディスクブロックを指定。
すると、指定したディスクブロックの内容がファイルとして出力されます。
これを、マスターパスワードとユーザーパスワードの両方に対して行ってみます。


読み込んだのは2ブロックなので、ファイルが2個出来上がりました。


バイナリエディタで見てみましょう。


"SM"で始まっているデータが、マスターパスワード領域とされている領域をダンプしたもの。
そして"SU"で始まっているデータが、ユーザパスワード領域とされている領域をダンプしたものです。


マスターパスワード領域とされている領域が、「SM」で始まり、ユーザーパスワード領域とされているところが「SU」で始まっている...うむむ、怪しい...

M = Master 、U = User って事かい?

実はここに至るまでは半信半疑だったのですが(既にマスターパスワードについてはガセネタを掴まされているだけに)、実際にダンプしたデータを目の当たりにすると、今回はマジネタじゃなかろうかと思ってしまいます。


せっかくなのでちょっと詳しく見てみましょうか。

ATA規格上、パスワード自体は最大32バイトです。しかしダンプしたデータを見てみると、0xFFで埋められていない、有意と思われるデータが37バイト記録されています。
そのうち、最初の"SM"や"SU"は、マスターパスワードかユーザーパスワードかの識別子であると思われます。
そしてそれ以降はヘッダ+パスワードデータ+フッタ(チェックサム?)という構造の様子。
パスワード文字列が生のまま入っているのか、それとも暗号化されて格納されているのかは現段階では不明です(元のパスワード文字列を知らないから)。


また、マスターパスワード領域を見る限り、ネットに流布している情報とは似ても似つかないデータが格納されていました。
やっぱりガセネタかよ.....


で、マスターパスワードとユーザーパスワードの両方のデータ(と思われる物)を見ることができましたが、残念なことにASCII文字ではありませんでした。
つまり、パスワード文字列としてキーボードから文字を入れるのではなく、バイナリデータとしてHEXで流し込む必要があるってこと。
私が使っているHDAT2もMHDDも、HEXでパスワードを入力することは(簡単には)できません。


せっかくここまで来たのに、このままでは引き下がるに引き下がれない。
据え膳食わぬは男の恥。なんとしてでも落としてやるぁ!




そこで取り出したのが、たまたま手元にストックしてあった、同じメーカーの別のHDD。
3.5インチの、同じくATA66ハードディスクです。


こいつはパスワードロックがかかっていないので、これのユーザーパスワード領域をファイルに落とし、そしてその落としたファイルをロックされたHDDに書き込んであげれば、もしかしたらロック解除できんじゃね?


           |
       \  __  /
       _ (m) _ピコーン
          |ミ|
        /  `´  \
         ∧ ∧
        (・∀ ・)
        ノ(  )ヽ
         <  >



そうと決まれば早速実行。
2.5インチHDDを取り外し、繋ぎ変えて例の領域をダンプしてみます。





そしてダンプした結果はこちら!






ていうかこちらも何もねーよって位の夢も希望もないマスクですが、致し方なし!
とりあえず、NO PASSWORDな状態であることがよく分かるバイナリデータでした.....ってことで勘弁してください。




またこのことから、機種は違えど、同じメーカーの、同じ頃のディスクであれば同じ位置にユーザーパスワードデータが格納されているっぽい事が検証できました。
いいよいいよー、ますます期待が高まります。




そして再度繋ぎ変え、今度はファイルから例の領域に書き込みです。


writeメニューを選び、書き込み先ブロックを入力。
拍子抜けするぐらい、さっくり書き込まれます。






書き込みが完了したら、おもむろに再起動。

再起動後、HDATを起動すると!





+   ∧_∧      +      +
    (0゚・∀・) ドキドキ    。
  oノ∧つ⊂)     +
  ( (0゚・∀・) ワクワク     。
  oノ∧つ⊂)     +   +    。
  ( (0゚・∀・) テカテカ     。
  oノ∧つ⊂)        。
  ( (0゚・∀・) ワクワク     +
  oノ∧つ⊂)       。
  ( (0゚・∀・) テカテカ      +
  oノ∧つ⊂)
  ( (0゚-∀-) ワクワク +
  ∪( ∪ ∪            。
    と__)__)










おおおおおっ!パスワードロックの表示が無い!!!!


これは即ち....





                 /\___/\
               / ⌒   ⌒  ::\
  ┏┓  ┏━━┓   | (●), 、 (●)、 :| 
┏┛┗┓┃ ━ ┃┏━|  ,,ノ(、_, )ヽ、,   ::|━━┓ ┏┳┳┓
┣   ┫┃┏┓┃┗━|   ト‐=‐ァ'   :|━━┛ ┗┻┫┃
┗┓┏┛┗┛┃┃   |   |,r- r- |   .:::|      ┏━┛┃
  ┗┛     ┗┛   \  `ニニ´  .:/      ┗━━┛
               /`ー‐--‐‐一''´\



だね!


念のためセキュリティメニューの下を見てみると、


おおっ、寂しいメニュー。
そして光り輝くSecutity Status: disabledの表示!




  /\___/\
/ ⌒   ⌒ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < やるじゃん
|   ト‐=‐ァ'   .::::|    \_____
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\





SMARTの値もチェックし問題ないことを確認。
これにて1個250円のHDDは見事復活を遂げましたとさ。




それにしてもこのオヤジ、ノリノリである。(まるみえ風)








いやあ、新年早々なかなか面白いゲームを楽しむことができました。
これが今回は本当にたまたまツール類が揃ってたから良かったようなものの、いろんな情報が入り乱れ過ぎてどれが本当だか分からない状態になっている某社のディスクや、逆に情報が皆無な某社のディスクだったらと思うと泣きが入ります。
これも一種の運試し、クジ引きってやつですかね。







あ、その後そのディスクはUSBハードディスクケースに装填され、TrueCryptの暗号化ドライブとして余生を送っております。


ケースはもちろん


今年も宜しくお願いします

サングラス変えた?





追記

せっかくなので、ユーザーパスワードがどのように格納されるか覗いてみました。

ユーザーパスワードを "password" としてセット。
そして例の領域をダンプしてみると...


なんと、生パスワードがそのまま格納されていました。


データ構造は、

  • 0x00〜0x01:"SU"の文字列(ユーザーパスワードの識別子?)
  • 0x02〜0x03:何かのデータ(ヘッダ?)
  • 0x04〜0x23:ユーザーパスワードデータ
  • 0x24〜0x27:何かのデータ(チェックサム+フッタ?)
という形式っぽいです。



ただ、実際にノートパソコン等のBIOS画面からHDDパスワードをセットした場合においても、そのセットした文字列がそのままHDDに生書きされるかどうかは怪しいところです。

というのも、今回はツールを使って直接 "password" と言う文字列をパスワードとしてセットしましたが、ノートパソコン等のBIOSがHDDに対してパスワードをセットする際に、何らかの処理をした上でHDDにセットするという可能性もありますからね。
その処理が「暗号化」なのか、ASCIIエンコードではなく「キーボードのスキャンコードを直書き」なのか(他にもまだ種類はあると思いますが)は分かりません。

実際、もともとHDDに掛かっていたパスワードもASCII文字列としては判読不能な値でしたから...



■資料リンク

  • Compass Security AG - ATA Security features
    ATAハードディスクのパスワードについての資料。
    とても良くまとまっていますので仕組みを理解したければ読むべし!
    また、マスターパスワードハックについても記述有り。やはりガセか...
    「マスターパスワードを使ってパスワードロック解除」ってのは都市伝説レベルとして扱った方が良いかもね?

  • HDAT2
    本文中で使用したディスクチェッカHDAT2のサイト。
    "HDAT2 is program for test or diagnostics of ATA/ATAPI/SATA (SATA with NCQ) and SCSI/USB devices."と謳われているとおり、ATAディスクだけでなくSCSIやUSBデバイスのテストも可能。
    オンラインマニュアルもPDFで置いてあるのでどんな機能があるかの確認もできるよ。



なうなう一覧へ