AWS - Nitro Enum
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Temel Bilgiler
AWS Nitro, AWS EC2 örnekleri için temel platformu oluşturan yenilikçi teknolojiler setidir. Amazon tarafından güvenliği, performansı ve güvenilirliği artırmak amacıyla tanıtılan Nitro, özel donanım bileşenleri ve hafif bir hipervizör kullanır. Geleneksel sanallaştırma işlevlerinin çoğunu özel donanım ve yazılıma soyutlayarak, saldırı yüzeyini minimize eder ve kaynak verimliliğini artırır. Sanallaştırma işlevlerini devrederek, Nitro’nun EC2 örneklerinin neredeyse bare-metal performansı sunmasına olanak tanır, bu da kaynak yoğun uygulamalar için özellikle faydalıdır. Ayrıca, Nitro Güvenlik Çipi, donanım ve yazılım güvenliğini sağlamak için özel olarak tasarlanmıştır ve sağlam mimarisini daha da güçlendirir.
Nitro Enclaves
AWS Nitro Enclaves, Amazon EC2 örnekleri içinde, son derece hassas verilerin işlenmesi için özel olarak tasarlanmış güvenli, izole bir hesaplama ortamı sağlar. AWS Nitro Sistemi’nden yararlanarak, bu enclaves güçlü izolasyon ve güvenlik sağlar, gizli bilgilerin işlenmesi için idealdir, örneğin PII veya finansal kayıtlar gibi. Minimalist bir ortam sunarak, veri ifşası riskini önemli ölçüde azaltır. Ayrıca, Nitro Enclaves, kullanıcıların yalnızca yetkili kodun çalıştığını doğrulamasına olanak tanıyan kriptografik onaylamayı destekler, bu da sıkı uyum ve veri koruma standartlarının korunması için kritik öneme sahiptir.
Caution
Nitro Enclave görüntüleri EC2 örnekleri içinden çalıştırılır ve AWS web konsolundan bir EC2 örneğinin Nitro Enclave’de görüntü çalıştırıp çalıştırmadığını göremezsiniz.
Nitro Enclave CLI kurulumu
Tüm talimatları belgelerden takip edin. Ancak, en önemli olanlar şunlardır:
# 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 Görüntüleri
Nitro Enclave’da çalıştırabileceğiniz görüntüler, docker görüntülerine dayanmaktadır, bu nedenle Nitro Enclave görüntülerinizi şu docker görüntülerinden oluşturabilirsiniz:
# 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 görüntülerinin eif (Enclave Image File) uzantısını kullandığını görebilirsiniz.
Çıktı şu şekilde görünecektir:
Using the locally available Docker image...
Enclave Image successfully created.
{
"Measurements": {
"HashAlgorithm": "Sha384 { ... }",
"PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284",
"PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f",
"PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3"
}
}
Bir Görüntü Çalıştır
belgelere göre, bir enclave görüntüsü çalıştırmak için ona eif dosyasının boyutunun en az 4 katı kadar bellek atamanız gerekir. Ona verilecek varsayılan kaynakları dosyada yapılandırmak mümkündür.
/etc/nitro_enclaves/allocator.yaml
Caution
Her zaman ebeveyn EC2 örneği için de bazı kaynakları ayırmanız gerektiğini unutmayın!
Bir görüntüye verilecek kaynakları öğrendikten ve yapılandırma dosyasını değiştirdikten sonra, bir enclave görüntüsünü çalıştırmak mümkündür:
# 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
Enclaves’ı Listele
Eğer bir EC2 sunucusunu ele geçirirseniz, çalışan enclave görüntülerinin bir listesini almak mümkündür:
nitro-cli describe-enclaves
Bir çalışan enclave görüntüsünde bir shell almak mümkün değildir çünkü enclave’in ana amacı budur, ancak --debug-mode parametresini kullanırsanız, bunun stdout’unu almak mümkündür:
ENCLAVE_ID=$(nitro-cli describe-enclaves | jq -r ".[0].EnclaveID")
nitro-cli console --enclave-id ${ENCLAVE_ID}
Enklaveleri Sonlandırma
Eğer bir saldırgan bir EC2 örneğini ele geçirirse, varsayılan olarak içlerinde bir shell elde edemeyecek, ancak onları sonlandırma yeteneğine sahip olacaktır:
nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID}
Vsocks
Bir enclave çalışan görüntü ile iletişim kurmanın tek yolu vsocks kullanmaktır.
Virtual Socket (vsock), sanal makineler (VM’ler) ile hypervisor’lar arasında veya VM’ler arasında iletişimi kolaylaştırmak için özel olarak tasarlanmış bir soket ailesidir. Vsock, ana bilgisayarın ağ yığınına güvenmeden verimli, iki yönlü iletişim sağlar. Bu, VM’lerin ağ yapılandırmalarına ihtiyaç duymadan iletişim kurmasını mümkün kılar; bağlantıları tanımlamak ve yönetmek için 32-bit Context ID (CID) ve port numaraları kullanır. Vsock API’si, TCP ve UDP’ye benzer şekilde, akış ve datagram soket türlerini destekleyerek sanal ortamlardaki kullanıcı düzeyindeki uygulamalar için çok yönlü bir araç sağlar.
Tip
Bu nedenle, bir vsock adresi şu şekilde görünür:
<CID>:<Port>
Çalışan görüntülerin CIDs’lerini bulmak için aşağıdaki komutu çalıştırabilir ve EnclaveCID’yi alabilirsiniz:
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
Ana bilgisayardan bir CID’nin herhangi bir portu açıp açmadığını bilmenin bir yolu yoktur! Bazı vsock port tarayıcıları gibi https://github.com/carlospolop/Vsock-scanner kullanmadıkça.
Vsock Sunucu/Dinleyici
Burada birkaç örnek bulabilirsiniz:
Basit Python Dinleyici
```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 İstemcisi
Örnekler:
Basit Python İstemcisi
```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
Aracın vsock-proxy, başka bir adresle bir vsock proxy’sini proxy’lemesine olanak tanır, örneğin:
vsock-proxy 8001 ip-ranges.amazonaws.com 443 --config your-vsock-proxy.yaml
Bu, vsock’taki yerel 8001 portunu ip-ranges.amazonaws.com:443 adresine yönlendirecek ve your-vsock-proxy.yaml dosyası, ip-ranges.amazonaws.com:443 adresine erişimi sağlayacak bu içeriğe sahip olabilir:
allowlist:
- { address: ip-ranges.amazonaws.com, port: 443 }
EC2 ana bilgisayarı tarafından kullanılan vsock adreslerini (<CID>:<Port>) görmek mümkündür (not: 3:8001, 3 CID ve 8001 portudur):
sudo ss -l -p -n | grep v_str
v_str LISTEN 0 0 3:8001 *:* users:(("vsock-proxy",pid=9458,fd=3))
Nitro Enclave Atestasyonu & KMS
Nitro Enclaves SDK, bir enclave’in Nitro Hypervisor’dan kriptografik olarak imzalanmış bir atestasyon belgesi talep etmesine olanak tanır; bu belge, o enclave’e özgü benzersiz ölçümler içerir. Bu ölçümler, hash’ler ve platform yapılandırma kayıtları (PCR’ler) dahil olmak üzere, atestasyon sürecinde enclave’in kimliğini kanıtlamak ve harici hizmetlerle güven inşa etmek için kullanılır. Atestasyon belgesi genellikle PCR0, PCR1 ve PCR2 gibi değerler içerir; bu değerlerle daha önce bir enclave EIF oluştururken ve kaydederken karşılaşmış olabilirsiniz.
docs kaynaklarına göre, bu PCR değerleridir:
| PCR | Hash of ... | Açıklama |
|---|---|---|
| PCR0 | Enclave görüntü dosyası | Görüntü dosyasının içeriklerinin kesintisiz ölçümü, bölüm verileri olmadan. |
| PCR1 | Linux çekirdeği ve bootstrap | Çekirdek ve boot ramfs verilerinin kesintisiz ölçümü. |
| PCR2 | Uygulama | Kullanıcı uygulamalarının kesintisiz, sıralı ölçümü, boot ramfs olmadan. |
| PCR3 | Üst örneğe atanan IAM rolü | Üst örneğe atanan IAM rolünün kesintisiz ölçümü. Atestasyon sürecinin yalnızca üst örnek doğru IAM rolüne sahip olduğunda başarılı olmasını sağlar. |
| PCR4 | Üst örneğin ID'si | Üst örneğin ID'sinin kesintisiz ölçümü. Atestasyon sürecinin yalnızca üst örnek belirli bir örnek ID'sine sahip olduğunda başarılı olmasını sağlar. |
| PCR8 | Enclave görüntü dosyası imzalama sertifikası | Enclave görüntü dosyası için belirtilen imzalama sertifikasının ölçümü. Atestasyon sürecinin yalnızca enclave, belirli bir sertifika ile imzalanmış bir enclave görüntü dosyasından başlatıldığında başarılı olmasını sağlar. |
Kriptografik atestasyonu uygulamalarınıza entegre edebilir ve AWS KMS gibi hizmetlerle önceden oluşturulmuş entegrasyonlardan yararlanabilirsiniz. AWS KMS, enclave atestasyonlarını doğrulayabilir ve anahtar politikalarında atestasyona dayalı koşul anahtarları (kms:RecipientAttestation:ImageSha384 ve kms:RecipientAttestation:PCR) sunar. Bu politikalar, AWS KMS’nin KMS anahtarını yalnızca enclave’in atestasyon belgesi geçerli olduğunda ve belirtilen koşulları karşıladığında kullanmasına izin verir.
Tip
Debug (–debug) modunda Enclaves, sıfırlardan (
000000000000000000000000000000000000000000000000) oluşan PCR’lerle atestasyon belgeleri üretir. Bu nedenle, bu değerleri kontrol eden KMS politikaları başarısız olacaktır.
PCR Atlatma
Saldırganlar açısından bakıldığında, bazı PCR’lerin enclave görüntüsünün bazı kısımlarını veya tamamını değiştirmeye izin vereceğini ve yine de geçerli olacağını fark edin (örneğin, PCR4 yalnızca üst örneğin ID’sini kontrol eder, bu nedenle bu EC2’de herhangi bir enclave görüntüsü çalıştırmak bu potansiyel PCR gereksinimini karşılayacaktır).
Bu nedenle, EC2 örneğini tehlikeye atan bir saldırgan, bu korumaları atlatmak için diğer enclave görüntülerini çalıştırma yeteneğine sahip olabilir.
Her korumayı atlatmak için yeni görüntüleri nasıl değiştireceğine/oluşturacağına dair araştırma hala TODO’dur.
Referanslar
- https://medium.com/@F.DL/understanding-vsock-684016cf0eb0
- AWS’den Nitro eğitiminin tüm bölümleri: https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

