I'm pretty new to this list, so apologies if this is the wrong place for this.

I've just been looking at the experimental brute force protection rules in 
OWASP CRS v2.2.7. Currently I still have the default brute_force_protected_urls 
value of "/login.jsp /partner_login.php", and was initially surprised to see 
that the home-page of my site triggered these rules. I think this is because 
the homepage "/" is always going to be within "/login.jsp" and will therefore 
never bypass rule 981039.

For me, matching the home-page of my site, wasn't my expected behaviour for 
this rule. To avoid matching the site home-page I guess I could either remove 
the leading slash in the brute_force_protected_urls , or for sites that only 
require protecting a single URL I could change the @within operator to be 
@streq. Any other thoughts / ideas would be welcome.

Cheers,
Paul

modsecurity_crs_10_setup.conf:

SecAction \

  "id:'900014', \

  phase:1, \

  t:none, \

  setvar:'tx.brute_force_protected_urls=/login.jsp /partner_login.php', \

  setvar:'tx.brute_force_burst_time_slice=60', \

  setvar:'tx.brute_force_counter_threshold=10', \

  setvar:'tx.brute_force_block_timeout=300', \

  nolog, \

  pass"





modsecurity_crs_11_brute_force.conf

SecRule IP:BRUTE_FORCE_BLOCK "@eq 1" 
"chain,phase:1,id:'981036',block,msg:'Brute Force Attack Identified from 
%{remote_addr} (%{tx.brute_force_block_counter} hits since last 
alert)',setvar:ip.brute_force_block_counter=+1"

        SecRule &IP:BRUTE_FORCE_BLOCK_FLAG "@eq 0" 
"setvar:ip.brute_force_block_flag=1,expirevar:ip.brute_force_block_flag=60,setvar:tx.brute_force_block_counter=%{ip.brute_force_block_counter},setvar:ip.brute_force_block_counter=0"



#

# Block and track # of requests but don't log

SecRule IP:BRUTE_FORCE_BLOCK "@eq 1" 
"phase:1,id:'981037',block,nolog,setvar:ip.brute_force_block_counter=+1"



#

# skipAfter Checks

# There are different scenarios where we don't want to do checks -

# 1. If the user has not defined any URLs for Brute Force Protection in the 10 
config file

# 2. If the current URL is not listed as a protected URL

# 3. If the current IP address has already been blocked due to high requests

# In these cases, we skip doing the request counts.

#

SecRule &TX:BRUTE_FORCE_PROTECTED_URLS "@eq 0" 
"phase:5,id:'981038',t:none,nolog,pass,skipAfter:END_BRUTE_FORCE_PROTECTION_CHECKS"

SecRule REQUEST_FILENAME "!@within %{tx.brute_force_protected_urls}" 
"phase:5,id:'981039',t:none,nolog,pass,skipAfter:END_BRUTE_FORCE_PROTECTION_CHECKS"

SecRule IP:BRUTE_FORCE_BLOCK "@eq 1" 
"phase:5,id:'981040',t:none,nolog,pass,skipAfter:END_BRUTE_FORCE_PROTECTION_CHECKS"



#

# Brute Force Counter

# Count the number of requests to these resoures

#

SecAction 
"phase:5,id:'981041',t:none,nolog,pass,setvar:ip.brute_force_counter=+1"



#

# Check Brute Force Counter

# If the request count is greater than or equal to 50 within 5 mins,

# we then set the burst counter

#

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"



#

# Check Brute Force Burst Counter and set Block

# Check the burst counter - if greater than or equal to 2, then we set the IP

# block variable for 5 mins and issue an alert.

#

SecRule IP:BRUTE_FORCE_BURST_COUNTER "@ge 2" 
"phase:5,id:'981043',t:none,log,pass,msg:'Potential Brute Force Attack from 
%{remote_addr} - # of Request Bursts: 
%{ip.brute_force_burst_counter}',setvar:ip.brute_force_block=1,expirevar:ip.brute_force_block=%{tx.brute_force_block_timeout}"



SecMarker END_BRUTE_FORCE_PROTECTION_CHECKS

_______________________________________________
Owasp-modsecurity-core-rule-set mailing list
Owasp-modsecurity-core-rule-set@lists.owasp.org
https://lists.owasp.org/mailman/listinfo/owasp-modsecurity-core-rule-set

Reply via email to