AWS - Nitro Enum

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Basic Information

AWS Nitro είναι μια σουίτα καινοτόμων τεχνολογιών που σχηματίζουν την υποκείμενη πλατφόρμα για τις περιπτώσεις AWS EC2. Εισήχθη από την Amazon για να βελτιώσει την ασφάλεια, την απόδοση και την αξιοπιστία, το Nitro εκμεταλλεύεται προσαρμοσμένα υλικά και έναν ελαφρύ hypervisor. Απομονώνει πολλές από τις παραδοσιακές λειτουργίες εικονικοποίησης σε ειδικό υλικό και λογισμικό, ελαχιστοποιώντας την επιφάνεια επίθεσης και βελτιώνοντας την αποδοτικότητα πόρων. Με την εκφόρτωση των λειτουργιών εικονικοποίησης, το Nitro επιτρέπει στις περιπτώσεις EC2 να παρέχουν σχεδόν απόδοση bare-metal, καθιστώντας το ιδιαίτερα ευεργετικό για εφαρμογές που απαιτούν πολλούς πόρους. Επιπλέον, το Nitro Security Chip διασφαλίζει ειδικά την ασφάλεια του υλικού και του firmware, εδραιώνοντας περαιτέρω την ισχυρή του αρχιτεκτονική.

Nitro Enclaves

AWS Nitro Enclaves παρέχει ένα ασφαλές, απομονωμένο υπολογιστικό περιβάλλον εντός των περιπτώσεων Amazon EC2, σχεδιασμένο ειδικά για την επεξεργασία εξαιρετικά ευαίσθητων δεδομένων. Εκμεταλλευόμενο το AWS Nitro System, αυτά τα enclaves διασφαλίζουν ισχυρή απομόνωση και ασφάλεια, ιδανικά για διαχείριση εμπιστευτικών πληροφοριών όπως PII ή χρηματοοικονομικά αρχεία. Διαθέτουν ένα μινιμαλιστικό περιβάλλον, μειώνοντας σημαντικά τον κίνδυνο έκθεσης δεδομένων. Επιπλέον, τα Nitro Enclaves υποστηρίζουν κρυπτογραφική πιστοποίηση, επιτρέποντας στους χρήστες να επαληθεύουν ότι εκτελείται μόνο εξουσιοδοτημένος κώδικας, κρίσιμο για τη διατήρηση αυστηρών προτύπων συμμόρφωσης και προστασίας δεδομένων.

Caution

Οι εικόνες Nitro Enclave τρέχουν από μέσα στις περιπτώσεις EC2 και δεν μπορείτε να δείτε από την κονσόλα ιστού AWS αν μια περίπτωση EC2 εκτελεί εικόνες σε Nitro Enclave ή όχι.

Nitro Enclave CLI installation

Ακολουθήστε όλες τις οδηγίες από την τεκμηρίωση. Ωστόσο, αυτές είναι οι πιο σημαντικές:

# 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

Οι εικόνες που μπορείτε να εκτελέσετε στο Nitro Enclave βασίζονται σε εικόνες docker, οπότε μπορείτε να δημιουργήσετε τις εικόνες Nitro Enclave σας από εικόνες docker όπως:

# 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

Όπως μπορείτε να δείτε, οι εικόνες Nitro Enclave χρησιμοποιούν την επέκταση eif (Enclave Image File).

Η έξοδος θα μοιάζει με:

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

Εκτέλεση μιας Εικόνας

Σύμφωνα με την τεκμηρίωση, για να εκτελέσετε μια εικόνα enclave πρέπει να της αναθέσετε μνήμη τουλάχιστον 4 φορές το μέγεθος του αρχείου eif. Είναι δυνατόν να ρυθμίσετε τους προεπιλεγμένους πόρους που θα της δώσετε στο αρχείο.

/etc/nitro_enclaves/allocator.yaml

Caution

Να θυμάστε πάντα ότι πρέπει να κρατήσετε κάποιους πόρους για την κύρια EC2 παρουσία επίσης!

Αφού γνωρίσετε τους πόρους που πρέπει να δώσετε σε μια εικόνα και ακόμη και αφού έχετε τροποποιήσει το αρχείο ρύθμισης, είναι δυνατό να εκτελέσετε μια εικόνα enclave με:

# 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

Καταμέτρηση Ενκλάβων

Αν παραβιάσετε έναν EC2 host, είναι δυνατόν να αποκτήσετε μια λίστα με τις τρέχουσες εικόνες ενκλάβων με:

