単純なHTTPS Webサービスに対するブルートフォース攻撃に対する基本的な防御を提供したいと考えています。 Webサービスはlogin
メソッド(たとえば http://example.org/login )を提供し、HTTP GETパラメーターまたはJSONのフィールドとしてユーザー名とパスワードを渡しますHTTP POSTで指定されたオブジェクト。ログイン試行が失敗すると、サービスはHTTPステータスコード403を返します。次の2種類の攻撃を防ぐことができます。
私が理解する限りでは、 mod-security
は、これらの攻撃をブロックするリクエストを検出するのに適していますが、私が見つけたチュートリアルは複雑で構文mod-security
私を困惑させます。上記の攻撃から保護するためのサンプルルールセットを提供できますか?擬似コードでは、適切な数のn
、m
、およびx
を使用して、次のようなものを記述します。
<LocationMatch /login>
IF response_status == 403 THEN
user = fetch_user_from_request
IF ++fail_count_per_IP[IP] > n
OR ++fail_count_per_USER[USER] > m THEN
block IP FOR x minutes
</LocationMatch>
ModSecurity CRSには、認証の試みが成功したかどうかに直接関係しないレート制限ルールセットがあります。以下はルールの1つです
SecRule IP:BRUTE_FORCE_COUNTER "@gt %{tx.brute_force_counter_threshold}"
"phase:5,id:'981042',t:none,nolog,pass,t:none,
setvar:ip.brute_force_burst_counter=+1,
expirevar:ip.brute_force_burst_counter=%{tx.brute_force_burst_time_slice},
setvar:!ip.brute_force_counter"
上記のルールでは、一部のIPに対してBRUTE_FORCE_COUNTERを維持しています。これは、セッションに対しても維持できるすべてのIPに対して維持されます。次に、brute_force_counter_thresholdで維持される法的試行の数であるしきい値を維持します。すべてのトランザクションについて、カウンタip.brute_force_burst_counter = + 1を増やしています。カウンターを更新するまでの時間間隔であるtx.brute_force_burst_time_sliceの後