Académique Documents
Professionnel Documents
Culture Documents
06 Agosto 2015
ModSecurity es un módulo para servidores HTTP cuyo propósito es reforzar la seguridad de las aplicaciones
Web. Es efectivamente un sistema de prevención y detección de intrusos para servidores Web.
Buscar...
Técnicamente hablando, ModSecurity es un firewall a nivel aplicación (WAF, web application firewall)
implementado como un módulo para diferentes servidores HTTP (Apache, NGINX y Microsoft IIS)
multiplataforma de código abierto (open source). Esta herramienta permite ganar visibilidad dentro del tráfico
HTTP(S) y provee un lenguaje de reglas y una API para implementar protecciones avanzadas. Esto significa
que es posible filtrar tráfico HTTP, directamente en el servidor Web, según el contenido de las peticiones de Menú
los clientes, lo cual permite detectar y bloquear ataques de tipo XSS (Cross Site Scripting), SQLi (SQL Blog
injection), session hijacking, etc. Contacto
GNU/Linux
Las características principales de ModSecurity son su capacidad de log y filtrado. El log de auditoría permite
Programación
almacenar el detalle de cada petición en un archivo de log, incluyendo los payloads de los POST HTTP. Los
Seguridad
pedidos entrantes a su vez pueden ser analizados, y los pedidos ofensivos rechazados (o simplemente
Fotografía
registrados en el log, de acuerdo a cómo se configure). De esta forma es posible incluso permitir que se
Juegos
ejecuten aplicaciones inseguras en nuestros servidores Web (en caso de que no quede otra alternativa claro
NIX
está, los sysadmins conocen bien este tipo de escenarios) ya que están siendo protegidas por ModSecurity.
Windows
Hands on Cloud & Virtualización
Misc
Como menciona el título, este artículo está orientado a servidores Debian. Entonces, partiendo de un servidor Manuales y descargas
Web Debian con Apache instalado y configurado, en funcionamiento, El primer paso consiste en instalar el Links
módulo de Apache ModSecurity. Tarea sencilla, sólo es necesario instalar el paquete libapache2- Blogroll
modsecurity y dejar que APT se encargue de instalar las dependencias necesarias: Herramientas
Si el servidor en cuestión posee un nombre de host que no resuelve a una dirección IP (por ejemplo, cuando
se trata de un servidor que maneja muchos VirtualHosts y no se ha asignado un nombre de host válido para
el servidor) se producirá el siguiente error y Apache fallará al intentar reiniciar (tarea que se lleva a cabo Social
automáticamente cada vez que APT instala un nuevo módulo de Apache):
(EAI 5)No address associated with hostname: mod_unique_id: unable to find IPv4 address
Esto es a causa de que ModSecurity requiere del módulo mod_unique_id el cual construye magic tokens a
partir del hostname (entre otras cosas). Si se deshabilita el módulo mod_unique_id ( a2dismod unique_id Entradas
&& service apache2 start ), el servidor Apache inicia normalmente, pero por supuesto es necesario
▼ 2018 (10)
mantener este módulo habilitado para poder utilizar ModSecurity.
▼ Febrero (9)
Para solucionar este problema existen dos alternativas: asignar un nombre de host que resuelva a una
Cómo instalar y configurar
dirección IP; o hacer que el nombre de host resuelva a una dirección IP. Para que el nombre de host actual
Thinger.io con Nginx como
resuelva a una dirección IP no es necesario meter mano en servidores DNS, sólo basta con que el nombre
frontend en Debian Stretch
de host resuelva localmente. Para ello basta con fijar la dirección IPv4 del host en la tabla de configuración
Cómo eliminar una base de
estática de búsqueda para nombres de host (dentro del archivo /etc/hosts ):
datos MongoDB
Resumen de noticias de
# vi /etc/hosts
Devuan (febrero 2018)
6 años y un puñado de
Por ejemplo, si el nombre de host inválido es "mywebserver", fijarlo para que resuelva a localhost:
estadísticas
Hashover: un sistema de
127.0.0.1 localhost mywebserver
comentarios PHP de licencia
libre
Luego iniciar Apache:
Generar strings aleatorios
desde línea de comandos
# service apache2 start
¿Qué pasó con los
comentarios?
root@debian7# apachectl -M 2>/dev/null | grep security Realizar una acción cada vez
security2_module (shared) que se crea o modifica un
archivo en Linux
En este punto queda ModSecurity correctamente instalado. Ahora resta configurarlo y ponerlo en Unas largas vacaciones
funcionamiento, la parte más difícil. Tal como mencioné al comienzo del artículo, ModSecurity trabaja ► Enero (1)
utilizando reglas para la detección y filtrado de diferentes tipos de ataques, las cuales se definen utilizando un
► 2017 (186)
lenguaje propio. Por defecto incluye un conjunto de reglas genéricas mantenidas por la comunidad OWASP,
► 2016 (191)
las cuales son liberadas de manera gratuita y protegen contra los ataques básicos. Pero también existen
► 2015 (136)
reglas comerciales desarrolladas por Trustwave SpiderLabs que protegen contra ataques más avanzados,
► 2014 (187)
como Botnets, DoS y backdoors, entre otros. Por supuesto es posible desarrollar nuestras propias reglas a
► 2013 (155)
medida, pero para ello es necesario contar con un elevado conocimiento sobre ataques y protocolos.
► 2012 (130)
Con guración de ModSecurity en un entorno de prueba
Es conocido que ModSecurity genera muchos inconvenientes debido a falsos positivos con la mayoría de los
gestores de contenido (CMS) más utilizados, tales como Wordpress, Joomla!, phpBB, Drupal y otros. Por
esta razón mi idea en un comienzo fue habilitarlo sólo en un entorno de testing, de a una regla por vez, y en Invitame un café
modo de sólo detección (sin filtrado para no generar inconvenientes con los desarrolladores). Y por supuesto Si no te gustó el blog, invitame un
deshabilitarlo completamente en producción para no generar sobrecarga (ya que el log de auditoría puede café, tal vez así pueda mejorarlo un
crecer desmesuradamente). poco ;)
El módulo mod-security posee un archivo de configuración mod-security.conf dentro del directorio
/etc/apache2/mod-available/ , el cual incluye todo archivo con extensión .conf que se encuentre
dentro del directorio /etc/modsecurity/ :
root@debian7# ls -l /etc/modsecurity/
total 8
-rw-r--r-- 1 root root 7453 Jul 25 2014 modsecurity.conf-recommended
# cd /etc/modsecurity/
# cp modsecurity.conf-recommended modsecurity.conf
# vi mod-security.conf
Por defecto, deshabilitar ModSecurity completamente ( SecRuleEngine Off ), ya que sólo será habilitado en
VirtualHosts específicos:
#SecRuleEngine DetectionOnly
SecRuleEngine Off
Las reglas genéricas (OWASP ModSecurity CRS) que se incluyen con el paquete se encuentran en el
directorio /usr/share/modsecurity-crs/ :
# cd /usr/share/modsecurity-crs/
Dentro del mismo existen subdirectorios que organizan las reglas en diferentes tipos (base, activadas,
experimentales, etc.). El directorio activated_rules está pensado para trabajar con links simbólicos de la
misma forma que los directorios mods-enabled y sites-enabled de Apache (en Debian y derivados).
Pero, para diferenciar las reglas en testing de las reglas en producción (pensando a futuro), es necesario
crear un directorio aparte para las reglas en testing:
# cp -a activated_rules/ activated_rules-testing
Para habilitar una regla, basta entonces con crear un enlace simbólico en activated_rules (producción) o
activated_rules-testing (testing). Habilitar la regla de detección de ataques SQLi en testing para
probar ModSecurity:
# cd activated_rules-testing/
# ln -s ../base_rules/modsecurity_crs_41_sql_injection_attacks.conf .
Hasta este punto, a pesar de que el módulo mod-security está habilitado, ModSecurity está configurado como
apagado ( SecRuleEngine Off ). El siguiente paso consiste en editar el VirtualHost de testing a fin de
habilitar ModSecurity en modo "DetectionOnly" (sólo en testing, de esta forma seguirá deshabilitado en
producción):
# nano /etc/apache2/sites-available/testing.linuxito.com
# ModSecurity
<IfModule security2_module>
SecRuleEngine DetectionOnly
Include "/usr/share/modsecurity-crs/*.conf"
Include "/usr/share/modsecurity-crs/activated_rules-testing/*.conf"
</IfModule>
La primera línea de configuración habilita ModSecurity en modo "DetectionOnly". Esto significa que los
ataques son detectados y registrados en el log de auditoría, pero no son bloqueados/filtrados.
La siguiente línea se utiliza para incluir el archivo /usr/share/modsecurity-
crs/modsecurity_crs_10_setup.conf , el cual posee las directivas de configuración que controlan al
conjunto de reglas genéricas de OWASP ModSecurity CRS.
Por último, se incluyen todos los archivos dentro del directorio que contienen las reglas
/usr/share/modsecurity-crs/activated_rules-testing/ , los cuales son links simbólicos a reglas
habilitadas.
Finalmente, se debe recargar la configuración de Apache para que estas modificaciones surjan efecto:
Prueba de ModSecurity
Teniendo ModSecurity habilitado en testing en modo "DetectionOnly", realizar una prueba simple de SQLi
para verificar su funcionamiento (es decir, que se registre en el log de auditoría el intento de ataque). A modo
de ejemplo, el vector de ataque que utilizo es simplemente:
http://testing.linuxito.com/?var=1' or '1'='1
# tail -f /var/log/apache2/modsec_audit.log
Se observa que, luego de enviar el vector de ataque desde un navegador, se registra el siguiente evento:
Referencias
El contenido de este sitio es publicado bajo la licencia Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)