13

失敗したログイン試行をすべてログに記録するようにデータベースをセットアップしました。失敗した試行回数に 0.05 秒か何かを掛けると思いました。何かのようなもの:

            time_nanosleep(0, (50000000 * $failed_attempts ) ); 

ハッカーがパスワードを推測するために使用する試行回数が増えるほど、毎回の確認にかかる時間が長くなります。100 個のパスワードを確認した後、試行ごとに 5 秒待たなければなりません。

これはブルートフォーシングを止める良い方法ですか? ユーザーを IP で識別します。したがって、複数のプロキシ サーバーなどを使用してアプリケーションをブルート フォースできると思いますが、それ以外は良い考えだと思います。皆さんはどう思いますか?

4

8 に答える 8

9

次のようなものはどうですか:

time_nanosleep(0, (10000000000 * (log($failed_attempts)^10)) ); 

これにより、指数関数的に増加する試行ウィンドウが得られます。

于 2011-01-27T17:14:22.757 に答える
5

私が目にする最初の問題は、応答間に遅延があるかどうかを気にしないボットを扱っていることです。これを制限するために何かをしない限り、システム リソースを使い果たし、非常に長い遅延が発生する可能性があります。5 回失敗したら IP を禁止するだけです。実際のユーザーを禁止することが心配な場合は、一時的な禁止になる可能性があります。

于 2011-01-27T17:10:31.220 に答える
3

Sleep()はCPUサイクルを使用するため、使用しないようにしてください。10,000個のIPアドレスからブルートフォース攻撃を受けると、10,000個のsleep()子プロセスまたはスレッドがフォークされ、サーバーに大きな負荷がかかります。

代わりに、PHPを使用してIPアドレスをブロックしてみてください。このようなもの。

function block_ip($ip) {
    $deny = array("$ip");
    if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
        header("HTTP/1.1 403 Forbidden");
        exit();
    }
}
于 2011-10-31T09:58:07.517 に答える
3

IP による再試行を制限し、CAPTCHA を使用します。サーバーに過負荷をかけないでください。KISS を考えてみてください。

于 2011-01-27T17:26:55.790 に答える
2

ブルートフォースに対する完全な戦略である必要はありませんが、その戦略の優れたコンポーネントであり、IMO はほぼ常に使用する必要があります。

于 2011-01-27T17:07:22.867 に答える
1

その時間を線形ではなく指数関数的に増やしたい場合があります。または修正します。たとえば、5 回失敗した後、1 時間は拒否します。

于 2011-01-27T17:11:11.860 に答える
0

ボットは、遅延が指数関数的であろうと対数的であろうと、何であろうと、実際には気にしません。使用する遅延は、ポーリングによって克服できます。だから、遅れるとは思わないでください。試行回数を制限し、Google reCAPTCHA を使用することを検討してください。公開秘密鍵暗号化を使用します。ほとんどのボットを排除するために機能し、クラックするのがより困難です。

于 2011-01-28T02:50:38.627 に答える
0

どこかは忘れましたが、どこかでこれが行われたのを見たことがあります。私が見た例では、試行が失敗するたびに時間遅延が 2 倍になりました。たとえば、0.1 秒で開始した場合、パスワードを 1 回または 2 回間違える可能性のある通常のユーザーは、最大で 0.4 秒の遅延が発生します。彼らは気付かないでしょう。しかし、力ずくで攻撃しようとすると、数分または数時間の遅延がすぐに発生します。

Web アプリの場合、サービス拒否攻撃を開始するという問題があるかもしれません。それはすべて、システムが時間遅延を処理する方法に依存します。

于 2011-01-27T17:48:09.133 に答える