web-dev-qa-db-ja.com

Joomla!のmod_securityルールセット管理者

私はいくつかのホスティングサーバーを実行していますが、最近、joomlaベースのWebサイトに対して多くのブルートフォース攻撃を経験しました。攻撃者はadministrator/index.phpページに対してブルートフォースを試みているようです。

私は通常、IPがブルートフォースを試みたときにIPをロックしますWordpress次のルールセットでログインします:

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!の同様のルールが見つかりません。

何か助けはありますか?前もって感謝します!

4
godzillante

だから、これが私の答えです。

リターンヘッダーを調べると、Joomla!バックエンドは、ログインが正しい場合はいくつかのHTTPヘッダーを返し、ログインが無効な場合はそれらを返しません。

たとえば、ログインが成功すると P3P ヘッダーが返されるので、その長さが> 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
godzillante

受け入れられた回答の問題は、ログインページの更新が行われるときに考慮されないことです。したがって、ユーザーがログインページを更新すると、1)カウンターをリセットする(これは悪い)か、2)更新を失敗したログインとしてカウントします(これも悪い)。

「com_login」投稿値に基づいて、Joomlaに対するブルートフォース攻撃を処理するためのルールを考案しました。値がpost値にある場合、これはログインに失敗したことを意味し、そうでない場合、ログインは成功します。ルールは見つけることができます ここ

0
itoctopus