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 un componente de uso general para registrar solicitudes. Esta vulnerabilidad, también llamada Log4Shell, puede permitir que un sistema que ejecute Apache Log4j versiones 2.0 a 2.15 se vea comprometido y que un atacante ejecute 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, es posible que tus servicios se vean afectados.
Puedes usar Logging para identificar posibles ataques. En este documento, se describe cómo hacer lo siguiente:
- Consulta tus registros con el Explorador de registros para detectar intentos existentes de aprovechar la vulnerabilidad de Log4j 2.
- Confirma que tus técnicas de mitigación habilitadas, como las políticas de seguridad de Cloud Armor y el control de acceso de Identity-Aware Proxy, estén configuradas correctamente y funcionen según lo previsto bloqueando estos intentos de explotación de Log4j 2.
- Crea una política de alertas para recibir una notificación cuando se escriba un posible mensaje de exploit en tus registros.
Consulta el Aviso de seguridad de Log4j 2 de Review Google Cloudpara conocer nuestra evaluación actual de productos y servicios. Google Cloud Para evaluar tu exposición, lee el informe de vulnerabilidad del Instituto Nacional de Estándares y Tecnología (NIST) para CVE-2021-44228.
Registro de detección
Los resultados de la consulta de 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. Si bien la mayoría de los servicios de Google Cloud tienen los registros habilitados de forma predeterminada, los registros que se inhabilitaron o excluyeron no se incluyen en tus consultas. Te recomendamos que actives los registros en todo tu entorno para ampliar tu visibilidad en él.
Si usas un balanceador de cargas de HTTP(S), debes tener habilitado el registro para que los registros de solicitudes estén disponibles en Logging. Del mismo modo, si tienes servidores web como Apache o NGINX ejecutándose en una VM, pero no instalaste el Agente de operaciones ni el agente de Logging, no se podrá acceder a esos registros en Logging.
Consulta tus registros
Puedes usar el Explorador de registros para detectar posibles ataques a tu servicio que exploten la vulnerabilidad de Log4j 2. Si usas Logging para registrar solicitudes a tu servicio, puedes verificar los campos httpRequest
con contenido generado por el usuario en busca de posibles vulnerabilidades.
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 intentos de explotación contra tu sistema, pero 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 algunas de las posibles cadenas de explotación. Por ejemplo, la siguiente consulta intenta hacer coincidir varias variaciones ofuscadas de la cadena ${jndi:
en los campos httpRequest
de los registros de solicitudes del balanceador de cargas de HTTP(S). Ten en cuenta que las expresiones regulares que se usan en la búsqueda no detectan todas las variaciones y pueden generar 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. Para ello, cambia el valor de resource.type
.
La consulta anterior puede tardar mucho en completarse cuando analizas un gran volumen de registros. Para que tus consultas se ejecuten más rápido, puedes usar campos indexados, como resource.type
, resource.labels
o logName
, para limitar tu consulta a un conjunto de servicios o flujos de registros específicos.
Detectar entradas de registro coincidentes no significa que se haya producido una vulneración exitosa. Si se detecta algo, te recomendamos que sigas el proceso de respuesta ante incidentes de tu organización. Una coincidencia puede indicar que alguien está intentando explotar la vulnerabilidad en tu proyecto o carga de trabajo. O bien, podría ser un falso positivo si tu aplicación usa patrones como ${jndi:
en los campos de solicitud HTTP. Revisa tus registros para asegurarte de que este patrón no forme parte del comportamiento normal de la aplicación.
Refina la búsqueda para que tenga sentido en tu entorno.
Cómo buscar direcciones IP infractoras
Si encuentras resultados coincidentes y deseas agregar los resultados según las direcciones IP remotas que envían esas solicitudes, agrega el campo remoteIp
al panel Campos de registros en el Explorador de registros. Para agregar el campo remoteIp
, haz clic en el valor del campo en una entrada de registro coincidente y selecciona Agregar campo al panel Campos de registro, como se muestra en la siguiente captura de pantalla:
Ahora puedes ver las principales direcciones IP remotas que envían solicitudes coincidentes en el panel Campos de registro:
Esto te proporciona un desglose del origen de estos análisis de explotación de vulnerabilidades de Log4j 2. Algunos de estos 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 desde Security Command Center, toma nota de los rangos de direcciones IP estáticas que usa Web Security Scanner.
Busca aplicaciones segmentadas y verifica las técnicas de mitigación
También puedes agregar datos sobre las aplicaciones segmentadas y determinar si las solicitudes maliciosas realmente llegaron a tus aplicaciones. Si habilitaste técnicas de mitigación con políticas de seguridad de Cloud Armor o control de acceso con Identity-Aware Proxy (IAP), también puedes verificar que funcionen según lo esperado a partir de la información registrada en los registros del balanceador de cargas de HTTP(S).
Primero, para agregar la aplicación objetivo al panel Campos de registro, elige uno de los resultados de la entrada de registro, expande resource.labels
, haz clic en el valor del campo resource.labels.backend_service_name
y, luego, selecciona Agregar campo al panel Campos de registro.
Ahora puedes ver tus principales aplicaciones o servicios de backend que son el objetivo de los análisis de vulnerabilidades de Log4j 2. Para determinar si estos intentos de explotación incluso llegaron a tu servicio de backend, usa el campo jsonPayload.statusDetails
completado por el balanceador de cargas de HTTP(S) para saber si la solicitud se envió a través de un proxy al backend o si los servicios como IAP o Cloud Armor la bloquearon correctamente. Haz clic en el valor del campo jsonPayload.statusDetails
del resultado de la entrada de registro y selecciona Agregar campo al panel Campos de registro.
Ahora puedes ver un desglose de cómo se controlaron las solicitudes en el panel Campos de registro:
En este ejemplo, IAP bloqueó la mayoría de las solicitudes, lo que, cuando se habilita en un servicio de backend, verifica la identidad del usuario y el contexto de uso antes de permitir el acceso. Esas solicitudes bloqueadas por IAP tienen statusDetails
establecido como handled_by_identity_aware_proxy
. Además (o como alternativa), si usas Cloud Armor con la política de seguridad correcta adjunta a un servicio de backend, todas las solicitudes bloqueadas por Cloud Armor tendrán statusDetails
establecido 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 Cloud Armor, consulta Regla de WAF de Google Cloud Armor para ayudar a mitigar la vulnerabilidad de Apache Log4j.
Para filtrar cualquier solicitud permitida que realmente llegue a un servicio de backend, selecciona response_sent_by_backend
en statusDetails
en el panel Campos de registro.
Considera habilitar la IAP para estos servicios de backend y aplicar una política de seguridad de Cloud Armor con la regla de WAF cve-canary
preconfigurada para ayudar a bloquear estos intentos de explotación.
Crea una política de alertas basada en registros
Después de diseñar una consulta que encuentre los registros afectados en tu servicio, puedes usarla para crear una política de alertas basada en registros que te notifique cuando las entradas de registro nuevas coincidan con la consulta. Los incidentes creados por la política de alertas se pueden reenviar al centro de operaciones de seguridad (SOC) de tu organización o al equipo de respuesta ante incidentes correspondiente.
Para obtener información sobre cómo crear una política de alertas basada en registros, consulta Crea una política de alertas basada en registros (Explorador de registros). Cuando crees la política de alertas, asegúrate de usar tu consulta para la cadena de exploit en lugar de la consulta especificada en el ejemplo.
Crea una política de alertas para una métrica basada en registros
Para supervisar qué extremos o servicios registran posibles intentos de explotación, crea una política de alertas en una métrica basada en registros:
Crea una métrica basada en registros para contar las ocurrencias de posibles cadenas de explotación 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 cómo crear métricas basadas en registros, consulta Configura métricas de contador.
Crea una política de alertas para que te notifique cuando se alcance una cantidad seleccionada de ocurrencias. Para obtener información sobre cómo configurar una política de alertas, consulta Crea una política de alertas en una métrica de contador.
¿Qué sigue?
Consulta este documento para ver las actualizaciones a medida que haya información nueva disponible.
Para obtener más información sobre la vulnerabilidad de Log4j 2 y tus servicios deGoogle Cloud , consulta lo siguiente: