O Amazon S3 é um serviço que permite armazenar grandes quantidades de dados.
O Amazon S3 oferece várias opções para alcançar a proteção de dados em repouso. As opções incluem Permissão (Política), Criptografia (Lado do Cliente e do Servidor), Versionamento de Bucket e Exclusão baseada em MFA. O usuário pode habilitar qualquer uma dessas opções para alcançar a proteção dos dados. A replicação de dados é uma facilidade interna da AWS, onde o S3 replica automaticamente cada objeto em todas as Zonas de Disponibilidade e a organização não precisa habilitá-la nesse caso.
Com permissões baseadas em recursos, você pode definir permissões para subdiretórios do seu bucket separadamente.
Versionamento de Bucket e Exclusão baseada em MFA
Quando o versionamento do bucket está habilitado, qualquer ação que tente alterar um arquivo dentro de um arquivo gerará uma nova versão do arquivo, mantendo também o conteúdo anterior do mesmo. Portanto, não sobrescreverá seu conteúdo.
Além disso, a exclusão baseada em MFA impedirá que versões de arquivos no bucket S3 sejam excluídas e também que o Versionamento de Bucket seja desativado, para que um atacante não consiga alterar esses arquivos.
Logs de Acesso do S3
É possível habilitar o registro de acesso do S3 (que por padrão está desativado) para algum bucket e salvar os logs em um bucket diferente para saber quem está acessando o bucket (ambos os buckets devem estar na mesma região).
URLs Pré-assinadas do S3
É possível gerar uma URL pré-assinada que geralmente pode ser usada para acessar o arquivo especificado no bucket. Uma URL pré-assinada se parece com isso:
Um URL pré-assinado pode ser criado a partir da linha de comando usando credenciais de um principal com acesso ao objeto (se a conta que você usar não tiver acesso, um URL pré-assinado mais curto será criado, mas será inútil)
A única permissão necessária para gerar uma URL assinada é a permissão sendo concedida, então para o comando anterior a única permissão necessária pelo principal é s3:GetObject
Também é possível criar URLs assinadas com outras permissões:
DEK significa Chave de Criptografia de Dados e é a chave que é sempre gerada e usada para criptografar dados.
Criptografia do lado do servidor com chaves gerenciadas pelo S3, SSE-S3
Esta opção requer uma configuração mínima e toda a gestão das chaves de criptografia usadas é feita pela AWS. Tudo o que você precisa fazer é fazer o upload dos seus dados e o S3 lidará com todos os outros aspectos. Cada bucket em uma conta S3 é atribuído uma chave de bucket.
Criptografia:
Dados do Objeto + DEK em texto simples criado --> Dados Criptografados (armazenados dentro do S3)
DEK em texto simples criado + Chave Mestra do S3 --> DEK Criptografado (armazenado dentro do S3) e o texto simples é excluído da memória
Descriptografia:
DEK Criptografado + Chave Mestra do S3 --> DEK em texto simples
DEK em texto simples + Dados Criptografados --> Dados do Objeto
Por favor, note que neste caso a chave é gerenciada pela AWS (rotação a cada 3 anos). Se você usar sua própria chave, poderá rotacionar, desativar e aplicar controle de acesso.
Criptografia do lado do servidor com chaves gerenciadas pelo KMS, SSE-KMS
Este método permite que o S3 use o serviço de gerenciamento de chaves para gerar suas chaves de criptografia de dados. O KMS oferece uma flexibilidade muito maior na forma como suas chaves são gerenciadas. Por exemplo, você pode desativar, rotacionar e aplicar controles de acesso ao CMK e solicitar contra o uso deles usando o AWS Cloud Trail.
Criptografia:
S3 solicita chaves de dados ao KMS CMK
O KMS usa um CMK para gerar o par DEK em texto simples e DEK criptografado e os envia para o S3
O S3 usa a chave em texto simples para criptografar os dados, armazenar os dados criptografados e a chave criptografada e exclui da memória a chave em texto simples
Descriptografia:
O S3 solicita ao KMS para descriptografar a chave de dados criptografada do objeto
O KMS descriptografa a chave de dados com o CMK e a envia de volta para o S3
O S3 descriptografa os dados do objeto
Criptografia do lado do servidor com chaves fornecidas pelo cliente, SSE-C
Esta opção lhe dá a oportunidade de fornecer sua própria chave mestra que você pode já estar usando fora da AWS. Sua chave fornecida pelo cliente seria então enviada com seus dados para o S3, onde o S3 então realizaria a criptografia para você.
Criptografia:
O usuário envia os dados do objeto + Chave do Cliente para o S3
A chave do cliente é usada para criptografar os dados e os dados criptografados são armazenados
um valor HMAC salgado da chave do cliente também é armazenado para validação futura da chave
a chave do cliente é excluída da memória
Descriptografia:
O usuário envia a chave do cliente
A chave é validada em relação ao valor HMAC armazenado
A chave fornecida pelo cliente é então usada para descriptografar os dados
Criptografia do lado do cliente com KMS, CSE-KMS
Similarmente ao SSE-KMS, isso também usa o serviço de gerenciamento de chaves para gerar suas chaves de criptografia de dados. No entanto, desta vez o KMS é chamado pelo cliente e não pelo S3. A criptografia então ocorre do lado do cliente e os dados criptografados são enviados ao S3 para serem armazenados.
Criptografia:
Cliente solicita uma chave de dados ao KMS
O KMS retorna o DEK em texto simples e o DEK criptografado com o CMK
Ambas as chaves são enviadas de volta
O cliente então criptografa os dados com o DEK em texto simples e envia ao S3 os dados criptografados + o DEK criptografado (que é salvo como metadados dos dados criptografados dentro do S3)
Descriptografia:
Os dados criptografados com o DEK criptografado são enviados ao cliente
O cliente pede ao KMS para descriptografar a chave criptografada usando o CMK e o KMS envia de volta o DEK em texto simples
O cliente agora pode descriptografar os dados criptografados
Criptografia do lado do cliente com chaves fornecidas pelo cliente, CSE-C
Usando este mecanismo, você pode utilizar suas próprias chaves fornecidas e usar um cliente AWS-SDK para criptografar seus dados antes de enviá-los para o S3 para armazenamento.
Criptografia:
O cliente gera um DEK e criptografa os dados em texto simples
Em seguida, usando seu próprio CMK personalizado, ele criptografa o DEK
envia os dados criptografados + DEK criptografado para o S3 onde são armazenados
Descriptografia:
O S3 envia os dados criptografados e o DEK
Como o cliente já possui o CMK usado para criptografar o DEK, ele descriptografa o DEK e então usa o DEK em texto simples para descriptografar os dados
Enumeração
Uma das principais maneiras tradicionais de comprometer organizações AWS começa comprometendo buckets publicamente acessíveis. Você pode encontrarenumeradores de buckets públicos nesta página.
# 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
endpoints de dupla pilha
Você pode acessar um bucket S3 através de um endpoint de dupla pilha usando um nome de endpoint de estilo hospedado virtual ou de estilo de caminho. Estes são úteis para acessar o S3 através do IPv6.
Os endpoints de dupla pilha usam a seguinte sintaxe:
bucketname.s3.dualstack.aws-region.amazonaws.com
s3.dualstack.aws-region.amazonaws.com/bucketname
Escalação de Privilégios
Na página a seguir, você pode verificar como abusar das permissões do S3 para escalar privilégios:
De acordo com esta pesquisa foi possível armazenar em cache a resposta de um bucket arbitrário como se pertencesse a outro. Isso poderia ter sido abusado para alterar, por exemplo, respostas de arquivos javascript e comprometer páginas arbitrariamente usando o S3 para armazenar código estático.
Amazon Athena
Amazon Athena é um serviço de consulta interativa que facilita a análise de dados diretamente no Amazon Simple Storage Service (Amazon S3) usando SQL padrão.
Você precisa preparar uma tabela de banco de dados relacional com o formato do conteúdo que vai aparecer nos buckets S3 monitorados. E então, o Amazon Athena será capaz de popular o banco de dados a partir dos logs, para que você possa consultá-lo.
Amazon Athena suporta a capacidade de consultar dados do S3 que já estão criptografados e, se configurado para isso, Athena também pode criptografar os resultados da consulta que podem então ser armazenados no S3.
Essa criptografia de resultados é independente dos dados do S3 consultados, o que significa que mesmo que os dados do S3 não sejam criptografados, os resultados consultados podem ser criptografados. Alguns pontos a serem observados são que o Amazon Athena suporta apenas dados que foram criptografados com os seguintes métodos de criptografia do S3, SSE-S3, SSE-KMS e CSE-KMS.
SSE-C e CSE-E não são suportados. Além disso, é importante entender que o Amazon Athena só executará consultas contra objetos criptografados que estão na mesma região que a consulta em si. Se você precisar consultar dados do S3 que foram criptografados usando KMS, então permissões específicas são necessárias pelo usuário do Athena para permitir que eles realizem a consulta.
Enumeração
# 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>