AWS - Nitro Enum
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AWS Nitro ist eine Suite von innovativen Technologien, die die zugrunde liegende Plattform für AWS EC2-Instanzen bilden. Von Amazon eingeführt, um Sicherheit, Leistung und Zuverlässigkeit zu verbessern, nutzt Nitro maßgeschneiderte Hardwarekomponenten und einen leichten Hypervisor. Es abstrahiert einen Großteil der traditionellen Virtualisierungsfunktionen auf dedizierte Hardware und Software, minimiert die Angriffsfläche und verbessert die Ressourceneffizienz. Durch das Auslagern von Virtualisierungsfunktionen ermöglicht Nitro EC2-Instanzen, nahezu Bare-Metal-Leistung zu liefern, was besonders vorteilhaft für ressourcenintensive Anwendungen ist. Darüber hinaus gewährleistet der Nitro Security Chip speziell die Sicherheit der Hardware und Firmware und festigt somit seine robuste Architektur.
AWS Nitro Enclaves bietet eine sichere, isolierte Rechenumgebung innerhalb von Amazon EC2-Instanzen, die speziell für die Verarbeitung hochsensibler Daten entwickelt wurde. Durch die Nutzung des AWS Nitro-Systems gewährleisten diese Enclaves eine robuste Isolation und Sicherheit, die ideal für den Umgang mit vertraulichen Informationen wie PII oder Finanzunterlagen ist. Sie verfügen über eine minimalistische Umgebung, die das Risiko einer Datenexposition erheblich reduziert. Darüber hinaus unterstützen Nitro Enclaves die kryptografische Attestierung, die es Benutzern ermöglicht zu überprüfen, dass nur autorisierter Code ausgeführt wird, was entscheidend für die Einhaltung strenger Compliance- und Datenschutzstandards ist.
Nitro Enclave-Images werden innerhalb von EC2-Instanzen ausgeführt und Sie können im AWS-Webkonsole nicht sehen, ob eine EC2-Instanz Images in Nitro Enclave ausführt oder nicht.
Befolgen Sie alle Anweisungen aus der Dokumentation. Dies sind jedoch die wichtigsten:
Die Bilder, die Sie in Nitro Enclave ausführen können, basieren auf Docker-Bildern, sodass Sie Ihre Nitro Enclave-Bilder aus Docker-Bildern wie: erstellen können:
Wie Sie sehen können, verwenden die Nitro Enclave-Images die Erweiterung eif
(Enclave Image File).
Die Ausgabe wird ähnlich aussehen wie:
Laut der Dokumentation müssen Sie, um ein Enklaven-Image auszuführen, ihm mindestens das Vierfache der Größe der eif
-Datei zuweisen. Es ist möglich, die Standardressourcen, die ihm zugewiesen werden, in der Datei zu konfigurieren.
Denken Sie immer daran, dass Sie auch einige Ressourcen für die übergeordnete EC2-Instanz reservieren müssen!
Nachdem Sie die Ressourcen kennen, die einem Image zugewiesen werden sollen, und die Konfigurationsdatei sogar geändert haben, ist es möglich, ein Enklave-Image mit folgendem Befehl auszuführen:
Wenn Sie einen EC2-Host kompromittieren, ist es möglich, eine Liste der laufenden Enklavenbilder mit:
Es ist nicht möglich, eine Shell innerhalb eines laufenden Enklaven-Images zu erhalten, da dies der Hauptzweck der Enklave ist. Wenn Sie jedoch den Parameter --debug-mode
verwendet haben, ist es möglich, die stdout davon mit folgendem Befehl zu erhalten:
Wenn ein Angreifer eine EC2-Instanz kompromittiert, wird er standardmäßig nicht in der Lage sein, eine Shell darin zu erhalten, aber er wird in der Lage sein, sie zu beenden mit:
Der einzige Weg, um mit einem enclave laufenden Image zu kommunizieren, ist die Verwendung von vsocks.
Virtual Socket (vsock) ist eine Socket-Familie in Linux, die speziell entwickelt wurde, um die Kommunikation zwischen virtuellen Maschinen (VMs) und ihren Hypervisoren oder zwischen VMs untereinander zu erleichtern. Vsock ermöglicht eine effiziente, bidirektionale Kommunikation, ohne auf den Netzwerk-Stack des Hosts angewiesen zu sein. Dies macht es möglich, dass VMs auch ohne Netzwerkkonfigurationen kommunizieren, indem sie eine 32-Bit Context ID (CID) und Portnummern verwenden, um Verbindungen zu identifizieren und zu verwalten. Die vsock API unterstützt sowohl Stream- als auch Datagram-Socket-Typen, ähnlich wie TCP und UDP, und bietet ein vielseitiges Werkzeug für Anwendungen auf Benutzerebene in virtuellen Umgebungen.
Daher sieht eine vsock-Adresse so aus: <CID>:<Port>
Um die CIDs der laufenden Enclave-Images zu finden, können Sie einfach den folgenden Befehl ausführen und die EnclaveCID
abrufen:
Beachten Sie, dass es vom Host aus keine Möglichkeit gibt zu wissen, ob eine CID einen Port exponiert! Es sei denn, Sie verwenden einen vsock-Port-Scanner wie https://github.com/carlospolop/Vsock-scanner.
Hier finden Sie ein paar Beispiele: