Módulos de Apache (mod_security)


Este módulo nos va a aportar la capacidad de filtrar accesos web a nivel de aplicación (capa 7) y normalmente se convina con el módulo de mod_proxy.

Introducción

Al instalar el paquete nos encontramos que vamos a cargar dos paquetes:

libapache-mod-security - Tighten web applications security for Apache
mod-security-common - Tighten web applications security - common files

En nuestra configuración al instalarlo se modificará el fichero modules.conf para cargar el mod_sec.

Configuración

Pasamos a definir las reglas de nuestro httpd.conf

  • SecFilterSelective "\'" log,deny -> Aquí estamos escapando la comilla simple, y siempre que aparezca como argumento este caracter se genera un log y se deniega el acceso.

Las opciones que podemos incluir como argumentos a las directrices son: (Log, deny, nolog, allow, satus, redirect, exec o pause).

Indicar que si ponemos el carácter de comillas como %27 también se aplica esta regla.
Al igual ocurre con otro tipo de cadenas, como // lo sustituye por una sola /, y reemplaza %00 por espacios.

  • SecAuditEngine RelevantOnly -> mandamos a los logs las actividades sospechosas, podríamos poner On en vez de RelevantOnly y guardaríamos en los logs todo Cookies, POST, GETS,…
  • SetFilterScanOutput On -> Filtra la información que devuelve nuestro servidor.
  • SetFilterSelectiveOutput "/var/log/sulog" log,deny -> Logea y deniega el acceso a un directorio o ruta.
  • SecFilter "\?" log,redirect:http://www.google.com -> En el caso de que se ponga una interrogación, se logea y se redirige a google.
  • SecFilter "cmd=" log,exec:/usr/local/bin/mail_aviso.pl -> En el caso de que encuentre ese patrón, ejecuta la ruta absoluta del script definido.
  • SecFilterScanPOST On -> el sistema examina los POST que se lancen.

  • SecFilter "delete[[:space:]]+from"
  • SecFilter"insert[[:space:]]+into"
  • SecFilter "select-+from" -> Eliminamos ataques de inyección de SQL.
  • SecFilterEngine On -> decimos que se active el filtrado del módulo mod_security;
  • SerFilterCheckURLEncoding On -> Fuerza al browser a usar la codificación de la URL.

Otras reglas o ejemplos que merecen comentarse, se basan en analizar las cabeceras del navegador, esto se apoya en la directiva de Location:
Location puede ser cualquier cabecera que mete el server y las cabeceras que se analizan en el cliente y podemos pasar varios o filtrar varios separados por pipes”|”.
Entre otros están: REMOTE_ADDR | REMOTE_HOST | POST_PLAYLOAD | COOKIES_NAMES | COOKIES_VALUES | QUERY_STRING| ARGS (argumentos pasados) | TIME | REQUEST,… para más información de todas las opciones: Modsecurity-manual Documentation”

  • SecFilterSelective REQUEST_URI "Error_login.php" chain
  • SelecFilterSelective ARG_user "user$" exec:/usr/local/bin/mail_aviso.sh -> REQUEST_URI es la página a la que nos redirige cuando hemos fallado el acceso en nuestro ejemplo, entonces con CHAIN enlazamos con otra regla y si el ARG_user es igual al valor de user (variable) entonces se ejecuta el script definido en la regla.
  • SetFilterSelective "HTTP_USER_AGENT | REMOTE_HOST" "^$" deny,status:500 -> Los campos de la cabecera HTTP_USER_AGENT y REMOTE_HOST no pueden ser vacíos (por si nos hacen un telnet al puerto 80, o usan netcat), en dicho caso deniega la página y dice error 500 dando a entender que el sistema se ha caído.

Espero haya sido de utilidad

, ,

%d bloggers like this: