AWS - S3, Athena & Glacier Enum

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia 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), Ufichaji (Upande wa Mteja na Seva), Utoaji wa Matoleo ya Bakuli na MFA kulingana na kufuta. Mtumiaji anaweza kuwezesha mojawapo ya chaguzi hizi kufikia ulinzi wa data. Ugawanyaji wa data ni kituo cha ndani cha AWS ambapo S3 inarekebisha mojawapo ya vitu vyote kwenye Maeneo Yote ya Upatikanaji na shirika halihitaji kuwezesha hilo katika kesi hii.

Kwa idhini zinazotegemea rasilimali, unaweza kufafanua idhini kwa vijitengo vya chini vya bakuli lako kando.

Utoaji wa Matoleo ya Bakuli na MFA kulingana na kufuta

Wakati utoaji wa matoleo ya bakuli 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 kutazuia matoleo ya faili kwenye bakuli la S3 kufutwa na pia Utoaji wa Matoleo ya Bakuli kulemazwa, hivyo muhusika hataweza kubadilisha faili hizo.

Vipakuli vya Kuingia kwenye S3

Inawezekana kuwezesha kuingia kwenye S3 (ambayo kwa chaguo-msingi imelemazwa) kwa baadhi ya bakuli na kuokoa kuingia huko kwenye bakuli tofauti ili kujua ni nani anayepata bakuli (bakuli zote lazima ziwe katika eneo moja).

URL za Kuingia za Kusainiwa mapema za S3

Inawezekana kuzalisha URL iliyosainiwa mapema ambayo kawaida inaweza kutumika kufikia faili iliyotajwa kwenye bakuli. 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 ambaye ana ufikiaji wa kitu (ikiwa akaunti unayotumia haina ufikiaji, URL iliyosainiwa mapema fupi itaundwa lakini itakuwa bure)

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 iliyotangulia kibali pekee kinachohitajika na mhusika ni s3:GetObject

Pia niwezekana 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 hutengenezwa na kutumika kuficha data.

Kuficha upande wa seva na funguo zilizosimamiwa na S3, SSE-S3

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

  • Kuficha:

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

  • DEK ya awali ya wazi iliyoundwa + Funguo Kuu la S3 --> DEK iliyofichwa (imehifadhiwa ndani ya S3) na maandishi ya wazi yanaondolewa kutoka kumbukumbu

  • Kufichua:

  • DEK iliyofichwa + Funguo Kuu la S3 --> DEK ya Maandishi ya Wazi

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

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

Kuficha upande wa seva na funguo zilizosimamiwa na KMS, SSE-KMS

Mbinu hii inaruhusu S3 kutumia huduma ya usimamizi wa funguo kuzalisha funguo zako za kuficha data. KMS inakupa mabadiliko makubwa zaidi ya jinsi funguo zako zinasimamiwa. 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 inahitaji funguo za data kutoka kwa KMS CMK

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

  • S3 hutumia funguo la maandishi ya wazi kuficha data, kuhifadhi data iliyofichwa na funguo iliyofichwa na kufuta kutoka kumbukumbu funguo la maandishi ya wazi

  • Kufichua:

  • S3 inaomba KMS kufichua funguo iliyofichwa ya data ya kitu

  • KMS inafichua funguo la data kwa kutumia CMK na kuituma kwa S3

  • S3 inafichua data ya kitu

Kuficha upande wa seva na funguo zinazotolewa na mteja, SSE-C

Chaguo hili hukupa fursa ya kutoa funguo yako ya msingi ambayo labda tayari unaitumia nje ya AWS. Funguo iliyotolewa na mteja basi itatumwa pamoja na data yako kwa S3, ambapo S3 itafanya kuficha kwa niaba yako.

  • Kuficha:

  • Mtumiaji anatuma data ya kitu + Funguo la Mteja kwa S3

  • Funguo la mteja hutumiwa kuficha data na data iliyofichwa huhifadhiwa

  • thamani ya HMAC iliyochumwa ya funguo la mteja pia huhifadhiwa kwa uhakiki wa baadaye wa funguo

  • funguo la mteja hufutwa kutoka kumbukumbu

  • Kufichua:

  • Mtumiaji anatuma funguo la mteja

  • Funguo huthibitishwa dhidi ya thamani ya HMAC iliyohifadhiwa

  • Funguo iliyotolewa na mteja kisha hutumiwa kufichua data

Kuficha upande wa mteja na KMS, CSE-KMS

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

  • Kuficha:

  • Mteja anauliza funguo la data kwa KMS

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

  • Funguo zote hutumwa tena

  • Mteja kisha huficha data na DEK ya maandishi ya wazi 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 funguo iliyofichwa kwa kutumia CMK na KMS inarudisha DEK ya maandishi ya wazi

  • Mteja sasa anaweza kufichua data iliyofichwa

Kuficha upande wa mteja na funguo zinazotolewa na mteja, CSE-C

Kwa kutumia mbinu hii, unaweza kutumia funguo zako zilizotolewa 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 kwa umma. 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:

pageAWS - S3 Privesc

Upatikanaji usiothibitishwa

pageAWS - S3 Unauthenticated Enum

S3 Post Exploitation

pageAWS - S3 Post Exploitation

Uthabiti

pageAWS - 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 ya ndoo tofauti. 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 kwenye Amazon Simple Storage Service (Amazon S3) kwa kutumia SQL ya kawaida.

Unahitaji kuandaa meza ya DB ya uhusiano na muundo wa yaliyomo ambayo yataonekana kwenye ndoo zilizofuatiliwa za S3. 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 ikiwa imeboreshwa kufanya hivyo, Athena inaweza pia kuficha matokeo ya swali ambayo kisha yanaweza kuhifadhiwa kwenye S3.

Ufichaji huu wa matokeo ni huru na 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 ufichaji za 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.

Uchambuzi

# 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

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Last updated