Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-s3-a

This commit is contained in:
Translator
2026-02-12 13:06:49 +00:00
parent a439ccf79c
commit 052cd4722a
@@ -6,34 +6,34 @@
Amazon S3 is 'n diens wat jou toelaat om **groot hoeveelhede data te stoor**.
Amazon S3 bied verskeie opsies om die **beskerming** van data in REST te bereik. Die opsies sluit **Toestemming** (Beleid), **Enkripsie** (Kliënt en Bediener-kant), **Emmerweergawe** en **MFA** **gebaseerde verwydering** in. Die **gebruiker kan enige van hierdie opsies aktiveer** om databesking te bereik. **Data-replikaasie** is 'n interne fasiliteit deur AWS waar **S3 outomaties elke objek oor al die Beschikbaarheidsgebiede repliseer** en die organisasie hoef dit nie in hierdie geval te aktiveer nie.
Amazon S3 bied verskeie opsies om die **beskerming** van data at REST te bewerkstellig. Die opsies sluit in **Permission** (Policy), **Encryption** (Client and Server Side), **Bucket Versioning** en **MFA based delete**. Die **gebruiker kan aktiveer** enige van hierdie opsies om databeskerming te bereik. **Data replication** is 'n interne fasiliteit deur AWS waar **S3 automatically replicates each object across all the Availability Zones** en die organisasie dit nie hoef te aktiveer nie.
Met hulpbron-gebaseerde toestemmings kan jy toestemmings vir sub-gidse van jou emmer apart definieer.
Met resource-based permissions kan jy toestemmings vir sub-gidse van jou bucket afsonderlik definieer.
### Emmerweergawe en MFA gebaseerde verwydering
### Bucket Versioning and MFA based delete
Wanneer emmerweergawe geaktiveer is, sal enige aksie wat probeer om 'n lêer binne 'n lêer te verander 'n nuwe weergawe van die lêer genereer, terwyl die vorige inhoud van dieselfde ook behou word. Daarom sal dit nie sy inhoud oorskryf nie.
Wanneer bucket versioning aangeskakel is, sal enige aksie wat probeer om 'n lêer in die bucket te wysig 'n nuwe weergawe van daardie lêer skep en ook die vorige inhoud behou. Daarom sal dit nie die bestaande inhoud oor-skryf nie.
Boonop sal MFA gebaseerde verwydering verhinder dat weergawes van lêers in die S3-emmer verwyder word en ook dat Emmerweergawe gedeaktiveer word, sodat 'n aanvaller nie in staat sal wees om hierdie lêers te verander nie.
Boonop sal MFA based delete verhoed dat weergawes van lêers in die S3 bucket uitgevee word en ook verhoed dat Bucket Versioning gedeaktiveer word, sodat 'n aanvaller nie hierdie lêers kan verander nie.
### S3 Toegang logs
### S3 Access logs
Dit is moontlik om **S3 toegang aan te dui** (wat standaard gedeaktiveer is) vir 'n emmer en die logs in 'n ander emmer te stoor om te weet wie die emmer toegang (albei emmers moet in dieselfde streek wees).
Dit is moontlik om **enable S3 access login** (wat standaard gedeaktiveer is) op 'n bucket aan te skakel en die logs in 'n ander bucket te stoor om te bepaal wie toegang tot die bucket het (albei buckets moet in dieselfde streek wees).
### S3 Presigned URL's
### S3 Presigned URLs
Dit is moontlik om 'n presigned URL te genereer wat gewoonlik gebruik kan word om **toegang te verkry tot die gespesifiseerde lêer** in die emmer. 'n **presigned URL lyk soos volg**:
Dit is moontlik om 'n presigned URL te genereer wat gewoonlik gebruik kan word om die gespesifiseerde lêer in die bucket te bereik. A **presigned URL looks like this**:
```
https://<bucket-name>.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa
```
'n Voorafondertekende URL kan **uit die cli geskep word met die kredensiale van 'n hoofpersoon met toegang tot die objek** (as die rekening wat jy gebruik nie toegang het nie, sal 'n korter voorafondertekende URL geskep word, maar dit sal nutteloos wees)
'n presigned URL kan **geskep word vanaf die cli met credentials van 'n principal wat toegang tot die object het** (indien die account wat jy gebruik nie toegang het nie, sal 'n korter presigned URL geskep word, maar dit sal nutteloos wees)
```bash
aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'
```
> [!NOTE]
> Die enigste vereiste toestemming om 'n voorafondertekende URL te genereer, is die toestemming wat gegee word, so vir die vorige opdrag is die enigste toestemming wat die hoofpersoon nodig het `s3:GetObject`
Dit is ook moontlik om voorafondertekende URL's te skep met **ander toestemmings**:
> Die enigste vereiste permissie om 'n presigned URL te genereer is die permissie wat gegee word, so vir die vorige opdrag is die enigste permissie wat deur die prinsipaal benodig word `s3:GetObject`
>
> Dit is ook moontlik om presigned URLs te skep met **ander permissies**:
```python
import boto3
url = boto3.client('s3').generate_presigned_url(
@@ -42,99 +42,99 @@ Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600
)
```
### S3 Enkripsiemeganismes
### S3 Enkripsie-meganismes
**DEK beteken Data Enkripsiesleutel** en is die sleutel wat altyd gegenereer word en gebruik word om data te enkripteer.
**DEK beteken Data Encryption Key** en is die sleutel wat altyd gegenereer word en gebruik word om data te enkripteer.
<details>
<summary><strong>Bediener-kant enkripsie met S3 bestuurde sleutels, SSE-S3</strong></summary>
<summary><strong>Server-side encryption with S3 managed keys, SSE-S3</strong></summary>
Hierdie opsie vereis minimale konfigurasie en al die bestuur van enkripsiesleutels wat gebruik word, word deur AWS bestuur. Al wat jy hoef te doen is om jou data te **laai en S3 sal al die ander aspekte hanteer**. Elke emmer in 'n S3-rekening word aan 'n emmersleutel toegeken.
Hierdie opsie vereis minimale konfigurasie en alle bestuur van die enkripsiesleutels word deur AWS hanteer. Alles wat jy hoef te doen is om jou data op te laai en S3 sal al die ander aspekte hanteer. Elke bucket in 'n S3 rekening kry 'n bucket key.
- Enkripsie:
- Objektdata + geskepte platte DEK --> Geënkripteerde data (gestoor binne S3)
- Geskepte platte DEK + S3 Meestersleutel --> Geënkripteerde DEK (gestoor binne S3) en platte teks word uit geheue verwyder
- Object Data + created plaintext DEK --> Encrypted data (gestoor binne S3)
- Created plaintext DEK + S3 Master Key --> Encrypted DEK (gestoor binne S3) en die plain text word uit geheue verwyder
- Dekripsie:
- Geënkripteerde DEK + S3 Meestersleutel --> Platte DEK
- Platte DEK + Geënkripteerde data --> Objektdata
- Encrypted DEK + S3 Master Key --> Plaintext DEK
- Plaintext DEK + Encrypted data --> Object Data
Neem asseblief kennis dat in hierdie geval **die sleutel deur AWS bestuur word** (rotasie slegs elke 3 jaar). As jy jou eie sleutel gebruik, sal jy in staat wees om te roteer, te deaktiveer en toegangbeheer toe te pas.
Let asseblief daarop dat in hierdie geval **die sleutel deur AWS bestuur word** (rotasie slegs elke 3 jaar). As jy jou eie sleutel gebruik, sal jy in staat wees om te roteer, te deaktiveer en toegangskontrole toe te pas.
</details>
<details>
<summary><strong>Bediener-kant enkripsie met KMS bestuurde sleutels, SSE-KMS</strong></summary>
<summary><strong>Server-side encryption with KMS managed keys, SSE-KMS</strong></summary>
Hierdie metode laat S3 toe om die sleutelbestuursdiens te gebruik om jou data-enkripsiesleutels te genereer. KMS bied jou 'n baie groter buigsaamheid oor hoe jou sleutels bestuur word. Byvoorbeeld, jy kan die CMK deaktiveer, roteer en toegangbeheer toepas, en bestellings teen hul gebruik met AWS Cloud Trail.
Hierdie metode laat S3 toe om die Key Management Service te gebruik om jou data-enkripsiesleutels te genereer. KMS gee jou baie meer buigsaamheid oor hoe jou sleutels bestuur word. Byvoorbeeld, jy kan die CMK deaktiveer, roteer en toegangskontroles toepas, en hul gebruik nagaan met AWS Cloud Trail.
- Enkripsie:
- S3 versoek data sleutels van KMS CMK
- KMS gebruik 'n CMK om die paar DEK platte teks en DEK geënkripteerd te genereer en stuur dit na S3
- S3 gebruik die platte sleutel om die data te enkripteer, stoor die geënkripteerde data en die geënkripteerde sleutel en verwyder die platte sleutel uit geheue
- S3 versoek data keys van KMS CMK
- KMS gebruik 'n CMK om die paar plaintext DEK en encrypted DEK te genereer en stuur hulle terug na S3
- S3 gebruik die plaintext sleutel om die data te enkripteer, stoor die encrypted data en die encrypted sleutel, en verwyder die plain text sleutel uit geheue
- Dekripsie:
- S3 vra KMS om die geënkripteerde datasleutel van die objek te dekripteer
- KMS dekripteer die datasleutel met die CMK en stuur dit terug na S3
- S3 dekripteer die objektdata
- S3 vra KMS om die encrypted data key van die object te dekripteer
- KMS dekripteer die data key met die CMK en stuur dit terug aan S3
- S3 dekripteer die object data
</details>
<details>
<summary><strong>Bediener-kant enkripsie met kliënt verskaf sleutels, SSE-C</strong></summary>
<summary><strong>Server-side encryption with customer provided keys, SSE-C</strong></summary>
Hierdie opsie gee jou die geleentheid om jou eie meester sleutel te verskaf wat jy dalk reeds buite AWS gebruik. Jou kliënt-verskaf sleutel sal dan saam met jou data na S3 gestuur word, waar S3 dan die enkripsie vir jou sal uitvoer.
Hierdie opsie gee jou die geleentheid om jou eie master sleutel te verskaf wat jy dalk reeds buite AWS gebruik. Jou customer-provided key word saam met jou data na S3 gestuur, waar S3 dan die enkripsie vir jou sal uitvoer.
- Enkripsie:
- Die gebruiker stuur die objektdata + Kliëntsleutel na S3
- Die kliëntsleutel word gebruik om die data te enkripteer en die geënkripteerde data word gestoor
- 'n Gesoute HMAC-waarde van die kliëntsleutel word ook gestoor vir toekomstige sleutelvalidasie
- die kliëntsleutel word uit geheue verwyder
- Die gebruiker stuur die object data + Customer key na S3
- Die customer key word gebruik om die data te enkripteer en die geënkripteerde data word gestoor
- 'n gesoute HMAC waarde van die customer key word ook gestoor vir toekomstige sleutelverifikasie
- Die customer key word uit geheue verwyder
- Dekripsie:
- Die gebruiker stuur die kliëntsleutel
- Die sleutel word gevalideer teen die gestoor HMAC-waarde
- Die kliënt verskaf sleutel word dan gebruik om die data te dekripteer
- Die gebruiker stuur die customer key
- Die sleutel word geverifieer teen die gestoor HMAC waarde
- Die customer-provided key word dan gebruik om die data te dekripteer
</details>
<details>
<summary><strong>Kliënt-kant enkripsie met KMS, CSE-KMS</strong></summary>
<summary><strong>Client-side encryption with KMS, CSE-KMS</strong></summary>
Soos met SSE-KMS, gebruik dit ook die sleutelbestuursdiens om jou data-enkripsiesleutels te genereer. Hierdie keer word KMS egter via die kliënt en nie S3 aangespreek nie. Die enkripsie vind dan kliënt-kant plaas en die geënkripteerde data word dan na S3 gestuur om gestoor te word.
Soos met SSE-KMS, gebruik dit ook die Key Management Service om jou data-enkripsiesleutels te genereer. Hierdie keer word KMS egter deur die client aangespreek en nie deur S3 nie. Die enkripsie vind kliënt-kant plaas en die geënkripteerde data word dan na S3 gestuur vir stoor.
- Enkripsie:
- Kliënt versoek 'n datasleutel van KMS
- KMS stuur die platte DEK en die geënkripteerde DEK met die CMK terug
- Beide sleutels word teruggestuur
- Die kliënt enkripteer dan die data met die platte DEK en stuur die geënkripteerde data + die geënkripteerde DEK (wat as metadata van die geënkripteerde data binne S3 gestoor word) na S3
- Client versoek 'n data key van KMS
- KMS stuur die plaintext DEK en die encrypted DEK met die CMK terug
- Beide sleutels word teruggestuur aan die client
- Die client enkripteer dan die data met die plaintext DEK en stuur na S3 die encrypted data + die encrypted DEK (wat as metadata van die geënkripteerde data in S3 gestoor word)
- Dekripsie:
- Die geënkripteerde data met die geënkripteerde DEK word na die kliënt gestuur
- Die kliënt vra KMS om die geënkripteerde sleutel te dekripteer met die CMK en KMS stuur die platte DEK terug
- Die kliënt kan nou die geënkripteerde data dekripteer
- Die geënkripteerde data met die encrypted DEK word aan die client gestuur
- Die client vra KMS om die encrypted sleutel te dekripteer met die CMK en KMS stuur die plaintext DEK terug
- Die client kan nou die geënkripteerde data dekripteer
</details>
<details>
<summary><strong>Kliënt-kant enkripsie met kliënt verskaf sleutels, CSE-C</strong></summary>
<summary><strong>Client-side encryption with customer provided keys, CSE-C</strong></summary>
Deur hierdie meganisme te gebruik, kan jy jou eie verskaf sleutels benut en 'n AWS-SDK kliënt gebruik om jou data te enkripteer voordat jy dit na S3 vir stoor stuur.
Met hierdie meganisme kan jy jou eie verskafde sleutels gebruik en 'n AWS-SDK client gebruik om jou data te enkripteer voordat jy dit na S3 stuur vir stoor.
- Enkripsie:
- Die kliënt genereer 'n DEK en enkripteer die platte data
- Dan, met behulp van sy eie pasgemaakte CMK, enkripteer dit die DEK
- dien die geënkripteerde data + geënkripteerde DEK aan S3 waar dit gestoor word
- Die client genereer 'n DEK en enkripteer die plaintext data
- Daarna enkripteer dit die DEK met sy eie custom CMK
- Dien die encrypted data + encrypted DEK in by S3 waar dit gestoor word
- Dekripsie:
- S3 stuur die geënkripteerde data en DEK
- Aangesien die kliënt reeds die CMK het wat gebruik is om die DEK te enkripteer, dekripteer dit die DEK en gebruik dan die platte DEK om die data te dekripteer
- S3 stuur die encrypted data en DEK
- Aangesien die client reeds die CMK het wat gebruik is om die DEK te enkripteer, dekripteer dit die DEK en gebruik dan die plaintext DEK om die data te dekripteer
</details>
### **Enumerasie**
### **Enumeration**
Een van die tradisionele hoofmaniere om AWS-organisasies te kompromitteer, begin deur emmers wat publiek toeganklik is, te kompromitteer. **Jy kan** [**publieke emmer enumerators op hierdie bladsy vind**](../aws-unauthenticated-enum-access/#s3-buckets)**.**
Een van die tradisionele hoofmanieres om AWS-orgs te kompromitteer begin deur publiek toeganklike buckets te kompromitteer. **You can find** [**public buckets enumerators in this page**](../aws-unauthenticated-enum-access/index.html#s3-buckets)**.**
```bash
# Get buckets ACLs
aws s3api get-bucket-acl --bucket <bucket-name>
@@ -229,16 +229,16 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
```
### dual-stack <a href="#dual-stack-endpoints-description" id="dual-stack-endpoints-description"></a>
Jy kan toegang tot 'n S3-bucket verkry deur 'n dual-stack eindpunt te gebruik met 'n virtuele gehoste styl of 'n padstyl eindpuntnaam. Hierdie is nuttig om S3 deur IPv6 te benader.
Jy kan toegang tot 'n S3-bucket kry via 'n dual-stack-eindpunt deur 'n virtual hosted-style of path-style eindpuntnaam te gebruik. Dit is nuttig om S3 via IPv6 te bereik.
Dual-stack eindpunte gebruik die volgende sintaksis:
Dual-stack-eindpunte gebruik die volgende sintaksis:
- `bucketname.s3.dualstack.aws-region.amazonaws.com`
- `s3.dualstack.aws-region.amazonaws.com/bucketname`
### Privesc
In die volgende bladsy kan jy kyk hoe om **S3-toestemmings te misbruik om voorregte te verhoog**:
Op die volgende bladsy kan jy sien hoe om **abuse S3 permissions to escalate privileges**:
{{#ref}}
../aws-privilege-escalation/aws-s3-privesc/README.md
@@ -262,23 +262,23 @@ In die volgende bladsy kan jy kyk hoe om **S3-toestemmings te misbruik om voorre
../aws-persistence/aws-s3-persistence/README.md
{{#endref}}
## Other S3 vulns
## Ander S3 kwesbaarhede
### S3 HTTP Cache Poisoning Issue <a href="#heading-s3-http-desync-cache-poisoning-issue" id="heading-s3-http-desync-cache-poisoning-issue"></a>
[**Volgens hierdie navorsing**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) was dit moontlik om die antwoord van 'n arbitrêre bucket te kas asof dit aan 'n ander behoort. Dit kon misbruik gewees het om byvoorbeeld javascript-lêer-antwoorde te verander en arbitrêre bladsye te kompromitteer wat S3 gebruik om statiese kode te stoor.
[**According to this research**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) was dit moontlik om die respons van 'n ewekansige bucket in die kas te stoor asof dit aan 'n ander behoort het. Dit kon misbruik word om byvoorbeeld JavaScript-lêerresponsies te verander en ewekansige bladsye te kompromitteer wat S3 gebruik om statiese kode te stoor.
## Amazon Athena
Amazon Athena is 'n interaktiewe navraagdiens wat dit maklik maak om **data** direk in Amazon Simple Storage Service (Amazon **S3**) **te analiseer** met standaard **SQL**.
Amazon Athena is 'n interaktiewe query-diens wat dit maklik maak om data direk te ontleed in Amazon Simple Storage Service (Amazon **S3**) met behulp van standaard **SQL**.
Jy moet 'n **relationele DB-tabel voorberei** met die formaat van die inhoud wat in die gemonitorde S3-buckets gaan verskyn. En dan sal Amazon Athena in staat wees om die DB uit die logs te vul, sodat jy dit kan navraag doen.
Jy moet **'n relationele DB-tabel voorberei** met die formaat van die inhoud wat in die gemonitorde S3-buckets gaan verskyn. Daarna sal Amazon Athena in staat wees om die DB vanaf die logs te vul, sodat jy dit kan query.
Amazon Athena ondersteun die **vermoë om S3-data wat reeds versleuteld is, te navraag** en as dit geconfigureer is om dit te doen, **kan Athena ook die resultate van die navraag versleuteld wat dan in S3 gestoor kan word**.
Amazon Athena ondersteun die **vermoë om S3-data te query wat reeds versleuteld is** en as dit so gekonfigureer is, kan **Athena ook die resultate van die query versleutel wat dan in S3 gestoor kan word**.
**Hierdie versleuteling van resultate is onafhanklik van die onderliggende navraag S3-data**, wat beteken dat selfs al is die S3-data nie versleuteld nie, kan die navraag resultate versleuteld wees. 'n Paar punte om bewus van te wees is dat Amazon Athena slegs data ondersteun wat **versleuteld** is met die **volgende S3-versleutelingmetodes**, **SSE-S3, SSE-KMS, en CSE-KMS**.
**Hierdie enkripsie van resultate is onafhanklik van die onderliggende ge-queryde S3-data**, wat beteken dat selfs as die S3-data nie versleuteld is nie, die ge-queryde resultate versleuteld kan wees. 'n Paar punte om te onthou is dat Amazon Athena slegs data ondersteun wat **versleuteld** is met die **volgende S3-enkripsiemetodes**, **SSE-S3, SSE-KMS, and CSE-KMS**.
SSE-C en CSE-E word nie ondersteun nie. Benewens dit, is dit belangrik om te verstaan dat Amazon Athena slegs navrae teen **versleutelde voorwerpe wat in dieselfde streek as die navraag self is** sal uitvoer. As jy S3-data moet navraag doen wat met KMS versleuteld is, dan is spesifieke toestemmings nodig deur die Athena-gebruiker om hulle in staat te stel om die navraag uit te voer.
SSE-C and CSE-C are not supported. Daarbenewens is dit belangrik om te verstaan dat Amazon Athena slegs query's teen **versleutelde objecte wat in dieselfde streek as die query self is** sal uitvoer. As jy S3-data moet query wat met KMS versleuteld is, is spesifieke permissies benodig deur die Athena-gebruiker om hulle toe te laat om die query uit te voer.
### Enumeration
```bash