mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
+52
-13
@@ -4,38 +4,77 @@
|
||||
|
||||
## S3
|
||||
|
||||
Daha fazla bilgi için bakınız:
|
||||
For more information check:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-s3-athena-and-glacier-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Sensitive Information
|
||||
### Hassas Bilgiler
|
||||
|
||||
Bazen bucket'larda okunabilir halde hassas bilgiler bulabilirsiniz. Örneğin, terraform state içindeki sırlar.
|
||||
Bazen bucket'larda okunabilir durumda hassas bilgiler bulabilirsiniz. Örneğin, terraform state secrets.
|
||||
|
||||
### Pivoting
|
||||
|
||||
Farklı platformlar hassas varlıkları saklamak için S3 kullanıyor olabilir.\
|
||||
Örneğin, **airflow** orada **DAGs** **code** saklıyor olabilir, veya **web sayfaları** doğrudan S3'ten sunuluyor olabilir. Yazma izinlerine sahip bir saldırgan, bucket'taki **modify the code** ile diğer platformlara **pivot** yapabilir veya JS dosyalarını değiştirerek **takeover accounts** gerçekleştirebilir.
|
||||
Different platforms could be using S3 to store sensitive assets.\
|
||||
For example, **airflow** could be storing **DAGs** **code** in there, or **web pages** could be directly served from S3. An attacker with write permissions could **modify the code** from the bucket to **pivot** to other platforms, or **takeover accounts** modifying JS files.
|
||||
|
||||
### S3 Ransomware
|
||||
|
||||
Bu senaryoda, saldırgan kendi AWS hesabında veya başka bir ele geçirilmiş hesapta bir **KMS (Key Management Service) key** oluşturur. Ardından bu **key'i dünyadaki herkesin erişebileceği** şekilde yapılandırır; böylece herhangi bir AWS kullanıcı, role veya hesap bu anahtarı kullanarak objeleri şifreleyebilir. Ancak objeler geri çözülemez.
|
||||
Bu senaryoda, **attacker creates a KMS (Key Management Service) key in their own AWS account** veya başka bir ele geçirilmiş hesapta bir anahtar oluşturur. Daha sonra bu **key accessible to anyone in the world** olacak şekilde ayarlarlar; bu, herhangi bir AWS kullanıcı, role veya hesabın bu anahtarı kullanarak objeleri şifrelemesine izin verir. Ancak, objeler decrypt edilemez hale gelir.
|
||||
|
||||
Saldırgan hedef **S3 bucket'ı belirler ve ona yazma düzeyinde erişim elde eder**. Bu, bucket'ın kötü yapılandırılması nedeniyle kamuya açık olması veya saldırganın AWS ortamına erişim kazanması yoluyla olabilir. Saldırgan tipik olarak kişisel tanımlayıcı bilgiler (PII), korunmuş sağlık bilgileri (PHI), loglar, yedeklemeler gibi hassas bilgiler içeren bucket'ları hedef alır.
|
||||
Attacker hedef **S3 bucket and gains write-level access** sağlar; bu çeşitli yöntemlerle gerçekleşir. Bu, bucket'ın kötü yapılandırılması ve herkese açık olmasından veya attacker'ın AWS ortamına erişim kazanmasından kaynaklanabilir. Attacker tipik olarak PII, PHI, loglar, yedekler ve benzeri hassas bilgileri içeren bucket'ları hedef alır.
|
||||
|
||||
Bucket'ın ransomware hedefi olup olmadığını belirlemek için saldırgan yapılandırmasını kontrol eder. Bu, **S3 Object Versioning**'in etkin olup olmadığını ve **multi-factor authentication delete (MFA delete)**'in etkin olup olmadığını doğrulamayı içerir. Eğer Object Versioning etkin değilse, saldırgan ilerleyebilir. Eğer Object Versioning etkin ama MFA delete devre dışıysa, saldırgan **Object Versioning'i devre dışı bırakabilir**. Hem Object Versioning hem de MFA delete etkinse, belirli bucket'ı ransomware ile hedeflemek saldırgan için daha zorlaşır.
|
||||
Bucket'ın ransomware hedefi olup olmadığını belirlemek için attacker yapılandırmasını kontrol eder. Bu, **S3 Object Versioning**'in etkin olup olmadığını ve **multi-factor authentication delete (MFA delete) is enabled** olup olmadığını doğrulamayı içerir. Eğer Object Versioning etkin değilse attacker devam edebilir. Eğer Object Versioning etkin ama MFA delete devre dışıysa, attacker **disable Object Versioning** yapabilir. Hem Object Versioning hem de MFA delete etkinse, attacker için o bucket'ı ransomware yapmak daha zorlaşır.
|
||||
|
||||
AWS API'lerini kullanarak saldırgan, **bucket'taki her objeyi kendi KMS key'iyle şifrelenmiş bir kopyayla değiştirir**. Bu, bucket'taki veriyi etkili şekilde şifreleyerek anahtar olmadan erişilemez hale getirir.
|
||||
AWS API'sini kullanarak attacker, bucket'taki her objeyi kendi KMS anahtarını kullanarak şifrelenmiş bir kopya ile **replaces each object in the bucket with an encrypted copy using their KMS key**. Bu, bucket'taki veriyi anahtar olmadan erişilemez hale getirir.
|
||||
|
||||
Daha fazla baskı uygulamak için saldırgan, saldırıda kullandığı KMS key'in silinmesini zamanlayabilir. Bu, hedefe verilerini geri kazanmak için anahtarın silinmesinden önce 7 günlük bir pencere verir.
|
||||
Daha fazla baskı yapmak için attacker, saldırıda kullandığı KMS anahtarının silinmesini planlayabilir. Bu, hedefe anahtar silinmeden ve veriler kalıcı olarak kaybolmadan önce verilerini kurtarması için 7 günlük bir pencere verir.
|
||||
|
||||
Son olarak, saldırgan genellikle "ransom-note.txt" adında bir dosya yükleyebilir; bu dosya hedefe dosyalarını nasıl geri alacaklarına dair talimatlar içerir. Bu dosya şifrelenmeden yüklenir; muhtemelen hedefin dikkatini çekmek ve ransomware saldırısının farkına varmalarını sağlamak için.
|
||||
Son olarak, attacker genellikle "ransom-note.txt" adlı bir dosya yükleyebilir; bu dosya hedefe dosyalarını nasıl geri alacaklarına dair talimatlar içerir. Bu dosya şifrelenmeden yüklenir; muhtemelen hedefin dikkatini çekmek ve ransomware saldırısından haberdar etmek amaçlıdır.
|
||||
|
||||
#### SSE-C (Customer-Provided Key) Ransomware (Codefinger-like)
|
||||
|
||||
Başka bir varyant, **SSE-C**'yi (S3 server-side encryption with **customer-provided keys**) kötüye kullanmaktır. SSE-C ile, **client provides the encryption key on every request** ve **AWS does not store the key**. Bu, attacker kendi SSE-C anahtarını kullanarak objeleri yeniden yazarsa, kurbanın verilerinin o attacker-controlled key sağlanmadıkça okunamaz hale geleceği anlamına gelir.
|
||||
|
||||
- **Preconditions:** Compromised AWS credentials (or any principal with the right permissions) ve **rewrite objects** yapabilme kabiliyeti (ör. `s3:PutObject` hedef anahtarlar/prefix'ler üzerinde). Bu genellikle yıkıcı lifecycle policy'leri ayarlama yeteneği ile birlikte olur (aşağıya bakın), ör. `s3:PutLifecycleConfiguration`.
|
||||
- **Attack chain:**
|
||||
1. Attacker rastgele bir 256-bit anahtar (AES-256) üretir ve saklar.
|
||||
2. Attacker SSE-C header'ları kullanarak mevcut objeleri (aynı object key'ler) **rewrites** eder; böylece depolanan obje artık attacker anahtarı ile şifrelenmiş olur.
|
||||
3. Kurban, SSE-C anahtarını sağlamadan indirme/şifre çözme yapamaz (IAM izinleri uygun olsa bile).
|
||||
4. Attacker anahtarı silebilir (veya hiç vermeyebilir) ve böylece veriyi kurtarılamaz hale getirebilir.
|
||||
|
||||
Example (conceptual) CLI usage:
|
||||
```bash
|
||||
# Upload/overwrite an object encrypted with attacker-provided SSE-C key
|
||||
aws s3 cp ./file s3://<BUCKET>/<KEY> \
|
||||
--sse-c AES256 \
|
||||
--sse-c-key <BASE64_32_BYTES>
|
||||
|
||||
# Download requires providing the same key again
|
||||
aws s3 cp s3://<BUCKET>/<KEY> ./file \
|
||||
--sse-c AES256 \
|
||||
--sse-c-key <BASE64_32_BYTES>
|
||||
```
|
||||
##### Baskı Artırma: Yaşam Döngüsü "Zamanlayıcı" Suistimali
|
||||
|
||||
Kurtarma seçeneklerini (eski sürümler gibi) kaldırmak için saldırganlar SSE-C yeniden yazmaları ile **yaşam döngüsü kuralları**nı eşleştirerek objeleri kısa sürede sona erdirebilir ve/veya noncurrent sürümleri silebilir:
|
||||
|
||||
- `s3:PutLifecycleConfiguration` bucket üzerinde bir saldırganın her obje/sürüm için açık silme işlemi yapmasına gerek kalmadan silme işlemlerini zamanlamasına izin verir.
|
||||
- Bu, **sürümleme etkinse** özellikle etkili olur; çünkü aksi takdirde kurtarmaya izin verecek "önceki iyi sürüm"ü kaldırabilir.
|
||||
|
||||
##### Tespit ve Önlemler
|
||||
|
||||
- SSE-C'ye izin vermek için güçlü bir operasyonel gerekçeniz yoksa **SSE-KMS** (veya SSE-S3) tercih edin.
|
||||
- SSE-C header'ları kullanan `PutObject` isteklerini izleyin/uyarı oluşturun (S3 için CloudTrail veri olayları).
|
||||
- Beklenmeyen `PutBucketLifecycleConfiguration` (yaşam döngüsü değişiklikleri) için izleyin/uyarı oluşturun.
|
||||
- Üzerine yazma etkinliğinde (aynı anahtarların hızla güncellenmesi) ani artışlar ve delete-marker/sürüm silinmeleri için izleyin/uyarı oluşturun.
|
||||
- Yüksek riskli izinleri kısıtlayın: `s3:PutObject` izinlerini gerekli prefix'lerle sınırlayın; `s3:PutLifecycleConfiguration` ve `s3:PutBucketVersioning`'i güçlü şekilde kısıtlayın; hassas yönetici işlemleri için (uygulanabiliyorsa) MFA gerektirmeyi düşünün ve onaylarla ayrı yönetici rolleri kullanın.
|
||||
- Kurtarma hazırlığı: **sürümleme**, **yedekler** ve değiştirilemez/offline kopyalar kullanın (S3 replication to protected account, backup vaults, vb.); noncurrent sürümleri agresif silinmeden koruyun ve yaşam döngüsü değişikliklerini SCPs / guardrails ile güvenceye alın.
|
||||
|
||||
### `s3:RestoreObject`
|
||||
|
||||
s3:RestoreObject iznine sahip bir saldırgan, Glacier veya Deep Archive'da arşivlenmiş objeleri yeniden aktifleştirebilir ve bunları geçici olarak erişilebilir hale getirebilir. Bu, normalde ulaşılamayan tarihsel arşivlenmiş verilerin (yedekler, snapshot'lar, loglar, sertifikalar, eski sırlar) kurtarılmasına ve exfiltrate edilmesine olanak sağlar. Saldırgan bu izinleri okuma izinleriyle (ör. s3:GetObject) birleştirirse, hassas verilerin tam kopyalarını elde edebilir.
|
||||
` s3:RestoreObject` iznine sahip bir saldırgan Glacier veya Deep Archive'de arşivlenmiş objeleri yeniden etkinleştirerek geçici olarak erişilebilir hale getirebilir. Bu, normalde ulaşılamayan tarihsel olarak arşivlenmiş verilerin (backups, snapshots, logs, certifications, old secrets) kurtarılmasına ve exfiltration'a olanak tanır. Saldırgan bu izni okuma izinleriyle (ör. `s3:GetObject`) birleştirirse, hassas verilerin tam kopyalarını elde edebilir.
|
||||
```bash
|
||||
aws s3api restore-object \
|
||||
--bucket <BUCKET_NAME> \
|
||||
@@ -47,7 +86,7 @@ aws s3api restore-object \
|
||||
```
|
||||
### `s3:Delete*`
|
||||
|
||||
Bir saldırgan s3:Delete* iznine sahip olduğunda objects, versions ve entire buckets'ı silebilir, backups'ı bozabilir ve anında ve geri döndürülemez veri kaybına, delillerin yok edilmesine ve backup veya recovery artifacts'in tehlikeye girmesine neden olabilir.
|
||||
Bir saldırgan s3:Delete* iznine sahip olduğunda nesneleri, sürümleri ve tüm buckets'ları silebilir, yedekleri bozabilir ve anında ve geri döndürülemez veri kaybına, delillerin yok olmasına ve yedekleme veya kurtarma öğelerinin tehlikeye girmesine neden olabilir.
|
||||
```bash
|
||||
# Delete an object from a bucket
|
||||
aws s3api delete-object \
|
||||
|
||||
Reference in New Issue
Block a user