AWS - Abusing Lambda Extensions

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Extensiones de Lambda

Las extensiones de Lambda mejoran las funciones integrándose con diversas herramientas de monitoreo, observabilidad, seguridad y gobernanza. Estas extensiones, añadidas a través de .archivos zip utilizando capas de Lambda o incluidas en implementaciones de imágenes de contenedores, operan en dos modos: internos y externos.

  • Las extensiones internas se fusionan con el proceso de tiempo de ejecución, manipulando su inicio mediante variables de entorno específicas del lenguaje y scripts envolventes. Esta personalización se aplica a una variedad de tiempos de ejecución, incluidos Java Correto 8 y 11, Node.js 10 y 12, y .NET Core 3.1.

  • Las extensiones externas se ejecutan como procesos separados, manteniendo la alineación de operación con el ciclo de vida de la función Lambda. Son compatibles con varios tiempos de ejecución como Node.js 10 y 12, Python 3.7 y 3.8, Ruby 2.5 y 2.7, Java Corretto 8 y 11, .NET Core 3.1, y tiempos de ejecución personalizados.

Para obtener más información sobre cómo funcionan las extensiones de Lambda, consulta la documentación.

Extensión Externa para Persistencia, Robo de Solicitudes y Modificación de Solicitudes

Este es un resumen de la técnica propuesta en este post: https://www.clearvector.com/blog/lambda-spy/

Se descubrió que el kernel de Linux predeterminado en el entorno de tiempo de ejecución de Lambda está compilado con las llamadas al sistema "process_vm_readv" y "process_vm_writev". Y todos los procesos se ejecutan con el mismo ID de usuario, incluso el nuevo proceso creado para la extensión externa. Esto significa que una extensión externa tiene acceso completo de lectura y escritura a la memoria heap de Rapid, por diseño.

Además, si bien las extensiones de Lambda tienen la capacidad de suscribirse a eventos de invocación, AWS no revela los datos crudos a estas extensiones. Esto asegura que las extensiones no pueden acceder a información sensible transmitida a través de la solicitud HTTP.

El proceso Init (Rapid) monitorea todas las solicitudes de API en http://127.0.0.1:9001 mientras las extensiones de Lambda se inicializan y se ejecutan antes de la ejecución de cualquier código de tiempo de ejecución, pero después de Rapid.

La variable AWS_LAMBDA_RUNTIME_API indica la dirección IP y el número de puerto de la API de Rapid a los procesos secundarios de tiempo de ejecución y extensiones adicionales.

Al cambiar la variable de entorno AWS_LAMBDA_RUNTIME_API a un puerto al que tengamos acceso, es posible interceptar todas las acciones dentro del tiempo de ejecución de Lambda (hombre en el medio). Esto es posible porque la extensión se ejecuta con los mismos privilegios que Rapid Init, y el kernel del sistema permite la modificación de la memoria del proceso, lo que permite la alteración del número de puerto.

Debido a que las extensiones se ejecutan antes de cualquier código de tiempo de ejecución, modificar la variable de entorno influirá en el proceso de tiempo de ejecución (por ejemplo, Python, Java, Node, Ruby) al iniciarse. Además, las extensiones cargadas después de la nuestra, que dependen de esta variable, también pasarán por nuestra extensión. Esta configuración podría permitir que el malware evite por completo las medidas de seguridad o las extensiones de registro directamente dentro del entorno de tiempo de ejecución.

La herramienta lambda-spy fue creada para realizar esa escritura en memoria y robar información sensible de las solicitudes de lambda, otras solicitudes de extensiones e incluso modificarlas.

Referencias

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Red Team de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Última actualización