OPIEを使用してFreeBSD 10.1のワンタイムパスワードを取得する方法

前書き

SSHは、サーバーにリモートでログインする最も一般的な方法です。 これは、中間者攻撃やリプレイ攻撃からパスワードを保護する暗号化プロトコルです。

ただし、SSHはデータが転送中にのみ保護されることに注意してください。 攻撃者は、キーロガーや戦略的に配置されたカメラを使用するなど、他の手段でSSHパスワードを発見できます。

信頼できるコンピューター(たとえば、自分または会社に属しているコンピューター)を使用し、安全な場所から使用している限り、このような攻撃を心配する必要はありません。 ただし、公共のコンピューターを使用する必要がある場合があります。 このようなシナリオでパスワードを保護するために、FreeBSDにはOne-time Passwords In Everything(OPIE)と呼ばれるセキュリティ機能が付属しています。

このチュートリアルでは、ワンタイムパスワードを生成して使用し、リモートFreeBSDサーバーにログインする方法を学びます。 安全な場所にいるときに1つまたは複数のワンタイムパスワードを事前に生成し、安全性の低い場所からサーバーにアクセスするときに保存しておくことができます。 そうすれば、ワンタイムパスワードが記録されたとしても、攻撃者にとっては有用ではありません。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • SSH経由でアクセス可能なFreeBSD 10.1サーバー

  • * root への切り替えが許可されているユーザー。 DigitalOceanのデフォルトの freebsd *ユーザーは問題ありません

ステップ1-新しいOPIEユーザーを作成する

リモートサーバーからロックアウトされないようにするには、OPIEで使用する別のユーザーを作成することをお勧めします。

次のように入力して、* root *に切り替えます。

sudo su

ワンタイムパスワードで使用する新しいユーザーを作成するには、次のように入力します。

adduser

ユーザーに関するさまざまな詳細を入力するように求められます。 ユーザー名を* sammy *にします。 パスワードの入力を求められたら、必ず強力なパスワードを入力してください。 他のすべてのプロンプトについては、単に「+ ENTER +」を押してデフォルト値を選択できます。

InteractiveUsername:
Full name:
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:
Enter password again:
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):
adduser: INFO: Successfully added (sammy) to the user database.
Add another user? (yes/no):
Goodbye!

「+ yes」と入力して詳細を確認し、別のユーザーを追加するかどうかを尋ねられたら、「+ no 」と入力して「 adduser」を終了します。

これで、元のユーザー(デフォルトの* freebsd *ユーザーまたは通常のsudoユーザー)に切り替えることができます。

exit

この時点で、OPIE以外のsudoユーザーでサーバーにログインする必要があります。

ステップ2-新しいOPIEユーザーとしてログイン

現在のターミナルセッションから、 `+ ssh +`を使用してOPIEユーザーである* sammy *としてログインします。

ssh @localhost

OPIEのセットアップは安全な端末からのみ実行できるため、これは重要です。 `+ rsh `や ` telnet +`などの安全でないプロトコルを使用した場合、OPIEは文句を言います。

手順3-新しいユーザーのOPIEを有効にする

警告

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:
Again new secret pass phrase:

新しいOPIEシードとランダム化されたパスフレーズを受け取ります。

OutputID  OTP key is 499

この出力では、* sammy はユーザー、 499 は_iteration count _、 si5509 *は_seed_です。

  • sammy *がOPIE認証システムに追加されたため、実際のSSHパスワードを使用してログインできなくなりました。 ローカルマシンで新しいターミナルを開き、次のように入力します。

ssh sammy@

次のようなプロンプトが表示されます。

Promptotp-md5 498 zi5509 ext
Password:

ワンタイムパスワードを入力するようになりました。 ワンタイムパスワードはまだ生成されていないため、現時点ではログインできません。 ターミナルを閉じて、* sammy *としてログインしている以前のターミナルに戻ります。

ステップ4-ワンタイムパスワードを作成する

