AWS - S3, Athena & Glacier Enum

Support HackTricks

S3

Amazon S3 ni huduma inayokuwezesha kuhifadhi kiasi kikubwa cha data.

Amazon S3 hutoa chaguzi kadhaa za kufikia ulinzi wa data wakati wa kupumzika. Chaguzi hizo ni pamoja na Idhini (Sera), Ufichamishaji (Upande wa Mteja na Seva), Utoaji wa Toleo la Kibakuli na MFA kulingana na kufuta. Mtumiaji anaweza kuwezesha mojawapo ya chaguzi hizi kufikia ulinzi wa data. Replikesheni ya data ni kituo cha ndani cha AWS ambapo S3 inajireplika moja kwa moja kila kitu kote katika Maeneo Yote ya Upatikanaji na shirika halihitaji kuwezesha hii katika kesi hii.

Kwa idhini zinazotegemea rasilimali, unaweza kufafanua idhini kwa vijitaa vya chini vya kibakuli chako kando.

Utoaji wa Toleo la Kibakuli na MFA kulingana na kufuta

Wakati utoaji wa toleo la kibakuli unapoanzishwa, hatua yoyote inayojaribu kubadilisha faili ndani ya faili itazalisha toleo jipya la faili, ikihifadhi pia maudhui ya awali ya hiyo hiyo. Kwa hivyo, haitaandika juu ya maudhui yake.

Zaidi ya hayo, kufuta kulingana na MFA kitazuia toleo la faili kwenye kibakuli cha S3 kufutwa na pia kuzuia Utoaji wa Toleo la Kibakuli kulegezwa, hivyo muhusika hataweza kubadilisha faili hizi.

Vipakuli vya Kufikia S3

Inawezekana kuwezesha kuingia kwenye S3 (ambayo kwa chaguo-msingi imelemazwa) kwa kibakuli fulani na kuokoa magogo kwenye kibakuli kingine ili kujua ni nani anayepata kibakuli (vibakuli vyote lazima viwe katika eneo moja).

URL za Kibakuli za Kusainiwa mapema

Inawezekana kuzalisha URL iliyosainiwa mapema ambayo kawaida inaweza kutumika kufikia faili iliyotajwa kwenye kibakuli. URL iliyosainiwa mapema inaonekana kama hii:

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

Unaweza kuunda URL iliyosainiwa mapema kutumia amri ya cli ukitumia sifa za msingi mwenye ufikivu wa kipengee (ikiwa akaunti unayotumia haina ufikivu, URL iliyosainiwa mapema fupi itaundwa lakini itakuwa haina maana).

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

Kibali pekee kinachohitajika kuzalisha URL iliyosainiwa mapema ni kibali kinachotolewa, kwa hivyo kwa amri iliyopita kibali pekee kinachohitajika na mhusika ni s3:GetObject

Pia ni rahisi kuunda URL zilizosainiwa mapema na kibali kingine:

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

Mifumo ya Kuficha S3

DEK inamaanisha Data Encryption Key na ni ufunguo ambao daima huzalishwa na kutumika kuficha data.

Kuficha upande wa seva na S3 kusimamia ufunguo, SSE-S3

Chaguo hili linahitaji usanidi mdogo na usimamizi wote wa ufunguo wa kuficha uliotumiwa unasimamiwa na AWS. Unachohitaji kufanya ni kutuma data yako na S3 itashughulikia vipengele vingine vyote. Kila ndoo katika akaunti ya S3 inapewa ufunguo wa ndoo.

  • Kuficha:

  • Data ya Kitu + DEK ya maandishi iliyoundwa --> Data iliyofichwa (imehifadhiwa ndani ya S3)

  • DEK ya maandishi iliyoundwa + Ufunguo Mkuu wa S3 --> DEK iliyofichwa (imehifadhiwa ndani ya S3) na maandishi ya wazi yamefutwa kumbukumbuni

  • Kufichua:

  • DEK iliyofichwa + Ufunguo Mkuu wa S3 --> DEK ya Maandishi

  • DEK ya Maandishi + Data iliyofichwa --> Data ya Kitu

