CentOS7 : システム全体を暗号化したOSの自動起動(LVM on LUKS)その2

 先日、CentOS7 : システム全体を暗号化したOSの自動起動(LVM on LUKS)という記事を公開しましたが、その内容は暗号化を実質的に無意味にするもので、実用に耐えませんでした。
 今回は、前回をベースに試行錯誤し、ある程度有用な実装方法を考えましたので、公開します。

スポンサーリンク(広告)
スポンサーリンク(広告)

設計思想

 暗号化解除に使う鍵を常時アクセス可能な場所に保存することは、暗号化を無意味にすることです。
 今回は、必要なときだけ保存することとし、運用中は鍵を無効化するという発想です。ワンタイムパスワードと同じ発想ですね。

 再起動する際に、わざわざコンソールを開いてパスフレーズを入力するのは手間ですし、再起動が必要な時にコンソールにアクセスできる環境が確保できるとは限らず、こういった問題を解消する一つのソリューションになるものと思います。

Step1: 暗号化構成

 CentOS7 : システム全体を暗号化したOSの自動起動(LVM on LUKS)の通り、暗号化構成を行います。

Step2: マスターキーの作成と登録

 /boot/keyfile に保存される鍵を有効にしたり無効にしたりするための鍵を作成し登録します。

Step3: ブートキーの更新スクリプトの作成

 /boot/keyfile を作成したり削除したり、キースロットに登録したり抹消したりするスクリプトを作成します。

 シェルスクリプトは書き慣れてないので間違えてたら教えてください。

 適当なパーミッションを設定します。

Step4: カスタムユニットファイルの作成

 OS 起動時に、/boot/keyfile の鍵を無効化するために、カスタムユニットファイルを作成します。

 設定を有効化します。

非推奨ですが、以下の通りカスタムユニットを作成すると、サービス終了時に鍵を自動的に再生成できます。

この場合、ctrl + alt + delete や シャットダウン時にも、鍵が自動的に再生成されるので、暗号化が無意味になってしまうかも知れません。
鍵を無効化して終了させるためには、以下の手順が必要になります。

サーバに物理的にアクセス可能な第三者によって、サービスを正常終了されると、鍵が自動的に再生成さる点に留意する必要があります。

Step5: bash alias の設定など

 詳細は割愛しますが、以下のコマンドを実行してから再起動すると、起動時のパスワード入力をスキップできます。

 このコマンドで /boot/keyfile が作成されると同時に、キースロットに登録されます。

 再起動後は、サービスが自動的にキースロットの解放と /boot/keyfile の削除を行います。

 再起動を取りやめて、作成された /boot/keyfile を手動で削除する場合は、以下のコマンドを実行すると再起動後と同じ状態になります。

/boot/keyfile が削除された状態で再起動やシャットダウン後起動する際は、パスフレーズでの起動が可能です。

 reboot コマンドなどのエイリアス設定を適切に書き変えると、煩雑な作業から解放されるかもしれません。

 あるいは

 など。

シャットダウン時や外部からのリセット信号に応じて実行されるコマンドの動作に影響されないよう最小限に設定しないと、暗号化が無意味になる場合があるので注意が必要です。

セキュリティ上の留意点

 OS 起動後は /boot/keyfile のキーが無効化されたうえで削除されますので、その時点で物理的にストレージが盗難されたとしても安全な状態が維持されます。

ただし “luks-key-maker make” を実行後は /boot/keyfile に鍵が保存されるので、その瞬間に攻撃された場合は危険にさらされることになります。

 システムがいつ再起動のために “luks-key-maker make” を実行するかは、通常外部から認識できないでしょうから、成立可能性の低い攻撃といえるでしょう。

 仮に、VPS などのサービス管理者(ホスト)が、逐一データの状態を監視復元できたとすれば、再起動時に危殆化される訳だが、そのような状況下においてコンソールにパスフレーズを入力することは、キーストロークの監視蓄積だけでよいことから比較的容易であり、”luks-key-maker make” を使った再起動時のパスフレーズ入力スキップはセキュリティレベルの向上に資するものと考えています。

スポンサーリンク(広告)
スポンサーリンク(広告)