AWS - S3, Athena & Glacier Enum

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

S3

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 rus te bereik. Die opsies sluit in Toestemming (Beleid), Versleuteling (Kliënt en Bedienerkant), Emmer Versiebeheer en MFA gebaseerde verwydering. Die gebruiker kan enige van hierdie opsies aktiveer om data beskerming te bereik. Data replikasie is 'n interne fasiliteit deur AWS waar S3 outomaties elke voorwerp oor al die beskikbaarheidssones repliseer en die organisasie hoef dit nie in hierdie geval te aktiveer nie.

Met hulpbrongebaseerde toestemmings kan jy toestemmings vir subgids van jou emmer afsonderlik definieer.

Emmer Versiebeheer en MFA-gebaseerde verwydering

Wanneer emmer versiebeheer 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, waarby ook die vorige inhoud van dieselfde behou word. Daarom sal dit nie die inhoud daarvan oorskryf nie.

Verder sal MFA-gebaseerde verwydering voorkom dat weergawes van lêers in die S3-emmer verwyder word en ook dat Emmer Versiebeheer gedeaktiveer word, sodat 'n aanvaller nie hierdie lêers kan verander nie.

S3 Toegangslogs

Dit is moontlik om S3 toegangslogs te aktiveer (wat standaard gedeaktiveer is) vir 'n sekere emmer en die logs in 'n ander emmer te stoor om te weet wie die emmer toegang kry (beide emmers moet in dieselfde streek wees).

S3 Voorafondertekende URL's

Dit is moontlik om 'n voorafondertekende URL te genereer wat gewoonlik gebruik kan word om toegang te verkry tot die gespesifiseerde lêer in die emmer. 'n Voorafondertekende URL lyk soos hierdie:

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 geskep word vanaf die opdraggewerf deur gebruik te maak van die geloofsbriewe van 'n hoof met toegang tot die voorwerp (as die rekening wat jy gebruik nie toegang het nie, sal 'n korter voorafondertekende URL geskep word, maar dit sal nutteloos wees)

aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'

Die enigste vereiste toestemming om 'n voorafondertekende URL te genereer is die toestemming wat gegee word, so vir die vorige bevel is die enigste toestemming wat deur die hoof vereis word s3:GetObject

Dit is ook moontlik om voorafondertekende URL's te skep met ander toestemmings:

import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='put_object',
Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600
)

S3-Enkripsiemeganismes

DEK beteken Data Enkripsiesleutel en is die sleutel wat altyd gegenereer en gebruik word om data te enkripteer.

Bedienerkant-enkripsie met S3-bestuurde sleutels, SSE-S3

Hierdie opsie vereis minimale konfigurasie en alle bestuur van enkripsiesleutels wat gebruik word, word deur AWS bestuur. Al wat jy hoef te doen is om jou data te oplaai en S3 sal al die ander aspekte hanteer. Elke emmer in 'n S3-rekening word toegewys 'n emmersleutel.

  • Enkripsie:

  • Objekdata + geskepte platte TEK --> Enkripteerde data (gestoor binne S3)

  • Geskepte platte TEK + S3 Meestersleutel --> Enkripteerde TEK (gestoor binne S3) en platte teks word uit die geheue verwyder

  • Dekriptering:

  • Enkripteerde TEK + S3 Meestersleutel --> Plat TEK

  • Plat TEK + Enkripteerde data --> Objekdata

Let asseblief daarop dat in hierdie geval die sleutel deur AWS bestuur word (rotasie slegs elke 3 jaar). As jy jou eie sleutel gebruik, kan jy dit roteer, deaktiveer en toegangsbeheer toepas.

Bedienerkant-enkripsie met KMS-bestuurde sleutels, SSE-KMS

Hierdie metode maak dit moontlik vir S3 om die sleutelbestuurdienste te gebruik om jou data-enkripsiesleutels te genereer. KMS gee jou 'n baie groter buigsaamheid oor hoe jou sleutels bestuur word. Byvoorbeeld, jy kan die CMK deaktiveer, roteer en toegangsbeheer toepas, en bestel teen hul gebruik met behulp van AWS Cloud Trail.

  • Enkripsie:

  • S3 versoek data sleutels van KMS CMK

  • KMS gebruik 'n CMK om die paar DEK platte teks en DEK enkripteer te genereer en stuur hulle na S3

  • S3 gebruik die platte sleutel om die data te enkripteer, stoor die enkripteerde data en die enkripteerde sleutel en verwyder die platte sleutel uit die geheue

  • Dekriptering:

  • S3 vra KMS om die enkripteerde data sleutel van die objek te dekripteer

  • KMS dekripteer die data sleutel met die CMK en stuur dit terug na S3

  • S3 dekripteer die objekdata

