AWS - Nitro Enum
Podstawowe informacje
AWS Nitro to zestaw innowacyjnych technologii, które stanowią podstawową platformę dla instancji AWS EC2. Wprowadzony przez Amazon w celu poprawy bezpieczeństwa, wydajności i niezawodności, Nitro wykorzystuje dedykowane komponenty sprzętowe i lekki hipernadzorca. Abstrahuje wiele tradycyjnych funkcji wirtualizacji do dedykowanego sprzętu i oprogramowania, minimalizując powierzchnię ataku i poprawiając efektywność zasobów. Poprzez przeniesienie funkcji wirtualizacji, Nitro pozwala instancjom EC2 osiągać wydajność zbliżoną do metalu, co jest szczególnie korzystne dla aplikacji wymagających dużych zasobów. Dodatkowo, specjalny układ zabezpieczeń Nitro zapewnia bezpieczeństwo sprzętu i oprogramowania, dodatkowo umacniając jego solidną architekturę.
Komory Nitro
AWS Nitro Enclaves zapewniają bezpieczne, izolowane środowisko obliczeniowe w instancjach Amazon EC2, specjalnie zaprojektowane do przetwarzania bardzo wrażliwych danych. Wykorzystując System AWS Nitro, te komory zapewniają solidną izolację i bezpieczeństwo, idealne do obsługi poufnych informacji takich jak PII czy dane finansowe. Charakteryzują się minimalistycznym środowiskiem, znacząco zmniejszając ryzyko ujawnienia danych. Dodatkowo, komory Nitro obsługują atestację kryptograficzną, pozwalając użytkownikom zweryfikować, że uruchamiany jest tylko autoryzowany kod, co jest kluczowe dla zachowania surowych standardów zgodności i ochrony danych.
Obrazy komór Nitro są uruchamiane wewnątrz instancji EC2 i nie można ich zobaczyć w konsoli internetowej AWS, czy instancja EC2 uruchamia obrazy w komorze Nitro, czy nie.
Instalacja interfejsu wiersza poleceń komory Nitro
Postępuj zgodnie ze wszystkimi instrukcjami z dokumentacji. Jednakże, oto najważniejsze:
Obrazy Enklawy Nitro
Obrazy, które można uruchamiać w Enklawie Nitro, są oparte na obrazach dockerowych, więc możesz tworzyć swoje obrazy Enklawy Nitro z obrazów dockerowych, takich jak:
Jak widać obrazy Nitro Enclave używają rozszerzenia eif
(Enclave Image File).
Wyjście będzie wyglądać podobnie jak:
Uruchom obraz
Zgodnie z dokumentacją, aby uruchomić obraz enklawy, musisz przypisać mu pamięć co najmniej 4 razy większą niż rozmiar pliku eif
. Możliwe jest skonfigurowanie domyślnych zasobów do przypisania w pliku.
Zawsze pamiętaj, że musisz zarezerwować pewne zasoby dla nadrzędnego EC2 instancji!
Po poznaniu zasobów do przypisania obrazowi i nawet po zmodyfikowaniu pliku konfiguracyjnego można uruchomić obraz enklawy za pomocą:
Wyliczanie Enklaw
Jeśli przejmiesz hosta EC2, możesz uzyskać listę uruchomionych obrazów enklaw za pomocą:
Nie jest możliwe uzyskanie powłoki wewnątrz działającego obrazu enklawy, ponieważ to główne przeznaczenie enklawy, jednakże, jeśli użyto parametru --debug-mode
, możliwe jest uzyskanie jego stdout za pomocą:
Zakończ enklawy
Jeśli atakujący przejmie instancję EC2, domyślnie nie będzie mógł uzyskać do nich dostępu za pomocą powłoki, ale będzie mógł je zakończyć przy użyciu:
Vsock
Jedynym sposobem komunikacji z uruchomionym obrazem enklawy jest użycie vsocks.
Wirtualny gniazdek (vsock) to rodzina gniazdek w systemie Linux, specjalnie zaprojektowana do ułatwiania komunikacji między maszynami wirtualnymi (VM) a ich hipernadzorcami, lub między samymi VM sobą. Vsock umożliwia efektywną, dwukierunkową komunikację bez polegania na stosie sieciowym hosta. Dzięki temu maszyny wirtualne mogą komunikować się nawet bez konfiguracji sieciowej, korzystając z 32-bitowego identyfikatora kontekstu (CID) i numerów portów do identyfikacji i zarządzania połączeniami. Interfejs API vsock obsługuje zarówno gniazdka strumieniowe, jak i datagramowe, podobnie jak TCP i UDP, zapewniając wszechstronne narzędzie dla aplikacji na poziomie użytkownika w środowiskach wirtualnych.
Dlatego adres vsock wygląda tak: <CID>:<Port>
Aby znaleźć CIDs uruchomionych obrazów enklawy, wystarczy wykonać następujące polecenie i uzyskać EnclaveCID
:
Zauważ, że z hosta nie ma sposobu, aby dowiedzieć się, czy CID ujawnia jakikolwiek port! Chyba że użyjesz jakiegoś skanera portów vsock, takiego jak https://github.com/carlospolop/Vsock-scanner.
Serwer/odbiornik Vsock
Oto kilka przykładów:
Last updated