OPIEを使用してFreeBSD10.1のワンタイムパスワードを取得する方法
序章
SSHは、サーバーにリモートでログインするための最も一般的な方法です。 これは、man-in-the-middle攻撃やリプレイ攻撃からパスワードを保護する暗号化プロトコルです。
ただし、SSHは転送中のデータのみを保護することに注意する必要があります。 攻撃者は、キーロガーや戦略的に配置されたカメラなど、他の方法でSSHパスワードを発見できます。
信頼できるコンピューター(たとえば、あなたやあなたの会社のもの)を使用し、安全な場所から使用している限り、そのような攻撃について心配する必要はありません。 ただし、場合によっては、公共のコンピューターを使用する必要があります。 このようなシナリオでパスワードを保護するために、FreeBSDにはOne-time Passwords In Everything(OPIE)と呼ばれるセキュリティ機能が付属しています。
このチュートリアルでは、ワンタイムパスワードを生成して使用し、リモートFreeBSDサーバーにログインする方法を学習します。 安全な場所にいるときに1つ以上のワンタイムパスワードを事前に生成し、後で安全性の低い場所からサーバーにアクセスするときに使用できるように保存できます。 そうすれば、ワンタイムパスワードがログに記録されたとしても、攻撃者にとっては役に立たなくなります。
前提条件
このチュートリアルに従うには、次のものが必要です。
- SSH経由でアクセス可能なFreeBSD10.1サーバー
- rootへの切り替えを許可されているユーザー。 DigitalOceanのデフォルトのfreebsdユーザーは問題ありません
ステップ1—新しいOPIEユーザーを作成する
リモートサーバーからロックアウトされないようにするには、OPIEで使用するための別のユーザーを作成することをお勧めします。
次のように入力して、rootに切り替えます。
- sudo su
ワンタイムパスワードで使用する新しいユーザーを作成するには、次のように入力します。
- adduser
ユーザーに関するさまざまな詳細を入力するように求められます。 ユーザー名をsammyとします。 パスワードの入力を求められたら、必ず強力なパスワードを入力してください。 他のすべてのプロンプトについては、ENTER
を押すだけでデフォルト値を選択できます。
InteractiveUsername: sammy
Full name: Sammy the Shark
Uid (Leave empty for default):
Login group [sammy]:
Login group is sammy. Invite sammy into other groups? []:
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]:
Home directory [/home/sammy]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password: password
Enter password again: password
Lock out the account after creation? [no]:
Username : sammy
Password : ****
Full Name : My Test User
Uid : 1001
Class :
Groups : sammy
Home : /home/sammy
Shell : /usr/local/bin/zsh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (sammy) to the user database.
Add another user? (yes/no): no
Goodbye!
yes
と入力して詳細を確認し、別のユーザーを追加するかどうかを尋ねられたら、no
と入力してadduser
を終了します。
これで、デフォルトのfreebsdユーザーまたは通常のsudoユーザーの元のユーザーに戻すことができます。
- exit
この時点で、OPIE以外のsudoユーザーを使用してサーバーにログインする必要があります。
ステップ2—新しいOPIEユーザーとしてログインします
現在のターミナルセッションから、ssh
を使用して、OPIEユーザーであるsammyとしてログインします。
- ssh sammy@localhost
OPIEのセットアップは安全な端末からのみ実行できるため、これは重要です。 rsh
やtelnet
などの安全でないプロトコルを使用した場合、OPIEは文句を言います。
手順3—新規ユーザーに対してOPIEを有効にする
警告
ユーザーに対してOPIEを有効にすると、そのユーザーは通常のパスワードでログインできなくなります。 したがって、OPIEなしで少なくとも1人のユーザーにアクセスできるようにしてください。 このチュートリアルでは、freebsdユーザーを標準のSSHキーログインで維持しています。
OPIE認証システムにユーザーを追加するには、コマンドopiepasswd
を使用します。 -c
オプションは、信頼できるコンピューターを使用していて、安全な場所にいることをコマンドに通知します。
- opiepasswd -c
シークレットパスフレーズの入力を求められたら、10文字以上のパスフレーズを入力します。 このパスフレーズは、ユーザーのSSHパスワードと同じであってはなりません。 ワンタイムパスワードを生成するには、後でこのパスフレーズが必要になります。
コマンドの完全な出力は次のようになります。
InteractiveAdding sammy:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase: Sammy's secret pass phrase
Again new secret pass phrase: Sammy's secret pass phrase
新しいOPIEシードとランダム化されたパスフレーズを受け取ります。
OutputID sammy OTP key is 499 si5509
RITE NERO BASS SOFA BEND TO
この出力では、 sammy がユーザー、 499 が反復回数、si5509がシードです。 。
sammy がOPIE認証システムに追加されたため、実際のSSHパスワードを使用してログインすることはできなくなりました。 ローカルマシンで新しいターミナルを開き、次のように入力します。
ssh sammy@your_server_ip
次のようなプロンプトが表示されます。
Promptotp-md5 498 zi5509 ext
Password:
これで、ワンタイムパスワードを入力する必要があります。 ワンタイムパスワードはまだ生成されていないため、今のところログインできません。 ターミナルを閉じて、sammyとしてログインしている前のターミナルに戻ります。
ステップ4—ワンタイムパスワードを作成する
ユーザーがOPIE認証システムに追加されると、499から始まる反復カウント数とランダムシードがユーザーに関連付けられます。 ワンタイムパスワードを生成するには、これらの値を知っている必要があります。
警告
常に安全な場所からワンタイムパスワードを生成することを忘れないでください。
すでにsammyとしてログインしている場合は、この時点でログインしているはずですが、コマンドopieinfo
を使用してこれらの値を確認できます。
- opieinfo
その出力には2つの値が含まれます。 1つ目はシーケンス番号で、2つ目はシードです。
Output498 zi5509
ノートラベル
現在OPIE以外のユーザーでログインしている場合は、次のようなエラーが発生します。
Outputfreebsd not found in database.
この場合、新しいターミナルウィンドウを開き、OPIEユーザーでログインを試みることで情報を取得できます。 パスワードプロンプトには、現在の反復回数とシードが含まれます。 この情報をコピーして、認証されたセッションで使用します。
これらの値をopiekey
コマンドに渡して、ワンタイムパスワードを生成します。 opiepasswd
と同様に、opiekey
も信頼できるコンピューターからのみ実行する必要があることを忘れないでください。
- opiekey 498 zi5509
または、次のように入力することもできます。
- opiekey `opieinfo`
OPIEユーザーのパスフレーズを入力するように求められます。 前の手順で選択したパスフレーズを入力します。 このコマンドの出力は次のとおりです。
InteractiveUsing the MD5 algorithm to compute response.
Reminder: Don't use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: Sammy's secret pass phrase
PER POE TURF LITE ZONE BART
6つの短い単語を含む最後の行は、ワンタイムパスワードです。
新しいターミナルを開いて、再度ログインしてみてください。
ssh sammy@your_server_ip
プロンプトは引き続き同じです。
Promptotp-md5 498 zi5509 ext
Password:
このプロンプトに表示される数値は、opieinfo
の出力、およびopiekey
に渡したパラメーターと一致することに注意してください。
これで、パスフレーズを貼り付けるか、手動で入力することができます。 長いパスワードの入力を開始する前に、間違いを避けるために、ENTER
を押してください。 プロンプトが変わり、入力したパスワードを確認できるようになります。
Promptotp-md5 498 zi5509 ext
Password [echo on]:
今すぐワンタイムパスワードを入力すると、sammyとしてサーバーにログインできるようになります。
exit
と入力するか、ターミナルを閉じて、SSHセッションを終了します。
別の端末を開き、新しい接続を確立してみてください。
ssh sammy@your_server_ip
今回は、プロンプトが少し異なります。
Promptotp-md5 497 zi5509 ext
Password:
ご覧のとおり、シーケンス番号が変更されています。 1つ減りました。 これらの新しい値でopiekey
を使用して新しいワンタイムパスワードを生成するまで、再度ログインすることはできません。 つまり、このチュートリアルのステップ4で説明されているプロセスをもう一度やり直す必要があります。
ステップ5—複数のワンタイムパスワードを作成する
信頼できるコンピューターに数日間アクセスできないことがわかっている場合は、サーバーに複数回アクセスできるように、複数のワンタイムパスワードが必要になる場合があります。 -n
オプションを指定してopiekey
を実行すると、必要なワンタイムパスワードの数を指定できます。 たとえば、3つのワンタイムパスワードを生成するには、次のように入力します。
- opiekey -n 3 `opieinfo`
ノート
opieinfo
を使用する代わりに、以前のように反復カウント数とシードを指定できます。
出力には、シーケンス番号とともに3つのパスワードが含まれます。
InteractiveUsing the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: Sammy's secret pass phrase
495: BEAM BOW TOO CAVE BOWL AUK
496: HIVE KITE HUGE SANG VAT FOAM
497: THIN ALL BUT NIL SUP BALE
ワンタイムパスワードは、-x
オプションを使用して、16進数の形式で生成することもできます。
- opiekey -x -n 3 `opieinfo`
もちろん、パスワードはわかりにくくなります。
InteractiveUsing the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: Sammy's secret pass phrase
495: 5484 C106 B214 B801
496: 98F1 E6CF 7F54 3108
497: 6010 2C11 192A EDAC
あなたは今、これらを紙に書き留めて、旅行中にあなたと一緒に紙を運ぶことになっています。 次回ログインする必要があるときは、紙を使用してSSHプロンプトに表示されているシーケンス番号に関連付けられているパスワードを見つけて入力します。 パスワードを使用した後、それを無効にすることをお勧めします。 言うまでもなく、この論文が悪意のある人の手に渡らないようにする必要があります。
紙のパスワードをすべて使い切ったら、この手順をもう一度繰り返して、さらにパスワードを生成します。 ただし、498個のパスワードをすべて使い切ってシーケンス番号がゼロになった場合は、opiepasswd -c
を再度呼び出す必要があります。 そうすることで、ランダムシードとシーケンス番号がリセットされます。
結論
実際の状況では、安全な場所から適切な数のパスワードを事前に準備し、紙に書き留めて、安全でない場所からログインする必要があるときに一度に1つずつ使用する必要があります。 紙を安全に保管してください!
このチュートリアルでは、OPIE認証システムを使用して、信頼できないコンピューター上の端末からリモートFreeBSDサーバーに安全にログインする方法を学びました。 ワンタイムパスワードを生成し、ログインする必要があるたびにそれらを使用する方法を学びました。 この機能は、常に移動していて、公共のコンピューターやネットワークを使用せざるを得ない人々に最も役立ちます。