Bedienerkant-enkripsie met deur die kliënt voorsiene sleutels, SSE-C

Hierdie opsie gee jou die geleentheid om jou eie meestersleutel te voorsien wat jy moontlik buite AWS gebruik. Jou deur die kliënt voorsiene sleutel sal dan saam met jou data na S3 gestuur word, waar S3 dan die enkripsie namens jou sal uitvoer.

  • Enkripsie:

  • Die gebruiker stuur die objekdata + Kliënt sleutel na S3

  • Die kliënt sleutel word gebruik om die data te enkripteer en die enkripteerde data word gestoor

  • 'n gesoute HMAC-waarde van die kliënt sleutel word ook gestoor vir toekomstige sleutelvalidering

  • die kliënt sleutel word uit die geheue verwyder

  • Dekriptering:

  • Die gebruiker stuur die kliënt sleutel

  • Die sleutel word gevalideer teen die gestoorde HMAC-waarde

  • Die deur die kliënt voorsiene sleutel word dan gebruik om die data te dekripteer

Kliëntkant-enkripsie met KMS, CSE-KMS

Soortgelyk aan SSE-KMS, gebruik dit ook die sleutelbestuurdienste om jou data-enkripsiesleutels te genereer. Hierdie keer word KMS egter deur die kliënt en nie S3 aangeroep nie. Die enkripsie vind dan kliëntkant plaas en die enkripteerde data word dan na S3 gestuur om gestoor te word.

  • Enkripsie:

  • Kliënt versoek 'n data sleutel by KMS

  • KMS gee die platte DEK en die enkripteerde DEK met die CMK terug

  • Beide sleutels word teruggestuur

  • Die kliënt enkripteer dan die data met die platte DEK en stuur na S3 die enkripteerde data + die enkripteerde DEK (wat as metadata van die enkripteerde data binne S3 gestoor word)

  • Dekriptering:

  • Die enkripteerde data met die enkripteerde DEK word na die kliënt gestuur

  • Die kliënt vra KMS om die enkripteerde sleutel met die CMK te dekripteer en KMS stuur die platte DEK terug

  • Die kliënt kan nou die enkripteerde data dekripteer

Kliëntkant-enkripsie met deur die kliënt voorsiene sleutels, CSE-C

Met hierdie meganisme kan jy jou eie voorsiene sleutels benut en 'n AWS-SDK-kliënt gebruik om jou data te enkripteer voordat dit na S3 vir berging gestuur word.

  • Enkripsie:

  • Die kliënt genereer 'n DEK en enkripteer die platte data

  • Dan, deur sy eie aangepaste CMK te gebruik, enkripteer hy die DEK

  • stuur die enkripteerde data + enkripteerde DEK na S3 waar dit gestoor word

  • Dekriptering:

  • S3 stuur die enkripteerde data en DEK

  • Aangesien die kliënt reeds die CMK wat gebruik is om die DEK te enkripteer het, dekripteer hy die DEK en gebruik dan die platte DEK om die data te dekripteer

Opsomming

Een van die tradisionele hoofmaniere om AWS-organisasies te kompromitteer, begin deur emmers wat openlik toeganklik is, te kompromitteer. Jy kan openbare emmeropsporingstoestelle op hierdie bladsy vind.

# Get buckets ACLs
aws s3api get-bucket-acl --bucket <bucket-name>
aws s3api get-object-acl --bucket <bucket-name> --key flag

# Get policy
aws s3api get-bucket-policy --bucket <bucket-name>
aws s3api get-bucket-policy-status --bucket <bucket-name> #if it's public

# list S3 buckets associated with a profile
aws s3 ls
aws s3api list-buckets

# list content of bucket (no creds)
aws s3 ls s3://bucket-name --no-sign-request
aws s3 ls s3://bucket-name --recursive

# list content of bucket (with creds)
aws s3 ls s3://bucket-name
aws s3api list-objects-v2 --bucket <bucket-name>
aws s3api list-objects --bucket <bucket-name>
aws s3api list-object-versions --bucket <bucket-name>

# copy local folder to S3
aws s3 cp MyFolder s3://bucket-name --recursive

# delete
aws s3 rb s3://bucket-name –-force

