web-dev-qa-db-ja.com

mod-securityによるブルートフォースからの単純なWebサービスの保護

単純なHTTPS Webサービスに対するブルートフォース攻撃に対する基本的な防御を提供したいと考えています。 Webサービスはloginメソッド(たとえば http://example.org/login )を提供し、HTTP GETパラメーターまたはJSONのフィールドとしてユーザー名とパスワードを渡しますHTTP POSTで指定されたオブジェクト。ログイン試行が失敗すると、サービスはHTTPステータスコード403を返します。次の2種類の攻撃を防ぐことができます。

  • 特定の期間内に同じIPから失敗したログイン試行が多すぎる
  • 指定された期間内に同じユーザー名に対して失敗したログイン試行が多すぎる

私が理解する限りでは、 mod-securityは、これらの攻撃をブロックするリクエストを検出するのに適していますが、私が見つけたチュートリアルは複雑で構文mod-security私を困惑させます。上記の攻撃から保護するためのサンプルルールセットを提供できますか?擬似コードでは、適切な数のnm、および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>
4
Jakob

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の後

1
Ali Ahmad