「Tiny Core Linux 7をUSBメモリにインストール」で作ったTiny Core LinuxでSecure Eraseを使ったHDDのデータ消去です。
いつ頃から分からないですがATA規格のHDDにはSecure Eraseという削除機能がHDD自体に搭載されていて、それを使えばデータ消去ができるようです。というわけで今回はSecure Erase機能を使ってデータ消去を行なってみようと思います。
hdparmのインストール
LinuxでSecure Eraseを行うにはhdparmコマンドを使います。しかしTiny Core Linux標準のhdparmは機能が限定されていてSecure Eraseを行うことができないためパッケージ版のhdparmをインストールします。
$ tce-load -wi hdparm
Secure Eraseが使えるのかの確認
よほど古くなければ対応していると思うのですが、念のため対象のディスクがSecure Eraseに対応しているかを確認します。
$ sudo hdparm -I /dev/sda
(省略)
Security:
Master password revision code = 65534
supported
not enabled
not locked
frozen
not expired: security count
supported: enhanced erase
84min for SECURITY ERASE UNIT. 84min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 50014ee2586557ed
NAA : 5
IEEE OUI : 0014ee
Unique ID : 2586557ed
「xxx for SECURITY ERASE UNIT」あたりのメッセージからSecure Eraseが使えるであろう事が予想できます。また「xxx for ENHANCED SECURITY ERASE UNIT」や「supported: enhanced erase」と表示されているのでEnhanced Eraseにも対応していると思われます。
not frozenへの移行
Secure Eraseを実行するにはSecurity:のところが「not frozen」である必要があります。サスペンドすれば「not frozen」になるという情報を得たので以下のコマンドでサスペンドします。
$ sudo sh -c "echo mem > /sys/power/state"
サスペンド後、電源ボタンを押したり何かのキーを押すなりしてサスペンドから復帰すると「not frozen」になる予定だったのですが、画面は真っ暗なままで確認することができません。
色々と試してみるとキーボードは使えますしコマンドも受け付けることがわかったので、以下のようなスクリプトを作成し実行してみました。
#!/bin/sh
sudo sh -c "echo mem > /sys/power/state"
sudo hdparm -I /dev/sda > erase.log 2>&1
filetool.sh -b
sudo reboot
スクリプトを実行するとサスペンドされますので、電源ボタンを押したり何かのキーを押すなりしてサスペンドから復帰後、erase.logの中身を見てみると以下のような感じで「not frozen」になっていました。これならSecure Eraseが実行できそうです。
(省略)
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
84min for SECURITY ERASE UNIT. 84min for ENHANCED SECURITY ERASE UNIT.
Secure Eraseの実行
画面が使えないので以下のようなスクリプトを作って実行してみることとしました。--security-set-pass
でHDDをロックして--security-erase
で消去実行という感じです。
#!/bin/sh
sudo sh -c "echo mem > /sys/power/state"
sudo hdparm -I /dev/sda >> erase.log 2>&1
sudo hdparm --security-set-pass pass /dev/sda >> erase.log 2>&1
time sudo hdparm --security-erase pass /dev/sda >> erase.log 2>&1
sudo hdparm --security-unlock pass /dev/sda >> erase.log 2>&1
filetool.sh -b
sudo reboot
Enhanced Eraseが使える場合は使うようにするなら以下のような感じかなと思います。
#!/bin/sh
sudo sh -c "echo mem > /sys/power/state"
sudo hdparm -I /dev/sda > erase.log 2>&1
if [ "$(sudo hdparm -I /dev/sda | grep 'for ENHANCED')" ]; then
echo "Enhanced Erase" >> erase.log
sudo hdparm --security-set-pass pass /dev/sda >> erase.log 2>&1
time sudo hdparm --security-erase-enhanced pass /dev/sda >> erase.log 2>&1
sudo hdparm --security-unlock pass /dev/sda >> erase.log 2>&1
elif [ "$(sudo hdparm -I /dev/sda | grep 'for SECURITY')" ]; then
echo "Secure Erase" >> erase.log
sudo hdparm --security-set-pass pass /dev/sda >> erase.log 2>&1
time sudo hdparm --security-erase pass /dev/sda >> erase.log 2>&1
sudo hdparm --security-unlock pass /dev/sda >> erase.log 2>&1
else
echo "not supported Secure Erase" >> erase.log
fi
filetool.sh -b
sudo reboot
実行途中で電源が落ちたりするとHDDがロック状態のままとなってしまう事があります。その場合はsudo hdparm --security-unlock pass /dev/sda
でロックを解除することができます。
どんな値が書き込まれているの?
Secure Eraseを実行するとどんな値が書き込まれているのか見てみると…
$ dd if=/dev/sda bs=256 count=1 | hexdump -C
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000100
どうやらゼロのようです(Enhanced Eraseなら一定のパターンを書き込むものもあるようです 2/8追記)また、所要時間がshredで1回書き込んだ場合とほぼ同じなので、恐らく1回のみの書き込みだと思います。
それで本当に大丈夫なのかなーなんて思っているとIPAが公開している「セキュリティ関連NIST文書」の「SP800-88媒体のサニタイズに関するガイドライン」」の中に以下のような記述があるのを見つけました。
技術の高度化により、磁気ディスクタイプの記憶媒体に関する従来のベストプラクティスが様変わりする状況が生まれた。基本的には、記憶媒体のトラック密度の変化やそれに伴う変化によって、媒体の消去と除去が同一になる状況が生まれた。つまり、2001 年以降に製造された ATA ディスクドライブ(15 GB 超)では、キーボード攻撃と実験環境室のどちらから媒体を保護するにも、媒体を一回上書きすることによる消去で十分である。
(「SP800-88媒体のサニタイズに関するガイドライン」より引用)
らしいです…。何回か上書きしないと行けないとずっと思っていたので今さら1回で良いと言われても…という気もしますが…。