nitro-cli describe-enclaves

Δεν είναι δυνατό να αποκτήσετε ένα shell μέσα σε μια εκτελούμενη εικόνα enclave γιατί αυτός είναι ο κύριος σκοπός του enclave, ωστόσο, αν χρησιμοποιήσατε την παράμετρο --debug-mode, είναι δυνατό να αποκτήσετε το stdout της με:

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

Τερματισμός Ενκλάβων

Αν ένας επιτιθέμενος παραβιάσει μια EC2 instance, από προεπιλογή δεν θα μπορεί να αποκτήσει πρόσβαση σε shell μέσα σε αυτές, αλλά θα μπορεί να τις τερματίσει με:

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

Vsocks

Ο μόνος τρόπος για να επικοινωνήσετε με μια enclave που εκτελεί εικόνα είναι χρησιμοποιώντας vsocks.

Virtual Socket (vsock) είναι μια οικογένεια sockets στο Linux που έχει σχεδιαστεί ειδικά για να διευκολύνει την επικοινωνία μεταξύ εικονικών μηχανών (VMs) και των hypervisors τους, ή μεταξύ των VMs αυτών. Το vsock επιτρέπει αποδοτική, διπλής κατεύθυνσης επικοινωνία χωρίς να βασίζεται στο δίκτυο του host. Αυτό καθιστά δυνατή την επικοινωνία των VMs ακόμη και χωρίς ρυθμίσεις δικτύου, χρησιμοποιώντας ένα 32-bit Context ID (CID) και αριθμούς θυρών για να προσδιορίσουν και να διαχειριστούν τις συνδέσεις. Η API του vsock υποστηρίζει τόσο τύπους socket ροής όσο και datagram, παρόμοια με TCP και UDP, παρέχοντας ένα ευέλικτο εργαλείο για εφαρμογές επιπέδου χρήστη σε εικονικά περιβάλλοντα.

Tip

Επομένως, μια διεύθυνση vsock φαίνεται έτσι: <CID>:<Port>

Για να βρείτε τα CIDs των εικόνων enclave που εκτελούνται, μπορείτε απλά να εκτελέσετε την παρακάτω εντολή και να πάρετε το 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

Σημειώστε ότι από τον host δεν υπάρχει κανένας τρόπος να γνωρίζετε αν ένα CID εκθέτει οποιαδήποτε θύρα! Εκτός αν χρησιμοποιήσετε κάποιο vsock port scanner όπως https://github.com/carlospolop/Vsock-scanner.

Vsock Server/Listener

Βρείτε εδώ μερικά παραδείγματα:

Απλός 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>
```bash
# Using socat
socat VSOCK-LISTEN:<port>,fork EXEC:"echo Hello from server!"

Vsock Client

Παραδείγματα:

Απλός Python Client ```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

Το εργαλείο vsock-proxy επιτρέπει την προώθηση ενός vsock proxy με μια άλλη διεύθυνση, για παράδειγμα:

vsock-proxy 8001 ip-ranges.amazonaws.com 443 --config your-vsock-proxy.yaml

Αυτό θα προωθήσει την τοπική θύρα 8001 στο vsock στο ip-ranges.amazonaws.com:443 και το αρχείο your-vsock-proxy.yaml μπορεί να έχει αυτό το περιεχόμενο που επιτρέπει την πρόσβαση στο ip-ranges.amazonaws.com:443:

allowlist:
- { address: ip-ranges.amazonaws.com, port: 443 }

Είναι δυνατόν να δείτε τις διευθύνσεις vsock (<CID>:<Port>) που χρησιμοποιούνται από τον EC2 host με (σημειώστε το 3:8001, 3 είναι το CID και 8001 η θύρα):

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 επιτρέπει σε μια enclave να ζητήσει ένα κρυπτογραφικά υπογεγραμμένο έγγραφο πιστοποίησης από τον Nitro Hypervisor, το οποίο περιλαμβάνει μοναδικές μετρήσεις συγκεκριμένες για αυτή την enclave. Αυτές οι μετρήσεις, οι οποίες περιλαμβάνουν hashes και καταχωρητές διαμόρφωσης πλατφόρμας (PCRs), χρησιμοποιούνται κατά τη διαδικασία πιστοποίησης για να αποδείξουν την ταυτότητα της enclave και να χτίσουν εμπιστοσύνη με εξωτερικές υπηρεσίες. Το έγγραφο πιστοποίησης περιέχει συνήθως τιμές όπως PCR0, PCR1 και PCR2, τις οποίες έχετε συναντήσει προηγουμένως κατά την κατασκευή και αποθήκευση ενός EIF enclave.

