AEM Utilice ModSecurity para proteger el sitio de la de ataques DoS
Aprenda a habilitar ModSecurity para proteger su sitio de ataques de denegación de servicio (DoS) mediante el Conjunto de reglas principales de ModSecurity de OWASP (CRS) en Adobe Experience Manager AEM () Publish Dispatcher.
Información general
La base de Open Web Application Security Project® (OWASP) proporciona los 10 principales de OWASP que describen los diez problemas de seguridad más importantes para las aplicaciones web.
ModSecurity es una solución de código abierto y multiplataforma que proporciona protección contra una amplia gama de ataques contra aplicaciones web. También permite la monitorización del tráfico HTTP, el registro y el análisis en tiempo real.
OWSAP® también proporciona el Conjunto de reglas principales de ModSecurity de OWASP® (CRS). El CRS es un conjunto de reglas de detección de ataques genéricas para usar con ModSecurity. Por lo tanto, CRS tiene como objetivo proteger las aplicaciones web de una amplia gama de ataques, incluido el OWASP Top Ten, con un mínimo de falsas alertas.
Este tutorial muestra cómo habilitar y configurar la regla CRS DOS-PROTECTION para proteger el sitio de un posible ataque DoS.
Agregar CRS al módulo de proyecto de Dispatcher
-
Descargue y extraiga el último conjunto de reglas principales de OWASP ModSecurity.
code language-shell # Replace the X.Y.Z with relevent version numbers. $ wget https://github.com/coreruleset/coreruleset/archive/refs/tags/vX.Y.Z.tar.gz # For version v3.3.5 when this tutorial is published $ wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.5.tar.gz # Extract the downloaded file $ tar -xvzf coreruleset-3.3.5.tar.gz
-
AEM Cree las
modsec/crs
carpetas dentro dedispatcher/src/conf.d/
en el código de su proyecto de. AEM Por ejemplo, en la copia local del proyecto de WKND Sites de WKND.AEM {width="200" modal="regular"}
-
Copie la carpeta
coreruleset-X.Y.Z/rules
del paquete descargado de la versión de CRS en la carpetadispatcher/src/conf.d/modsec/crs
. -
Copie el archivo
coreruleset-X.Y.Z/crs-setup.conf.example
del paquete de versión de CRS descargado en la carpetadispatcher/src/conf.d/modsec/crs
y renómbrelo acrs-setup.conf
. -
Deshabilite todas las reglas CRS copiadas de
dispatcher/src/conf.d/modsec/crs/rules
y cambie su nombre aXXXX-XXX-XXX.conf.disabled
. Puede utilizar los siguientes comandos para cambiar el nombre de todos los archivos a la vez.code language-shell # Go inside the newly created rules directory within the dispathcher module $ cd dispatcher/src/conf.d/modsec/crs/rules # Rename all '.conf' extension files to '.conf.disabled' $ for i in *.conf; do mv -- "$i" "$i.disabled"; done
Consulte cambio de nombre de reglas CRS y archivo de configuración en el código del proyecto WKND.
AEM {width="200" modal="regular"}
Habilitar y configurar la regla de protección de denegación de servicio (DoS)
Para habilitar y configurar la regla de protección Denegación de servicio (DoS), siga los siguientes pasos:
-
Habilite la regla de protección DoS cambiando el nombre de
REQUEST-912-DOS-PROTECTION.conf.disabled
aREQUEST-912-DOS-PROTECTION.conf
(o quite.disabled
de la extensión rulename) en la carpetadispatcher/src/conf.d/modsec/crs/rules
. -
Configure la regla definiendo las variables DOS_COUNTER_THRESHOLD, DOS_BURST_TIME_SLICE, DOS_BLOCK_TIMEOUT.
- Crear un archivo de
crs-setup.custom.conf
en la carpetadispatcher/src/conf.d/modsec/crs
. - Añada el siguiente fragmento de regla al archivo recién creado.
code language-none # The Denial of Service (DoS) protection against clients making requests too quickly. # When a client is making more than 25 requests (excluding static files) within # 60 seconds, this is considered a 'burst'. After two bursts, the client is # blocked for 600 seconds. SecAction \ "id:900700,\ phase:1,\ nolog,\ pass,\ t:none,\ setvar:'tx.dos_burst_time_slice=60',\ setvar:'tx.dos_counter_threshold=25',\ setvar:'tx.dos_block_timeout=600'"
- Crear un archivo de
En esta configuración de regla de ejemplo, DOS_COUNTER_THRESHOLD tiene 25, DOS_BURST_TIME_SLICE tiene 60 segundos y el tiempo de espera de DOS_BLOCK_TIMEOUT es de 600 segundos. Esta configuración identifica más de dos incidencias de 25 solicitudes, excluidos los archivos estáticos, en un plazo de 60 segundos que cumplen los requisitos de ataque DoS, lo que provoca que el cliente solicitante se bloquee durante 600 segundos (o 10 minutos).
Inicializar el CRS
Para inicializar CRS, quitar los falsos positivos comunes y agregar excepciones locales para el sitio, siga los siguientes pasos:
-
Para inicializar el CRS, quite
.disabled
del archivo REQUEST-901-INITIALIZATION. En otras palabras, cambie el nombre del archivoREQUEST-901-INITIALIZATION.conf.disabled
aREQUEST-901-INITIALIZATION.conf
. -
Para quitar los falsos positivos comunes como el ping IP local (127.0.0.1), quite
.disabled
del archivo REQUEST-905-COMMON-EXCEPTIONS. -
AEM Para agregar excepciones locales como la plataforma de la o las rutas específicas del sitio, cambie el nombre de
REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example
aREQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
- AEM Añada excepciones de ruta específicas de la plataforma al archivo cuyo nombre se acaba de cambiar.
code language-none ######################################################## # AEM as a Cloud Service exclusions # ######################################################## # Ignoring AEM-CS Specific internal and reserved paths SecRule REQUEST_URI "@beginsWith /systemready" \ "id:1010,\ phase:1,\ pass,\ nolog,\ ctl:ruleEngine=Off" SecRule REQUEST_URI "@beginsWith /system/probes" \ "id:1011,\ phase:1,\ pass,\ nolog,\ ctl:ruleEngine=Off" SecRule REQUEST_URI "@beginsWith /gitinit-status" \ "id:1012,\ phase:1,\ pass,\ nolog,\ ctl:ruleEngine=Off" ######################################################## # ADD YOUR SITE related exclusions # ######################################################## ...
-
Además, quite
.disabled
de REQUEST-910-IP-REPUTATION.conf.disabled para la comprobación de bloques de reputación de IP yREQUEST-949-BLOCKING-EVALUATION.conf.disabled
para la comprobación de puntuación de anomalías.
Añadir la configuración de Apache ModSecurity
Para habilitar ModSecurity (también conocido como módulo Apache mod_security
), siga los siguientes pasos:
-
Cree
modsecurity.conf
endispatcher/src/conf.d/modsec/modsecurity.conf
con las siguientes configuraciones clave.code language-none # Include the baseline crs setup Include conf.d/modsec/crs/crs-setup.conf # Include your customizations to crs setup if exist IncludeOptional conf.d/modsec/crs/crs-setup.custom.conf # Select all available CRS rules: #Include conf.d/modsec/crs/rules/*.conf # Or alternatively list only specific ones you want to enable e.g. Include conf.d/modsec/crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf Include conf.d/modsec/crs/rules/REQUEST-901-INITIALIZATION.conf Include conf.d/modsec/crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf Include conf.d/modsec/crs/rules/REQUEST-910-IP-REPUTATION.conf Include conf.d/modsec/crs/rules/REQUEST-912-DOS-PROTECTION.conf Include conf.d/modsec/crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf # Start initially with engine off, then switch to detection and observe, and when sure enable engine actions #SecRuleEngine Off #SecRuleEngine DetectionOnly SecRuleEngine On # Remember to use relative path for logs: SecDebugLog logs/httpd_mod_security_debug.log # Start with low debug level SecDebugLogLevel 0 #SecDebugLogLevel 1 # Start without auditing SecAuditEngine Off #SecAuditEngine RelevantOnly #SecAuditEngine On # Tune audit accordingly: SecAuditLogRelevantStatus "^(?:5|4(?!04))" SecAuditLogParts ABIJDEFHZ SecAuditLogType Serial # Remember to use relative path for logs: SecAuditLog logs/httpd_mod_security_audit.log # You might still use /tmp for temporary/work files: SecTmpDir /tmp SecDataDir /tmp
-
AEM Seleccione el(la)
.vhost
deseado(a) del módulo de Dispatcherdispatcher/src/conf.d/available_vhosts
de su proyecto de, por ejemplo,wknd.vhost
, agregue la siguiente entrada fuera del bloque<VirtualHost>
.code language-none # Enable the ModSecurity and OWASP CRS <IfModule mod_security2.c> Include conf.d/modsec/modsecurity.conf </IfModule> ... <VirtualHost *:80> ServerName "publish" ... </VirtualHost>
AEM Todas las configuraciones anteriores de ModSecurity CRS y DOS-PROTECTION están disponibles en la rama tutorial/enable-modsecurity-crs-dos-protection del proyecto de sitios de WKND de la para que las revise.
Validar la configuración de Dispatcher
Al trabajar con AEM as a Cloud Service, antes de implementar los cambios de la configuración de Dispatcher AEM, se recomienda validarlos localmente mediante el script validate
de las herramientas de Dispatcher del SDK 🔗.
# Go inside Dispatcher SDK 'bin' directory
$ cd <YOUR-AEM-SDK-DIR>/<DISPATCHER-SDK-DIR>/bin
# Validate the updated Dispatcher configurations
$ ./validate.sh <YOUR-AEM-PROJECT-CODE-DIR>/dispatcher/src
Implementación de
Implemente las configuraciones de Dispatcher validadas localmente mediante la canalización de Cloud Manager nivel web o pila completa. También puede usar el Entorno de desarrollo rápido para obtener un tiempo de respuesta más rápido.
Verificar
Para verificar la protección del DoS, en este ejemplo, enviemos más de 50 solicitudes (25 umbrales de solicitud por dos incidencias) en un lapso de 60 segundos. Sin embargo, estas solicitudes deben pasar por el AEM as a Cloud Service integrado o cualquier otro CDN que se encuentre frente al sitio web.
Una técnica para lograr el paso a través de CDN es agregar un parámetro de consulta con un nuevo valor aleatorio en cada solicitud de página de sitio.
Para almacenar en déclencheur un mayor número de solicitudes (50 o más) en un corto periodo (como 60 segundos), se puede usar Apache JMeter o Benchmark o una herramienta de pestañas.
Simulación de un ataque DoS mediante un script JMeter
Para simular un ataque DoS utilizando JMeter, siga los siguientes pasos:
-
Descargue Apache JMeter e instálelo localmente
-
Ejecutarlo localmente mediante el script
jmeter
desde el directorio<JMETER-INSTALL-DIR>/bin
. -
Abra el script JMX WKND-DoS-Attack-Simulation-Test de muestra en JMeter mediante el menú de herramientas Abrir.
-
AEM Actualice el valor del campo Nombre del servidor o IP en la Página de inicio y el muestreador de solicitud HTTP de la Página de aventura que coincidan con la dirección URL del entorno de prueba. Revise otros detalles del script de ejemplo de JMeter.
AEM
-
Ejecute el script presionando el botón Iniciar del menú de herramientas. El script envía 50 solicitudes HTTP (5 usuarios y 10 recuentos de bucles) contra la página principal y la página de aventura del sitio WKND. Por lo tanto, un total de 100 solicitudes a archivos no estáticos, califica el ataque DoS por la configuración personalizada de regla CRS DOS-PROTECTION.
-
La escucha JMeter de Ver resultados en la tabla muestra el estado de respuesta Error para el número de solicitud ~ 53 y posterior.
-
Se devuelve el código de respuesta HTTP 503 para las solicitudes con errores. Puede ver los detalles con el detector JMeter Ver árbol de resultados.
Revisar registros
La configuración del registrador de ModSecurity registra los detalles del incidente de ataque DoS. Para ver los detalles, siga los siguientes pasos:
-
Descargue y abra el archivo de registro
httpderror
de Publish Dispatcher. -
Busque la palabra
burst
en el archivo de registro para ver las líneas de errorcode language-none Tue Aug 15 15:19:40.229262 2023 [security2:error] [pid 308:tid 140200050567992] [cm-p46652-e1167810-aem-publish-85df5d9954-bzvbs] [client 192.150.10.209] ModSecurity: Warning. Operator GE matched 2 at IP:dos_burst_counter. [file "/etc/httpd/conf.d/modsec/crs/rules/REQUEST-912-DOS-PROTECTION.conf"] [line "265"] [id "912170"] [msg "Potential Denial of Service (DoS) Attack from 192.150.10.209 - # of Request Bursts: 2"] [ver "OWASP_CRS/3.3.5"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "paranoia-level/1"] [tag "attack-dos"] [tag "OWASP_CRS"] [tag "capec/1000/210/227/469"] [hostname "publish-p46652-e1167810.adobeaemcloud.com"] [uri "/content/wknd/us/en/adventures.html"] [unique_id "ZNuXi9ft_9sa85dovgTN5gAAANI"] ... Tue Aug 15 15:19:40.515237 2023 [security2:error] [pid 309:tid 140200051428152] [cm-p46652-e1167810-aem-publish-85df5d9954-bzvbs] [client 192.150.10.209] ModSecurity: Access denied with connection close (phase 1). Operator EQ matched 0 at IP. [file "/etc/httpd/conf.d/modsec/crs/rules/REQUEST-912-DOS-PROTECTION.conf"] [line "120"] [id "912120"] [msg "Denial of Service (DoS) attack identified from 192.150.10.209 (1 hits since last alert)"] [ver "OWASP_CRS/3.3.5"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "paranoia-level/1"] [tag "attack-dos"] [tag "OWASP_CRS"] [tag "capec/1000/210/227/469"] [hostname "publish-p46652-e1167810.adobeaemcloud.com"] [uri "/us/en.html"] [unique_id "ZNuXjAN7ZtmIYHGpDEkmmwAAAQw"]
-
Revise los detalles como dirección IP del cliente, acción, mensaje de error y detalles de solicitud.
Impacto en el rendimiento de ModSecurity
La activación del ModSecurity y las reglas asociadas tiene algunas implicaciones de rendimiento, por lo que tenga en cuenta qué reglas son necesarias, redundantes y omitidas. Asociarse con sus expertos en seguridad web para habilitar y personalizar las reglas de CRS.
Reglas adicionales
Este tutorial solo habilita y personaliza la regla CRS DOS-PROTECTION para fines de demostración. Se recomienda asociarse con expertos en seguridad web para comprender, revisar y configurar las reglas adecuadas.