ModSecurity: registro y depuración

NGINX | 22 de octubre de 2017

«ModSecurity te ayudará a dormir mejor por la noche porque, ante todo, resuelve el problema de la visibilidad: te permite ver tu tráfico web».

– Ivan Ristić, creador de ModSecurity

Cuando algo no funciona como esperas, los registros son siempre el primer lugar donde debes mirar. Unos buenos registros pueden proporcionar información valiosa para ayudarte a solucionar los problemas a los que te enfrentas. Una de las razones por las que Ivan Ristić creó originalmente ModSecurity fue su frustración ante la falta de visibilidad de las herramientas que utilizaba. Por tanto, no es de extrañar que ModSecurity cuente con amplias funciones de registro y depuración.

ModSecurity tiene dos tipos de registros:

  • Un registro de auditoría. Por cada transacción bloqueada, ModSecurity proporciona registros detallados sobre la transacción y el motivo por el que se bloqueó.
  • Un registro de depuración. Cuando está activado, este registro almacena información exhaustiva sobre todo lo que hace ModSecurity.

El registro de auditoría no solo resulta útil para saber por qué se bloqueó un ataque concreto, sino también para obtener más información sobre los patrones generales de ataque. Puede que le sorprenda la cantidad de tráfico de bots y escáneres que recibe por el mero hecho de exponer a Internet los puertos 80 y/o 443.

En esta entrada del blog, describiremos los conceptos básicos del registro y la depuración con ModSecurity.

Registro de auditoría

El registro principal de ModSecurity es el registro de auditoría, que registra todos los ataques que se producen, incluidos los posibles ataques. Si ha seguido nuestras instrucciones de instalación de ModSecurity (con NGINX Open Source) o de NGINX ModSecurity WAF (con NGINX Plus), de forma predeterminada, ModSecurity registrará todas las transacciones que hayan activado una advertencia o un error, así como todas las transacciones que hayan dado lugar a respuestas 5xx y 4xx, excepto 404. (Solo en sistemas Ubuntu 16.04, el registro de auditoría se encuentra en /var/log/modsec_audit.log.)

El registro de auditoría de ModSecurity está dividido en secciones. Esto facilita la consulta del registro y la búsqueda de la información que necesita. En la tabla siguiente se indica qué contiene cada sección:

SecciónDescripción
ACabecera del registro de auditoría (obligatoria)
BCabeceras de la solicitud
CCuerpo de la solicitud
DReservada
ECuerpo de la respuesta
FCabeceras de la respuesta
GReservada
HPie del registro de auditoría, que contiene datos adicionales
IAlternativa compacta al cuerpo de la solicitud (sección C), que excluye los archivos
JInformación sobre los archivos subidos
KContiene una lista de todas las reglas que coincidieron con la transacción
ZDelimitador final (obligatorio)

En cada transacción que genere una entrada en el registro de auditoría, se registrarán algunas o todas las secciones anteriores. Puede configurar qué secciones se registran.

Ejemplo de registro de auditoría

Un ejemplo de entrada del registro de auditoría de ModSecurity podría tener este aspecto:

---ICmPEb5c---A--[04/Oct/2017:21:45:15 +0000] 150715351558.929952 141.212.122.16 64384 141.212.122.16 80---ICmPEb5c---B--GET / HTTP/1.1Host: 54.183.57.254User-Agent: Mozilla/5.0 zgrab/0.xAccept-Encoding: gzip---ICmPEb5c---D-----ICmPEb5c---F--HTTP/1.1 200Server: nginx/1.13.4Date: Wed, 04 Oct 2017 21:45:15 GMTContent-Type: text/htmlConnection: keep-alive---ICmPEb5c---H--ModSecurity: Warning. Matched "Operator `Rx' with parameter `^[d.:]+$' against variable `REQUEST_HEADERS:Host' (Value: `54.183.57.254' ) [file "/root/owasp-v3/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] [line "733"] [id "920350"] [rev "2"] [msg "Host header is a numeric IP address"] [data "54.183.57.254"] [severity "4"] [ver "OWASP_CRS/3.0.0"] [maturity "9"] [accuracy "9"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-protocol"] [tag "OWASP_CRS/PROTOCOL_VIOLATION/IP_HOST"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"] [ref "o0,13v21,13"]---ICmPEb5c---I-----ICmPEb5c---J-----ICmPEb5c---Z--

Aunque no resulte evidente a primera vista en la tabla anterior, la mejor sección para encontrar información sobre por qué se bloqueó una solicitud concreta es la sección H, no la sección K. Si revisamos la sección H del ejemplo anterior del registro de auditoría, podemos ver el mensaje "El encabezado Host es una dirección IP numérica" que indica que alguien intentó acceder a nuestro sitio mediante la dirección IP en lugar del nombre de host. Esto podría indicar que se trata de un escáner.

