From f4b8674e742228bf2b8d8ebf0eff0684ca2a4e4f Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 14 Feb 2026 19:50:28 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation --- .../aws-s3-post-exploitation/README.md | 65 +++++++++++++++---- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md index 1b94f6399..a8ecdc5fc 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation/README.md @@ -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:/// \ +--sse-c AES256 \ +--sse-c-key + +# Download requires providing the same key again +aws s3 cp s3:/// ./file \ +--sse-c AES256 \ +--sse-c-key +``` +##### 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 \ @@ -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 ``` -**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}}