AWS - Nitro Enum
Reading time: 11 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Basic Information
AWS Nitro ni seti ya teknolojia bunifu ambazo zinaunda jukwaa la msingi kwa ajili ya AWS EC2 instances. Ilianzishwa na Amazon ili kuimarisha usalama, utendaji, na uaminifu, Nitro inatumia vipengele vya vifaa maalum na hypervisor nyepesi. Inatoa muonekano wa kazi nyingi za kawaida za virtualization kwa vifaa na programu maalum, ikiweka chini uso wa shambulio na kuboresha ufanisi wa rasilimali. Kwa kuhamasisha kazi za virtualization, Nitro inaruhusu EC2 instances kutoa utendaji wa karibu wa chuma, na kufanya iwe faida hasa kwa programu zinazohitaji rasilimali nyingi. Zaidi ya hayo, Chip ya Usalama ya Nitro inahakikisha usalama wa vifaa na firmware, ikiongeza nguvu ya usanifu wake.
Nitro Enclaves
AWS Nitro Enclaves inatoa mazingira salama ya kazi yaliyotengwa ndani ya Amazon EC2 instances, yaliyoundwa mahsusi kwa ajili ya kushughulikia data nyeti sana. Kwa kutumia Mfumo wa AWS Nitro, maeneo haya yanahakikisha kutengwa na usalama mzuri, bora kwa kushughulikia taarifa za siri kama PII au rekodi za kifedha. Yanajumuisha mazingira ya minimalist, ambayo hupunguza kwa kiasi kikubwa hatari ya kufichuliwa kwa data. Zaidi ya hayo, Nitro Enclaves inasaidia uthibitisho wa kificho, ikiruhusu watumiaji kuthibitisha kwamba ni msimbo tu ulioidhinishwa unakimbia, muhimu kwa kudumisha ufuatiliaji mkali na viwango vya ulinzi wa data.
caution
Picha za Nitro Enclave zinakimbia kutoka ndani ya EC2 instances na huwezi kuona kutoka kwenye console ya wavuti ya AWS kama EC2 instances inakimbia picha katika Nitro Enclave au la.
Nitro Enclave CLI installation
Fuata maelekezo yote kutoka kwenye nyaraka. Hata hivyo, haya ndiyo muhimu zaidi:
# 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 Images
Picha ambazo unaweza kuendesha katika Nitro Enclave zinategemea picha za docker, hivyo unaweza kuunda picha zako za Nitro Enclave kutoka kwa picha za docker kama:
# 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
Kama unavyoona, picha za Nitro Enclave zinatumia kiendelezi eif
(Enclave Image File).
Matokeo yataonekana kama:
Using the locally available Docker image...
Enclave Image successfully created.
{
"Measurements": {
"HashAlgorithm": "Sha384 { ... }",
"PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284",
"PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f",
"PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3"
}
}
Kimbia Picha
Kulingana na nyaraka, ili kukimbia picha ya enclave unahitaji kuipatia kumbukumbu ya angalau mara 4 ya ukubwa wa faili ya eif
. Inawezekana kuweka rasilimali za default za kuzipatia katika faili
/etc/nitro_enclaves/allocator.yaml
caution
Kumbuka daima kwamba unahitaji kuhifadhi rasilimali fulani kwa ajili ya mfano wa EC2 wa mzazi pia!
Baada ya kujua rasilimali za kutoa kwa picha na hata kuwa na mabadiliko ya faili ya usanidi, inawezekana kuendesha picha ya enclave na:
# 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
Enumerate Enclaves
Ikiwa unavunja na EC2 mwenyeji inawezekana kupata orodha ya picha za enclave zinazotembea kwa:
nitro-cli describe-enclaves
Haiwezekani kupata shell ndani ya picha ya enclave inayotembea kwa sababu hiyo ndiyo sababu kuu ya enclave, hata hivyo, ikiwa umetumia parameter --debug-mode
, inawezekana kupata stdout yake kwa:
ENCLAVE_ID=$(nitro-cli describe-enclaves | jq -r ".[0].EnclaveID")
nitro-cli console --enclave-id ${ENCLAVE_ID}
Terminate Enclaves
Ikiwa mshambuliaji atashambulia EC2 instance, kwa kawaida hatakuwa na uwezo wa kupata shell ndani yao, lakini atakuwa na uwezo wa kuziua kwa:
nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID}
Vsocks
Njia pekee ya kuwasiliana na enclave inayotumia picha ni kutumia vsocks.
Virtual Socket (vsock) ni familia ya soketi katika Linux iliyoundwa mahsusi kuwezesha mawasiliano kati ya mashine za virtual (VMs) na hypervisors zao, au kati ya VMs wenyewe. Vsock inaruhusu mawasiliano bora, ya pande mbili bila kutegemea muundo wa mtandao wa mwenyeji. Hii inafanya iwezekane kwa VMs kuwasiliana hata bila mipangilio ya mtandao, wakitumia 32-bit Context ID (CID) na nambari za port kutambua na kudhibiti muunganisho. API ya vsock inasaidia aina zote za soketi za mtiririko na datagram, sawa na TCP na UDP, ikitoa chombo chenye uwezo kwa programu za ngazi ya mtumiaji katika mazingira ya virtual.
tip
Hivyo, anwani ya vsock inaonekana kama hii: <CID>:<Port>
Ili kupata CIDs za picha zinazotumia enclave unaweza tu kutekeleza cmd ifuatayo na kupata EnclaveCID
:
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
Kumbuka kwamba kutoka kwa mwenyeji hakuna njia ya kujua kama CID inafichua port yoyote! Isipokuwa kwa kutumia vsock port scanner kama https://github.com/carlospolop/Vsock-scanner.
Vsock Server/Listener
Pata hapa mifano kadhaa:
Simple Python Listener
#!/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.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}")
# Using socat
socat VSOCK-LISTEN:<port>,fork EXEC:"echo Hello from server!"
Vsock Client
Mifano:
Simple Python Client
#!/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()
# Using socat
echo "Hello, vsock!" | socat - VSOCK-CONNECT:3:5000
Vsock Proxy
Chombo vsock-proxy kinaruhusu kuproxy vsock proxy na anwani nyingine, kwa mfano:
vsock-proxy 8001 ip-ranges.amazonaws.com 443 --config your-vsock-proxy.yaml
Hii itapeleka bandari ya ndani 8001 katika vsock kwa ip-ranges.amazonaws.com:443
na faili your-vsock-proxy.yaml
inaweza kuwa na maudhui haya yanayoruhusu kufikia ip-ranges.amazonaws.com:443
:
allowlist:
- { address: ip-ranges.amazonaws.com, port: 443 }
Inawezekana kuona anwani za vsock (<CID>:<Port>
) zinazotumiwa na mwenyeji wa EC2 kwa (zingatia 3:8001
, 3 ni CID na 8001 ni bandari):
sudo ss -l -p -n | grep v_str
v_str LISTEN 0 0 3:8001 *:* users:(("vsock-proxy",pid=9458,fd=3))
Nitro Enclave Atestation & KMS
Nitro Enclaves SDK inaruhusu enclave kuomba documenti ya attestation iliyosainiwa kwa cryptography kutoka kwa Nitro Hypervisor, ambayo inajumuisha vipimo vya kipekee vinavyohusiana na enclave hiyo. Vipimo hivi, ambavyo vinajumuisha hashes na platform configuration registers (PCRs), vinatumika wakati wa mchakato wa attestation ili kuonyesha utambulisho wa enclave na kujenga uaminifu na huduma za nje. Documenti ya attestation kwa kawaida ina thamani kama PCR0, PCR1, na PCR2, ambazo umekutana nazo hapo awali unapojenga na kuhifadhi EIF ya enclave.
Kutoka kwenye docs, hizi ndizo thamani za PCR:
PCR | Hash ya ... | Maelezo |
---|---|---|
PCR0 | Faili la picha ya enclave | Vipimo vya mfuatano vya maudhui ya faili la picha, bila data ya sehemu. |
PCR1 | Linux kernel na bootstrap | Vipimo vya mfuatano vya kernel na data ya boot ramfs. |
PCR2 | Programu | Vipimo vya mfuatano, kwa mpangilio wa programu za mtumiaji, bila boot ramfs. |
PCR3 | Jukumu la IAM lililotolewa kwa mfano wa mzazi | Vipimo vya mfuatano vya jukumu la IAM lililotolewa kwa mfano wa mzazi. Inahakikisha kwamba mchakato wa attestation unafanikiwa tu wakati mfano wa mzazi una jukumu sahihi la IAM. |
PCR4 | ID ya mfano wa mzazi | Vipimo vya mfuatano vya ID ya mfano wa mzazi. Inahakikisha kwamba mchakato wa attestation unafanikiwa tu wakati mfano wa mzazi una ID maalum ya mfano. |
PCR8 | Cheti cha kusaini faili la picha ya enclave | Vipimo vya cheti cha kusaini kilichotolewa kwa faili la picha ya enclave. Inahakikisha kwamba mchakato wa attestation unafanikiwa tu wakati enclave ilizinduliwa kutoka kwa faili la picha ya enclave iliyosainiwa na cheti maalum. |
Unaweza kuunganisha attestation ya cryptographic katika programu zako na kutumia uhusiano wa awali na huduma kama AWS KMS. AWS KMS inaweza kuhakiki attestation za enclave na inatoa funguo za hali zinazotegemea attestation (kms:RecipientAttestation:ImageSha384
na kms:RecipientAttestation:PCR
) katika sera zake za funguo. Sera hizi zinahakikisha kwamba AWS KMS inaruhusu operesheni zinazotumia funguo za KMS tu ikiwa documenti ya attestation ya enclave ni halali na inakidhi masharti yaliyotolewa.
tip
Kumbuka kwamba Enclaves katika hali ya debug (--debug) zinaunda documenti za attestation zenye PCRs ambazo zimejaa sifuri (000000000000000000000000000000000000000000000000
). Kwa hivyo, sera za KMS zinazokagua thamani hizi zitaanguka.
PCR Bypass
Kutoka kwa mtazamo wa washambuliaji, angalia kwamba baadhi ya PCRs zitaruhusu kubadilisha baadhi ya sehemu au picha nzima ya enclave na bado zitakuwa halali (kwa mfano PCR4 inachunguza tu ID ya mfano wa mzazi hivyo kuendesha picha yoyote ya enclave katika EC2 hiyo itaruhusu kutimiza mahitaji haya ya PCR).
Kwa hivyo, mshambuliaji ambaye anashambulia mfano wa EC2 anaweza kuwa na uwezo wa kuendesha picha nyingine za enclave ili kupita ulinzi huu.
Utafiti juu ya jinsi ya kubadilisha/kutengeneza picha mpya ili kupita kila ulinzi (hasa zile zisizo wazi) bado ni TODO.
References
- https://medium.com/@F.DL/understanding-vsock-684016cf0eb0
- Sehemu zote za mafunzo ya Nitro kutoka AWS: https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.