web-dev-qa-db-ja.com

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

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

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

26
seanlano

PrivacyIdea というグループが、initramfsに HMAC-SHA1 チャレンジレスポンスルーチンを追加する小さなパッケージを作成しました。これは、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を使用する場合は、do n'tを実行します。

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が挿入されている場合は、チャレンジパスワードを入力し、Yubikeyを2番目の要素として使用してLUKSパーティションをロック解除し、システムを起動できます。ハードドライブを復号化したら、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チャレンジパスフレーズではなく、バックアップパスフレーズを使用します。次に、newYubikeyチャレンジパスフレーズを2回入力し、最後にバックアップパスフレーズをもう一度入力する必要があります。

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


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

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

30
seanlano

Ubuntu 19.04のアップデート:

Ubuntu 19.04(そしておそらく18.10、私はそのリリースを試していませんでした)のように、cryptsetupyubikey-luksの動作を中断するのに十分なほど変更されたようです。 このコミット 上流のリポジトリからは修正を実装しているようですが、 元のリポジトリ は2018年10月以降更新されていないようです。I このフォークを見つけましたリポジトリ には修正があり、他のいくつかの片付けもあり、19.04で動作するパッケージをビルドできました。

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

my previous answer の手順に従いますが、手順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までに、メインのUbuntuアーカイブ内のyubikey-luksのバージョンを更新して、手動でビルドする必要がないようにしたいです。

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

0
seanlano