ユーザーがOPIE認証システムに追加されると、499から始まる反復カウント番号とランダムシードがユーザーに関連付けられます。 ワンタイムパスワードを生成するには、これらの値を知る必要があります。

警告

この時点で* sammy *としてログインしている場合は、コマンド `+ opieinfo +`を使用してこれらの値を決定できます。

opieinfo

出力には2つの値が含まれます。 最初はシーケンス番号で、2番目はシードです。

Output498 zi5509

ノートラベル

これらの値を `+ opiekey `コマンドに渡して、ワンタイムパスワードを生成します。 ` opiepasswd `と同様に、 ` opiekey +`も信頼できるコンピューターからのみ実行する必要があります。

opiekey

または、次のように入力することもできます。

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:

6つの短い単語を含む最後の行は、ワンタイムパスワードです。

新しいターミナルを開いて、もう一度ログインしてみてください。

ssh sammy@

プロンプトは同じままです:

Promptotp-md5  ext
Password:

このプロンプトに表示される数字は、 `+ opieinfo `の出力と、 ` opiekey +`に渡したパラメーターに一致することに注意してください。

これで、パスフレーズを貼り付けるか、手動で入力できます。 長いパスワードを入力し始める前に、間違いを避けるために、「+ ENTER」を押します。 プロンプトが変更され、入力したパスワードが表示されます:

Promptotp-md5 498 zi5509 ext
Password [echo on]:

ここでワンタイムパスワードを入力すると、* sammy *としてサーバーにログインできるようになります。

「+ exit +」と入力するか、ターミナルを閉じて、SSHセッションを終了します。

別のターミナルを開き、新しい接続を確立してみてください。

ssh sammy@

今回は、プロンプトが少し異なります。

Promptotp-md5  zi5509 ext
Password:

ご覧のとおり、シーケンス番号が変更されています。 1つ減りました。 これらの新しい値で `+ opiekey +`を使用して新しいワンタイムパスワードを生成するまで、再度ログインすることはできません。 つまり、このチュートリアルの*ステップ4 *で説明されているプロセスを最初からやり直す必要があります。

ステップ5-複数のワンタイムパスワードを作成する

信頼できるコンピューターに数日間アクセスできないことがわかっている場合は、サーバーに複数回アクセスできるように、複数のワンタイムパスワードが必要になる場合があります。 `+ -n `オプションを指定して ` opiekey +`を実行すると、必要なワンタイムパスワードの数を指定できます。 たとえば、3つのワンタイムパスワードを生成するには、次のように入力します。

opiekey  `opieinfo`

Note

出力には、3つのパスワードとそのシーケンス番号が含まれます。

InteractiveUsing the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:

ワンタイムパスワードは、 `+ -x +`オプションを使用して16進数形式で生成することもできます。

opiekey  -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:

あなたは今、これらを紙に書き留め、旅行中に紙を持ち歩くことになっています。 次回ログインする必要があるときは、ペーパーを使用して、SSHプロンプトに表示されているシーケンス番号に関連付けられているパスワードを見つけて入力します。 パスワードを使用した後、無効にすることをお勧めします。 言うまでもなく、この論文が間違った手に渡らないようにする必要があります。

紙のすべてのパスワードを使い果たしたら、この手順をもう一度繰り返して、さらにパスワードを生成します。 ただし、498個のパスワードをすべて使い果たし、シーケンス番号がゼロになった場合は、 `+ opiepasswd -c +`を再度呼び出す必要があります。 これにより、ランダムシードとシーケンス番号がリセットされます。

結論

実際の状況では、安全な場所から適切な数のパスワードを事前に準備し、紙に書き留めて、安全でない場所からログインする必要があるときに1つずつ使用する必要があります。 紙を安全に保管してください!

このチュートリアルでは、OPIE認証システムを使用して、信頼できないコンピューターの端末からリモートのFreeBSDサーバーに安全にログインする方法を学びました。 ワンタイムパスワードを生成し、ログインする必要があるたびに使用する方法を学習しました。 この機能は、絶えず移動していて、公共のコンピューターとネットワークを使用せざるを得ない人にとって最も便利です。