FreeBSDのcamcontrolでSSDをセキュアイレース(Secure Erase)する

  • FreeBSD 12.1-RELEASE
  • Micron RealSSD C400 128GB (C400-MTFDDAK128MAM)
  • CENTURY スライディング裸族 SATA6G (CSDRU3B6G)

今回はUSB接続としたため、secure erase対象のデバイスはda0となっている。ここは適宜読み替えのこと。

まずはデバイスがセキュアイレースに対応しているかどうか調べる。

# camcontrol security da0
pass9: <C400-MTFDDAK128MAM 08TH> ACS-2 ATA SATA 3.x device
pass9: 400.000MB/s transfers

Security Option           Value
supported                 yes
enabled                   no
drive locked              no
security config frozen    no
count expired             no
security level            high
enhanced erase supported  yes
erase time                2 min
enhanced erase time       2 min
master password rev       fffe

特に重要なのは、supported, security config frozen, enhanced erase supportedの項目で、意味は以下のとおり。

  • supported
    • デバイスがセキュアイレースに対応しているか否かを表す。noだったら非対応なのでddでゼロ埋めでもしてください。
  • security config frozen
    • デバイスが凍結状態か否かを表す。yesだと凍結状態なのでセキュアイレースができない。
    • 悪意のあるソフトなどからの意図しないセキュアイレースを防ぐため、通常はPC起動時のPOSTの段階でfrozenされるようになっている。
    • 凍結状態を解除するには、BIOSを抜けた後にデバイスを挿す、ないしマシンをスリープさせ、その間にデバイスの電源ケーブルを抜き差しする必要がある。
      • これが嫌なので本記事ではUSBで後付けにしてるのであーる。
  • enhanced erase supported
    • デバイスが拡張セキュアイレース(Enhanced Secure Erase)に対応しているか否かを表す。
    • secure eraseに加え代替セクタ情報なども含めて丸っと消去する。対応してるなら、こちらを使った方がいいみたい。

以下のコマンドでセキュアイレースが実行できる。

# camcontrol security da0 -U user -s password -e password

パラメータの意味は以下のとおり。

  • -U user
    • securityコマンドの実行ユーザーを指定する。user|masterが指定できるが、基本的にはuserでいいらしい。
  • -s
    • securityコマンドを実行可能状態にする。冒頭ログのenabledをyesとなるような操作を行っている模様。
  • -e
    • セキュアイレースの実行
  • password
    • てきとーにパスワードを設定する。
    • -Uと-sで指定ユーザーに指定パスワードでログインし、セキュリティ関連コマンドを実行するというイメージ。なので-sと-eのパスワードは一致させる必要がある。

実際に実行してみた結果が以下のとおり。

# camcontrol security da0 -U user -s password -e password
pass9: <C400-MTFDDAK128MAM 08TH> ACS-2 ATA SATA 3.x device
pass9: 400.000MB/s transfers

You are about to ERASE ALL DATA from the following device:
pass9,da0: <C400-MTFDDAK128MAM 08TH> ACS-2 ATA SATA 3.x device

Are you SURE you want to ERASE ALL DATA? (yes/no) yes
Issuing SECURITY_SET_PASSWORD password='erase', user='user', mode='high'
Issuing SECURITY_ERASE_PREPARE
Issuing SECURITY_ERASE_UNIT password='erase', user='user'
camcontrol: ATA SECURITY_ERASE_UNIT via pass_16 failed

最後にfailedしてるのは、コマンドがタイムアウトしたためらしい。

camcontrolはデバイスが返すerase time/enhanced erase timeの時間を見てタイムアウト時間を決めているそうだが、割と高確率でタイムアウトが発生する。

以下のコマンドで拡張セキュアイレースが実行できる。

# camcontrol security da0 -U user -s password -h password

パラメータの意味は割愛。セキュアイレースと違うのは-eが-hになっただけ。

# camcontrol security da0 -U user -s erase -h erase
pass9: <C400-MTFDDAK128MAM 08TH> ACS-2 ATA SATA 3.x device
pass9: 400.000MB/s transfers

You are about to ERASE ALL DATA from the following device:
pass9,da0: <C400-MTFDDAK128MAM 08TH> ACS-2 ATA SATA 3.x device

Are you SURE you want to ERASE ALL DATA? (yes/no) yes
Issuing SECURITY_SET_PASSWORD password='erase', user='user', mode='high'
Issuing SECURITY_ERASE_PREPARE
Issuing SECURITY_ERASE_UNIT password='erase', user='user'

Erase Complete

なぜかこちらはタイムアウトすることなく、すぐに終了。対象のデバイスによっても挙動が違うかも?

本当にSecure Erase出来てるかは、正直なところ良くわからない。

デバイスごとに結構挙動が違うようで、今回のRealSSD C400+CSDRU3B6Gの場合、Secure Eraseコマンド発行後はアクセスランプが点滅し何かしら動いてそうではあるが、一晩経っても点滅しっぱなしだった。一方でEnhanced Secure Eraseの方は特に点滅することもなくすぐ終わるし。

ついでにハマったのが、gpartコマンドの挙動。消去できたかの確認でgpart show da0してたんだけど、なぜか一旦デバイスを外さないと情報が更新されなかった。

とりあえずデバイスの先頭1GiBが0になってるのは確認できたので、一応消去はされてるっぽい。

# hd -n 1073741824 /dev/da0
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
40000000
  • freebsd/freebsd_secure_erase_with_camcontrol.txt
  • 最終更新: 2020-04-14 10:54
  • by Decomo