LUKSを介したYubikey 2要素認証フルディスク暗号化


27

最近、Yubikey Neoを購入しました。これは、ちょっとしたハードウェアの第2要素認証デバイスです。主にワンタイムパスワードと新しいU2Fプロトコルでの使用を目的としていますが、Yubikeyバージョン2以降では、HMAC-SHA1チャレンジ/レスポンス認証もサポートしています。HMAC-SHA1は、(Yubikey内に格納されている)秘密鍵を組み合わせ、これをパスフレーズと組み合わせて応答を生成します。

YubikeyをUbuntu FDEセットアップと組み合わせて、暗号化されたハードドライブで2FAを使用するにはどうすればよいですか?

回答:


30

PrivacyIdeaというグループが小さなパッケージを作成して、HMAC-SHA1チャレンジ/レスポンスルーチンをinitramfs に追加しました。つまり、Ubuntuはチャレンジを問い合わせてYubikeyに渡してから、そのレスポンスを使用してLUKSボリュームのロックを解除できます。ほとんどの場合、コメントを追加してこれらの指示従っています。このプロセスは実際には非常に簡単です。

これをUbuntu 14.04、16.04、および18.04でテストしました。Yubikey Neoを使用しています。最近のYubikey、ファームウェア2.0以降、および14.04以降のUbuntuのすべてのバージョンで動作するはずです。また、Yubikey 5CでUbuntu 19.04をテストしましたが、追加の作業が必要でしたが、機能させることができます。他のハードウェアHMAC-SHA1チャレンジ/レスポンスデバイスも使用できますが、これは存在しません。いつものように、先に進む前にデータのバックアップがあることを確認してください-ここに問題はないはずですが、これによりコンピュータ上のすべてが破壊される可能性が常にあります。これらの指示には保証が付いていません。

更新: Ubuntu 16.04以降、必要なパッケージはメインリポジトリにあり、PPAは不要です。

質問がある場合はコメントを追加してください!


0.前提条件

これが機能するためには、LUKSフルディスク暗号化を設定して動作させる必要があります。これを行うには、Ubuntuのインストール時に適切なオプションを選択します。セキュリティを最大限に高めるには、インストール中に非常に強力なパスフレーズを選択する必要があります。パスフレーズがスクラッチになっていない場合は、続行する前にパスフレーズを変更する必要があります(詳細な手順はこちら)。

以下の方法は、既存のパスフレーズを置き換えませんが、代わりにLUKSスロットの1つに別のパスフレーズを追加します。したがって、Yubikeyを紛失した場合でも、既存のパスフレーズを使用してコンピューターのロックを解除できます-それをメモして、安全な場所に隠しておくことをお勧めします-この手順中に何度か必要になります。新しいYubikeyチャレンジパスフレーズはまだかなり強力である必要がありますが、Ubuntuのインストール時に使用したパスフレーズほど長くする必要はありません。


1. PrivacyIdea PPAを追加してパッケージをインストールする

Ubuntu 14.04で

ターミナルを開き、次のコマンドを実行します。

sudo add-apt-repository ppa:privacyidea/privacyidea 

プロンプトが表示されたらEnterを押してから、次を実行します。

sudo apt-get update

次に、次を使用してパッケージをインストールします。

sudo apt-get install yubikey-luks

Ubuntu 16.04、18.04で

PPAは必要ありません。パッケージは次の方法でインストールできます。

sudo apt-get install yubikey-luks

Ubuntu 19.04で

Ubuntu 19.04のソースからパッケージをビルドする方法については、この回答を参照してくださいyubikey-luks


2. Yubikeyソフトウェアをインストールする

YubikeyのHMAC-SHA1機能を他の目的に使用している場合は、このセクションをスキップできます。2番目のYubikeyスロットの設定はすべて消去されるため、このYubikeyで他の目的にHMAC-SHA1を使用する場合、この手順を実行しないでください。

Ubuntu 14.04のYubico PPAまたは16.04以降のメインUbuntuリポジトリから必要なソフトウェアをインストールすることにより、YubikeyをUbuntuで動作するように設定する必要があります。

Ubuntu 14.04で

まだ行っていない場合は、PPAを追加し、次を使用してパッケージをインストールします。

sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization

Ubuntu 16.04、18.04(およびそれ以降)

sudo apt-get install yubikey-personalization

3. HMAC-SHA1のYubikeyスロットを初期化する

ここで、HMAC-SHA1構成でYubikeyの2番目のスロットをプログラムする必要があります。これにより、デフォルトでは空になっている以前のスロット設定が消去されます。繰り返しますが、他の目的でHMAC-SHA1を使用している場合は、このコマンドを発行しないでください。設定が消去されます。このLUKSセットアップでは、他の用途と同じ秘密鍵をYubikey内で安全に使用できます。(たとえば、LUKS + Yubikeyを使用する別のコンピューターで)。

ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

