OpenSSHを使用した標準のLinuxインストールでは、パスワード認証を使用したSSHログイン試行のデフォルトのレート制限は何ですか?
攻撃者は1時間にいくつのパスワードを推測できますか?
すべての接続で、パスワードプロンプトには特定の制限があります。 MaxAuthTries
オプションで定義されます(デフォルトは6)。しかし、一度にすべての試みを行うことはできません。失敗するたびに、時間のペナルティが発生します(PAMスタックを遅延して実行するのに最大3秒)。
攻撃者は、MaxStartups
によって制限されたレートで接続を発行できます(デフォルトは10:30:100で、認証されていない接続が10個開いている場合、接続の拒否を開始します)。
LoginGraceTime
オプションは、攻撃者が認証に成功しなかった場合にサーバーによって接続が閉じられるまでの最大時間を定義するだけなので、攻撃者とは無関係です。
ここでの制限要因は主に鍵交換であり、次の理由で時間がかかります。
私の高速テストでは、他の部屋でRaspberryPiへの接続を確立するのに約1秒かかることが示されました。しかし、それはより速く進む可能性があり、SSHDはより多くの並列要求を処理できます。 localhostからのパスワードプロンプトはほぼ即時です。
攻撃者が単純に10の接続を並行して発行し、プロンプトを1秒間待機し、1つのパスワードを書き込み、2番目のプロンプト(またはパスワードが実際に正しいことの確認)を3秒間待機するとします(...それが消えるまで6回繰り返されます) 。これには、シングルスレッドで6回のパスワード試行、10スレッドで60回のパスワード試行で1 + 3 * 6秒(19秒)かかります。この楽観的なケースでは、1分で180に、1時間で10kに切り上げます。
攻撃者はスレッドの数を20以上に増やすことができ、拒否される可能性は非常に低くなりますが、試行回数は2倍になります(またはそれ以上ですが、100を超えることはできません)。これがfail2ban
が存在します。
man sshd_config:
MaxStartups Specifies the maximum number of concurrent unauthenticated con‐ nections to the SSH daemon. Additional connections will be dropped until authentication succeeds or the LoginGraceTime expires for a connection. The default is 10:30:100. Alternatively, random early drop can be enabled by specifying the three colon separated values “start:rate:full” (e.g. "10:30:60"). sshd(8) will refuse connection attempts with a probability of “rate/100” (30%) if there are currently “start” (10) unauthenti‐ cated connections. The probability increases linearly and all connection attempts are refused if the number of unauthenticated connections reaches “full” (60).