OPIEを使用してFreeBSD10.1のワンタイムパスワードを取得する方法
序章
SSHは、サーバーにリモートでログインするための最も一般的な方法です。 これは、man-in-the-middle攻撃やリプレイ攻撃からパスワードを保護する暗号化プロトコルです。
ただし、SSHは転送中のデータのみを保護することに注意する必要があります。 攻撃者は、キーロガーや戦略的に配置されたカメラなど、他の方法でSSHパスワードを発見できます。
信頼できるコンピューター(たとえば、あなたまたはあなたの会社に属するコンピューター)を使用し、安全な場所から使用する限り、そのような攻撃について心配する必要はありません。 ただし、場合によっては、公共のコンピューターを使用する必要があります。 このようなシナリオでパスワードを保護するために、FreeBSDにはOne-time Passwords In Everything(OPIE)と呼ばれるセキュリティ機能が付属しています。
このチュートリアルでは、ワンタイムパスワードを生成して使用し、リモートFreeBSDサーバーにログインする方法を学習します。 安全な場所にいるときに1つ以上のワンタイムパスワードを事前に生成し、後で安全性の低い場所からサーバーにアクセスするときに使用できるように保存できます。 そうすれば、ワンタイムパスワードがログに記録されたとしても、攻撃者にとっては役に立たなくなります。
Note: As of July 1, 2022, DigitalOcean no longer supports the creation of new FreeBSD Droplets through the Control Panel or API. However, you can still spin up FreeBSD Droplets using a custom image. Learn how to import a custom image to DigitalOcean by following our product documentation.
前提条件
このチュートリアルに従うには、次のものが必要です。
- 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
. The -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としてサーバーにログインできるようになります。
次のように入力してSSHセッションを終了します exit
またはターミナルを閉じます。
別の端末を開き、新しい接続を確立してみてください。
ssh sammy@your_server_ip
今回は、プロンプトが少し異なります。
Promptotp-md5 497 zi5509 ext
Password:
ご覧のとおり、シーケンス番号が変更されています。 1つ減りました。 を使用して新しいワンタイムパスワードを生成するまで、再度ログインすることはできません。 opiekey
これらの新しい値で。 つまり、このチュートリアルのステップ4で説明されているプロセスをもう一度やり直す必要があります。
ステップ5—複数のワンタイムパスワードを作成する
信頼できるコンピューターに数日間アクセスできないことがわかっている場合は、サーバーに複数回アクセスできるように、複数のワンタイムパスワードが必要になる場合があります。 を実行することにより、必要なワンタイムパスワードの数を指定できます opiekey
とともに -n
オプション。 たとえば、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
ワンタイムパスワードは、16進数の形式で生成することもできます。 -x
オプション:
- 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サーバーに安全にログインする方法を学びました。 ワンタイムパスワードを生成し、ログインする必要があるたびにそれらを使用する方法を学びました。 この機能は、常に移動していて、公共のコンピューターやネットワークを使用せざるを得ない人々に最も役立ちます。