Translated ['', 'src/pentesting-cloud/aws-security/aws-services/aws-s3-a

This commit is contained in:
Translator
2026-02-12 13:06:23 +00:00
parent b8846f9540
commit 269d97a954
@@ -1,32 +1,32 @@
# AWS - S3, Athena & Glacier Enum
# AWS - S3, Athena & Glacier Enumeração
{{#include ../../../banners/hacktricks-training.md}}
## S3
Amazon S3 é um serviço que permite que você **armazenar grandes quantidades de dados**.
Amazon S3 é um serviço que permite que você **armazene grandes quantidades de dados**.
Amazon S3 fornece 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 Lado 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 de dados. A **replicação de dados** é uma funcionalidade interna da AWS onde **S3 replica automaticamente cada objeto em todas as Zonas de Disponibilidade** e a organização não precisa habilitá-la nesse caso.
Amazon S3 oferece múltiplas opções para alcançar a **proteção** de dados em repouso. As opções incluem **Permissão** (Policy), **Criptografia** (Client and Server Side), **Bucket Versioning** e **MFA based delete**. O **usuário pode ativar** qualquer uma dessas opções para obter proteção dos dados. **Data replication** é uma funcionalidade interna da AWS onde **S3 automaticamente replica cada objeto através de todas as Availability Zones** 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.
Com permissões baseadas em recursos, você pode definir permissões para sub-diretórios do seu bucket separadamente.
### Versionamento de Bucket e exclusão baseada em MFA
### Bucket Versioning and MFA based delete
Quando o versionamento de bucket está habilitado, qualquer ação que tenta 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.
Quando o Bucket Versioning está habilitado, qualquer ação que tente alterar um arquivo no bucket gerará uma nova versão do arquivo, mantendo também o conteúdo anterior. Portanto, não sobrescreverá o 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, de modo que um atacante não poderá alterar esses arquivos.
Além disso, o MFA based delete impedirá que versões de arquivos no bucket S3 sejam excluídas e também que o Bucket Versioning seja desabilitado, então um atacante não conseguirá alterar esses arquivos.
### Logs de Acesso do S3
### S3 Access logs
É possível **habilitar o login 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).
É possível **ativar S3 access logging** (que por padrão está desabilitado) em um 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 Presignadas do S3
### S3 Presigned URLs
É possível gerar uma URL presignada que pode ser usada para **acessar o arquivo especificado** no bucket. Uma **URL presignada se parece com isso**:
É possível gerar um presigned URL que normalmente pode ser usado para **acessar o arquivo especificado** no bucket. Um **presigned URL se parece com isto**:
```
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
```
Uma URL pré-assinada pode ser **criada a partir do cli usando credenciais de um principal com acesso ao objeto** (se a conta que você usa não tiver acesso, uma URL pré-assinada mais curta será criada, mas será inútil)
Uma presigned URL pode ser **criada a partir do cli usando credentials de um principal com acesso ao object** (se a account que você usar não tiver acesso, uma presigned URL mais curta será criada, mas será inútil)
```bash
aws s3 presign --region <bucket-region> 's3://<bucket-name>/<file-name>'
```
@@ -42,99 +42,99 @@ Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600
)
```
### Mecanismos de Criptografia do S3
### Mecanismos de criptografia do S3
**DEK significa Chave de Criptografia de Dados** e é a chave que é sempre gerada e usada para criptografar dados.
**DEK means Data Encryption Key** e é a chave que é sempre gerada e usada para criptografar dados.
<details>
<summary><strong>Criptografia do lado do servidor com chaves gerenciadas pelo S3, SSE-S3</strong></summary>
<summary><strong>Server-side encryption with S3 managed keys, SSE-S3</strong></summary>
Esta opção requer configuração mínima e toda a gestão das chaves de criptografia utilizadas é gerenciada pela AWS. Tudo o que você precisa fazer é **fazer o upload dos seus dados e o S3 cuidará de todos os outros aspectos**. Cada bucket em uma conta S3 é atribuído a uma chave de bucket.
Esta opção requer configuração mínima e todo o gerenciamento das chaves de criptografia é feito pela AWS. Tudo o que você precisa fazer é **enviar seus dados e o S3 cuidará de todos os outros aspectos**. Cada bucket em uma conta S3 recebe uma bucket key.
- 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 em claro é excluído da memória
- Descriptografia:
- DEK criptografado + Chave Mestra do S3 --> DEK em texto claro
- DEK em texto claro + Dados criptografados --> Dados do objeto
- Encryption:
- Object Data + created plaintext DEK --> Encrypted data (stored inside S3)
- Created plaintext DEK + S3 Master Key --> Encrypted DEK (stored inside S3) and plain text is deleted from memory
- Decryption:
- Encrypted DEK + S3 Master Key --> Plaintext DEK
- Plaintext DEK + Encrypted data --> Object Data
Por favor, note que neste caso **a chave é gerenciada pela AWS** (rotação apenas a cada 3 anos). Se você usar sua própria chave, poderá rotacionar, desativar e aplicar controle de acesso.
Por favor, note que neste caso **a chave é gerenciada pela AWS** (rotacionamento apenas a cada 3 anos). Se você usar sua própria chave você poderá rotacionar, desabilitar e aplicar controle de acesso.
</details>
<details>
<summary><strong>Criptografia do lado do servidor com chaves gerenciadas pelo KMS, SSE-KMS</strong></summary>
<summary><strong>Server-side encryption with KMS managed keys, SSE-KMS</strong></summary>
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 sobre como suas chaves são gerenciadas. Por exemplo, você pode desativar, rotacionar e aplicar controles de acesso ao CMK, e ordenar contra seu uso usando o AWS Cloud Trail.
Este método permite que o S3 utilize o Key Management Service para gerar suas data encryption keys. KMS oferece muito mais flexibilidade sobre como suas chaves são gerenciadas. Por exemplo, você pode desabilitar, rotacionar e aplicar controles de acesso ao CMK, e auditar seu uso usando 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, armazena os dados criptografados e a chave criptografada e exclui da memória a chave em texto claro
- 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 ao S3
- O S3 descriptografa os dados do objeto
- Encryption:
- S3 request data keys from KMS CMK
- KMS uses a CMK to generate the pair DEK plaintext and DEK encrypted and send them to S£
- S3 uses the paintext key to encrypt the data, store the encrypted data and the encrypted key and deletes from memory the plain text key
- Decryption:
- S3 ask to KMS to decrypt the encrypted data key of the object
- KMS decrypt the data key with the CMK and send it back to S3
- S3 decrypts the object data
</details>
<details>
<summary><strong>Criptografia do lado do servidor com chaves fornecidas pelo cliente, SSE-C</strong></summary>
<summary><strong>Server-side encryption with customer provided keys, SSE-C</strong></summary>
Esta opção oferece 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 realizaria a criptografia para você.
Esta opção permite que você forneça sua própria master key que talvez já utilize fora da AWS. Sua chave fornecida pelo cliente seria então enviada junto com seus dados para o S3, onde o S3 executaria 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 contra o valor HMAC armazenado
- A chave fornecida pelo cliente é então usada para descriptografar os dados
- Encryption:
- The user sends the object data + Customer key to S3
- The customer key is used to encrypt the data and the encrypted data is stored
- a salted HMAC value of the customer key is stored also for future key validation
- the customer key is deleted from memory
- Decryption:
- The user send the customer key
- The key is validated against the HMAC value stored
- The customer provided key is then used to decrypt the data
</details>
<details>
<summary><strong>Criptografia do lado do cliente com KMS, CSE-KMS</strong></summary>
<summary><strong>Client-side encryption with KMS, CSE-KMS</strong></summary>
De forma semelhante 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, não pelo S3. A criptografia ocorre do lado do cliente e os dados criptografados são enviados ao S3 para serem armazenados.
Similar ao SSE-KMS, este também usa o Key Management Service para gerar suas data encryption keys. Porém, desta vez o KMS é chamado pelo cliente, não pelo S3. A criptografia então ocorre no lado do cliente e os dados criptografados são enviados ao S3 para armazenamento.
- Criptografia:
- O cliente solicita uma chave de dados ao KMS
- O KMS retorna o DEK em texto claro 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 claro 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 solicita ao KMS para descriptografar a chave criptografada usando o CMK e o KMS envia de volta o DEK em texto claro
- O cliente agora pode descriptografar os dados criptografados
- Encryption:
- Client request for a data key to KMS
- KMS returns the plaintext DEK and the encrypted DEK with the CMK
- Both keys are sent back
- The client then encrypts the data with the plaintext DEK and send to S3 the encrypted data + the encrypted DEK (which is saved as metadata of the encrypted data inside S3)
- Decryption:
- The encrypted data with the encrypted DEK is sent to the client
- The client asks KMS to decrypt the encrypted key using the CMK and KMS sends back the plaintext DEK
- The client can now decrypt the encrypted data
</details>
<details>
<summary><strong>Criptografia do lado do cliente com chaves fornecidas pelo cliente, CSE-C</strong></summary>
<summary><strong>Client-side encryption with customer provided keys, CSE-C</strong></summary>
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 ao S3 para armazenamento.
- Criptografia:
- O cliente gera um DEK e criptografa os dados em texto claro
- 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, em seguida, usa o DEK em texto claro para descriptografar os dados
- Encryption:
- The client generates a DEK and encrypts the plaintext data
- Then, using it's own custom CMK it encrypts the DEK
- submit the encrypted data + encrypted DEK to S3 where it's stored
- Decryption:
- S3 sends the encrypted data and DEK
- As the client already has the CMK used to encrypt the DEK, it decrypts the DEK and then uses the plaintext DEK to decrypt the data
</details>
### **Enumeração**
Uma das principais maneiras tradicionais de comprometer organizações AWS começa comprometendo buckets acessíveis publicamente. **Você pode encontrar** [**enumeradores de buckets públicos nesta página**](../aws-unauthenticated-enum-access/#s3-buckets)**.**
Uma das maneiras tradicionais principais de comprometer organizações AWS começa por comprometer buckets publicamente acessíveis. **Você pode encontrar** [**public buckets enumerators in this page**](../aws-unauthenticated-enum-access/index.html#s3-buckets)**.**
```bash
# Get buckets ACLs
aws s3api get-bucket-acl --bucket <bucket-name>
@@ -229,58 +229,58 @@ aws s3api put-object-acl --bucket <bucket-name> --key flag --access-control-poli
```
### dual-stack <a href="#dual-stack-endpoints-description" id="dual-stack-endpoints-description"></a>
Você pode acessar um bucket S3 através de um endpoint dual-stack usando um nome de endpoint de estilo hospedado virtual ou de estilo de caminho. Estes são úteis para acessar o S3 através de IPv6.
Você pode acessar um bucket S3 através de um endpoint dual-stack usando um nome de endpoint no formato virtual hosted-style ou path-style. Esses são úteis para acessar o S3 via IPv6.
Os endpoints dual-stack usam a seguinte sintaxe:
Dual-stack endpoints usam a seguinte sintaxe:
- `bucketname.s3.dualstack.aws-region.amazonaws.com`
- `s3.dualstack.aws-region.amazonaws.com/bucketname`
### Privesc
Na página a seguir, você pode verificar como **abusar das permissões do S3 para escalar privilégios**:
In the following page you can check how to **abuse S3 permissions to escalate privileges**:
{{#ref}}
../aws-privilege-escalation/aws-s3-privesc/README.md
{{#endref}}
### Acesso Não Autenticado
### Unauthenticated Access
{{#ref}}
../aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum/README.md
{{#endref}}
### S3 Pós Exploração
### S3 Post Exploitation
{{#ref}}
../aws-post-exploitation/aws-s3-post-exploitation/README.md
{{#endref}}
### Persistência
### Persistence
{{#ref}}
../aws-persistence/aws-s3-persistence/README.md
{{#endref}}
## Outras vulnerabilidades do S3
## Other S3 vulns
### Problema de Envenenamento de Cache HTTP do S3 <a href="#heading-s3-http-desync-cache-poisoning-issue" id="heading-s3-http-desync-cache-poisoning-issue"></a>
### S3 HTTP Cache Poisoning Issue <a href="#heading-s3-http-desync-cache-poisoning-issue" id="heading-s3-http-desync-cache-poisoning-issue"></a>
[**De acordo com esta pesquisa**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue), foi possível armazenar em cache a resposta de um bucket arbitrário como se pertencesse a um diferente. Isso poderia ter sido abusado para alterar, por exemplo, as respostas de arquivos javascript e comprometer páginas arbitrárias usando o S3 para armazenar código estático.
[**According to this research**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) era possível armazenar em cache a resposta de um bucket arbitrário como se pertencesse a outro diferente. Isso poderia ter sido abusado para alterar, por exemplo, respostas de arquivos javascript e comprometer páginas arbitrárias que usam 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.
Amazon Athena é um serviço de consultas interativo 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 DB 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 DB a partir dos logs, para que você possa consultá-lo.
Você precisa **preparar uma tabela relacional DB** com o formato do conteúdo que vai aparecer nos buckets S3 monitorados. Em seguida, o Amazon Athena poderá popular o DB a partir dos logs, permitindo que você o consulte.
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 ser armazenados no S3**.
O Amazon Athena suporta a **capacidade de consultar dados S3 que já estão criptografados** e, se configurado para tal, **o Athena também pode criptografar os resultados da consulta, que então podem ser armazenados no S3**.
**Essa criptografia de resultados é independente dos dados S3 consultados**, o que significa que mesmo que os dados S3 não estejam 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**.
**Essa criptografia dos resultados é independente dos dados S3 subjacentes consultados**, o que significa que mesmo que os dados S3 não estejam criptografados, os resultados consultados podem ser criptografados. Alguns pontos a observar: o Amazon Athena suporta dados que foram **criptografados** com os **seguintes métodos de criptografia S3**, **SSE-S3, SSE-KMS, and CSE-KMS**.
SSE-C e CSE-E não são suportados. Além disso, é importante entender que o Amazon Athena executará consultas contra **objetos criptografados que estão na mesma região que a própria consulta**. Se você precisar consultar dados do S3 que foram criptografados usando KMS, permissões específicas são necessárias pelo usuário do Athena para permitir que eles realizem a consulta.
SSE-C and CSE-C não são suportados. Além disso, é importante entender que o Amazon Athena executará consultas apenas contra **objetos criptografados que estejam na mesma região da própria consulta**. Se você precisa consultar dados S3 que foram criptografados usando KMS, permissões específicas são exigidas para o usuário do Athena permitir que ele execute a consulta.
### Enumeração
### Enumeration
```bash
# Get catalogs
aws athena list-data-catalogs