AWS - CloudTrail Enum
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
AWS CloudTrail AWS ortamınızdaki etkinlikleri kaydeder ve izler. AWS kaynaklarıyla yapılan tüm 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 konusunda 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şı 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 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
Ayrıca, dosya bütünlüğünü kontrol etmek için özet dosyaları aynı kovada bulunacaktır:
Günlük dosyalarının teslim edileceği AWS hesabında bir Trail oluşturun
CloudTrail için çapraz hesap erişimine izin veren hedef S3 kovasına izinler uygulayın ve erişime ihtiyacı olan 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.
Bir hesabın farklı Trails'leri olabileceğini unutmayın, CloudTrail etkin olup aynı (veya farklı) günlükleri farklı kovalar içinde saklayabilir.
Bir CloudTrail oluştururken, organizasyondaki tüm hesaplar için cloudtrail'i etkinleştirmek ve günlükleri sadece 1 kovaya almak için belirtmek mümkündür:
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) merkezileştirebilirsiniz.
Günlüklerin değiştirilmediğini kontrol etmek için şunu çalıştırabilirsiniz:
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ü kullanmanız ö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
CloudTrail Olay Geçmişi, kaydedilen logları bir tabloda incelemenizi sağlar:
CloudTrail İçgörüleri, CloudTrail yollarından yazma yönetim olaylarını otomatik olarak analiz eder ve size olağandışı aktiviteler hakkında uyarıda bulunur. Ö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ıyla aynı kovada saklanır: BucketName/AWSLogs/AccountID/CloudTrail-Insight
CloudTrail Log Dosyası Bütünlüğü
Logların değiştirilip değiştirilmediğini (değiştirilmiş veya silinmiş) doğrulayın
Her dosya için hash oluşturmak için özet dosyaları kullanır
SHA-256 hashing
SHA-256 ile dijital imza için RSA
özel anahtar Amazon'a ait
Bir özet dosyası oluşturmak 1 saat sürer (her saat başında yapılır)
Yetkisiz erişimi durdur
IAM politikaları ve S3 kova politikaları kullanın
güvenlik ekibi —> yönetici erişimi
denetçiler —> yalnızca okuma erişimi
Logları şifrelemek için SSE-S3/SSE-KMS kullanın
Log dosyalarının silinmesini önleyin
IAM ve kova politikaları ile silme erişimini kısıtlayın
S3 MFA silme yapılandırması yapın
Log Dosyası Doğrulaması ile doğrulayın
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 potansiyel olarak azaltabilir.
Bu nedenle, Erişim Danışmanı kullanıcılara verilen gereksiz izinler hakkında bilgi verir böylece yönetici bunları kaldırabilir
CloudTrail içinde, günlükler CSV olarak 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:
Daha fazla bilgi için CSV Enjeksiyonları hakkında sayfayı kontrol edin:
Bu spesifik teknik hakkında daha fazla bilgi için https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/ adresini kontrol edin.
Honeytoken'lar hassas bilgilerin sızdırılması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ı kullanıyor ya da tüm müşterileri için aynı AWS hesap kimliğini kullanıyor. Bu nedenle, eğer 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.org
rol adında görünüyorsa veya hesap kimliği 534261010715
hata mesajında görünüyorsa.
Daha yakın zamanda test ettiğimizde, 717712589309
hesabını kullanıyorlar ve hala adında canarytokens.com
dizesi var.
Eğer SpaceCrab
hata mesajında rol adında gö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.
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:
Check more information in the orijinal araştırma.
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 kimliğini ve hesap adını belirtecek, böylece Honeytoken olup olmadığını görebileceksiniz.
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 kimliğini ve adını görebilir, HoneyToken'ın şirket hesap kimliklerini ve adlarını bilmek kolaydır, bu nedenle bu şekilde bir saldırgan token'ın HoneyToken olup olmadığını belirleyebilir.
CloudTrail logları oluşturmayan tüm kamu API'lerinin artık düzeltildiğini unutmayın, bu nedenle belki kendi çözümünüzü bulmanız gerekebilir...
Daha fazla bilgi için orijinal araştırma bağlantısına bakın.
Belirli AWS hizmetleri veritabanları veya Kubernetes kümeleri (EKS) gibi bazı altyapılar oluşturacaktır. Bir kullanıcı bu hizmetlerle doğrudan iletişim kurduğunda (Kubernetes API'si gibi) AWS API'sini kullanmayacaktır, bu nedenle CloudTrail bu iletişimi göremeyecektir.
Bu nedenle, EKS'ye erişimi olan bir kullanıcı EKS API'sinin URL'sini keşfettiyse, yerel olarak bir token oluşturabilir ve Cloudtrail tarafından tespit edilmeden API hizmetiyle doğrudan iletişim kurabilir.
Daha fazla bilgi için:
AWS - EKS Post Exploitationİlk örnekte, tek bir olay seçici, tek bir nesne ile 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 belirli gereksinimlerinize göre özelleştirebilirsiniz.
S3 bucket'ını sil
CloudTrail hizmetinden gelen yazmaları reddetmek için bucket politikasını 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
Asimetrik bir anahtar oluşturabilir ve CloudTrail'in verileri o anahtar ile şifrelemesini sağlayabilir ve özel anahtarı silerek CloudTrail içeriğinin kurtarılamayacak hale gelmesini sağlayabilirsiniz. Bu temelde S3-KMS fidye yazılımı olarak açıklanmaktadır:
AWS - S3 Post ExploitationKMS fidye yazılımı
Bu, önceki saldırıyı farklı izin gereksinimleri ile gerçekleştirmenin en kolay yoludur:
AWS - KMS Post ExploitationAWS 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)