AWS - Nitro Enum

AWS hacklemeyi sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'ı desteklemenin diğer yolları:

  • Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!

  • [The PEASS Family]'yi (https://opensea.io/collection/the-peass-family) keşfedin, özel [NFT'lerimiz]'i (https://opensea.io/collection/the-peass-family) içeren koleksiyonumuzu

  • **💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @hacktricks_live'da takip edin.

  • Hacking püf noktalarınızı paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.

Temel Bilgiler

AWS Nitro, AWS EC2 örneklerinin temel platformunu oluşturan yenilikçi teknolojiler kümesidir. Amazon tarafından tanıtılan Nitro, özel donanım bileşenleri ve hafif bir hipervizör kullanan, güvenliği, performansı ve güvenilirliği artırmayı amaçlayan bir platformdur. Geleneksel sanallaştırma işlevlerinin büyük bir kısmını ayrılmış donanım ve yazılıma soyutlar, saldırı yüzeyini en aza indirger ve kaynak verimliliğini artırır. Sanallaştırma işlevlerini dışa aktararak, Nitro, 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 özellikle donanım ve firmware güvenliğini sağlar, sağlam mimarisini daha da pekiştirir.

Nitro Enklavlar

AWS Nitro Enklavları, Amazon EC2 örnekleri içinde izole bir hesaplama ortamı sağlar ve özellikle son derece hassas verilerin işlenmesi için tasarlanmıştır. AWS Nitro Sistemi'nden yararlanan bu enklavlar, sağlam izolasyon ve güvenlik sağlar, PII veya finansal kayıtlar gibi gizli bilgilerin işlenmesi için idealdir. Minimalist bir ortam sunarlar, veri maruziyetinin riskini önemli ölçüde azaltır. Ayrıca, Nitro Enklavlar, yalnızca yetkili kodların çalıştırıldığını doğrulamaya olanak tanıyan kriptografik belgeleme desteği sağlar, bu da sıkı uyumluluk ve veri koruma standartlarının korunması için hayati önem taşır.

Nitro Enklav görüntüleri EC2 örneklerinin içinden çalıştırılır ve bir EC2 örneğinin Nitro Enklav'da görüntüler çalıştırıp çalıştırmadığını AWS web konsolundan göremezsiniz.

Nitro Enklav CLI kurulumu

Tüm talimatları belgelerden takip edin. Bunlar ise en önemlileridir:

# 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'de çalıştırabileceğiniz görüntüler, docker görüntülerine dayanmaktadır, bu nedenle Nitro Enclave görüntülerinizi şu şekilde 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 uzantısı eif (Enclave Image File) olarak kullanılır.

Çıktı aşağıdaki gibi 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üyü Çalıştır

Belgelendirmeye göre, bir kalesi görüntüsünü çalıştırmak için ona eif dosyasının en az 4 katı büyüklüğünde bellek atamalısınız. Ona verilecek varsayılan kaynakları yapılandırmak mümkündür dosyada.

/etc/nitro_enclaves/allocator.yaml

Her zaman ana EC2 örneği için bazı kaynakları ayırmanız gerektiğini unutmayın!

Bir görüntüye verilecek kaynakları bildikten sonra ve hatta yapılandırma dosyasını değiştirdikten sonra, bir kapan alanı görüntüsünü şu şekilde ç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

Enklavları Sırala

Bir EC2 ana bilgisayarını ele geçirdiyseniz çalışan enklav görüntülerinin bir listesini almak mümkündür:

nitro-cli describe-enclaves

Bu, çalışan bir kalesine görüntüsü içinde bir kabuk almanın mümkün olmadığı çünkü bu kalelerin ana amacıdır, ancak --debug-mode parametresini kullandıysanız, bununla ilgili stdout'u almak mümkündür:

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

Enklavaları Sonlandır

Bir saldırgan bir EC2 örneğini ele geçirse bile varsayılan olarak içlerine kabuk alamayacak, ancak onları şu şekilde sonlandırabilecektir:

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

Vsock

Koruma alanı çalışan görüntüyle iletişim kurmanın tek yolu vsocks kullanmaktır.

Sanal Soket (vsock), Linux'ta özellikle sanal makineler (VM'ler) ile hipervizörleri veya VM'ler arasındaki iletişimi kolaylaştırmak için tasarlanmış bir soket ailesidir. Vsock, ana bilgisayarın ağ yığınına güvenmeden verimli, iki yönlü iletişimi sağlar. Bu, VM'lerin ağ yapılandırmaları olmadan bile iletişim kurmasını sağlar, 32 bitlik Bağlam Kimliği (CID) ve bağlantıları tanımlamak ve yönetmek için port numaralarını kullanır. Vsock API, sanal ortamlardaki kullanıcı düzeyi uygulamalar için çok yönlü bir araç sağlayarak TCP ve UDP'ye benzer şekilde hem akış hem de veri gram soket türlerini destekler.

Bu nedenle, bir vsock adresi şu şekilde görünür: <CID>:<Port>

Koruma alanı çalışan görüntülerin CID'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"
}
}
]

Not: Ana bilgisayardan bir CID'in herhangi bir portu açıklayıp açıklamadığını bilmek için herhangi bir yol yoktur! Vsock tarama aracı gibi https://github.com/carlospolop/Vsock-scanner kullanılmadıkça.

Vsock Sunucusu/Dinleyici

İşte birkaç örnek:

Basit Python Dinleyici

```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}")

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

Vsock İstemcisi

Örnekler:

Last updated