Instalación de Mod_Security

mod_security es un firewall de aplicaciones web (Web Application Firewall). Este es un tipo de programa que crea una capa de seguridad externa cuya función es detectar y/o prevenir ataques antes de que alcancen a las aplicaciones web hospedadas en el servidor Apache. Un programa de esta clase permite proteger a las aplicaciones web de un gran conjunto de ataques, evitando también el análisis del trafico HTTP en tiempo real en busca de potenciales ataques que estén ocurriendo en ese instante, sin cambiar la infraestructura existente y por tanto asegurándose de que no hay que modificar nada que esté en funcionamiento.

En ocasiones un servidor web no hace log de los cuerpos de las peticiones HTTP, ocasionando así que hoy en día haya muchos ataques se hagan a través de peticiones POST, de forma que no se pueda obtener mucha información de los mismos por este motivo. mod_security remedia este problema, proporcionando un amplio control sobre lo que se registra y lo que no. Permite también enmascarar datos sensibles que circulen en las peticiones antes de escribirlos al log. En general mod_security tiene las siguientes características y capacidades:

Monitorización en tiempo real y detección de ataques:

  • Puede monitorizar el tráfico HTTP para detectar ataques.
  • Actúa como un IDS (Intrusion Detection System), permitiendo reaccionar ante eventos sospechosos que tengan lugar en nuestras webs.

Técnicas de prevención de ataques:

Se usan 3 aproximaciones para prevenir ataques a aplicaciones web:

  1. Modelo de seguridad negativo: Monitoriza las peticiones en busca de anomalías, comportamientos inusuales o ataques web conocidos. Las peticiones detectadas como anómalas pueden ser registradas en un fichero de log o rechazadas.
  2. Modelo de seguridad positivo: Sólo las peticiones que se sabe que son válidas son aceptadas (peticiones de programas válidos), rechazando todo lo demás. Esto requiere conocer el conjunto de aplicaciones usado y funciona mejor con aplicaciones que no se actualizan frecuentemente, ya que así no tendremos que re-autorizarlas al haber cambiado su código (reduce el mantenimiento).
  3. Vulnerabilidades conocidas: Permite a las aplicaciones ser parcheadas desde el exterior, reaccionando rápidamente a vulnerabilidades nuevas

Motor de reglas flexible:

Es el "corazón" de mod_security e implementa un lenguaje de programación especializado para tratar las transacciones HTTP. El motor valida protocolos y detecta problemas de seguridad comunes en una aplicación web, permitiendo hacer operaciones muy complejas. En la instalación del módulo se incluyen un conjunto de reglas de propósito general para hacer más difícil de atacar un servidor.

Despliegue como parte del servidor web Apache:

Esto conlleva las siguientes ventajas:
  • No necesita cambios en la red existente. Por defecto es completamente pasivo y puede desactivarse con facilidad.
  • No es un punto de fallo adicional en la infraestructura de red.
  • Se aprovecha de características de balanceo de carga y estabilidad en Apache si están instaladas y activas.

Otras características:

  • Penalización al rendimiento mínima.
  • Capacidad para analizar contenido comprimido o encriptado: Trabaja cuando el tráfico ha sido ya descomprimido o desencriptado.
  • mod_security puede funcionar con un Apache configurado como servidor proxy (protegiendo un nº indeterminado de equipos, que pueden no usar Apache).
  • Es portable: Funciona con un gran número de SO.

Podemos encontrar más información en: http://www.modsecurity.org/documentation/modsecurity-apache/2.5.5/modsecurity2-apache-reference.html#N1001D


Reglas de Mod_Security

Cuando el motor de filtrado de mod_security se habilita, cada petición entrante se intercepta y analiza antes de ser procesada. Este análisis se hace de acuerdo a unas reglas que este mod necesita para poder funcionar con normalidad, como hemos dicho anteriormente. Normalmente el análisis comienza con comprobaciones para validar el formato de la petición, que a su vez se pueden controlar usando directivas de configuración.

En una segunda fase, la petición pasa por los filtros o reglas definidos por el usuario, que pueden usarse para multitud de aplicaciones. Si hay un encaje positivo con los mismos, se toma una de las acciones configuradas en el mod como respuesta a esta incidencia.

En cuanto al proceso de filtrado, el filtro más simple que se puede establecer en este mod tiene esta forma: SecFilter KEYWORD. Por cada filtro como éste mod_security buscará el término KEYWORD en varios lugares: La primera línea de la petición y el cuerpo de la petición en el caso de peticiones POST. Este proceso no es sensible a mayúsculas.

El filtrado mencionado no se hace sobre los datos directamente, sino a una copia “normalizada". Esto previene diversos ataques que manipulan los datos para evitar su detección:

  • —Por ejemplo, un filtro que evite la ejecución de comandos del shell sería: SecFilter /bin/sh.
  • Un atacante puede usar “/bin/./sh” (que tiene el mismo significado) para evitar ese filtro.
  • mod_security automáticamente transforma la cadena de entrada para que estas situaciones no se produzcan.
  • También se puede activar o desactivar la codificación de URLs y permitir usar solo caracteres de un determinado rango.

