序章

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に切り替えます。

  1. sudo su

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

  1. adduser

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

Interactive
Username: 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ユーザーの元のユーザーに戻すことができます。

  1. exit

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

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

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

  1. ssh sammy@localhost

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

手順3—新規ユーザーに対してOPIEを有効にする

警告

ユーザーに対してOPIEを有効にすると、そのユーザーは通常のパスワードでログインできなくなります。 したがって、OPIEなしで少なくとも1人のユーザーにアクセスできるようにしてください。 このチュートリアルでは、freebsdユーザーを標準のSSHキーログインで維持しています。

OPIE認証システムにユーザーを追加するには、コマンドopiepasswdを使用します。 -cオプションは、信頼できるコンピューターを使用していて、安全な場所にいることをコマンドに通知します。

  1. opiepasswd -c

シークレットパスフレーズの入力を求められたら、10文字以上のパスフレーズを入力します。 このパスフレーズは、ユーザーのSSHパスワードと同じであってはなりません。 ワンタイムパスワードを生成するには、後でこのパスフレーズが必要になります。

コマンドの完全な出力は次のようになります。

Interactive
Adding 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シードとランダム化されたパスフレーズを受け取ります。

Output
ID sammy OTP key is 499 si5509 RITE NERO BASS SOFA BEND TO

この出力では、 sammy がユーザー、 499 反復回数si5509シードです。 。

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

ssh sammy@your_server_ip

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

Prompt
otp-md5 498 zi5509 ext Password:

これで、ワンタイムパスワードを入力する必要があります。 ワンタイムパスワードはまだ生成されていないため、今のところログインできません。 ターミナルを閉じて、sammyとしてログインしている前のターミナルに戻ります。

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

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

警告

常に安全な場所からワンタイムパスワードを生成することを忘れないでください。

すでにsammyとしてログインしている場合は、この時点でログインしているはずですが、コマンドopieinfoを使用してこれらの値を確認できます。

  1. opieinfo

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

Output
498 zi5509

ノートラベル

現在OPIE以外のユーザーでログインしている場合は、次のようなエラーが発生します。

Output
freebsd not found in database.

この場合、新しいターミナルウィンドウを開き、OPIEユーザーでログインを試みることで情報を取得できます。 パスワードプロンプトには、現在の反復回数とシードが含まれます。 この情報をコピーして、認証されたセッションで使用します。

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

  1. opiekey 498 zi5509

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

  1. opiekey `opieinfo`

OPIEユーザーのパスフレーズを入力するように求められます。 前の手順で選択したパスフレーズを入力します。 このコマンドの出力は次のとおりです。

Interactive
Using 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

プロンプトは引き続き同じです。

Prompt
otp-md5 498 zi5509 ext Password:

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

これで、パスフレーズを貼り付けるか、手動で入力することができます。 長いパスワードの入力を開始する前に、間違いを避けるために、ENTERを押してください。 プロンプトが変わり、入力したパスワードを確認できるようになります。

Prompt
otp-md5 498 zi5509 ext Password [echo on]:

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

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

別の端末を開き、新しい接続を確立してみてください。

ssh sammy@your_server_ip

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

Prompt
otp-md5 497 zi5509 ext Password:

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

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

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

  1. opiekey -n 3 `opieinfo`

ノート

opieinfoを使用する代わりに、以前のように反復カウント数とシードを指定できます。

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

Interactive
Using 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進数の形式で生成することもできます。

  1. opiekey -x -n 3 `opieinfo`

もちろん、パスワードはわかりにくくなります。

Interactive
Using 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サーバーに安全にログインする方法を学びました。 ワンタイムパスワードを生成し、ログインする必要があるたびにそれらを使用する方法を学びました。 この機能は、常に移動していて、公共のコンピューターやネットワークを使用せざるを得ない人々に最も役立ちます。