ModSecurity en Debian Etch

modSecurity™ es un firewall de aplicaciones Web embebible que ejecuta como módulo del servidor web Apache, provee protección contra diversos ataques hacia aplicaciones Web y permite monitorear tráfico HTTP, así como realizar análisis en tiempo real sin necesidad de hacer cambios a la infraestructura existente.[1]

modSecurity™ para Apache es un producto desarrollado por Breach Security. modSecurity™ está disponible como Software Libre bajo la licencia GNU General Public License, a su vez, se encuentra disponible bajo diversas licencias comerciales.

Funcionamiento

modSecurity™ es una herramienta para detección y prevención de intrusos para aplicaciones Web.

El módulo cuenta con diversas funcionalidades:[3]

  • Filtrado de Peticiones: los pedidos HTTP entrantes son analizados por el módulo mod_security antes de pasarlos al servidor Web Apache, a su vez, estos pedidos son comparados contra un conjunto de reglas predefinidas para realizar las acciones correspondientes. Para realizar este filtrado se pueden utilizar expresiones regulares, permitiendo que el proceso sea flexible.
  • Técnicas antievasión: las rutas y los parámetros son normalizados antes del análisis para evitar técnicas de evasión.
  • Elimina múltiple barras (//)
  • Elimina directorios referenciados por si mismos (./)
  • Se trata de igual manera la \ y la / en Windows.
  • Decodificación de URL
  • Reemplazo de bytes nulos por espacios (%00)
  • Comprensión del protocolo HTTP: al comprender el protocolo HTTP, ModSecurity™ puede realizar filtrados específicos y granulares.
  • Análisis Post Payload: intercepta y analiza el contenido transmitido a través del método POST.
  • Log de Auditoría: es posible dejar traza de auditoría para un posterior análisis forense.
  • Filtrado HTTPS: al estar embebido como módulo, tiene acceso a los datos después de que estos hayan sido descifrados.
  • Verificación de rango de Byte: permite detectar y bloquear shellcodes, limitando el rango de los bytes.

Instalación

  • Los paquetes a instalar son: mod-security2-common y libapache2-mod-security2

Que estos los podemos obetener de los siguientes repositorios:

Packages for Sid:
deb http://etc.inittab.org/~agi/debian/libapache-mod-security2 ./

Packages for Etch are in etch/
deb http://etc.inittab.org/~agi/debian/libapache-mod-security2/etch ./

Packages for Sarge (apache2.0) are in sarge/
deb http://etc.inittab.org/~agi/debian/libapache-mod-security2/sarge .
  • Crear el directorio /etc/apacahe2/modSecurity, este debe contener los files de configuración (*.conf)
  • En el dir /etc/apache2/mods-availables/, se encuentran los módulos utilizables por el Apache, aqui deben de estar el modulo mod-security2.load y el file mod-security2.conf (configuración del modulo)

Contenido de mod-security2.load:

LoadFile /usr/lib/libxml2.so.2
LoadFile /usr/lib/liblua5.1.so.0
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.

Contenido de mod-security2.conf:

<IfModule mod_security2.c>
Include /etc/apache2/modSecurity/*.conf
</IfModule>

  • Se debe crear un link simbólico desde /etc/apache2/mods-aviable/mod-security2.* a /etc/apache2/mods-enabled

root@mafalda:/etc/apache2/mods-available# ln -s mod-security2.* ../mods-enabled/

  • Crear los files de log

root@mafalda:/etc/apache2/modSecurity# touch /var/log/apache2/modsec_audit.log
root@mafalda:/etc/apache2/modSecurity# touch /var/log/apache2/modsec_audit.log

Niveles de reporte
En el mod se define en cada regla un parámetro de “notificación”, identificados mediante el tag “severity:’nro’”, estos niveles son los que luego serán visibles en el log de la aplicación

0 = EMERGENCY

1 = ALERT

2 = CRITICAL

3 = ERROR

4 = WARNING

5 = NOTICE

6 = INFO

7 = DEBUG

Configuracion de Mod Security

Lo que podemos hacer para tener una buena y robusta configuracion inicial es copiar la conf de ejemplo que viene con Mod Security, esta se encuentra en /usr/share/doc/mod-security2-common/examples/rules/, copiando estos archivos en /etc/apache2/modSecurity ya tenemos algo bueno con que empezar a trabajar, y estos archivos se distribuyen de la siguiente manera.

  • modsecurity_crs_10_config.conf (Reglas generales y acciones por defecto)
  • modsecurity_crs_15_whiteList.conf (Lista blanca de ips, son desde las que no se ejecutan reglas de filtros)
  • modsecurity_crs_20_protocol_violations.conf (Reglas contra violaciones de las especificaciones de los protocolos http y https)
  • modsecurity_crs_21_protocol_anomalies.conf (Reglas contra anomalías en el proceso de información)
  • modsecurity_crs_23_request_limits.conf (Reglas para limitar los procesos y evitar actaques DOS)
  • modsecurity_crs_30_http_policy.conf (Políticas por defecto para el tratamiento de http)
  • modsecurity_crs_35_bad_robots.conf (Protección contra robots)
  • modsecurity_crs_40_generic_attacks.conf (Reglas para detener ataques genericos y SQL injection)
  • modsecurity_crs_45_trojans.conf (Reglas para evitar troyanos y rootkits)
  • modsecurity_crs_50_outbound.conf

Informacion de Logueo
La informacion de auditoria de modsecurity se esta guardando en: /var/log/apache2/modsec_audit.log

La informacion de debug se esta guardando en /var/log/apache2/modsec_debug.log

Ejemplos de Reglas

# Esta opcion solo limita el log a eventos que el modsecurity considere en base a su configuracion relevantes.
SecAuditEngine RelevantOnly
# Esta opcion elimina el control por parte de modsecurity hacia la ip 192.168.1.71, pudiendo crear de esta forma una white list, o lista blanca como les guste decirlo
SecRule REMOTE_ADDR “^192\.168\.1\.71$” “phase:1,log,allow,ctl:ruleEngine=Off”
# Estas opciones solo permiten caracteres acsii dentro del rango de 1 a 255 osea solamente los imprimibles
SecRule REQUEST_FILENAME|REQUEST_HEADERS_NAMES|REQUEST_HEADERS|!REQUEST_HEADERS:Referer \
“@validateByteRange 1-255″ \
“deny,log,auditlog,status:400,msg:’Invalid character in request’,id:’960018′,severity:’4′,t:urlDecodeUni”
SecRule ARGS|ARGS_NAMES|REQUEST_HEADERS:Referer “@validateByteRange 1-255″ \
“deny,log,auditlog,status:400,msg:’Invalid character in request’,id:’960901′,severity:’4′,t:urlDecodeUni”

Como demos ver las reglas son en esencia expresiones regulares, ya que este tutorial es básicamente de como instalarlo y configurarlo, vas a tener que buscar info sobre expresiones regulares si no las conoces ;)

Ejemplo de Log

–55d3c41d-H–
Message: Warning. Match of “rx ^apache.*perl” against “REQUEST_HEADERS:User-Agent” required. [id "990011"] [msg "Request Indicates an automated program explored the site"] [severity "NOTICE"]
Apache-Handler: jakarta-servlet
Stopwatch: 1219244751811797 33488271 (467* 29442 33487637)
Producer: ModSecurity v2.1.5 (Apache 2.x)
Server: Apache/2.2.3 (Debian) mod_ssl/2.2.3 OpenSSL/0.9.8c

Bueno sin mas me despido y espero que esto le sirva a alguien, saludos.

Bibliografia
* Firewall de Aplicaciones con Mod_Security
* Installing ModSecurity on Debian

* Wikipedia

Leave a Reply

*