mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 14:47:17 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
+52
-13
@@ -10,32 +10,71 @@ For more information check:
|
||||
../../aws-services/aws-s3-athena-and-glacier-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Informações Sensíveis
|
||||
### Sensitive Information
|
||||
|
||||
Às vezes você poderá encontrar informações sensíveis legíveis nos buckets. Por exemplo, terraform state secrets.
|
||||
Às vezes você poderá encontrar informação sensível legível nos buckets. Por exemplo, terraform state secrets.
|
||||
|
||||
### Pivoting
|
||||
|
||||
Different platforms could be using S3 to store sensitive assets.\
|
||||
Por exemplo, **airflow** poderia estar armazenando **DAGs** **code** ali, ou **páginas web** poderiam ser servidas diretamente do S3. Um atacante com permissões de escrita poderia **modify the code** a partir do bucket para **pivot** para outras plataformas, ou **takeover accounts** modificando arquivos JS.
|
||||
Diferentes plataformas podem usar o S3 para armazenar ativos sensíveis.\
|
||||
Por exemplo, **airflow** poderia estar armazenando **DAGs** **code** lá, ou **web pages** poderiam ser servidas diretamente do S3. Um atacante com permissões de escrita poderia **modify the code** do bucket para **pivot** para outras plataformas, ou **takeover accounts** modificando arquivos JS.
|
||||
|
||||
### S3 Ransomware
|
||||
|
||||
Nesse cenário, o **atacante cria uma KMS (Key Management Service) key na sua própria conta AWS** ou em outra conta comprometida. Em seguida, eles tornam essa **key acessível a qualquer pessoa no mundo**, permitindo que qualquer usuário, role ou conta AWS encripte objetos usando essa key. No entanto, os objetos não podem ser decriptados.
|
||||
Neste cenário, o **attacker creates a KMS (Key Management Service) key in their own AWS account** ou em outra conta comprometida. Em seguida, eles tornam essa **key accessible to anyone in the world**, permitindo que qualquer usuário, role, ou conta AWS criptografe objetos usando essa chave. Porém, os objetos não podem ser descriptografados.
|
||||
|
||||
O atacante identifica um **S3 bucket alvo e obtém acesso em nível de escrita** a ele usando vários métodos. Isso pode ocorrer devido a uma configuração pobre do bucket que o expõe publicamente ou ao atacante obter acesso ao ambiente AWS em si. O atacante tipicamente mira em buckets que contêm informações sensíveis como personally identifiable information (PII), protected health information (PHI), logs, backups, e mais.
|
||||
O atacante identifica um alvo, **S3 bucket and gains write-level access** a ele usando vários métodos. Isso pode ser devido a uma má configuração do bucket que o expõe publicamente ou ao atacante obtendo acesso ao próprio ambiente AWS. O atacante normalmente mira buckets que contêm informação sensível, como personally identifiable information (PII), protected health information (PHI), logs, backups, e mais.
|
||||
|
||||
Para determinar se o bucket pode ser alvo de ransomware, o atacante verifica sua configuração. Isso inclui verificar se **S3 Object Versioning** está habilitado e se **multi-factor authentication delete (MFA delete) está habilitado**. Se o Object Versioning não estiver habilitado, o atacante pode prosseguir. Se o Object Versioning estiver habilitado mas o MFA delete estiver desabilitado, o atacante pode **disable Object Versioning**. Se ambos Object Versioning e MFA delete estiverem habilitados, fica mais difícil para o atacante realizar um ataque de ransomware nesse bucket específico.
|
||||
Para determinar se o bucket pode ser alvo de ransomware, o atacante verifica sua configuração. Isso inclui verificar se o **S3 Object Versioning** está habilitado e se o **multi-factor authentication delete (MFA delete) is enabled**. Se o Object Versioning não estiver habilitado, o atacante pode prosseguir. Se o Object Versioning estiver habilitado mas o MFA delete estiver desabilitado, o atacante pode **disable Object Versioning**. Se tanto o Object Versioning quanto o MFA delete estiverem habilitados, torna-se mais difícil para o atacante realizar ransomware nesse bucket específico.
|
||||
|
||||
Usando a AWS API, o atacante **substitui cada objeto no bucket por uma cópia encriptada usando sua KMS key**. Isso efetivamente encripta os dados no bucket, tornando-os inacessíveis sem a key.
|
||||
Usando a AWS API, o atacante **replaces each object in the bucket with an encrypted copy using their KMS key**. Isso efetivamente criptografa os dados no bucket, tornando-os inacessíveis sem a chave.
|
||||
|
||||
Para aumentar a pressão, o atacante agenda a exclusão da KMS key usada no ataque. Isso dá ao alvo uma janela de 7 dias para recuperar seus dados antes que a key seja excluída e os dados se tornem permanentemente perdidos.
|
||||
Para aumentar ainda mais a pressão, o atacante agenda a exclusão da chave KMS usada no ataque. Isso dá ao alvo uma janela de 7 dias para recuperar seus dados antes que a chave seja deletada e os dados se tornem permanentemente perdidos.
|
||||
|
||||
Finalmente, o atacante pode enviar um arquivo final, geralmente chamado "ransom-note.txt", que contém instruções para o alvo sobre como recuperar seus arquivos. Esse arquivo é enviado sem encriptação, provavelmente para chamar a atenção do alvo e informá-lo sobre o ataque de ransomware.
|
||||
Finalmente, o atacante pode enviar um arquivo final, normalmente chamado "ransom-note.txt", que contém instruções para o alvo sobre como recuperar seus arquivos. Este arquivo é enviado sem criptografia, provavelmente para chamar a atenção do alvo e avisá-lo do ataque de ransomware.
|
||||
|
||||
#### SSE-C (Customer-Provided Key) Ransomware (Codefinger-like)
|
||||
|
||||
Outra variante é o abuso do **SSE-C** (S3 server-side encryption with **customer-provided keys**). Com SSE-C, o **client provides the encryption key on every request** e **AWS does not store the key**. Isso significa que se um atacante reescrever objetos usando **their own SSE-C key**, os dados da vítima se tornam ilegíveis a menos que a vítima consiga fornecer essa chave controlada pelo atacante.
|
||||
|
||||
- **Pré-requisitos:** Credenciais AWS comprometidas (ou qualquer principal com as permissões adequadas) e a capacidade de **rewrite objects** (por exemplo, `s3:PutObject` nas chaves/prefixos alvo). Isso costuma ser combinado com a capacidade de definir políticas de lifecycle destrutivas (veja abaixo), por exemplo, `s3:PutLifecycleConfiguration`.
|
||||
- **Attack chain:**
|
||||
1. O atacante gera uma chave aleatória de 256 bits (AES-256) e a mantém.
|
||||
2. O atacante **rewrites** objetos existentes (mesmas chaves de objeto) usando cabeçalhos SSE-C de forma que o objeto armazenado agora está criptografado com a chave do atacante.
|
||||
3. A vítima não consegue fazer download/descriptografar sem fornecer a chave SSE-C (mesmo que as permissões IAM estejam corretas).
|
||||
4. O atacante pode deletar a chave (ou simplesmente nunca fornecê-la) para tornar os dados irrecuperáveis.
|
||||
|
||||
Example (conceptual) CLI usage:
|
||||
```bash
|
||||
# Upload/overwrite an object encrypted with attacker-provided SSE-C key
|
||||
aws s3 cp ./file s3://<BUCKET>/<KEY> \
|
||||
--sse-c AES256 \
|
||||
--sse-c-key <BASE64_32_BYTES>
|
||||
|
||||
# Download requires providing the same key again
|
||||
aws s3 cp s3://<BUCKET>/<KEY> ./file \
|
||||
--sse-c AES256 \
|
||||
--sse-c-key <BASE64_32_BYTES>
|
||||
```
|
||||
##### Aumentando a pressão: abuso do "temporizador" de ciclo de vida
|
||||
|
||||
Para remover opções de recuperação (como versões antigas), atacantes podem combinar regravações SSE-C com **regras de ciclo de vida** que expiram objetos e/ou excluem versões não atuais após um curto período:
|
||||
|
||||
- `s3:PutLifecycleConfiguration` no bucket permite que um atacante agende exclusões sem emitir operações de delete explícitas para cada objeto/versão.
|
||||
- Isso é especialmente impactante quando **versioning está habilitado**, porque pode remover a "versão anterior boa" que, de outra forma, permitiria a recuperação.
|
||||
|
||||
##### Detecção e Mitigações
|
||||
|
||||
- Prefira **SSE-KMS** (ou SSE-S3) em vez de SSE-C, a menos que você tenha uma forte razão operacional para permitir SSE-C.
|
||||
- Monitore/alerte sobre requisições `PutObject` usando cabeçalhos SSE-C (CloudTrail data events para S3).
|
||||
- Monitore/alerte sobre `PutBucketLifecycleConfiguration` inesperados (mudanças de ciclo de vida).
|
||||
- Monitore/alerte sobre picos súbitos em atividade de sobrescrita (mesmas chaves atualizadas rapidamente) e exclusões de delete-marker/versões.
|
||||
- Restrinja permissões de alto risco: limite `s3:PutObject` aos prefixos necessários; restrinja fortemente `s3:PutLifecycleConfiguration` e `s3:PutBucketVersioning`; considere exigir MFA para ações administrativas sensíveis (quando aplicável) e use funções administrativas separadas com aprovações.
|
||||
- Postura de recuperação: use **versioning**, **backups** e cópias imutáveis/offline (S3 replication para conta protegida, backup vaults, etc.); proteja versões não atuais contra exclusão agressiva e proteja mudanças de ciclo de vida com SCPs / guardrails.
|
||||
|
||||
### `s3:RestoreObject`
|
||||
|
||||
Um atacante com a permissão s3:RestoreObject pode reativar objetos arquivados no Glacier ou Deep Archive, tornando-os temporariamente acessíveis. Isso permite a recuperação e exfiltration de dados historicamente arquivados (backups, snapshots, logs, certifications, old secrets) que normalmente estariam fora de alcance. Se o atacante combinar essa permissão com permissões de leitura (por exemplo, s3:GetObject), ele pode obter cópias completas de dados sensíveis.
|
||||
Um atacante com a permissão s3:RestoreObject pode reativar objetos arquivados no Glacier ou Deep Archive, tornando-os temporariamente acessíveis. Isso permite recuperação e exfiltração de dados historicamente arquivados (backups, snapshots, logs, certificações, segredos antigos) que normalmente estariam fora de alcance. Se o atacante combinar essa permissão com permissões de leitura (por exemplo, s3:GetObject), ele pode obter cópias completas de dados sensíveis.
|
||||
```bash
|
||||
aws s3api restore-object \
|
||||
--bucket <BUCKET_NAME> \
|
||||
@@ -47,7 +86,7 @@ aws s3api restore-object \
|
||||
```
|
||||
### `s3:Delete*`
|
||||
|
||||
Um atacante com a permissão s3:Delete* pode deletar objetos, versões e buckets inteiros, interromper backups e causar perda de dados imediata e irreversível, destruição de evidências e comprometimento de artefatos de backup ou de recuperação.
|
||||
Um atacante com a permissão s3:Delete* pode excluir objetos, versões e buckets inteiros, interromper backups e causar perda de dados imediata e irreversível, destruição de evidências e comprometimento de artefatos de backup ou recuperação.
|
||||
```bash
|
||||
# Delete an object from a bucket
|
||||
aws s3api delete-object \
|
||||
@@ -64,6 +103,6 @@ aws s3api delete-object \
|
||||
aws s3api delete-bucket \
|
||||
--bucket <BUCKET_NAME>
|
||||
```
|
||||
**Para mais informações** [**consulte a pesquisa original**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**
|
||||
**Para mais informações** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user