
Ich versuche, eine Mod_Security-Regel zu finden/erstellen, um mehrere Anmeldefehler in der neuesten Version von Joomla zu erkennen und zu blockieren. Eine Antwort vom März 2015 habe ich hier gefunden:https://serverfault.com/a/646608/960638aber in meinen eigenen Tests erkennt es keine Anmeldefehler. Selbst mit aktivierter Protokollierung erkennt es nichts. Ich vermute, der Code ist veraltet.
Ich habe eine weitere von IT Octopus veröffentlichte ModSec-Regel gefunden unterhttps://www.itoctopus.com/eine-modsecurity-regel-um-brute-force-angriffe-auf-einer-joomla-website-zu-blockieren Der Code ist unten. Ich habe ihn auf einem Server getestet, aber ich fand, dass er zu empfindlich war und mich blockierte, nachdem ich mich bei Joomla an- und abgemeldet hatte (mitrichtigReferenzen).
<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>
Als nächstes fand ich eine ModSecurity-Regel beihttp://artefact.io/brute-force-protection-modsecurity/und das ist das, was ich seit vielen Monaten auf meinen Servern verwende. Es hat wirklich gut funktioniert, bis wir gestern einen Fehler entdeckt haben. Ein Kunde hat 10 Joomla-Websites und hat festgestellt, dass seine IP-Adresse eingeschränkt wurde, als er sich dort anmeldete (mit den richtigen Anmeldeinformationen). Ich konnte dies bei meinen eigenen Tests reproduzieren. Daher ist der folgende Code der beste Code, den wir bisher gefunden haben, aber die Zeilen com_login / login scheinen nicht zwischen fehlgeschlagenen und erfolgreichen Anmeldungen zu unterscheiden. Es funktioniert, um allgemeine Brute-Force-Angriffe zu verhindern, aber es funktioniert nicht, wenn ein Kunde viele Joomla-Websites hat und legitimerweise auf mehrere Installationen gleichzeitig zugreift. Dies ist der Code:
# 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>
Schließlich habe ich einige Beiträge gelesen, in denen vorgeschlagen wurde, dass „der P3P-Header nach einer erfolgreichen Anmeldung zurückgegeben wird“ und dies in einer ModSecurity-Regel verwendet werden könnte. Dies wurde hier von @godzillante vorgeschlagen:https://serverfault.com/a/646608/960638
Es verwendet ModSecurity Phase 5 (Analyse der Protokolldateien), daher bin ich mir nicht sicher, ob dies ein Nachteil ist. Und was noch wichtiger ist: Bei meinen Tests konnte ich es nicht zum Laufen bringen. Selbst mit aktivierter Protokollierung erkannte es keine fehlgeschlagenen Anmeldungen und schränkte den Zugriff nicht ein. Hier ist der Code:
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>
Mein Ziel hier ist es, den Code „Joomla Brute Force“ (oben) zu verbessern, da er Brute-Force-Flooding blockiert, aber leider auch Benutzer blockiert, wenn sie sich häufig legitim bei Joomla anmelden. Ich brauche Code, der zwischen einem fehlgeschlagenen und einem erfolgreichen Login bei Joomla unterscheiden kann. Ich arbeite schon seit einiger Zeit daran, also wende ich mich hier an die Community. Vielen Dank im Voraus!