AWS - Nitro Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AWS Nitro es un conjunto de tecnologías innovadoras que forman la plataforma subyacente para las instancias de AWS EC2. Introducido por Amazon para mejorar la seguridad, el rendimiento y la fiabilidad, Nitro aprovecha componentes de hardware personalizados y un hipervisor ligero. Abstrae gran parte de la funcionalidad de virtualización tradicional a hardware y software dedicados, minimizando la superficie de ataque y mejorando la eficiencia de los recursos. Al descargar funciones de virtualización, Nitro permite que las instancias de EC2 ofrezcan un rendimiento casi bare-metal, lo que resulta particularmente beneficioso para aplicaciones que requieren muchos recursos. Además, el Nitro Security Chip asegura específicamente la seguridad del hardware y el firmware, solidificando aún más su robusta arquitectura.
AWS Nitro Enclaves proporciona un entorno de computación seguro y aislado dentro de las instancias de Amazon EC2, diseñado específicamente para procesar datos altamente sensibles. Aprovechando el AWS Nitro System, estos enclaves aseguran un aislamiento y seguridad robustos, ideales para manejar información confidencial como PII o registros financieros. Presentan un entorno minimalista, reduciendo significativamente el riesgo de exposición de datos. Además, Nitro Enclaves soporta la atestación criptográfica, permitiendo a los usuarios verificar que solo se está ejecutando código autorizado, lo cual es crucial para mantener estándares estrictos de cumplimiento y protección de datos.
Las imágenes de Nitro Enclave se ejecutan desde dentro de las instancias de EC2 y no puedes ver desde la consola web de AWS si una instancia de EC2 está ejecutando imágenes en Nitro Enclave o no.
Sigue todas las instrucciones de la documentación. Sin embargo, estas son las más importantes:
Las imágenes que puedes ejecutar en Nitro Enclave se basan en imágenes de docker, por lo que puedes crear tus imágenes de Nitro Enclave a partir de imágenes de docker como:
Como puedes ver, las imágenes de Nitro Enclave utilizan la extensión eif
(Archivo de Imagen de Enclave).
La salida se verá similar a:
Según la documentación, para ejecutar una imagen de enclave necesitas asignarle memoria de al menos 4 veces el tamaño del archivo eif
. Es posible configurar los recursos predeterminados que se le asignarán en el archivo.
¡Recuerda siempre que también necesitas reservar algunos recursos para la instancia EC2 principal!
Después de conocer los recursos que se deben asignar a una imagen e incluso haber modificado el archivo de configuración, es posible ejecutar una imagen de enclave con:
Si comprometes un host EC2, es posible obtener una lista de imágenes de enclave en ejecución con:
No es posible obtener un shell dentro de una imagen de enclave en ejecución porque ese es el propósito principal del enclave, sin embargo, si usaste el parámetro --debug-mode
, es posible obtener el stdout de él con:
Si un atacante compromete una instancia de EC2, por defecto no podrá obtener un shell dentro de ellas, pero podrá terminarlas con:
La única forma de comunicarse con una enclave que ejecuta imágenes es utilizando vsocks.
Virtual Socket (vsock) es una familia de sockets en Linux diseñada específicamente para facilitar la comunicación entre máquinas virtuales (VMs) y sus hipervisores, o entre las VMs mismas. Vsock permite una comunicación eficiente y bidireccional sin depender de la pila de red del host. Esto hace posible que las VMs se comuniquen incluso sin configuraciones de red, utilizando un ID de Contexto de 32 bits (CID) y números de puerto para identificar y gestionar conexiones. La API de vsock admite tanto tipos de socket de flujo como de datagrama, similar a TCP y UDP, proporcionando una herramienta versátil para aplicaciones de nivel de usuario en entornos virtuales.
Por lo tanto, una dirección vsock se ve así: <CID>:<Port>
Para encontrar los CIDs de las imágenes de enclave en ejecución, simplemente puedes ejecutar el siguiente comando y obtener el EnclaveCID
:
Ten en cuenta que desde el host no hay forma de saber si un CID está exponiendo algún puerto. ¡A menos que utilices algún escáner de puertos vsock como https://github.com/carlospolop/Vsock-scanner.
Encuentra aquí un par de ejemplos: