Ejemplo: Detecta vulnerabilidades de seguridad de Log4Shell

Se divulgaron las vulnerabilidades de seguridad CVE-2021-44228 y CVE-2021-45046 en las versiones 2.0 a 2.15 de la biblioteca Apache Log4j. La utilidad Apache Log4j es una herramienta de uso general para las solicitudes de registro. Esta vulnerabilidad, también llamada Log4Shell, puede permitir que un sistema desde la versión 2.0 hasta la 2.15 de Apache Log4j el atacante ejecuta un código arbitrario.

Esta vulnerabilidad no afecta a Cloud Logging ni a los agentes que proporciona para recopilar registros de aplicaciones de terceros, pero, si usas Log4j 2, tus servicios podrían verse afectados.

Puedes usar Cloud Logging para identificar posibles ataques. Este documento se describe cómo hacer lo siguiente:

  • Consulta tus registros con el Explorador de registros para detectar intentos de explotación existentes la vulnerabilidad de Log4j 2.
  • Confirma que tus técnicas de mitigación habilitadas, como las políticas de seguridad de Google Cloud Armor y el control de acceso de Identity-Aware Proxy, estén configuradas correctamente y funcionen como se espera bloqueando estos intentos de exploits de Log4j 2.
  • Crea una política de alertas para que te notifique cuando un posible exploit se escribe en tus registros.

Revisa el Aviso de seguridad de Log4j 2 de Google Cloud para conocer nuestra evaluación actual de los productos y servicios de Google Cloud. Puedes para evaluar tu exposición leyendo el informe de vulnerabilidad del Instituto de Estándares y Tecnología (NIST) para CVE-2021-44228

Detección de Cloud Logging

Los resultados de las consultas de Cloud Logging solo incluyen los registros que ya se almacenaron en buckets de registros y que también se encuentran dentro de los límites de retención especificados por el usuario. Aunque la mayoría de los servicios de Google Cloud tienen registros los registros que se inhabilitaron o excluidos no incluidos en tus consultas. Recomendamos activar los registros en tu para expandir su visibilidad.

Si usas un balanceador de cargas HTTP(S), debes tener habilitado el registro para que los registros de solicitudes estén disponibles en Cloud Logging. Del mismo modo, si tienes servidores web como Apache o NGINX que se ejecutan en una VM pero no instalaste el agente de operaciones ni el agente de Logging, no se podrá acceder a esos registros en Cloud Logging.

Puedes usar el Explorador de registros para detectar posibles ataques y aprovecha la vulnerabilidad de Log4j 2. Si utilizas Cloud Logging para registrar las solicitudes en tu servicio; luego, puedes comprobar Campos httpRequest con contenido generado por usuarios para posibles exploits.

