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 MFAgebaseerde 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:
'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)
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:
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
# 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
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:
Ongeagte Toegang
S3 Post Exploitation
Volharding
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 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>