Tafadhali, kumbuka kwamba katika kesi hii ufunguo unasimamiwa na AWS (mzunguko mara moja kila baada ya miaka 3). Ikiwa utatumia ufunguo wako mwenyewe utaweza kuzungusha, kulemaza, na kutumia udhibiti wa ufikiaji.

Kuficha upande wa seva na S3 kusimamia ufunguo wa KMS, SSE-KMS

Mbinu hii inaruhusu S3 kutumia huduma ya usimamizi wa ufunguo kuzalisha ufunguo wako wa kuficha data. KMS inakupa mabadiliko makubwa zaidi ya jinsi ufunguo wako unavyosimamiwa. Kwa mfano, unaweza kulemaza, kuzungusha, na kutumia udhibiti wa ufikiaji kwa CMK, na amri dhidi ya matumizi yao kwa kutumia AWS Cloud Trail.

  • Kuficha:

  • S3 inaomba ufunguo wa data kutoka kwa CMK ya KMS

  • KMS hutumia CMK kuzalisha jozi ya DEK ya maandishi na DEK iliyofichwa na kuzituma kwa S3

  • S3 hutumia ufunguo wa maandishi kuficha data, kuhifadhi data iliyofichwa na ufunguo uliofichwa na kufuta kumbukumbu ya ufunguo wa maandishi

  • Kufichua:

  • S3 inaomba KMS kufichua ufunguo uliofichwa wa data ya kitu

  • KMS inafichua ufunguo wa data kwa kutumia CMK na kuirudisha kwa S3

  • S3 inafichua data ya kitu

Kuficha upande wa seva na ufunguo uliotolewa na mteja, SSE-C

Chaguo hili hukupa fursa ya kutoa ufunguo wako wa msingi ambao labda tayari unautumia nje ya AWS. Ufunguo uliotolewa na mteja basi utatumwa pamoja na data yako kwenda S3, ambapo S3 itafanya kuficha kwa niaba yako.

  • Kuficha:

  • Mtumiaji anatuma data ya kitu + Ufunguo wa Mteja kwa S3

  • Ufunguo wa mteja hutumiwa kuficha data na data iliyofichwa huhifadhiwa

  • thamani ya HMAC iliyochumwa ya ufunguo wa mteja pia huhifadhiwa kwa ajili ya uthibitisho wa baadaye wa ufunguo

  • ufunguo wa mteja hufutwa kumbukumbuni

  • Kufichua:

  • Mtumiaji anatuma ufunguo wa mteja

  • Ufunguo huthibitishwa dhidi ya thamani ya HMAC iliyohifadhiwa

  • Ufunguo uliotolewa na mteja basi hutumiwa kufichua data

Kuficha upande wa mteja na KMS, CSE-KMS

Vivyo hivyo na SSE-KMS, hii pia hutumia huduma ya usimamizi wa ufunguo kuzalisha ufunguo wako wa kuficha data. Hata hivyo, wakati huu KMS inaitwa kupitia mteja si S3. Kuficha kisha hufanyika upande wa mteja na data iliyofichwa kisha hutumwa kwa S3 kuhifadhiwa.

  • Kuficha:

  • Mteja anaomba ufunguo wa data kwa KMS

  • KMS inarudisha DEK ya maandishi na DEK iliyofichwa pamoja na CMK

  • Ufunguo wote hutumwa tena

  • Mteja kisha huficha data na DEK ya maandishi na kutuma kwa S3 data iliyofichwa + DEK iliyofichwa (ambayo huhifadhiwa kama metadata ya data iliyofichwa ndani ya S3)

  • Kufichua:

  • Data iliyofichwa pamoja na DEK iliyofichwa hutumwa kwa mteja

  • Mteja anaomba KMS kufichua ufunguo uliofichwa kwa kutumia CMK na KMS inarudisha DEK ya maandishi

  • Mteja sasa anaweza kufichua data iliyofichwa

Kuficha upande wa mteja na ufunguo uliotolewa na mteja, CSE-C

