
私は複数のホスティング サーバーを運営していますが、最近 Joomla ベースの Web サイトに対するブルート フォース攻撃を数多く経験しています。攻撃者はadministrator/index.php
ページに対してブルート フォース攻撃を試みているようです。
通常、Wordpress ログインをブルートフォース攻撃しようとすると、次のルールセットを使用して IP をロックします。
SecAction phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},id:5000134
<Locationmatch "/wp-login.php">
SecRule ip:bf_block "@gt 0" "deny,status:401,log,id:5000135,msg:'ip address blocked for 5 minutes, more than 10 login attempts in 3 minutes.'"
SecRule RESPONSE_STATUS "^302" "phase:5,t:none,nolog,pass,setvar:ip.bf_counter=0,id:5000136"
SecRule RESPONSE_STATUS "^200" "phase:5,chain,t:none,nolog,pass,setvar:ip.bf_counter=+1,deprecatevar:ip.bf_counter=1/180,id:5000137"
SecRule ip:bf_counter "@gt 10" "t:none,setvar:ip.bf_block=1,expirevar:ip.bf_block=300,setvar:ip.bf_counter=0"
</Locationmatch>
しかし、有効なパスワードと無効なパスワードの両方で応答ステータスが「303 see other」であるため、Joomla! に同様のルールを見つけることができません。
何か助けが必要ですか?よろしくお願いします!
答え1
それで、これが私の答えです。
戻りヘッダーを調べたところ、Joomla! バックエンドはログインが正しい場合にいくつかの HTTP ヘッダーを返し、ログインが無効な場合はそれらを返さないことに気付きました。
例えば、ピー3Pヘッダーはログインが成功すると返されるので、その長さを確認します> 0
。
SecAction phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},id:5000144
<Locationmatch "/administrator/index.php">
SecRule ip:bf_block "@gt 0" "deny,status:401,log,id:5000145,msg:'ip address blocked for 5 minutes, more than 10 login attempts in 3 minutes.'"
SecRule RESPONSE_HEADERS:P3P "streq 0" "phase:5,t:none,nolog,pass,setvar:ip.bf_counter=0,id:5000146"
SecRule RESPONSE_HEADERS:P3P "!streq 0" "phase:5,chain,t:none,nolog,pass,setvar:ip.bf_counter=+1,deprecatevar:ip.bf_counter=1/180,id:5000147"
SecRule ip:bf_counter "@gt 10" "t:none,setvar:ip.bf_block=1,expirevar:ip.bf_block=300,setvar:ip.bf_counter=0"
</locationmatch>
答え2
受け入れられた回答の問題点は、ログイン ページの更新がいつ行われるかを考慮していないことです。そのため、ユーザーがログイン ページを更新すると、1) カウンターがリセットされる (これはよくありません)、または 2) 更新が失敗したログインとしてカウントされる (これもよくありません) のいずれかになります。
Joomla に対するブルートフォース攻撃を処理するためのルールを考案しました。これは「com_login」投稿値に基づいています。値が投稿値にある場合はログインに失敗したことを意味します。そうでない場合はログインが成功したことを意味します。ルールは以下にあります。ここ。