Amazon S3 ni huduma inayokuruhusu hifadhi kiasi kikubwa cha data.
Amazon S3 inatoa chaguzi nyingi za kufikia ulinzi wa data katika hali ya kupumzika. Chaguzi hizo ni pamoja na Ruhusa (Sera), Ushifirishaji (Upande wa Mteja na Upande wa Server), Mabadiliko ya Bucket na kuondolewa kwa msingi wa MFA. Mtumiaji anaweza kuwezesha chaguo lolote kati ya haya ili kufikia ulinzi wa data. Replika ya data ni huduma ya ndani ya AWS ambapo S3 inajirudia kiotomatiki kila kitu katika maeneo yote ya Upatikanaji na shirika halihitaji kuifanya iweze katika kesi hii.
Kwa ruhusa za msingi wa rasilimali, unaweza kufafanua ruhusa kwa sub-directory za bucket yako tofauti.
Mabadiliko ya Bucket na kuondolewa kwa msingi wa MFA
Wakati mabadiliko ya bucket yanapowezeshwa, kitendo chochote kinachojaribu kubadilisha faili ndani ya faili kitazalisha toleo jipya la faili, huku pia ikihifadhi yaliyomo ya awali ya hiyo. Hivyo, haitafuta yaliyomo yake.
Zaidi ya hayo, kuondolewa kwa msingi wa MFA kutazuia matoleo ya faili katika bucket ya S3 kufutwa na pia Mabadiliko ya Bucket yasizuiliwe, hivyo mshambuliaji hataweza kubadilisha faili hizi.
S3 Access logs
Inawezekana kuwezesha kuingia kwa S3 (ambayo kwa kawaida imezimwa) kwa baadhi ya bucket na kuhifadhi logi katika bucket tofauti ili kujua nani anayeingia kwenye bucket (bucket zote lazima ziwe katika eneo moja).
S3 Presigned URLs
Inawezekana kuzalisha URL iliyosainiwa mapema ambayo kwa kawaida inaweza kutumika kufikia faili iliyoainishwa katika bucket. URL iliyosainiwa mapema inaonekana kama hii:
A presigned URL can be created from the cli using credentials of a principal with access to the object (ikiwa akaunti unayotumia haina ufikiaji, URL fupi ya presigned itaundwa lakini itakuwa haina maana)
Ruhusa pekee inayohitajika kuunda URL iliyoandikwa mapema ni ruhusa inayotolewa, hivyo kwa amri ya awali ruhusa pekee inayohitajika na kiongozi ni s3:GetObject
Pia inawezekana kuunda URL zilizoandikwa mapema zikiwa na ruhusa nyingine:
DEK inamaanisha Data Encryption Key na ni ufunguo ambao kila wakati unaundwa na kutumika kupeleka data.
Server-side encryption with S3 managed keys, SSE-S3
Chaguo hili kinahitaji usanidi mdogo na usimamizi wote wa funguo za usimbaji zinazotumika unasimamiwa na AWS. Unachohitaji kufanya ni kupakia data yako na S3 itashughulikia mambo mengine yote. Kila ndoo katika akaunti ya S3 inapewa funguo ya ndoo.
Usimbaji:
Data ya Kitu + DEK ya maandiko iliyoundwa --> Data iliyosimbwa (hifadhi ndani ya S3)
DEK ya maandiko iliyoundwa + S3 Master Key --> DEK iliyosimbwa (hifadhi ndani ya S3) na maandiko yanatolewa kutoka kwenye kumbukumbu
Ufunguo:
DEK iliyosimbwa + S3 Master Key --> DEK ya maandiko
DEK ya maandiko + Data iliyosimbwa --> Data ya Kitu
Tafadhali, kumbuka kwamba katika kesi hii funguo inasimamiwa na AWS (mabadiliko kila miaka 3 tu). Ikiwa utatumia funguo zako mwenyewe utaweza kubadilisha, kuzima na kuweka udhibiti wa ufikiaji.
Server-side encryption with KMS managed keys, SSE-KMS
Njia hii inaruhusu S3 kutumia huduma ya usimamizi wa funguo kuunda funguo zako za usimbaji wa data. KMS inakupa uwezo mkubwa zaidi wa jinsi funguo zako zinavyosimamiwa. Kwa mfano, unaweza kuzima, kubadilisha, na kuweka udhibiti wa ufikiaji kwa CMK, na kuagiza dhidi ya matumizi yao kwa kutumia AWS Cloud Trail.
Usimbaji:
S3 inahitaji funguo za data kutoka KMS CMK
KMS inatumia CMK kuunda DEK ya maandiko na DEK iliyosimbwa na kuzipeleka kwa S3
S3 inatumia funguo ya maandiko kusimbwa kwa data, hifadhi data iliyosimbwa na funguo iliyosimbwa na inafuta funguo ya maandiko kutoka kwenye kumbukumbu
Ufunguo:
S3 inaomba KMS kufungua funguo iliyosimbwa ya data ya kitu
KMS inafungua funguo ya data kwa kutumia CMK na kuirudisha kwa S3
S3 inafungua data ya kitu
Server-side encryption with customer provided keys, SSE-C
Chaguo hili linakupa fursa ya kutoa funguo zako za msingi ambazo huenda tayari unazitumia nje ya AWS. Funguo yako iliyotolewa na mteja itatumwa pamoja na data yako kwenda S3, ambapo S3 itafanya usimbaji kwa niaba yako.
Usimbaji:
Mtumiaji anatumia data ya kitu + funguo ya Mteja kwenda S3
Funguo ya mteja inatumika kusimbwa kwa data na data iliyosimbwa inahifadhiwa
thamani ya HMAC iliyo na chumvi ya funguo ya mteja pia inahifadhiwa kwa ajili ya uthibitishaji wa funguo zijazo
funguo ya mteja inafuta kutoka kwenye kumbukumbu
Ufunguo:
Mtumiaji anatumia funguo ya mteja
Funguo inathibitishwa dhidi ya thamani ya HMAC iliyohifadhiwa
Funguo iliyotolewa na mteja inatumika kufungua data
Client-side encryption with KMS, CSE-KMS
Vivyo hivyo na SSE-KMS, hii pia inatumia huduma ya usimamizi wa funguo kuunda funguo zako za usimbaji wa data. Hata hivyo, wakati huu KMS inaitwa kupitia mteja si S3. Usimbaji unafanyika upande wa mteja na data iliyosimbwa inatumwa kwa S3 kuhifadhiwa.
Usimbaji:
Mteja anahitaji funguo ya data kutoka KMS
KMS inarudisha DEK ya maandiko na DEK iliyosimbwa na CMK
Funguo zote mbili zinatumwa nyuma
Mteja kisha anasimba data kwa kutumia DEK ya maandiko na kutuma kwa S3 data iliyosimbwa + DEK iliyosimbwa (ambayo inahifadhiwa kama metadata ya data iliyosimbwa ndani ya S3)
Ufunguo:
Data iliyosimbwa na DEK iliyosimbwa inatumwa kwa mteja
Mteja anaomba KMS kufungua funguo iliyosimbwa kwa kutumia CMK na KMS inarudisha DEK ya maandiko
Mteja sasa anaweza kufungua data iliyosimbwa
Client-side encryption with customer provided keys, CSE-C
Kwa kutumia mekanizimu hii, unaweza kutumia funguo zako zilizotolewa na kutumia mteja wa AWS-SDK kusimbwa kwa data yako kabla ya kuituma kwa S3 kwa ajili ya uhifadhi.
Usimbaji:
Mteja anaunda DEK na kusimbwa kwa data ya maandiko
Kisha, kwa kutumia CMK yake ya kawaida inasimbwa DEK
inapeleka data iliyosimbwa + DEK iliyosimbwa kwa S3 ambapo inahifadhiwa
Ufunguo:
S3 inatuma data iliyosimbwa na DEK
Kwa kuwa mteja tayari ana CMK iliyotumika kusimbwa DEK, inafungua DEK kisha inatumia DEK ya maandiko kufungua data
# Get buckets ACLsawss3apiget-bucket-acl--bucket<bucket-name>awss3apiget-object-acl--bucket<bucket-name>--keyflag# Get policyawss3apiget-bucket-policy--bucket<bucket-name>awss3apiget-bucket-policy-status--bucket<bucket-name>#if it's public# list S3 buckets associated with a profileawss3lsawss3apilist-buckets# list content of bucket (no creds)awss3lss3://bucket-name--no-sign-requestawss3lss3://bucket-name--recursive# list content of bucket (with creds)awss3lss3://bucket-nameawss3apilist-objects-v2--bucket<bucket-name>awss3apilist-objects--bucket<bucket-name>awss3apilist-object-versions--bucket<bucket-name># copy local folder to S3awss3cpMyFolders3://bucket-name--recursive# deleteawss3rbs3://bucket-name–-force# download a whole S3 bucketawss3syncs3://<bucket>/.# move S3 bucket to different locationawss3syncs3://oldbuckets3://newbucket--source-regionus-west-1# list the sizes of an S3 bucket and its contentsawss3apilist-objects--bucketBUCKETNAME--outputjson--query"[sum(Contents[].Size), length(Contents[])]"# Update Bucket policyawss3apiput-bucket-policy--policyfile:///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 ACLawss3apiget-bucket-acl--bucket<bucket-name># Way 1 to get the ACLawss3apiput-bucket-acl--bucket<bucket-name>--access-control-policyfile://acl.jsonawss3apiget-object-acl--bucket<bucket-name>--keyflag#Way 2 to get the ACLawss3apiput-object-acl--bucket<bucket-name>--keyflag--access-control-policyfile://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 kufikia S3 bucket kupitia dual-stack endpoint kwa kutumia jina la virtual hosted-style au path-style endpoint. Hizi ni muhimu kufikia S3 kupitia IPv6.
Dual-stack endpoints hutumia sintaks hii:
bucketname.s3.dualstack.aws-region.amazonaws.com
s3.dualstack.aws-region.amazonaws.com/bucketname
Privesc
Katika ukurasa ufuatao unaweza kuangalia jinsi ya kudhulumu ruhusa za S3 ili kupandisha mamlaka:
Unauthenticated Access
S3 Post Exploitation
Persistence
Other S3 vulns
S3 HTTP Cache Poisoning Issue
Kulingana na utafiti huu ilikuwa inawezekana kuhifadhi jibu la bucket yoyote kama ingekuwa inahusiana na nyingine. Hii ingeweza kutumika kubadilisha kwa mfano majibu ya faili ya javascript na kuathiri kurasa yoyote kwa kutumia S3 kuhifadhi msimbo wa static.
Amazon Athena
Amazon Athena ni huduma ya uchunguzi wa mwingiliano ambayo inafanya iwe rahisi kuchambua data moja kwa moja katika Amazon Simple Storage Service (Amazon S3) kwa kutumiaSQL ya kawaida.
Unahitaji kuandaa jedwali la DB la uhusiano na muundo wa maudhui ambayo yatakuwa yanaonekana katika S3 buckets zinazofuatiliwa. Na kisha, Amazon Athena itakuwa na uwezo wa kujaza DB kutoka kwa logi, ili uweze kuifanya uchunguzi.
Amazon Athena inasaidia uwezo wa kuchunguza data ya S3 ambayo tayari imefungwa na ikiwa imewekwa kufanya hivyo, Athena pia inaweza kufunga matokeo ya uchunguzi ambayo yanaweza kuhifadhiwa katika S3.
Hii ufungaji wa matokeo hauitegemei data ya S3 iliyochunguzwa, ikimaanisha kwamba hata kama data ya S3 haijafungwa, matokeo yaliyofanyiwa uchunguzi yanaweza kufungwa. Vidokezo kadhaa vya kuzingatia ni kwamba Amazon Athena inasaidia tu data ambayo ime fungwa kwa kutumia mbinu za ufungaji za S3, SSE-S3, SSE-KMS, na CSE-KMS.
SSE-C na CSE-E hazikubaliwi. Mbali na hii, ni muhimu kuelewa kwamba Amazon Athena itafanya uchunguzi tu dhidi ya vitu vilivyofungwa vilivyoko katika eneo moja na uchunguzi wenyewe. Ikiwa unahitaji kuchunguza data ya S3 ambayo imefungwa kwa kutumia KMS, basi ruhusa maalum zinahitajika na mtumiaji wa Athena ili kuwapa uwezo wa kufanya uchunguzi.
Enumeration
# Get catalogsawsathenalist-data-catalogs# Get databases inside catalogawsathenalist-databases--catalog-name<catalog-name>awsathenalist-table-metadata--catalog-name<catalog-name>--database-name<db-name># Get query executions, queries and resultsawsathenalist-query-executionsawsathenaget-query-execution--query-execution-id<id># Get query and meta of resultsawsathenaget-query-results--query-execution-id<id># This will rerun the query and get the results# Get workgroups & Prepared statementsawsathenalist-work-groupsawsathenalist-prepared-statements--work-group<wg-name>awsathenaget-prepared-statement--statement-name<name>--work-group<wg-name># Run queryawsathenastart-query-execution--query-string<query>