AWS - Nitro Enum

Support HackTricks

Taarifa za Msingi

AWS Nitro ni suite ya teknolojia za ubunifu zinazounda jukwaa la msingi kwa AWS EC2 instances. Iliyotambulishwa na Amazon ili kuboresha usalama, utendaji, na uaminifu, Nitro inatumia vijenzi vya vifaa maalum na hypervisor nyepesi. Inachukua sehemu kubwa ya utendaji wa kawaida wa uhalisia na kuuweka kwenye vifaa na programu maalum, kupunguza uso wa shambulio na kuboresha ufanisi wa rasilimali. Kwa kuhamisha kazi za uhalisia, Nitro inaruhusu EC2 instances kutoa utendaji karibu na bare-metal, na kuifanya kuwa na manufaa hasa kwa programu zinazohitaji rasilimali nyingi. Zaidi ya hayo, Chip ya Usalama ya Nitro inahakikisha usalama wa vifaa na firmware, ikithibitisha zaidi usanifu wake thabiti.

Nitro Enclaves

AWS Nitro Enclaves hutoa mazingira salama, ya kujitenga ndani ya Amazon EC2 instances, iliyoundwa mahsusi kwa ajili ya kuchakata data nyeti sana. Kwa kutumia Mfumo wa AWS Nitro, enclaves hizi zinahakikisha kutengwa na usalama wa hali ya juu, bora kwa kushughulikia taarifa za siri kama PII au rekodi za kifedha. Zinajumuisha mazingira ya kimsingi, kupunguza sana hatari ya kufichua data. Zaidi ya hayo, Nitro Enclaves zinaunga mkono uthibitisho wa cryptographic, kuruhusu watumiaji kuthibitisha kwamba ni msimbo ulioruhusiwa tu unaoendesha, muhimu kwa kudumisha viwango vikali vya kufuata na ulinzi wa data.

Picha za Nitro Enclave zinaendeshwa kutoka ndani ya EC2 instances na huwezi kuona kutoka kwenye console ya wavuti ya AWS kama EC2 instances inaendesha picha kwenye Nitro Enclave au la.

Ufungaji wa Nitro Enclave CLI

Fuata maagizo 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

Picha za Nitro Enclave

Picha ambazo unaweza kuendesha katika Nitro Enclave zinategemea picha za docker, kwa 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"
}
}

Run an Image

Kama ilivyoelezwa katika hati, ili kuendesha picha ya enclave unahitaji kuipatia kumbukumbu ya angalau mara 4 ya ukubwa wa faili ya eif. Inawezekana kusanidi rasilimali za chaguo-msingi za kuipatia katika faili

/etc/nitro_enclaves/allocator.yaml

Kumbuka kila mara kwamba unahitaji kuhifadhi baadhi ya rasilimali kwa ajili ya mzazi EC2 pia!

Baada ya kujua rasilimali za kutoa kwa picha na hata kubadilisha 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

Tambua Enclaves

Ikiwa utadukua mwenyeji wa EC2 inawezekana kupata orodha ya picha za enclave zinazoendesha kwa:

nitro-cli describe-enclaves

Ni haiwezekani kupata shell ndani ya picha ya enclave inayoendesha kwa sababu hiyo ndiyo madhumuni kuu ya enclave, hata hivyo, ikiwa ulitumia parameter --debug-mode, inawezekana kupata stdout yake na:

ENCLAVE_ID=$(nitro-cli describe-enclaves | jq -r ".[0].EnclaveID")
nitro-cli console --enclave-id ${ENCLAVE_ID}

Terminate Enclaves

Ikiwa mshambulizi atapata udhibiti wa EC2 instance kwa chaguo-msingi hataweza kupata shell ndani yake, lakini ataweza kuizima na:

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

Vsocks

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

Virtual Socket (vsock) ni familia ya soketi katika Linux iliyoundwa mahsusi kuwezesha mawasiliano kati ya mashine za kawaida (VMs) na hypervisors zao, au kati ya VMs wenyewe. Vsock inawezesha mawasiliano yenye ufanisi, ya pande mbili bila kutegemea stack ya mtandao ya mwenyeji. Hii inafanya iwezekane kwa VMs kuwasiliana hata bila usanidi wa mtandao, kutumia 32-bit Context ID (CID) na nambari za bandari kutambua na kudhibiti miunganisho. API ya vsock inasaidia aina zote za soketi za mkondo na datagram, sawa na TCP na UDP, ikitoa zana inayobadilika kwa programu za kiwango cha mtumiaji katika mazingira ya kawaida.

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

Ili kupata CIDs za picha zinazoendesha 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"
}
}
]

Kumbuka kuwa kutoka kwa mwenyeji hakuna njia yoyote ya kujua kama CID inafichua bandari yoyote! Isipokuwa kutumia vsock port scanner kama https://github.com/carlospolop/Vsock-scanner.

Vsock Server/Listener

Pata hapa mifano michache:

Simple Python Listener

```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>

## Uchanganuzi wa AWS Nitro

AWS Nitro ni jukwaa la usalama ambalo linatoa huduma za usalama kwa EC2. Hapa kuna baadhi ya mbinu za uchanganuzi wa AWS Nitro:

### 1. Kagua Metadata ya Instance

Unaweza kupata metadata ya instance kwa kutumia amri ifuatayo:

```bash
curl http://169.254.169.254/latest/meta-data/

2. Angalia Logs za Nitro

Logs za Nitro zinaweza kutoa taarifa muhimu kuhusu shughuli za usalama. Angalia logs hizi kwa kutumia amri ifuatayo:

sudo dmesg | grep -i nitro

3. Tumia AWS CLI kwa Uchunguzi

Unaweza kutumia AWS CLI kupata taarifa zaidi kuhusu mazingira ya Nitro. Kwa mfano:

aws ec2 describe-instances --instance-ids i-1234567890abcdef0

4. Kagua Usanidi wa IAM

Kagua sera za IAM zinazohusiana na Nitro ili kuhakikisha kuwa hakuna upatikanaji usioidhinishwa:

aws iam list-roles
aws iam get-role --role-name <role-name>

Kwa kutumia mbinu hizi, unaweza kufanya uchanganuzi wa kina wa AWS Nitro na kubaini udhaifu wowote wa usalama.

# Using socat
socat VSOCK-LISTEN:<port>,fork EXEC:"echo Hello from server!"

Vsock Client

Mifano:

Last updated