Configuración del registro de auditoría

Si ha seguido nuestras instrucciones para instalar y configurar ModSecurity, encontrará la configuración del registro de auditoría en /etc/nginx/modsec/modsecurity.conf. En ese archivo verá las tres directivas siguientes, que controlan qué se incluye en el registro de auditoría:

SecAuditEngine RelevantOnlySecAuditLogRelevantStatus "^(?:5|4(?!04))"SecAuditLogParts ABIJDEFHZ

donde

  • SecAuditEngine – Controla qué se debe registrar. Las opciones son:
    • Off – Desactiva el registro de auditoría.
    • Activado – Registra todas las transacciones, lo que puede resultar útil para la depuración.
    • RelevantOnly – Registra únicamente las transacciones que hayan activado una advertencia o un error, o cuyo código de estado coincida con lo especificado en la directiva SecAuditLogRelevantStatus.
  • SecAuditLogRelevantStatus – Si SecAuditEngine está configurado como RelevantOnly, esta directiva controla qué códigos de estado de respuesta HTTP deben registrarse. Se basa en expresiones regulares. El valor anterior registrará todas las respuestas 5xx y 4xx, excepto las 404.
  • SecAuditLogParts – Controla qué secciones deben incluirse en el registro de acceso. Eliminar las secciones que no le interesen reduce el tamaño del registro de auditoría y facilita su revisión.

Para consultar directivas de configuración adicionales del registro de auditoría, consulte la wiki de ModSecurity.

Registro de depuración

Cuando se activa el registro de depuración, este proporciona una gran cantidad de información sobre todo lo que hace ModSecurity. Si necesita solucionar problemas y averiguar por qué algo no funciona como esperaba, el registro de depuración es el recurso de referencia. También resulta muy útil si está empezando a utilizar ModSecurity y quiere observar por qué actúa de una determinada manera.

Ejemplo de registro de depuración

El registro de depuración tiene el siguiente aspecto. Incluye muchos detalles sobre las acciones que lleva a cabo ModSecurity en todas y cada una de las transacciones:

[4] (Rule: 1234) Executing operator "Contains" with param "test" against ARGS:testparam.[9] Target value: "test" (Variable: ARGS:testparam)[9] Matched vars updated.[4] Running [independent] (non-disruptive) action: log[9] Saving transaction to logs[4] Rule returned 1.[9] (SecDefaultAction) Running action: log[9] Saving transaction to logs[9] (SecDefaultAction) Running action: auditlog[4] (SecDefaultAction) ignoring action: pass (rule contains a disruptive action)[4] Running (non-disruptive) action: auditlog[4] Running (disruptive)     action: deny

El registro de depuración muestra el número de ID de la regla para facilitar la búsqueda. En este ejemplo, la salida corresponde a nuestra regla de prueba con el número de ID 1234.

Configuración del registro de depuración

De forma predeterminada, el registro de depuración está deshabilitado, ya que puede afectar negativamente al rendimiento. Al igual que el registro de auditoría, el registro de depuración se configura en /etc/nginx/modsec/modsecurity.conf. En ese archivo hay dos directivas de configuración comentadas. Para habilitar el registro de depuración, quite los comentarios y modifíquelas de la siguiente manera:

SecDebugLog /var/log/modsec_debug.logSecDebugLogLevel 9

donde

  • SecDebugLog – Especifica la ruta del archivo de registro de depuración.
  • SecDebugLogLevel – 0–9 indica cuánta información se registra; 9 es el nivel máximo. Si está solucionando problemas, establecer este valor en 9 es lo más útil.

Conclusión

En esta entrada del blog, hemos explicado cómo empezar a utilizar las amplias funciones de registro de ModSecurity. ModSecurity dispone tanto de registros de auditoría, que contienen información sobre todas las transacciones bloqueadas, como de un registro de depuración que ofrece ayuda adicional si tiene problemas al utilizar ModSecurity.

ModSecurity 3.0 está disponible tanto para NGINX Open Source como en forma de NGINX ModSecurity WAF para NGINX Plus. NGINX ModSecurity WAF es un módulo dinámico precompilado que cuenta con el mantenimiento y el soporte integral de NGINX, Inc. Pruébelo gratis durante 30 días.

[Editor – NGINX ModSecurity WAF dejó de comercializarse oficialmente el 1 de abril de 2022 y llegará al final de su vida útil el 31 de marzo de 2024. Para obtener más información, consulte F5 NGINX ModSecurity WAF está llegando al final de su vida útil<.htmla> en nuestro blog.]


Compartir
Etiquetas: Security, F5 NGINX, Tech

Sobre el autor

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.