Mod_Security는 Joomla에 대한 무차별 공격을 방지합니다.

Mod_Security는 Joomla에 대한 무차별 공격을 방지합니다.

최신 버전의 Joomla에서 여러 로그인 실패를 감지 및 차단하기 위해 Mod_Security 규칙을 찾거나 생성하려고 합니다. 나는 2015년 3월의 답변을 여기에서 찾았습니다.https://serverfault.com/a/646608/960638하지만 내 테스트에서는 로그인 실패를 감지하지 못했습니다. 로깅을 활성화해도 아무 것도 감지되지 않습니다. 코드가 오래된 것 같습니다.

IT Octopus가 게시한 또 다른 ModSec 규칙을 다음에서 찾았습니다.https://www.itoctopus.com/a-modsecurity-rule-to-block-brute-force-attacks-on-a-joomla-website 코드는 아래와 같습니다. 서버에서 테스트했지만 너무 민감해서 Joomla에 로그인하고 로그아웃한 후 나를 차단했습니다.옳은신임장).

<Location /administrator>
    SecDefaultAction phase:2,deny,status:403,log,auditlog
    SecRule IP:bf_counter "@eq 5" "id:1000002,phase:2,log,block,expirevar:IP.bf_counter=3600,msg:'IP address blocked because of a suspected brute force attack on the Joomla website'"
    SecRule ARGS:option "@streq com_login" "id:1000000,phase:2,chain,t:none,log,pass,msg:'Multiple Joomla authentication failures from IP address', setvar:IP.bf_counter=+1"
</Location>

다음으로 ModSecurity 규칙을 찾았습니다.http://artefact.io/brute-force-protection-modsecurity/그리고 그것은 제가 수개월 동안 제 서버에서 사용해 왔던 것입니다. 버그를 발견한 어제까지 정말 잘 작동했습니다. 클라이언트는 10개의 Joomla 웹사이트를 가지고 있으며 올바른 자격 증명으로 로그인했을 때 IP가 제한되는 것을 발견했습니다. 나는 내 자신의 테스트 중에 이것을 복제할 수 있었습니다. 그러므로 아래 코드는 우리가 찾은 최고의 코드이지만 com_login / login 라인은 로그인 실패와 성공적인 로그인을 구별하지 못하는 것 같습니다. 이는 일반적인 무차별 대입을 방지하기 위해 작동하지만 클라이언트에 Joomla 사이트가 많고 합법적으로 한 번에 여러 설치에 액세스하는 경우에는 작동하지 않습니다. 코드는 다음과 같습니다.

# Joomla Brute Force
SecAction "phase:1,pass,setvar:TX.max_requests=6,setvar:TX.requests_ttl=180,setvar:TX.block_ttl=900,initcol:ip=%{REMOTE_ADDR},nolog,id:5001000"
<LocationMatch "/administrator/index.php">
SecAction "phase:2,chain,nolog,id:5001022"
SecRule REQUEST_METHOD "^POST$" "chain"
SecRule ARGS_POST_NAMES "^username$" "chain"
SecRule ARGS_POST_NAMES "^passwd$" "chain"
SecRule ARGS_POST:option "^com_login$" "chain"
SecRule ARGS_POST:task "^login$" "chain"
SecAction "setvar:ip.request_count=+1,expirevar:ip.request_count=%{TX.requests_ttl}"

SecRule IP:request_count "@ge %{TX.max_requests}" "phase:2,drop,setvar:ip.blocked=1,expirevar:ip.blocked=%{TX.block_ttl},log,msg:'Joomla brute force. Blocking for %{TX.block_ttl} seconds',id:5001023"

</LocationMatch>

마지막으로 "로그인 성공 후 P3P 헤더가 반환됩니다"라고 제안한 일부 게시물을 읽었으며 이는 ModSecurity 규칙에 사용될 수 있습니다. @godzillante가 제안한 내용은 다음과 같습니다.https://serverfault.com/a/646608/960638

ModSecurity 5단계(로그 파일 분석)를 사용하므로 이것이 단점인지 잘 모르겠습니다. 그리고 더 중요한 것은 테스트에서 제대로 작동하지 못했다는 것입니다. 로깅이 활성화된 경우에도 실패한 로그인을 감지하지 못했으며 액세스를 제한하지 않았습니다. 코드는 다음과 같습니다.

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 5 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 5" "t:none,setvar:ip.bf_block=1,expirevar:ip.bf_block=300,setvar:ip.bf_counter=0"
</locationmatch>

여기서 나의 목표는 "Joomla Brute Force"(위) 코드를 개선하는 것입니다. 왜냐하면 이 코드는 무차별 대입 공격을 차단하지만 안타깝게도 사용자가 합법적으로 Joomla에 많이 로그인하는 경우에도 차단하기 때문입니다. Joomla에 대한 로그인 실패와 성공적인 로그인의 차이를 구분할 수 있는 코드가 필요합니다. 저는 이 작업을 한동안 진행해왔기 때문에 여기 커뮤니티에 연락을 드리고 있습니다. 미리 감사드립니다!

관련 정보