HDDパスワード

HDDパスワードの詳細が知りたくて調べているうちに, c't 8/2005, S. 172: Hard Disk Security という記事を見つけた. 「HDDパスワードを悪意の第三者/ワームに勝手に設定される」というサービス不能攻撃の可能性について 述べた記事だが, HDDパスワードの原理や強度についても言及があり,非常に興味深い内容だった.

以下,内容の要約メモ.


HDDパスワードとは

HDDパスワードはATA規格で定義される「Security Feature Set」という機能と,これをサポートするHDDによって実現されている. HDD自体がサポートしているセキュリティ機能なので,上位のBIOSやOSレベルでの突破は困難で, かなり強力なセキュリティ機構と言える.

かつてはノート用の2.5インチHDDのみがSecurity Feature Setをサポートしていたが,現在では殆ど全てのHDDがこの機能をサポートしている.

HDDパスワードの安全性

HDDパスワードによる保護はHDDのファームウェアによって実現されている. つまり,このファームウェアを上書きできる人はパスワードを迂回できる. 実際に,データサルベージの専門業者の中にはパスワードが設定されたHDDからのデータ救出を 引き受けるところもある (結構な料金を取られるが). 記事のなかで,とあるデータレスキュー会社の言葉として以下の引用がある.

"When we are already familiar with a hard disk model we can do these things quickly. In the case of models unknown to us, it may take us a while, but for the most part our efforts are successful."

「私たちが精通しているモデルのHDDならあっという間に,私たちがよく知らないモデルの場合は 少し時間が掛かるが,大抵はデータを救出できる.」

パスワードの種類

パスワードにはユーザ用のUserパスワードと管理者用のMasterパスワードの二種類がある. UserパスワードはユーザがHDDのセキュリティロックを外すために用いられる. 一方Masterパスワードの持つ権限は,HDDセキュリティのレベル ("High" or "Maximum") によって変化する.

  • レベル "High" の場合

    Master パスワードは User パスワードと同等の能力を持ち, HDD のロックを解除することができる.

  • レベル "Maximum" の場合

    Master パスワードでは普通にセキュリティロックを外すことはできない. Master パスワードでロックを解除したい場合,"Security Erase" コマンドで HDD の内容を全消去してからロックを外す必要がある.

セキュリティレベルは User パスワードの設定時に指定できる.

Security Feature Set セキュリティ機能の有効化/無効化

Security Feature Set のセキュリティ機能は,ATAの "Security Set Password" コマンドを使って User パスワードを設定することで有効になる.

無効化は,HDD が後述するロック解除状態にあるときに"Security Disable" コマンドを発行することによって行なう.

セキュリティ機能的 HDD 状態遷移

セキュリティ機能を有効にした HDD は,内部的に三つの状態 (ロック状態,ロック解除状態,フリーズ状態) を遷移する. それぞれの状態について,また状態間の遷移について,簡単に説明する.

  • ロック状態

    セキュリティ機能が有効になっている場合, マシンがコールドブート (電源off→on, ハードディスクリセット) すると 必ず HDD はロック状態になる. この状態では,HDD はほとんどのATAコマンドを受け付けない.

    "Security Unlock" コマンドに正しいパスワードを指定して発行すると, HDD は次に述べるロック解除状態に遷移する.

  • ロック解除状態

    HDD に対する殆ど全ての処理が出来る状態. 読み書きはもちろん,HDD パスワードの設定・解除といった Security Feature Set に関する処理も可能.

    この状態から "Security Freeze Lock" コマンドを発行すると, 次に述べるフリーズ状態に遷移する. また,マシンをコールドブートすると,当然 HDD はロック状態に遷移する.

  • フリーズ状態

    Security Feature Set の使用を禁止した状態. つまりセキュリティパスワードの設定/変更ができなくなっている. 第三者に勝手にパスワードが設定されないために用意された状態.

    一旦フリーズすると, マシンをコールドブートするまでフリーズ状態は続く.

状態遷移の様子はオリジナル記事の この絵 がわかりやすい.

「勝手にHDDパスワードを設定される」攻撃

マシン起動時にHDDをフリーズ状態にせずに放置しておくBIOSだと,ワームや第三者がOS上からHDDパスワードを勝手に設定できますよ,ということ. オリジナル記事執筆時点では大半のBIOSにこの脆弱性があったらしいが,記事の問題提起をきっかけに各社とも修正中.

ちなみに,自分のマシンの HDD の状態が現在どうなっているかは,Linuxならhdparmの-Iオプションで調べられる. 例えば我が家のVaio

# hdparm -I /dev/hda
....
Security: 
        Master password revision code = 65534
                supported
        not     enabled
        not     locked
        not     frozen
        not     expired: security count
        not     supported: enhanced erase
        30min for SECURITY ERASE UNIT. 

ということで,セキュリティ機能は有効になっていません.

hdparmを使うと,他にもHDDパスワードに関するいろいろな操作が可能. 例えば-FオプションでHDDをフリーズさせたり. 'man hdparm' から Security Feature Set 関連のところを抜粋.

       ATA Security Feature Set
    
       These switches are DANGEROUS to experiment with,  and  might  not  work
       with every kernel.
    
       -F, --security-freeze
              Freeze the drive's security settings.  The drive does not accept
              any security commands until next power-on reset.  Use this func-
              tion in combination with --security-unlock to protect drive from
              any  attempt to set a new password. Can be used standalone, too.
    
       --security-unlock PWD
              Unlock the drive, using password PWD (DANGEROUS).   Password  is
              given  as  an  ASCII  string and is padded with NULs to reach 32
              bytes.  The applicable  drive  password  is  selected  with  the
              --security-mode switch.
    
       --security-set-pass PWD
              Lock  the  drive, using password PWD (Set Password) (DANGEROUS).
              Password is given as an ASCII string and is padded with NULs  to
              reach  32 bytes.  The applicable drive password is selected with
              the --security-mode switch.
    
       --security-disable PWD
              Disable drive locking, using password PWD (DANGEROUS).  Password
              is  given as an ASCII string and is padded with NULs to reach 32
              bytes.  The applicable  drive  password  is  selected  with  the
              --security-mode switch.
    
       --security-mode MODE
              Specifies  which  password  (user/master)  to  select, and which
              security mode (high/maximum) to set.  Only useful in combination
              with  --security-unlock, --security-set-pass, or --security-dis-
              able
                      u       user password, high security
                      U       user password, maximum security
                      m       master password, high security
                      M       master password, maximum security