ターミナルには、行われた変更に関する情報が表示されます。これを書き留める必要はありませんが、チャレンジが与えられたときの応答を計算するために、HMAC-SHA1アルゴリズムでYubikeyによって使用される秘密鍵が表示されます。


4. YubikeyをLUKSスロットに登録する

次に、LUKS構成を編集して、Yubiikeからの応答を復号化キーの1つとして追加します。

指定する必要があるパーティションは、マシンを起動するのにBIOSまたはUEFIのどちらを使用しているかによって異なります。BIOSの場合、暗号化されたボリュームは/dev/sda5デフォルトで、UEFIの場合はにあり/dev/sda3ます。これdisksを確認するには、ユーティリティを開き、パーティションのパスを確認します- sda3またはである必要がありますsda5注: NVMeディスクを搭載した新しいコンピューターでは、パスは次のようになり/dev/nvme0n1p3ます。

これをターミナルで実行します:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7

これにより、LUKS構成のスロット7に書き込まれ、インストーラーのプロンプトに従います(実行しているバージョンによって若干異なります)。

これで完了です!コンピューターを再起動し、Yubikeyが挿入されている場合は、チャレンジパスワードを入力し、Yubikeeを2番目の要素として使用してLUKSパーティションのロックを解除し、システムを起動できます。ハードドライブを復号化したら、Yubikeyを削除できます。

Yubikeyを紛失した場合でも、元の(できれば非常に長い)パスフレーズを入力してハードドライブを復号化できます。その後、この手順に従って新しいYubikeyを登録できます。


暗号化チャレンジパスフレーズの変更

後日パスワードを変更するのは非常に簡単です。このコマンドを使用して秘密鍵をリセットするだけです。秘密鍵をリセットする必要はありませんが、害はありません。これにより、以前の秘密鍵が破壊されることに注意してください。このYubikeyでHMAC-SHA1を使用する場合は、これを行わないでください。(たとえば、LUKS + Yubikeyを使用する別のコンピューターで)。

 ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

次に、上記のステップ4と同様に、LUKSキースロットに新しいパスワードを登録します。ただし、このコマンドでスロット7をクリアすることを選択します。

sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c

のプロンプトが表示されたらEnter any remaining passphrase、Yubikeyチャレンジパスフレーズではなく、バックアップパスフレーズを使用します。次に、新しい Yubikeyチャレンジパスフレーズを2回入力し、最後にバックアップパスフレーズを最後に入力する必要があります。

これで、古いYubikeyチャレンジパスフレーズが削除され、新しいドライブのみがハードドライブを復号化します。以前のバックアップパスフレーズは同じままです。ステップ0のリンクをたどって、そのパスフレーズを変更できます。


セキュリティへの影響に関する注意