Από τα docs, αυτές είναι οι τιμές PCR:

PCRHash of ...Περιγραφή
PCR0Αρχείο εικόνας enclaveΜια συνεχής μέτρηση του περιεχομένου του αρχείου εικόνας, χωρίς τα δεδομένα τμήματος.
PCR1Linux kernel και bootstrapΜια συνεχής μέτρηση των δεδομένων του kernel και του boot ramfs.
PCR2ΕφαρμογήΜια συνεχής, κατά σειρά μέτρηση των εφαρμογών χρήστη, χωρίς το boot ramfs.
PCR3Ρόλος IAM που έχει ανατεθεί στην γονική παρουσίαΜια συνεχής μέτρηση του ρόλου IAM που έχει ανατεθεί στην γονική παρουσία. Διασφαλίζει ότι η διαδικασία πιστοποίησης επιτυγχάνει μόνο όταν η γονική παρουσία έχει τον σωστό ρόλο IAM.
PCR4ID παρουσίας της γονικής παρουσίαςΜια συνεχής μέτρηση του ID της γονικής παρουσίας. Διασφαλίζει ότι η διαδικασία πιστοποίησης επιτυγχάνει μόνο όταν η γονική παρουσία έχει ένα συγκεκριμένο ID παρουσίας.
PCR8Πιστοποιητικό υπογραφής αρχείου εικόνας enclaveΜια μέτρηση του πιστοποιητικού υπογραφής που καθορίζεται για το αρχείο εικόνας enclave. Διασφαλίζει ότι η διαδικασία πιστοποίησης επιτυγχάνει μόνο όταν η enclave έχει εκκινήσει από ένα αρχείο εικόνας enclave που έχει υπογραφεί από ένα συγκεκριμένο πιστοποιητικό.

Μπορείτε να ενσωματώσετε κρυπτογραφική πιστοποίηση στις εφαρμογές σας και να αξιοποιήσετε προ-κατασκευασμένες ενσωματώσεις με υπηρεσίες όπως το AWS KMS. Το AWS KMS μπορεί να επικυρώσει τις πιστοποιήσεις enclave και προσφέρει κλειδιά συνθηκών βάσει πιστοποίησης (kms:RecipientAttestation:ImageSha384 και kms:RecipientAttestation:PCR) στις πολιτικές κλειδιών του. Αυτές οι πολιτικές διασφαλίζουν ότι το AWS KMS επιτρέπει τις λειτουργίες χρησιμοποιώντας το κλειδί KMS μόνο εάν το έγγραφο πιστοποίησης της enclave είναι έγκυρο και πληροί τις καθορισμένες προϋποθέσεις.

Tip

Σημειώστε ότι οι Enclaves σε λειτουργία αποσφαλμάτωσης (–debug) δημιουργούν έγγραφα πιστοποίησης με PCRs που αποτελούνται από μηδενικά (000000000000000000000000000000000000000000000000). Επομένως, οι πολιτικές KMS που ελέγχουν αυτές τις τιμές θα αποτύχουν.

PCR Bypass

Από την οπτική γωνία ενός επιτιθέμενου, παρατηρήστε ότι ορισμένα PCRs θα επέτρεπαν την τροποποίηση ορισμένων τμημάτων ή ολόκληρης της εικόνας enclave και θα ήταν ακόμα έγκυρα (για παράδειγμα, το PCR4 ελέγχει μόνο το ID της γονικής παρουσίας, οπότε η εκτέλεση οποιασδήποτε εικόνας enclave σε αυτή την EC2 θα επιτρέψει την εκπλήρωση αυτής της πιθανής απαίτησης PCR).

Επομένως, ένας επιτιθέμενος που παραβιάσει την EC2 παρουσία μπορεί να είναι σε θέση να εκτελέσει άλλες εικόνες enclave προκειμένου να παρακάμψει αυτές τις προστασίες.

Η έρευνα σχετικά με το πώς να τροποποιήσετε/δημιουργήσετε νέες εικόνες για να παρακάμψετε κάθε προστασία (ιδιαίτερα τις λιγότερο προφανείς) είναι ακόμα TODO.

Αναφορές

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks