http - security2_module - modsecurity setvar
modsecurity create rule disable GET request (1)
Quiero crear una regla mod security2x que bloqueará la solicitud GET a una URL específica.
por ejemplo, quiero bloquear la URL con el GET en el encabezado: ''www.test.com''
Nunca he hecho una regla dentro de modsecurity, y no estoy seguro si esto funcionará con el modo de detección de anomalías.
Este sería un ejemplo de la solicitud GET/secure/bla/test/etc/
: GET/secure/bla/test/etc/
Esto es lo que tengo hasta ahora: SecRule ARGS "www.test.com" phase:2,log,deny,id:''1234'',msg:''403 Access Denied''
Quieres algo como esto:
SecRule REQUEST_URI "@streq /secure/bla/test/etc/" /
"phase:1,id:1234,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,status:403,msg:''403 Access Denied'',chain"
SecRule REQUEST_METHOD "@streq get" "t:none,t:lowercase"
Necesita encadenar dos reglas juntas, ya que desea verificar dos condiciones (la ruta es / secure / bla / test / etc / y el método es GET).
Si desea agregar una tercera regla para verificar el host (por ejemplo, si tiene múltiples hosts virtuales y esta URL es válida para solicitudes GET en algunos de ellos), puede:
SecRule REQUEST_URI "@streq /secure/bla/test/etc/" /
"phase:1,id:1234,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,status:403,msg:''403 Access Denied'',chain"
SecRule REQUEST_METHOD "@streq get" "t:none,t:lowercase,chain"
SecRule SERVER_NAME "@streq www.example.com"
O, alternativamente, puede usar REQUEST_URI_RAW, que incluirá el protocolo y el nombre de host, así como el recurso solicitado:
SecRule REQUEST_URI_RAW "^https?://www.test.com/secure/bla/test/etc/" /
"phase:1,id:1234,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,status:403,msg:''403 Access Denied'',chain"
SecRule REQUEST_METHOD "@streq get" "t:none,t:lowercase"
Notarás que también he agregado bastantes funciones de transformación (las t:
bits) para ayudar a evitar que las personas intenten evitar esta regla (por ejemplo, con una ruta como /secure/bla/TEST/../test/etc/
)
Todo esto está cubierto en el manual de referencia: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual pero toma un poco de práctica para acostumbrarse a ¡Lo admito!
El modo de detección de anomalías simple significa que las reglas que pueden activarse para las solicitudes válidas no se bloquean inmediatamente, sino que asignan una puntuación y si la puntuación total de todas las reglas para esa solicitud está por encima de un cierto umbral, bloquea, de lo contrario no lo hace. Esto permite que las reglas "ruidosas" aún se incluyan pero que se ignoren a menos que se activen muchas reglas ruidosas para una solicitud, o si se dispara una regla importante.
No hay nada que le impida bloquear de manera explícita con la opción "denegar" como he hecho anteriormente, incluso en el modo de detección de anomalías. Esta regla parece bastante segura desde el momento en que se dispara accidentalmente para una solicitud legítima (¡una vez que has probado que funciona!) Así que simplemente pasaría del bloqueo directo como lo hice anteriormente. La alternativa es reemplazar deny
with block,setvar:tx.anomaly_score=+%{tx.critical_anomaly_score}
que tendrá el mismo efecto cuando se marque la puntuación más tarde, pero en mi mente complica innecesariamente la legibilidad de la regla ya que siempre bloqueará de todas formas.
La anotación de anomalías frente a la puntuación tradicional se trata con más detalle en esta publicación de blog: http://blog.modsecurity.org/2010/11/advanced-topic-of-the-week-traditional-vs-anomaly-scoring-detection-modes .html