Los valores en los campos httpRequest pueden tener tokens de cadena como ${jndi:ldap://, pero hay muchas variaciones en la forma en que se explota esta vulnerabilidad. Por ejemplo, hay muchas formas de usar el escape o Unicode para evitar la detección. Las siguientes cadenas muestran algunos ejemplos comunes que indican explotación intentos contra tu sistema, pero este no es un conjunto exhaustivo de variantes:

${jndi:
$%7Bjndi:
%24%7Bjndi:
${jNdI:ldAp
${jndi:${lower:l}${lower:d}${lower:a}${lower:p}:
${${lower:j}${lower:n}${lower:d}i:
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}:
${${env:BARFOO:-j}ndi${env:BARFOO:-:}${env:BARFOO:-l}dap${env:BARFOO:-:}

Puedes crear consultas en el Explorador de registros que analicen de las posibles cadenas de explotación. Por ejemplo, la siguiente consulta intenta hacer coincidir varias variantes ofuscadas de la cadena ${jndi: en httpRequest en los registros de solicitudes del balanceador de cargas HTTP(S). Ten en cuenta que la página comunes usadas en la consulta no detectan todas las variaciones y podría dar lugar a falsos positivos:

resource.type="http_load_balancer"
httpRequest.requestUrl=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)" OR
httpRequest.userAgent=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)" OR
httpRequest.referer=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)"

Puedes usar la consulta anterior para analizar los registros de solicitudes en otros servicios. cambiando el valor de resource.type.

Es posible que la consulta anterior tarde mucho tiempo en completarse cuando la estás analizando un gran volumen de registros. Para que tus consultas se ejecuten más rápido, puedes usa campos indexados, como resource.type, resource.labels o logName para limitar tu búsqueda a un conjunto de servicios ni transmisiones de registro.

Detectar entradas de registro coincidentes no significa que se realizó correctamente de seguridad en la nube. Si se detecta algo, te recomendamos que sigas en el proceso de respuesta ante incidentes de tu organización. Una coincidencia puede indicar que alguien está indagando para explotar la vulnerabilidad de tu proyecto o carga de trabajo. O podría ser un falso positivo, si tu aplicación usa patrones como ${jndi: en los campos de solicitud HTTP. Mira hacia atrás en tu para asegurarte de que este patrón no sea parte del comportamiento normal de la aplicación. Define mejor la consulta de modo que tenga sentido para tu entorno.

Buscar direcciones IP ofensivas

Si encuentras resultados coincidentes y quieres agregar datos en la IP remota direcciones que envían esas solicitudes y, luego, agrega el campo remoteIp al el panel Campos de registro del Explorador de registros Para agregar el campo remoteIp, haz lo siguiente: haz clic en el valor del campo en una entrada de registro coincidente y selecciona Add field to Logs fields panel, como se muestra en la siguiente captura de pantalla:

Agrega "remoteIp" al campo “Campos de registro” para determinar la IP
direcciones IP que envían la mayor cantidad de solicitudes coincidentes.

Ahora puedes ver las principales direcciones IP remotas que envían solicitudes coincidentes En el panel Campos de registro:

Las principales direcciones IP que se quitarán
el Explorador de registros.

Esto te da un desglose de dónde estos análisis de vulnerabilidades de Log4j 2 de dónde provienen los datos. Algunos de ellos pueden ser análisis legítimos de una herramienta de análisis de vulnerabilidades de aplicaciones que hayas configurado, como Web Security Scanner. Si usas Web Security Scanner de Security Command Center, toma nota de los rangos de direcciones IP estáticas que usa Web Security Scanner.

Busca aplicaciones de destino y verifica técnicas de mitigación

También podría ser conveniente agregar a las aplicaciones objetivo e identificar si que las solicitudes maliciosas lleguen a tus aplicaciones. Si habilitaste técnicas de mitigación con las políticas de seguridad de Google Cloud Armor o el control de acceso de Identity-Aware Proxy (IAP), también puedes verificar que funcionan según lo esperado a partir de la información registrada en HTTP(S) los registros del balanceador de cargas.

Primero, para agregar la aplicación de destino al panel Campos de registro, elige uno de resultados de entrada de registro, expande resource.labels, haz clic en resource.labels.backend_service_name y, luego, selecciona Agregar campo al panel de campos de registros.

Ahora puedes ver tus principales aplicaciones o servicios de backend a los que se orientan Análisis de exploits de Log4j 2. Para determinar si estos intentos de explotación llegaron a tu servicio de backend, usa el campo jsonPayload.statusDetails propagado por el balanceador de cargas HTTP(S) para saber si la solicitud se envió al backend o si la bloqueó correctamente servicios como IAP o Google Cloud Armor. Haz clic en jsonPayload.statusDetails. el valor de campo del resultado de la entrada de registro y selecciona Agregar campo al panel de campos de registros.

Ahora puedes ver un desglose de cómo se manejaron las solicitudes en el panel Campos de registro:

Los servicios de backend más orientados aparecen en la
Explorador de registros

En este ejemplo, IAP bloqueó la mayoría de las solicitudes. que, cuando se habilita en un servicio de backend, verifica la identidad del usuario y usa contexto antes de permitir el acceso. Esas solicitudes bloqueadas por IAP tienen statusDetails configurado como handled_by_identity_aware_proxy. Además (o alternativamente), si usando Google Cloud Armor con la política de seguridad correcta vinculada a un servicio de backend todas las solicitudes bloqueadas de Google Cloud Armor tienen el elemento statusDetails configurado como denied_by_security_policy. Para obtener detalles sobre cómo aplicar la nueva regla de WAF cve-canary preconfigurada a tus políticas de seguridad de Google Cloud Armor, consulta Regla de WAF de Google Cloud Armor para ayudar a mitigar la vulnerabilidad de Apache Log4j.

Para filtrar las solicitudes permitidas que realmente llegan a un servicio de backend, selecciona response_sent_by_backend. en statusDetails en el panel Campos de registro. Considera habilitar IAP para estos servicios de backend o aplicar una política de seguridad de Google Cloud Armor con la regla de WAF cve-canary preconfigurada para ayudar a bloquear estos intentos de explotación.

Crear una alerta basada en registros

Después de diseñar una consulta que encuentre registros afectados en tu servicio, puedes usarla para crear una alerta basada en registros que te notifique cuando nuevas entradas de registro coincidan con la consulta. Esta alerta se puede reenviar al centro de operaciones de seguridad (SOC) de tu organización o al equipo de respuesta a incidentes correspondiente.

Para obtener información sobre cómo crear una alerta basada en registros, consulta Crea una alerta basada en registros. (Explorador de registros). Cuando crees la alerta, asegúrate de usar tu consulta para la cadena de exploits en lugar de la consulta especificada en el ejemplo.

Crea una política de alertas para una métrica basada en registros

Supervisar qué endpoints o servicios están registrando posibles ataques intentos, crea una política de alertas en una métrica basada en registros:

  1. Crea una métrica basada en registros para contar las ocurrencias de posibles cadenas de exploits en tus registros. Por ejemplo, puedes usar Google Cloud CLI para crear una métrica de este tipo:

    gcloud logging metrics create log4j_exploits \
    --description="Detect log4j exploits" \
    --log-filter='httpRequest.requestUrl=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)" OR httpRequest.userAgent=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)" OR httpRequest.referer=~"(?i)(\$|\%24)(\{|\%7b).*j.*n.*d.*i.*(\:|\%3a)"'
    

    Para obtener más información sobre la creación de métricas basadas en registros, consulta Configura métricas de contador.

  2. Crea una política de alertas para que te notifique cuando un número seleccionado de se alcanza la cantidad de repeticiones. Para obtener información sobre cómo configurar una alerta consulta Crea una política de alertas en una métrica de contador.

¿Qué sigue?