clevisによる暗号化ディスクの自動ロック解除のセキュリティ問題
根本的な解決策はありません。
まず、最初に書いておくと、この問題に解決策はないと思います。
clevisを用いて、暗号化ディスクの自動ロック解除をしている場合の、セキュリティ問題に関してです。
起動時にタイミングをあわせて、Enterキーを押しっぱなしにするだけで、BusyBoxのシェルが立ち上がるという問題が報告されていました。2016年に上記の問題が報告されて解決したようで、今でもUbuntu 23.10.1においては可能みたいです。
shellが立ち上がれば、clevisコマンドを用いて暗号化アンロックもできて、mountもできます。
でも、さらにいえば、Enter押しっぱなしのようなことを行わなくても、grubのメニューを表示できる状態にして、リカバリーモードで起動すれば、ユーザーパスワードの入力がなくても、ユーザーのディレクトリを見ることは可能です。
一応、確認してみましたが、これはUbuntuのみならず、Fedora 39などでも一緒でした。
tpm2に暗号化ディスクの解除パスワードを保存しておいて、自動で解除している時点でこれらは防ぎようがない問題です。ですから、ある意味、自動で暗号化解除をできるようにしている時点で、その暗号化は気休めでしかないわけです。
とりあえずの応急処置
ただ悪戯防止のために、あるいはリモートから、余計なことをさせないとか、キーボードがついていない端末でとか、限定的な条件下での、抑止策を考えてみるとすると、、
-
kernelパラメータにpanicを設定して起動する。
grubのコマンドラインオプションにpanic=5など、pacnicパラメータを追加すれば、エンター押しっぱなしで、busyboxのshellに入ろうとしても、リブートされるようになるので、とりあえず防止策になります。 -
clevis-initramfsツールを修正し、一定回数以上のパスワード試行を間違えたら、強制的にリブートさせる。
Ubuntuでは、パスワードを一定回数、間違えたらエラーメッセージがでますが、そこでリブートさせましょう。下記の変更を行った上で、initramfsを生成しなおせば有効になります。
diff --git a/usr/share/initramfs-tools/scripts/local-top/cryptroot b/usr/share/initramfs-tools/scripts/local-top/cryptroot
index 5832e07..e76510b 100755
--- a/usr/share/initramfs-tools/scripts/local-top/cryptroot
+++ b/usr/share/initramfs-tools/scripts/local-top/cryptroot
@@ -186,6 +186,7 @@ setup_mapping() {
done
cryptsetup_message "ERROR: $CRYPTTAB_NAME: maximum number of tries exceeded"
+ reboot -f
exit 1
}
これらは、いたずら防止にはなるかもしれません。
注意
これらは、あくまで、気休めの対策です。
singleモードで起動したり、あるいは他のkernelパラメータを渡して、システムを起動さえできれば、clevisコマンドを利用できる状況にするのは難しくありません。
守るべきものが、ユーザーのプライベートなドキュメントや画像、動画であれば、ユーザーフォルダの暗号化を考えるべきでしょう。
ユーザーがログインしない限り、それらを解除できないような設定にするくらいしか、方策は思いつきません。将来的にはFedoraなどは、それらを行うことを検討しているみたいですが、それを行ったとしても、暗号化のパスワード、パスフレーズやkey fileが、同じ環境下にあれば、それは解除されうるのです。
メンテナンスモード、リカバリモードを一切廃止して、カーネル設定も厳しくして、など、そこまですれば、厳密にできるのかもしれませんが、自動で復号化できるということは、その手段となる鍵をどのように扱うかということになるので、物理的に別のものを鍵として利用して、復号するといったことが、要求されるようになってくるのかもしれませんね。
もちろんディスク全体の暗号化は、ディスクの換装(取り替え)などを前提にすると、鍵を保管したtpm2のあるハードウェアとディスクが離れ離れになるので、その暗号化には意味があるといえます。
単純なテキストのパスフレーズだけではなく、バイナリ(無意味なデータの羅列や画像、音声、動画形式も含む)のkey fileでも暗号化は可能なので、そういったバイナリデータによる暗号化で、それらのkey fileをtpm2に格納しておけば、少しはディスクを廃棄したりする際も安心かもしれません。その場合にも、key fileを同じディスク内に保管しておかないほうが良いでしょう。
信頼できるクラウドストレージや、外部ディスクなどの別デバイスに保管しておけば、手元で使っているパソコンの廃棄処理や譲渡は、楽かもしれません。
ユーザーレベルの暗号化
大事なユーザーデータの暗号化は、fscrypt,gocryptfsなどの利用が現状の候補になるでしょう。
複数の暗号化に対応したSiriKaliというアプリもあるようです。
参考
Mashing Enter to bypass full disk encryption with TPM, Clevis, dracut and systemd
Enter 30 to shell: Cryptsetup Initram Shell [CVE-2016-4484]
Discussion