AWS - Nitro Enum

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Taarifa Msingi

AWS Nitro ni seti ya teknolojia za ubunifu ambazo hufanya jukwaa la msingi kwa ajili ya visa vya AWS EC2. Iliyotolewa na Amazon ili kuimarisha usalama, utendaji, na uaminifu, Nitro inatumia vipengele vya vifaa maalum na hypervisor nyepesi. Inaficha sehemu kubwa ya utendaji wa kawaida wa uvirtualization kwa vifaa na programu maalum, kupunguza eneo la shambulio na kuboresha ufanisi wa rasilimali. Kwa kuchukua majukumu ya uvirtualization, Nitro inaruhusu visa vya EC2 kutoa utendaji karibu sawa na chuma cha msingi, ikifanya iwe hasa faida kwa maombi yanayohitaji rasilimali nyingi. Aidha, Chip ya Usalama ya Nitro inahakikisha usalama wa vifaa na firmware, ikithibitisha muundo wake imara zaidi.

Mabweni ya Nitro

AWS Nitro Enclaves hutoa mazingira salama, yaliyotengwa ndani ya visa vya Amazon EC2, yaliyoundwa kwa usindikaji wa data nyeti sana. Kwa kutumia Mfumo wa AWS Nitro, mabweni haya hutoa utengamano na usalama imara, yanayofaa kwa kusimamia habari za siri kama PII au rekodi za kifedha. Yanajumuisha mazingira ya minimalist, kupunguza hatari kubwa ya kufichua data. Aidha, Mabweni ya Nitro hutoa uthibitisho wa kriptografia, kuruhusu watumiaji kuhakiki kuwa kanuni iliyoruhusiwa pekee ndiyo inayotumika, muhimu kwa kudumisha viwango vya utekelezaji kali na ulinzi wa data.

Picha za Mabweni ya Nitro zinaendeshwa kutoka ndani ya visa vya EC2 na huwezi kuona kutoka kwenye konsoli ya wavuti ya AWS ikiwa visa vya EC2 vinakimbia picha katika Mabweni ya Nitro au la.

Usanidi wa CLI wa Mabweni ya Nitro

Fuata maagizo yote kutoka kwenye hati ya maelezo. 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

Picha za Ngome ya Nitro

Picha ambazo unaweza kuendesha kwenye Ngome ya Nitro zinategemea picha za docker, hivyo unaweza kuunda picha zako za Ngome ya Nitro kutoka kwenye 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 hutumia kifaa cha eif (Faili ya Picha ya Enclave).

Matokeo yatafanana na:

Using the locally available Docker image...
Enclave Image successfully created.
{
"Measurements": {
"HashAlgorithm": "Sha384 { ... }",
"PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284",
"PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f",
"PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3"
}
}

Tekeleza Picha

Kulingana na hati ya maelezo, ili kuendesha picha ya enklei unahitaji kuiwekea kumbukumbu ya angalau mara 4 ya ukubwa wa faili ya eif. Inawezekana kusanidi rasilimali za msingi za kumpa katika faili hiyo.

/etc/nitro_enclaves/allocator.yaml

Kumbuka daima kwamba unahitaji kuhifadhi baadhi ya rasilimali kwa ajili ya kifaa cha mzazi cha EC2 pia!

Baada ya kujua rasilimali za kutoa kwa picha na hata kubadilisha faili ya usanidi, ni rahisi kuendesha picha ya ngome 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

Kagua Enclaves

Ikiwa umefanikiwa kudukua mwenyeji wa EC2 inawezekana kupata orodha ya picha za enclaves zinazoendeshwa kwa:

nitro-cli describe-enclaves

Haiwezekani kupata ganda ndani ya picha ya enklevu inayoendeshwa kwa sababu hiyo ndiyo lengo kuu la enklevu, hata hivyo, ikiwa ulitumia 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}

Kukomesha Enclaves

Ikiwa mshambuliaji atahatarisha kifaa cha EC2 kwa chaguo-msingi hataweza kupata kifaa cha kuingilia, lakini ataweza kukomesha kifaa hicho kwa:

nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID}

Vsock

Njia pekee ya kuwasiliana na enclave inayotumia picha ni kutumia vsocks.

Virtual Socket (vsock) ni familia ya soketi katika Linux iliyoundwa kwa kusudi maalum la kurahisisha mawasiliano kati ya mashine za kawaida (VMs) na hypervisors yao, au kati ya VMs wao wenyewe. Vsock inawezesha mawasiliano ya pande zote bila kutegemea safu ya mtandao ya mwenyeji. Hii inawezesha VMs kuwasiliana hata bila mipangilio ya mtandao, kwa kutumia Kitambulisho cha Muktadha cha biti 32 (CID) na nambari za bandari kutambua na kusimamia uhusiano. API ya vsock inasaidia aina za soketi za mtiririko na datagramu, kama TCP na UDP, hivyo kuwa chombo cha kipekee kwa matumizi ya programu katika mazingira ya vitengo vya kielelezo.

Hivyo, anwani ya vsock inaonekana kama hii: <CID>:<Port>

Ili kupata CIDs za picha zinazoendesha eneo la kujificha unaweza tu kutekeleza cmd ifuatayo na kupata EnclaveCID:

nitro-cli describe-enclaves

[
{
"EnclaveName": "mfano wa kituo salama",
"EnclaveID": "i-0bc274f83ade02a62-enc18ef3d09c886748",
"ProcessID": 10131,
    "EnclaveCID": 16,
    "NumberOfCPUs": 2,
"CPUIDs": [
1,
3
],
"MemoryMiB": 1024,
"State": "INAKIMBIZA",
"Flags": "HADHI YA KUJARIBU",
"Measurements": {
"HashAlgorithm": "Sha384 { ... }",
"PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284",
"PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f",
"PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3"
}
}
]

Tambua kwamba kutoka kwa mwenyeji hakuna njia ya kujua ikiwa CID inafunua bandari yoyote! Isipokuwa kwa kutumia baadhi ya skana ya bandari ya vsock kama https://github.com/carlospolop/Vsock-scanner.

Mfumo/Msikilizaji wa Vsock

Pata hapa mifano michache:

Mpiga-sauti Rahisi wa Python

```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.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!"

Mteja wa Vsock

Mifano:

Last updated