# download a whole S3 bucket
aws s3 sync s3://<bucket>/ .

# move S3 bucket to different location
aws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1

# list the sizes of an S3 bucket and its contents
aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"

# Update Bucket policy
aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-name>
##JSON policy example
{
"Id": "Policy1568185116930",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1568184932403",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::welcome",
"Principal": "*"
},
{
"Sid": "Stmt1568185007451",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::welcome/*",
"Principal": "*"
}
]
}

# Update bucket ACL
aws s3api get-bucket-acl --bucket <bucket-name> # Way 1 to get the ACL
aws s3api put-bucket-acl --bucket <bucket-name> --access-control-policy file://acl.json

aws s3api get-object-acl --bucket <bucket-name> --key flag #Way 2 to get the ACL
aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-policy file://objacl.json

##JSON ACL example
## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved.
{
"Owner": {
"DisplayName": "<DisplayName>",
"ID": "<ID>"
},
"Grants": [
{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
},
"Permission": "FULL_CONTROL"
}
]
}
## An ACL should give you the permission WRITE_ACP to be able to put a new ACL

dubbel-stapel

Jy kan toegang tot 'n S3-emmer kry deur 'n dubbel-stapel eindpunt te gebruik deur 'n virtuele gehuisvese-styl of 'n pad-styl eindpunt naam. Dit is nuttig om S3 deur IPv6 te benader.

Dubbel-stapel eindpunte gebruik die volgende sintaks:

  • bucketname.s3.dualstack.aws-region.amazonaws.com

  • s3.dualstack.aws-region.amazonaws.com/bucketname

Privesc

Op die volgende bladsy kan jy sien hoe om S3-toestemmings te misbruik om voorregte te eskaleer:

AWS - S3 Privesc

Ongeagte Toegang

AWS - S3 Unauthenticated Enum

S3 Post Exploitation

AWS - S3 Post Exploitation

Volharding

AWS - S3 Persistence

Ander S3 kwesbaarhede

S3 HTTP Cache Poisoning Issue

Volgens hierdie navorsing was dit moontlik om die respons van 'n willekeurige emmer te kashet asof dit aan 'n ander een behoort het. Dit kon misbruik word om byvoorbeeld javascript-lêer-respons te verander en willekeurige bladsye te compromiteer 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 deur gebruik te maak van standaard SQL.

Jy moet 'n verhoudingsdatabasis-tabel voorberei met die formaat van die inhoud wat in die gemonitorde S3-emmers gaan verskyn. En dan sal Amazon Athena in staat wees om die databasis vanuit die logboeke te vul, sodat jy dit kan navraag.

Amazon Athena ondersteun die vermoë om S3-data te ondersoek wat reeds versleutel is en as dit so gekonfigureer is, kan Athena ook die resultate van die navraag versleutel wat dan in S3 gestoor kan word.

Hierdie versleuteling van resultate is onafhanklik van die onderliggende ondersoekte S3-data, wat beteken dat selfs as die S3-data nie versleutel is nie, die ondersoekte resultate versleutel kan word. 'n Paar punte om bewus van te wees is dat Amazon Athena slegs data ondersteun wat met die volgende S3-versleutelingsmetodes versleutel is, SSE-S3, SSE-KMS, en CSE-KMS.

SSE-C en CSE-E word nie ondersteun nie. Daarbenewens is dit belangrik om te verstaan dat Amazon Athena slegs navrae sal uitvoer teen versleutelde voorwerpe wat in dieselfde streek as die navraag self is. As jy S3-data wat met KMS versleutel is, moet ondersoek, dan is spesifieke toestemmings vereis deur die Athena-gebruiker om hulle in staat te stel om die navraag uit te voer.

Enumerasie

# Get catalogs
aws athena list-data-catalogs

# Get databases inside catalog
aws athena list-databases --catalog-name <catalog-name>
aws athena list-table-metadata --catalog-name <catalog-name> --database-name <db-name>

# Get query executions, queries and results
aws athena list-query-executions
aws athena get-query-execution --query-execution-id <id> # Get query and meta of results
aws athena get-query-results --query-execution-id <id> # This will rerun the query and get the results

# Get workgroups & Prepared statements
aws athena list-work-groups
aws athena list-prepared-statements --work-group <wg-name>
aws athena get-prepared-statement --statement-name <name> --work-group <wg-name>

# Run query
aws athena start-query-execution --query-string <query>

Verwysings

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated