AWS - Nitro Enum
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
AWS Nitro is ân suite van innoverende tegnologieĂ« wat die onderliggende platform vir AWS EC2-instanties vorm. Ingevoerd deur Amazon om veiligheid, prestasie en betroubaarheid te verbeter, benut Nitro op maat gemaakte hardewarekomponente en ân liggewig hypervisor. Dit abstraheer baie van die tradisionele virtualisering funksionaliteit na toegewyde hardeware en sagteware, minimaliseer die aanvaloppervlak en verbeter hulpbron doeltreffendheid. Deur virtualisering funksies af te laai, laat Nitro EC2-instanties toe om naby bare-metal prestasie te lewer, wat dit veral voordelig maak vir hulpbron-intensiewe toepassings. Boonop verseker die Nitro Veiligheidschip spesifiek die veiligheid van die hardeware en firmware, wat sy robuuste argitektuur verder versterk.
Nitro Enclaves
AWS Nitro Enclaves bied ân veilige, geĂŻsoleerde rekenaaromgewing binne Amazon EC2-instanties, spesifiek ontwerp vir die verwerking van hoogs sensitiewe data. Deur die AWS Nitro Stelsel te benut, verseker hierdie enclaves robuuste isolasie en veiligheid, ideaal vir die hantering van vertroulike inligting soos PII of finansiĂ«le rekords. Hulle beskik oor ân minimalistiese omgewing, wat die risiko van data blootstelling aansienlik verminder. Boonop ondersteun Nitro Enclaves kriptografiese attestering, wat gebruikers in staat stel om te verifieer dat slegs geautoriseerde kode loop, wat van kardinale belang is vir die handhawing van streng nakoming en databeskeringsstandaarde.
Caution
Nitro Enclave beelde word van binne EC2-instanties uitgevoer en jy kan nie vanaf die AWS webkonsol sien of ân EC2-instantie beelde in Nitro Enclave uitvoer of nie.
Nitro Enclave CLI installasie
Volg al die instruksies uit die dokumentasie. Hierdie is egter die belangrikste:
# Install tools
sudo amazon-linux-extras install aws-nitro-enclaves-cli -y
sudo yum install aws-nitro-enclaves-cli-devel -y
# Config perms
sudo usermod -aG ne $USER
sudo usermod -aG docker $USER
# Check installation
nitro-cli --version
# Start and enable the Nitro Enclaves allocator service.
sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable nitro-enclaves-allocator.service
Nitro Enclave Beelde
Die beelde wat jy in Nitro Enclave kan hardloop, is gebaseer op docker beelde, so jy kan jou Nitro Enclave beelde van docker beelde soos:
# You need to have the docker image accesible in your running local registry
# Or indicate the full docker image URL to access the image
nitro-cli build-enclave --docker-uri <docker-img>:<tag> --output-file nitro-img.eif
Soos wat jy kan sien, gebruik die Nitro Enclave beelde die uitbreiding eif (Enclave Beeld LĂȘer).
Die uitvoer sal soortgelyk lyk aan:
Using the locally available Docker image...
Enclave Image successfully created.
{
"Measurements": {
"HashAlgorithm": "Sha384 { ... }",
"PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284",
"PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f",
"PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3"
}
}
Voer ân Beeld uit
Volgens die dokumentasie, om ân enclave beeld uit te voer, moet jy dit toewys met geheue van ten minste 4 keer die grootte van die eif lĂȘer. Dit is moontlik om die standaard hulpbronne wat aan dit gegee moet word in die lĂȘer te konfigureer.
/etc/nitro_enclaves/allocator.yaml
Caution
Onthou altyd dat jy ook ân paar hulpbronne vir die ouer EC2 instansie moet bespreek!
Nadat jy die hulpbronne weet wat aan ân beeld gegee moet word en selfs die konfigurasie-lĂȘer gewysig het, is dit moontlik om ân enklave-beeld te laat loop met:
# Restart the service so the new default values apply
sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable nitro-enclaves-allocator.service
# Indicate the CPUs and memory to give
nitro-cli run-enclave --cpu-count 2 --memory 3072 --eif-path hello.eif --debug-mode --enclave-cid 16
Enumereer Enklaves
As jy ân EC2-gasheer kompromitteer, is dit moontlik om ân lys van hardloop enklave-beelde te kry met:
nitro-cli describe-enclaves
Dit is nie moontlik om ân shell binne ân lopende enclave-beeld te kry nie, omdat dit die hoofdoel van die enclave is, egter, as jy die parameter --debug-mode gebruik, is dit moontlik om die stdout daarvan te kry met:
ENCLAVE_ID=$(nitro-cli describe-enclaves | jq -r ".[0].EnclaveID")
nitro-cli console --enclave-id ${ENCLAVE_ID}
Beëindig Enklaves
As ân aanvaller ân EC2-instantie kompromitteer, sal hy standaard nie in staat wees om ân shell binne-in hulle te kry nie, maar hy sal in staat wees om hulle te beĂ«indig met:
nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID}
Vsocks
Die enigste manier om te kommunikeer met ân enclave wat ân beeld uitvoer, is deur vsocks.
Virtual Socket (vsock) is ân soketfamilie in Linux wat spesifiek ontwerp is om kommunikasie tussen virtuele masjiene (VMs) en hul hypervisors, of tussen VMs selfs te fasiliteer. Vsock stel doeltreffende, bi-rigting kommunikasie in staat sonder om op die gasheer se netwerkstapel te staatmaak. Dit maak dit moontlik vir VMs om te kommunikeer selfs sonder netwerk konfigurasies, met ân 32-bit Context ID (CID) en poortnommers om verbindings te identifiseer en te bestuur. Die vsock API ondersteun beide stroom- en datagram soket tipes, soortgelyk aan TCP en UDP, wat ân veelsydige hulpmiddel bied vir gebruikersvlak toepassings in virtuele omgewings.
Tip
Daarom lyk ân vsock adres soos volg:
<CID>:<Port>
Om CIDs van die enclave wat beelde uitvoer te vind, kan jy eenvoudig die volgende cmd uitvoer en die EnclaveCID kry:
nitro-cli describe-enclaves
[
{
"EnclaveName": "secure-channel-example",
"EnclaveID": "i-0bc274f83ade02a62-enc18ef3d09c886748",
"ProcessID": 10131,
"EnclaveCID": 16,
"NumberOfCPUs": 2,
"CPUIDs": [
1,
3
],
"MemoryMiB": 1024,
"State": "RUNNING",
"Flags": "DEBUG_MODE",
"Measurements": {
"HashAlgorithm": "Sha384 { ... }",
"PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284",
"PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f",
"PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3"
}
}
]
Warning
Let daarop dat daar van die gasheer af geen manier is om te weet of ân CID enige poort blootstel nie! Tensy jy ân vsock poort skandeerder soos https://github.com/carlospolop/Vsock-scanner gebruik.
Vsock Server/Listener
Vind hier ân paar voorbeelde:
Simple Python Listener
```python #!/usr/bin/env python3From
https://medium.com/@F.DL/understanding-vsock-684016cf0eb0
import socket
CID = socket.VMADDR_CID_HOST PORT = 9999
s = socket.socket(socket.AF_VSOCK, socket.SOCK_STREAM) s.bind((CID, PORT)) s.listen() (conn, (remote_cid, remote_port)) = s.accept()
print(fâConnection opened by cid={remote_cid} port={remote_port}â)
while True: buf = conn.recv(64) if not buf: break
print(fâReceived bytes: {buf}â)
</details>
```bash
# Using socat
socat VSOCK-LISTEN:<port>,fork EXEC:"echo Hello from server!"
Vsock Kliënt
Voorbeelde:
Simpele Python Kliënt
```python #!/usr/bin/env python3#From https://medium.com/@F.DL/understanding-vsock-684016cf0eb0
import socket
CID = socket.VMADDR_CID_HOST PORT = 9999
s = socket.socket(socket.AF_VSOCK, socket.SOCK_STREAM) s.connect((CID, PORT)) s.sendall(bâHello, world!â) s.close()
</details>
```bash
# Using socat
echo "Hello, vsock!" | socat - VSOCK-CONNECT:3:5000
Vsock Proxy
Die hulpmiddel vsock-proxy laat jou toe om ân vsock-proxy met ân ander adres te proxy, byvoorbeeld:
vsock-proxy 8001 ip-ranges.amazonaws.com 443 --config your-vsock-proxy.yaml
Dit sal die lokale poort 8001 in vsock na ip-ranges.amazonaws.com:443 stuur en die lĂȘer your-vsock-proxy.yaml mag hierdie inhoud hĂȘ wat toegang tot ip-ranges.amazonaws.com:443 toelaat:
allowlist:
- { address: ip-ranges.amazonaws.com, port: 443 }
Dit is moontlik om die vsock adresse (<CID>:<Port>) wat deur die EC2 gasheer gebruik word te sien met (let op die 3:8001, 3 is die CID en 8001 die poort):
sudo ss -l -p -n | grep v_str
v_str LISTEN 0 0 3:8001 *:* users:(("vsock-proxy",pid=9458,fd=3))
Nitro Enclave Atestasie & KMS
Die Nitro Enclaves SDK laat ân enclave toe om ân kriptografies geskrewe atestasiedokument van die Nitro Hypervisor aan te vra, wat unieke metings spesifiek vir daardie enclave insluit. Hierdie metings, wat hashes en platformkonfigurasie registre (PCRs) insluit, word tydens die atestasieproses gebruik om die identiteit van die enclave te bewys en vertroue met eksterne dienste te bou. Die atestasiedokument bevat tipies waardes soos PCR0, PCR1, en PCR2, wat jy voorheen teĂ«gekom het toe jy ân enclave EIF gebou en gestoor het.
Van die docs, is dit die PCR waardes:
| PCR | Hash van ... | Beskrywing |
|---|---|---|
| PCR0 | Enclave beeldlĂȘer | ân Aaneengeskakelde meting van die inhoud van die beeldlĂȘer, sonder die afdelingdata. |
| PCR1 | Linux-kern en bootstrap | ân Aaneengeskakelde meting van die kern en boot ramfs data. |
| PCR2 | Toepassing | ân Aaneengeskakelde, in-volgorde meting van die gebruikers toepassings, sonder die boot ramfs. |
| PCR3 | IAM rol toegeken aan die ouer instansie | ân Aaneengeskakelde meting van die IAM rol toegeken aan die ouer instansie. Verseker dat die atestasieproses slegs slaag wanneer die ouer instansie die korrekte IAM rol het. |
| PCR4 | Instansie ID van die ouer instansie | ân Aaneengeskakelde meting van die ID van die ouer instansie. Verseker dat die atestasieproses slegs slaag wanneer die ouer instansie 'n spesifieke instansie ID het. |
| PCR8 | Enclave beeldlĂȘer ondertekeningssertifikaat | ân Meting van die ondertekeningssertifikaat wat vir die enclave beeldlĂȘer gespesifiseer is. Verseker dat die atestasieproses slegs slaag wanneer die enclave vanaf 'n enclave beeldlĂȘer wat deur 'n spesifieke sertifikaat onderteken is, geboot is. |
Jy kan kriptografiese atestasie in jou toepassings integreer en gebruik maak van voorafgeboude integrasies met dienste soos AWS KMS. AWS KMS kan enclave atestasies valideer en bied atestasie-gebaseerde voorwaardesleutels (kms:RecipientAttestation:ImageSha384 en kms:RecipientAttestation:PCR) in sy sleutelsbeleid. Hierdie beleid verseker dat AWS KMS operasies met die KMS-sleutel slegs toelaat as die enclave se atestasiedokument geldig is en aan die gespesifiseerde voorwaardes voldoen.
Tip
Let daarop dat Enclaves in debug (âdebug) modus atestasiedokumente genereer met PCRs wat uit nulles bestaan (
000000000000000000000000000000000000000000000000). Daarom sal KMS-beleid wat hierdie waardes nagaan, misluk.
PCR Bypass
Van ân aanvaller se perspektief, let daarop dat sommige PCRs dit sou toelaat om sekere dele of die hele enclave beeld te wysig en steeds geldig te wees (byvoorbeeld PCR4 kyk net na die ID van die ouer instansie, so om enige enclave beeld in daardie EC2 te loop, sal hierdie potensiĂ«le PCR vereiste vervul).
Daarom mag ân aanvaller wat die EC2 instansie kompromitteer, in staat wees om ander enclave beelde te loop om hierdie beskermings te omseil.
Die navorsing oor hoe om nuwe beelde te wysig/te skep om elke beskerming te omseil (veral die nie so voor die hand liggende) is steeds TODO.
Verwysings
- https://medium.com/@F.DL/understanding-vsock-684016cf0eb0
- Alle dele van die Nitro tutoriaal van AWS: https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

