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 est une suite de technologies innovantes qui forme la plateforme sous-jacente pour les instances AWS EC2. Introduit par Amazon pour améliorer la sécurité, la performance et la fiabilité, Nitro s'appuie sur des composants matériels personnalisés et un hyperviseur léger. Il abstrait une grande partie de la fonctionnalité de virtualisation traditionnelle vers du matériel et des logiciels dédiés, minimisant la surface d'attaque et améliorant l'efficacité des ressources. En déchargeant les fonctions de virtualisation, Nitro permet aux instances EC2 de fournir une performance proche du bare-metal, ce qui est particulièrement bénéfique pour les applications gourmandes en ressources. De plus, la puce de sécurité Nitro garantit spécifiquement la sécurité du matériel et du firmware, renforçant ainsi son architecture robuste.
AWS Nitro Enclaves fournit un environnement de calcul sécurisé et isolé au sein des instances Amazon EC2, spécifiquement conçu pour le traitement de données hautement sensibles. S'appuyant sur le système AWS Nitro, ces enclaves garantissent une isolation et une sécurité robustes, idéales pour traiter des informations confidentielles telles que des données personnelles identifiables (PII) ou des dossiers financiers. Elles disposent d'un environnement minimaliste, réduisant considérablement le risque d'exposition des données. De plus, les Nitro Enclaves prennent en charge l'attestation cryptographique, permettant aux utilisateurs de vérifier que seul le code autorisé s'exécute, ce qui est crucial pour maintenir des normes strictes de conformité et de protection des données.
Les images des Nitro Enclaves sont exécutées à partir des instances EC2 et vous ne pouvez pas voir depuis la console web AWS si une instance EC2 exécute des images dans Nitro Enclave ou non.
Suivez toutes les instructions de la documentation. Cependant, voici les plus importantes :
Les images que vous pouvez exécuter dans Nitro Enclave sont basées sur des images docker, donc vous pouvez créer vos images Nitro Enclave à partir d'images docker comme :
Comme vous pouvez le voir, les images Nitro Enclave utilisent l'extension eif
(Fichier d'Image d'Enclave).
La sortie ressemblera à :
Selon la documentation, pour exécuter une image d'enclave, vous devez lui attribuer une mémoire de au moins 4 fois la taille du fichier eif
. Il est possible de configurer les ressources par défaut à lui attribuer dans le fichier.
N'oubliez jamais que vous devez également réserver des ressources pour l'instance EC2 parente !
Après avoir connu les ressources à attribuer à une image et même avoir modifié le fichier de configuration, il est possible d'exécuter une image d'enclave avec :
Si vous compromettez un hôte EC2, il est possible d'obtenir une liste des images d'enclave en cours d'exécution avec :
Il n'est pas possible d'obtenir un shell à l'intérieur d'une image d'enclave en cours d'exécution car c'est le principal objectif de l'enclave, cependant, si vous utilisez le paramètre --debug-mode
, il est possible d'obtenir le stdout avec :
Si un attaquant compromet une instance EC2, par défaut, il ne pourra pas obtenir un shell à l'intérieur, mais il pourra les terminer avec :
Le seul moyen de communiquer avec une enclave exécutant une image est d'utiliser vsocks.
Virtual Socket (vsock) est une famille de sockets dans Linux spécifiquement conçue pour faciliter la communication entre les machines virtuelles (VMs) et leurs hyperviseurs, ou entre les VMs elles-mêmes. Vsock permet une communication efficace et bidirectionnelle sans dépendre de la pile réseau de l'hôte. Cela permet aux VMs de communiquer même sans configurations réseau, en utilisant un ID de contexte de 32 bits (CID) et des numéros de port pour identifier et gérer les connexions. L'API vsock prend en charge à la fois les types de sockets de flux et de datagrammes, similaires à TCP et UDP, fournissant un outil polyvalent pour les applications de niveau utilisateur dans des environnements virtuels.
Par conséquent, une adresse vsock ressemble à ceci : <CID>:<Port>
Pour trouver les CIDs des images d'enclave en cours d'exécution, vous pouvez simplement exécuter la commande suivante et obtenir le EnclaveCID
:
Notez qu'à partir de l'hôte, il n'y a aucun moyen de savoir si un CID expose un port ! À moins d'utiliser un scanneur de port vsock comme https://github.com/carlospolop/Vsock-scanner.
Trouvez ici quelques exemples :