Yubikeyを追加すると、システムに一定レベルのセキュリティが追加されます-誰かがチャレンジパスフレーズを知っており、Yubikeyがハードドライブのロックを解除できるようにする必要があります(または、現在バックアップとして使用している初期パスフレーズを見つけます) 。ただし、攻撃者がチャレンジパスフレーズを知っている場合(たとえば、入力中に「ショルダーサーフィン」を行うことで)、ハードドライブを解読することは技術的に実行可能であり、短時間でYubikeyにアクセスできます。チャレンジパスフレーズを使用して、Yubikeyから応答を取得して保存し、Yubikeyなしでいつでもハードドライブを復号化することができます。または、攻撃者またはマルウェアがパスフレーズを知っていて、Yubikeyに接続されたマシンでコードを実行できた場合も、チャレンジを発行して応答を保存できます。したがって、チャレンジパスフレーズを入力するときは用心し、ユビキーを常に安全な場所に置いておくことが非常に重要です。また、信頼できるマシンにのみプラグインする必要があります。Yubikeyのトラックを失い、誰かがそれを使用して復号化キーを学習しようとした可能性がある場合は、ステップ2と3を再度実行してYubikey内の秘密キーをリセットし、新しいチャレンジパスフレーズを選択します。敵がパスフレーズ(YubikeyからのHMAC-SHA1応答、またはバックアップのいずれか)を学習できた場合、LUKSマスターキーのバックアップを作成し、それを使用してハードドライブを復号化できることに注意してください将来パスフレーズを変更します。そして、常に安全な場所にYubikeyがあるようにします。また、信頼できるマシンにのみプラグインする必要があります。Yubikeyのトラックを失い、誰かがそれを使用して復号化キーを学習しようとしている疑いがある場合、ステップ2と3を再度実行してYubikey内の秘密キーをリセットし、新しいチャレンジパスフレーズを選択します。攻撃者がパスフレーズ(YubikeyからのHMAC-SHA1応答またはバックアップのいずれか)を学習できた場合、LUKSマスターキーのバックアップを作成し、それを使用してハードドライブを復号化できることに注意してください将来パスフレーズを変更します。また、Yubikeyを常に安全な場所に置いてください。また、信頼できるマシンにのみプラグインする必要があります。Yubikeyのトラックを失い、誰かがそれを使用して復号化キーを学習しようとしている疑いがある場合、ステップ2と3を再度実行してYubikey内の秘密キーをリセットし、新しいチャレンジパスフレーズを選択します。攻撃者がパスフレーズ(YubikeyからのHMAC-SHA1応答またはバックアップのいずれか)を学習できた場合、LUKSマスターキーのバックアップを作成し、それを使用してハードドライブを復号化できることに注意してください将来パスフレーズを変更します。ステップ2と3を再度実行して、Yubikey内の秘密鍵をリセットし、新しいチャレンジパスフレーズを選択します。攻撃者がパスフレーズ(YubikeyからのHMAC-SHA1応答またはバックアップのいずれか)を学習できた場合、LUKSマスターキーのバックアップを作成し、それを使用してハードドライブを復号化できることに注意してください将来パスフレーズを変更します。ステップ2と3を再度実行して、Yubikey内の秘密鍵をリセットし、新しいチャレンジパスフレーズを選択します。攻撃者がパスフレーズ(YubikeyからのHMAC-SHA1応答またはバックアップのいずれか)を学習できた場合、LUKSマスターキーのバックアップを作成し、それを使用してハードドライブを復号化できることに注意してください将来パスフレーズを変更します。cryptsetupのmanページでこれを説明しています。luksHeaderBackupセクションをご覧ください。これが発生した疑いがある場合は、データを保護するためにまったく新しいLUKSボリュームを作成する必要があります。


更新: 15.04でこれを試しましたが、PPAには必要なパッケージのビルドがないように見えるため、ソフトウェアソースのDEB行を変更して、「vivid」ではなく「trusty」リポジトリを使用する必要があります「。この変更を行った後、LUKS + Yubikeyセットアップは15.04で動作するようになりました。
seanlano

4
もうprivacyideaリポジトリを使用しないでください!パッケージは現在、アップストリームのdebianに含まれています!
cornelinux

1
yubikeyなしでログインを回避する方法があります。ユーザーがログインするたびにluksパスフレーズを変更します。Gentooの実装はここにあります:github.com/flowolf/initramfs_ykfde短時間でUbuntuに適応できます。
無名_1

1
新しい18.04 LTSリリースでも同じ手順が機能すると思いますか?
マークヴェーンストラ

2
Ubuntu 18.04で試してみましたが、うまくいきます。
jetole

0

Ubuntu 19.04の更新:

Ubuntu 19.04の時点で(そしておそらく18.10、私はそのリリースを試していませんでした)、以前の動作cryptsetup方法を破るのに十分なほど変更yubikey-luksされたようです。これは、コミット上流のリポジトリから修正プログラムを実装するようだが、元のリポジトリには、私が10月2018年以来更新されているようには見えないレポのこのフォーク見つけ修正を持っているだけでなく、tidying-のいくつかの他のビットをそして、19.04で動作するパッケージをビルドしました。

更新されたフォークの既存のビルドが見つからなかったため、yubikey-luks作業を行う方法には、ソースコードを取得し、DEBパッケージをローカルでビルドしてからインストールすることが含まれます。

前の回答の手順に従いますが手順1を以下に置き換えます。


1. yubikey-luksソースを取得し、パッケージをビルドしてインストールします

ビルドの依存関係をインストールします:

sudo apt install dh-exec devscripts expect yubikey-personalization

次に、ソースアーカイブをダウンロードして抽出します。

mkdir ~/tmp
cd ~/tmp
wget -O yubikey-luks.zip https://github.com/thuandt/yubikey-luks/archive/master.zip
unzip yubikey-luks.zip
cd yubikey-luks-*

以下を使用してパッケージをビルドします。

make builddeb NO_SIGN=1

次にインストールします:

sudo dpkg -i DEBUILD/yubikey-luks_*.deb

次に、最初の回答の残りの手順を続けます。

19.10までyubikey-luksに、メインのUbuntuアーカイブのバージョンを更新して、手動でビルドする必要がないようにしたいです。

おまけとして、新しいバージョンには設定ファイルがあります。これはにあります/etc/ykluks.cfg。ブート時に表示されるメッセージは、このファイルで構成できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.