viernes, 11 de octubre de 2013

Seguridad en Apache: modSecurity

Seguridad en Apache: modSecurity



ModSecurity es un firewall de aplicaciones Web embebible bajo licencia GNU  que se ejecuta como módulo del servidor web Apache, provee protección contra diversos ataques hacia aplicaciones Web y permite monitorizar tráfico HTTP, así como realizar análisis en tiempo real sin necesidad de hacer cambios a la infraestructura existente.
mod_security
modSecurity filtra ataques por XSS, SQL Injection, comportamientos anómalos en protocolos, robots, troyanos, LFI … incorporando además reglas específicas para algunos de los gestores de contenido más populares como Joomla o WordPress.
Soporta integración con ModProxy por lo que podemos proteger aplicaciones desplegadas en otros servidores gracias a esta integración.
Además modSecurity cuenta con una consola de administración que permite recopilar registros de monitorización y alertas en tiempo real así como de opciones automatizadas de mantenimiento, entre otras características.
mod_security

Instalación de modSecurity 

A continuación vamos a describir el proceso de instalación de modSecurity 2.7 en Debian, en Ubuntu está disponible en los repositorios.
Las descargas necesarias podemos realizar desde la web oficial del proyecto http://www.modsecurity.org/
1.- Descargamos las fuentes y descomprimimos:
wget https://www.modsecurity.org/tarball/2.7.5/modsecurity-apache_2.7.5.tar.gz
tar -zxvf modsecurity-apache_2.7.5.tar.gz
2.- Instalamos algunas dependencias necesarias:
apt-get install apache2-threaded-dev libxml2-dev libcurl4-gnutls-dev -y
3- Compilamos e instalamos:
cd modsecurity-apache_2.7.5
./configure
make
make install
4.- Cargamos el módulo:
Creamos el siguiente fichero
vim /etc/apache2/mods-available/mod-security2.load
con el siguiente contenido:
LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua5.1.so.0
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so
5.- Activamos modSecurity:
Antes de activar modSecurity debemos activar unique_id
a2enmod unique_id
y activamos modSecurity ahora:
a2enmod mod-security2
6.-Configuramos las reglas:
Una vez hemos instalado modSecurity es necesario establecer las reglas que establecerán las condiciones del filtrado de métodos.
Descargamos las reglas de filtrado en /etc/apache2:
cd /etc/apache2
apt-get install git
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs
Una vez descargado veremos varios directorios además de diversas utilidades.
Para una primera aproximación renombraremos modsecurity_crs_10_config.conf.example a modsecurity_crs_10_config.conf:
cp modsecurity_crs_10_config.conf.example modsecurity_crs_10_config.conf
Para finalizar editamos apache2.conf con el siguiente contenido:
vim /etc/apache2/apache2.conf
   
   SecRuleEngine On
   SecRequestBodyAccess On
   SecResponseBodyAccess Off
   SecDebugLog /var/log/apache2/modsec_debug.log
   SecDebugLogLevel 1
   SecAuditEngine RelevantOnly
   SecAuditLogRelevantStatus ^5
   SecAuditLogParts ABIFHZ
   SecAuditLogType Serial
   SecAuditLog /var/log/apache2/modsec_audit.log
   SecRequestBodyLimit 131072
   SecRequestBodyInMemoryLimit 131072
   SecResponseBodyLimit 524288
   SecDataDir  /tmp/
   SecUploadDir /tmp/
   SecTmpDir /tmp/
   Include owasp-modsecurity-crs/modsecurity_crs_10_config.conf
   Include owasp-modsecurity-crs/base_rules/*.conf
   Include owasp-modsecurity-crs/optional_rules/*.conf
   Include owasp-modsecurity-crs/slr_rules/*.conf
Hay que ser cuidadoso con SecDataDir, SecUploadDir y SecTmpDir ya que las aplicaciones que suban ficheros y usen temporales no van a funcionar.
De forma similar, hay que prestar atención a posibles configuraciones de los atributos SecRequestBodyLimit, SecRequestBodyInMemoryLimit, SecResponseBodyLimit que se suelen definir en el archivo apache2.conf. Estas configuraciones nos va determinar las características de subida de archivos a través de nuestras aplicaciones web.
Si todo ha ido bien, pronto comenzaremos a ver en nuestro archivo de logs de Apache, decenas por no decir centenares de logs de este tipo:
[client 192.168.1.154] ModSecurity: Access denied with code 403 (phase 2). 
Pattern match "^[\\\\d.:]+$" at REQUEST_HEADERS:Host. 
[file "owasp-modsecurity-crsbase_rules/modsecurity_crs_21_protocol_anomalies.conf"] 
[line "98"] [id "960017"]
Si queremos ampliar el potencial de filtrado de nuestro módulo podemos acudir a http://www.gotroot.com/mod_security+rules y descargarnos libremente sus colecciones de reglas propias.
Espero que esta primera introducción a modSecurity les sirva para reforzar la seguridad de sus servidores web Apache, tarea primordial en estos tiempos.


saludos

Miguel Cardenas

No hay comentarios.: