間違ったパスワードを入力すると、なぜ大きな遅延が発生するのですか?

間違ったパスワードを入力すると、なぜ大きな遅延が発生するのですか?

パスワードに何か奇妙な点を発見しました(まあ、私の知る限り)。たとえば、ログイン時に間違ったパスワードを入力すると、システムは数秒間通知するのを遅らせます。また、sudo間違ったパスワードで試してみると、シェルが「申し訳ありません。もう一度やり直してください」と言うまで待つ必要があります。

間違ったパスワードを「認識」するのになぜそれほど長い時間がかかるのか疑問に思います。これは私が使用した複数のディストリビューション(OSXを含む)でも発生したため、ディストリビューションに限定された問題ではないようです。

答え1

これはセキュリティ上の問題であり、実際にこれを実現するのに長い時間がかかりません。これは2つの脆弱性を解決します。

  1. これはログインの試みを制限します。つまり、誰かがハッキングを試みるのと同じくらい速くシステムを攻撃することはできません(1秒あたり100万試していますか?わかりません)。

  2. 資格情報が間違っていることを確認したら、すぐにこれを行うと、資格情報を無効にするのにかかる時間を活用して、一部の資格情報が正しいかどうかを推測するのに役立ち、推測時間を大幅に短縮できます。

この2つを防ぐには、システムが完了するまでに一定時間だけ必要です。 PAMを使用して待ち時間を設定できると思います(Michaelの答えをチェックしてください。)。

安全工学(第3版、アマゾン|第二版、無料)はこれらの問題についてより良い説明を提供します。バラより2枚(PDF)- 特に条項2.4および2.5.3.3。

答え2

これは意図的なものであり、無差別代入攻撃を制限する試みです。通常、FAIL_DELAY設定項目を見つけて/etc/login.defsその値(デフォルトでは秒)を変更することで変更できますが、ファイルのコメントを見るとPAMがとにかく少なくとも1秒の遅延を適用する3ように聞こえます。2

答え3

最新のLinuxシステムでは、pam_unix.soがこの遅延を課しているからです。前述のように変更してFAIL_DELAY2秒に設定できます/etc/login.defs。遅延をさらに減らすには、pam_unix.soに "nodelay"オプションを指定する必要があります。たとえば、私のシステムで最初からインクルード内容を追跡すると、/etc/pam.d/sudo次の行を編集する必要があることがわかります/etc/pam.d/system-auth

auth      required  pam_unix.so     try_first_pass nullok

次のように変更します。

auth      required  pam_unix.so     try_first_pass nullok nodelay

残念ながら、私のLinuxディストリビューション(アーチ)の設定方法によっては、sshdが使用するファイルに同じsystem-authファイルが含まれていますsystem-remote-login

sudoの遅延を排除することは記録され、ローカルユーザーだけが使用し、とにかくローカル攻撃者が迂回する可能性があるため、安全ですが、リモートログインのためにこれらの遅延を削除したくない場合があります。もちろん、共有システム認証ファイルよりも多くのカスタムsudoを作成することでこの問題を解決できます。

個人的に、私はsudoの遅延(およびSIGINTを無視する)は大きな間違いだと思います。つまり、間違ったパスワードを入力したことを知っているユーザーは、プロセスが終了してもイライラすることはありません。もちろん、sudoがSIGTSTPをキャプチャできないため、まだCtrl-Zを使用してsudoを停止できます。停止後、Kill -9(SIGKILL)を使用して終了できます。するのが面倒です。これは、自動化された攻撃が非常に速い速度で擬似端末でsudoを実行できることを意味します。ただし、これらの遅延は、正当なユーザーをイライラしてsudoを再利用しないように終了するのではなく、ルートシェルを一時停止することをお勧めします。

関連情報