Kwa kutumia mbinu hii, unaweza kutumia ufunguo uliotolewa na wewe mwenyewe na kutumia mteja wa AWS-SDK kuficha data yako kabla ya kutuma kwa S3 kwa uhifadhi.

  • Kuficha:

  • Mteja anazalisha DEK na kuficha data ya maandishi

  • Kisha, kwa kutumia CMK yake ya desturi, huficha DEK

  • kutuma data iliyofichwa + DEK iliyofichwa kwa S3 ambapo huhifadhiwa

  • Kufichua:

  • S3 inatuma data iliyofichwa na DEK

  • Kwa kuwa mteja tayari ana CMK iliyotumiwa kuficha DEK, hufichua DEK na kisha kutumia DEK ya maandishi kufichua data

Uorodheshaji

Moja ya njia kuu za jadi za kuhatarisha mashirika ya AWS huanza kwa kuhatarisha ndoo zinazopatikana hadharani. Unaweza kupata watafutaji wa ndoo za umma katika ukurasa huu.

# 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

dual-stack

Unaweza kupata ufikiaji wa ndoo ya S3 kupitia kwa kituo cha dual-stack kwa kutumia jina la kituo cha aina ya virtual hosted-style au path-style. Hizi ni muhimu kwa ufikiaji wa S3 kupitia IPv6.

Vituo vya dual-stack hutumia muundo ufuatao:

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

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

Privesc

Kwenye ukurasa ufuatao unaweza kuangalia jinsi ya kutumia ruhusa za S3 kwa kuboresha mamlaka:

AWS - S3 Privesc

Upatikanaji usiothibitishwa

AWS - S3 Unauthenticated Enum

S3 Post Exploitation

AWS - S3 Post Exploitation

Uthabiti

AWS - S3 Persistence

Mapungufu Mengine ya S3

S3 Kupotosha Kache ya HTTP

Kulingana na utafiti huu ilikuwa inawezekana kuhifadhi jibu la ndoo ya aina yoyote kana kwamba ni sehemu ya ndoo nyingine. Hii inaweza kutumiwa kubadilisha kwa mfano majibu ya faili za javascript na kuhatarisha kurasa za aina yoyote zinazotumia S3 kuhifadhi nambari za tuli.

Amazon Athena

Amazon Athena ni huduma ya utaftaji wa maswali ya moja kwa moja ambayo inafanya iwe rahisi uchambuzi wa data moja kwa moja katika Huduma Rahisi ya Uhifadhi wa Amazon (Amazon S3) kwa kutumia SQL ya kawaida.

Unahitaji kuandaa meza ya DB ya uhusiano na muundo wa yaliyomo ambayo yataonekana kwenye ndoo za S3 zinazofuatiliwa. Kisha, Amazon Athena itaweza kujaza DB kutoka kwenye magogo, ili uweze kuuliza.

Amazon Athena inasaidia uwezo wa kuuliza data ya S3 ambayo tayari imefichwa na ikisakinishwa kufanya hivyo, Athena pia inaweza kuficha matokeo ya swali ambayo kisha yanaweza kuhifadhiwa kwenye S3.

Ufichaji huu wa matokeo ni huru ya data ya S3 iliyoulizwa, maana hata kama data ya S3 haijafichwa, matokeo ya maswali yanaweza kufichwa. Mambo machache ya kuzingatia ni kwamba Amazon Athena inasaidia tu data ambayo imefichwa na mbinu za uchafuzi wa S3 zifuatazo, SSE-S3, SSE-KMS, na CSE-KMS.

SSE-C na CSE-E hazisaidiwi. Mbali na hii, ni muhimu kuelewa kwamba Amazon Athena itaendesha maswali tu dhidi ya vitu vilivyofichwa ambavyo viko katika eneo sawa na swali lenyewe. Ikiwa unahitaji kuuliza data ya S3 ambayo imefichwa kwa kutumia KMS, basi ruhusa maalum inahitajika na mtumiaji wa Athena ili kuwezesha kufanya swali.

Urambazaji

# 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>

Marejeo

Support HackTricks

Last updated