žLas reglas que forman parte del proceso de filtrado descrito tienen como objetivo fundamental el prevenir problemas como por ejemplo:

  • —Prevención de ataques de bytes nulos: Usados con software basado en C y C++ para hacer creer al programa que una cadena termina antes de que lo haga realmente.— Ej.: GET /algo/otro/otromas?p=visible%00hidden HTTP/1.0. mod_security busca bytes nulos al decodificar la cadena y los convierte en espacios
  • Captura de datos potencialmente perjudiciales con expresiones regulares. Un filtro normalmente tiene la siguiente estructura: SecFilter KEYWORD [ACTIONS]. KEYWORD es una expresión regular que se usará para analizar texto con encaje de patrones. Si esa KEYWORD se usa para representar texto que normalmente está presente en ataques conocidos, puede desarrollarse una contramedida específica en ACTIONS, evitando así el problema. Más información:
  • Administración de cookies: Tiene soporte completo para la gestión de cookies de las web.
  • Filtrado de salida (desactivado por defecto): Mediante SecFilterScanOutput On podemos luego aplicar filtros a los datos de salida, es decir, que se envían al navegador del cliente. Sólo es útil para datos que sean texto plano o HTML. Finalmente, comentar que mod_security por defecto solo escaneará respuestas HTTP que no tengan content type o éste sea text/plain o text/html. Esto puede cambiarse con la directiva SecFilterOutputMimeTypes en el fichero de configuración del mod. Podemos encontrar más información en: http://www.modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/04-rules.html#N1032F


žMod_security core rules

Dado que mod_security no funciona sin reglas que le digan que hacer, el primer paso tras su instalación es precisamente incorporar estas reglas. No obstante, dada la elevada complejidad que tiene diseñar una regla realmente efectiva y el número de reglas que harían falta para protegerse ante un nº significativo de ataques, realizar este proceso a mano es muy complejo. Por este motivo, y para permitir sacarle partido a mod_security rápidamente, se ha creado el Core Rule Set, un conjunto de reglas de código abierto bajo licencia GPLv2 que están pensadas para trabajar sobre este mod. Éste es un conjunto de reglas con un modelo de seguridad negativo y su uso representa una capa más de seguridad, que debe combinarse con una apropiada configuración de Apache y otros elementos para lograr una seguridad adecuada.

El uso de estas reglas no obstante tiene una serie de ventajas:

  • —Rendimiento: Optimizado para lograr el mejor rendimiento posible
  • —Calidad: El conjunto de reglas se ha sometido a test de regresión y a tráfico real para comprobar su correcto funcionamiento.
  • —Detección genérica: Detecta ataques de forma genérica y no incluye reglas específicas para vulnerabilidades concretas, mejorando el rendimiento, efectividad y requiriendo menos actualizaciones.
  • —Información de eventos: Cada regla tiene su ID propio y sus textos de información.
  • Plug and Play: Fácil instalación y puesta en marcha.

žA continuación se enumeran una serie de aspectos controlados por el uso de estas reglas:

  • —Cumplimiento de protocolos:
    • Validación de peticiones: Se detectan peticiones HTTP anormales, eliminando un buen nº de ataques.
    • Anomalías del protocolo HTTP: Detectan este tipo de incidencias, que en muchas ocasiones son un indicativo de ataque.
    • Restricciones globales: Limitar el tamaño de los atributos HTTP para que estén en rangos válidos, es decir, no se malforme la petición HTTP.
    • Políticas de uso HTTP: Se pueden especificar las políticas que son válidas (métodos, content types y extensiones)
  • — Detección de ataques:
    • Detección de software malicioso: Se detectan peticiones hechas por programas como robots, crawlers y escaneadores de vulnerabilidades, evitando spam e intentos de fingerprinting.
    • Detección de ataques genericos: Incluyendo SQL Injection y Blind SQL injection, Cross Site Scripting (XSS), OS Command Injection, remote command access, etc.
    • Detección de troyanos y puertas traseras: Detectan la actividad de los programas de esta clase.
  • — Otros:
    • Detección de errores: Se evita que los errores de la aplicación y fragmentos de código involucrados en dichos errores se envíen al usuario, mejorando la seguridad del servidor al dar menos información sobre la misma.
    • Monitorización de motores de búsquedas: Logea las visitas de los crawlers de las páginas de búsquedas más conocidas.
  • ž Falsos positivos:
    • —Cada regla puede dar falsos positivos al aplicarse en un nuevo entorno: Cada nueva instalación de mod_security debería ser observada por un periodo de tiempo para asegurarse de su correcto funcionamiento. Por este motivo, es aconsejable no probar inicialmente mod_security directamente en un entorno de producción, sino que se debería usar una máquina secundaria para ello y pasar luego a usar dicho mod una vez se esté seguro de que no da problemas con la aplicación.
    • —No obstante, si una regla genera un falso positivo, debemos reescribirla para adaptarla a nuestro caso o bien incluso comentarla para que no sea aplicada, teniendo en cuenta siempre si estamos dejando la puerta abierta a algún ataque por hacer esto último. Más información: http://www.modsecurity.org/blog/archives/2007/02/handling_false.html


žInstalación de mod_security

žLa instalación de este mod es compleja y depende del tipo de SO sobre el que se haga.ž Aunque los procedimientos de instalación se parecen bastante entre sistemas operativos, cambian ciertas cosas con cada SO y la versión concreta de mod_security.ž Nosotros veremos la instalación de la última versión con Ubuntu 10.04 en esta actividad práctica.

Finalmente, podemos encontrar más información acerca de diversos aspectos de este mod en los siguientes enlaces:

—Descarga:

—Instalación:

Manuales y operaciones:

ž

Última modificación: sábado, 31 de julio de 2010, 11:49