OpenBSD フルディスク暗号化 (on VirtualBox)

nabbisen - Jan 3 '23 - - Dev Community

はじめに

OpenBSD はフルディスク暗号化 (Full Disk Encryption, FDE) をサポートしています。softraidbioctl を用いることで実現できます。チュートリアル (英語) が公式サイトで公開されています。FDE を施しておくことで、仮にコンピューターを紛失するような事態に遭っても、(暗号鍵が安全に保管されている限りは) あなたのデータは強固に保護されます。

FDE は、物理サーバーや VPS (CloudSigmaConoHa のような OpenBSD マシンイメージをサポートしているサービス) のサーバーと同様に、VirtualBox でも利用できます。

openbsd-boot-under-full-disk-encryption

本記事で VirtualBox の VM に対してフルディスク暗号化を行う方法を示します。手順ごとの出力内容と、他の環境に関する補足事項も記載しています。

環境

  • OS: OpenBSD 7.2

注意 - 既存の全データが消えます

必要に応じて事前にバックアップを取っておくと良いかもしれません。

(参考) デバイス名

デバイス名は環境によって異なります。私が VirtualBox で行った時は、wd0 がオリジナルのデバイスに当たり、sd0 が softraid による暗号化されたものに該当しました。別の例ですがVPS の場合は、前者が sd0 で後者 sd1 と言うように、異なることもありました。ハードウェア、特に SATA のようなドライブ次第で、変わります。

後述のチュートリアルの中で、デバイスを確認して選択する手順についても、記載しています。

私が実際に行った時のデバイス名の対照表

環境 オリジナル softraid
VirtualBox wd0 sd0
物理サーバー or VPS sd0 sd1

チュートリアル

公式のチュートリアル (英語) に基づいています。(本記事の冒頭をご覧ください。)

インストーラーメディアで VM を起動

Oracle VM Virtualbox はインストール済でしょうか ? VM に OpenBSD のインストーラー .iso (私の場合は install72.iso でした) はアタッチされているでしょうか ? もしそうでしたら始めましょう !

Shell の実行

まず以下のようにたずねられるでしょう:

Welcome to the OpenBSD/amd64 7.2 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell?

"s" つまり Shell を選んでください。

次にキーボードマッピングを調整する必要があるかを確認します。必要な場合、以下を実行します。(私の場合 kbd jp が必要でした):

# kbd %あなたの言語%
Enter fullscreen mode Exit fullscreen mode

出力は以下の通りでした:

kbd: keyboard mapping set to jp
Enter fullscreen mode Exit fullscreen mode

暗号化するデバイスの選択

まず暗号化対象を選びましょう。下記のコマンドでデバイスの一覧を確認できます:

# sysctl hw.disknames
Enter fullscreen mode Exit fullscreen mode

出力は以下の通りでした:

hw.disknames=wd0:(...),cd0:,cd1:,rd0:(...)
Enter fullscreen mode Exit fullscreen mode

くりかえしになりますが、このチュートリアルでは wd0 がオリジナルに該当します。

オリジナルのディスクの確認

# cd /dev

# sh MAKEDEV wd0
Enter fullscreen mode Exit fullscreen mode

(実施は必要に応じてですが推奨されます) ディスクにランダムデータを書き込む

いよいよディスクを操作する段階に来ました。

最初の手順は必ずしも必要ではありません。しかしながらマシンが実際に使用しているボリュームを隠す効果があります。
非常に時間が掛かることがあります。ディスクサイズ次第です。

注意点ですが、VPS などでは不利になる側面もあります。と言うのは、ボリューム全体を消費するため、スナップショット作成時のイメージサイズが非常に大きくなってしまうからです。

# dd if=/dev/urandom of=/dev/rwd0c bs=1m
Enter fullscreen mode Exit fullscreen mode

出力は以下の通りでした:

dd: rwd0c: end of device
7169+0 records in
7168+0 records out
7516192768 bytes transferred in 57.711 secs (130236923 bytes/sec)
Enter fullscreen mode Exit fullscreen mode

なお、効果は限定的になりますが、count を併用することで、部分的にランダムデータを書き込むことも可能です。以下は 2 GB だけ書き込む例です:

- dd if=/dev/urandom of=/dev/rwd0c bs=1m
+ dd if=/dev/urandom of=/dev/rwd0c bs=1m count=2048
Enter fullscreen mode Exit fullscreen mode

ディスクの初期化

MBR ブートを使用する場合は、以下を実行します:

# fdisk -iy wd0
Enter fullscreen mode Exit fullscreen mode

出力は以下の通りでした:

Writing MBR at offset 0.
Enter fullscreen mode Exit fullscreen mode

なお GPT で UEFI ブートする場合は、代わりに fdisk -gy -b 960 wd0 を実行します。

softraid パーティションの作成

次のコマンドを実行します:

# disklabel -E wd0
Enter fullscreen mode Exit fullscreen mode

そしてその中で、以下の通り進めます:

Label editor (enter '?' for help at any prompt)
wd0> a a
offset: [64]
size: [14680000] *
FS type: [4.2BSD] RAID
wd0*> w
wd0> q
No label changes.
Enter fullscreen mode Exit fullscreen mode

なおここでディスク全体を使用していますが、後ほど OS をインストールする時には複数パーティションに分割することが可能です。分割は暗号化されたディスクに対して行われます。

暗号化デバイスの構築

bioctl の出番です。

# bioctl -c C -l wd0a softraid0
Enter fullscreen mode Exit fullscreen mode

プロンプトで以下のようにパスフレーズをたずねられます。起動時に要求される文字列になります:

New passphrase:
Re-type passphrase:
Enter fullscreen mode Exit fullscreen mode

出力は以下の通りでした:

sd0 at scsibus1 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006>
sd0: 7167MB, 512 bytes/sector, 14679472 sectors
softraid0: CRYPTO volume attached as sd0
Enter fullscreen mode Exit fullscreen mode

sd0 が CRYPTO ボリュームとして生成されました !!

ちなみにパスフレーズの代わりに キーディスク (keydisk) (英語) を使用することも可能です。

CRYPTO デバイスの確認

# cd /dev

# sh MAKEDEV sd0
Enter fullscreen mode Exit fullscreen mode

ここまでのおかげで、このデバイスに書き込まれるすべてのデータが "XTS モードで AES (XTS-AES) 暗号化" されるようになりました。

新しい疑似デバイスの先頭にメガバイトデータを書き込む

これが、第一にして中心になる本章における、最後のステップです。実行してください:

# dd if=/dev/zero of=/dev/rsd0c bs=1m count=1
Enter fullscreen mode Exit fullscreen mode

出力は以下の通りでした:

1+0 records in
1+0 records out
1048576 bytes transferred in 0.016 secs (64883162 bytes/sec)
Enter fullscreen mode Exit fullscreen mode

インストーラーに戻る

ディスクの準備が完了しました。

Shell に別れを告げましょう:

# exit
Enter fullscreen mode Exit fullscreen mode

インストーラーの Welcome メッセージがふたたび表示されます。

installer-after-encryption

インストール時に暗号化ボリュームを選択する

残るは OS をインストールする場所を聞かれた時に、暗号化ボリュームを選択することです。

choose-encrypted-volume

sd0 が私の暗号化ディスクであることに留意してください。(あなたにとっての暗号化ディスクが sd1 であれば、もちろん sd1 を選択してください。)

おわりに

インストールの完了

おめでとうございます 🎉🎉🎉

あなたは暗号化されたディスクに OpenBSD をインストールすることができました。

installation-is-completed

起動時にパスフレーズを聞かれる

次に起動した時、あなたのセキュリティシステムは見事な形で機能するでしょう。

prompt-for-passphrase-under-full-disk-encryption

正しいパスフレーズ (またはキーディスク) を入力することで、続行が認められます。そしてマシンが起動してあなたの力になってくれるでしょう。

booted

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .