From 11aa69fcaa5b849f07d31f13181955e43291951d Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 12 Feb 2026 12:47:04 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-services/aws-iam-enum --- .../aws-ses-post-exploitation/README.md | 24 ++++-- .../aws-workmail-post-exploitation/README.md | 76 ++++++++++++++++ .../aws-security/aws-services/aws-iam-enum.md | 86 +++++++++++-------- 3 files changed, 143 insertions(+), 43 deletions(-) create mode 100644 src/pentesting-cloud/aws-security/aws-post-exploitation/aws-workmail-post-exploitation/README.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md index 53be8402d..803526b0c 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation/README.md @@ -4,7 +4,7 @@ ## SES -Para mais informações, veja: +Para mais informações, consulte: {{#ref}} ../../aws-services/aws-ses-enum.md @@ -25,11 +25,11 @@ Enviar um e-mail. ```bash aws ses send-raw-email --raw-message file://message.json ``` -Ainda por testar. +Ainda para testar. ### `ses:SendTemplatedEmail` -Enviar um email com base num modelo. +Enviar um e-mail com base num modelo. ```bash aws ses send-templated-email --source --destination --template ``` @@ -41,7 +41,7 @@ Enviar um e-mail para múltiplos destinatários ```bash aws ses send-bulk-templated-email --source --template ``` -Ainda por testar. +Ainda para testar. ### `ses:SendBulkEmail` @@ -51,7 +51,7 @@ aws sesv2 send-bulk-email --default-content --bulk-email-entries ``` ### `ses:SendBounce` -Enviar um **bounce email** sobre um email recebido (indicando que o email não pôde ser recebido). Isto só pode ser feito **até 24h após o recebimento** do email. +Enviar um **e-mail de bounce** sobre um e-mail recebido (indicando que o e-mail não pôde ser entregue). Isso só pode ser feito **até 24h após o recebimento** do e-mail. ```bash aws ses send-bounce --original-message-id --bounce-sender --bounced-recipient-info-list ``` @@ -59,11 +59,23 @@ Ainda por testar. ### `ses:SendCustomVerificationEmail` -Isto irá enviar um email de verificação personalizado. Também poderá precisar de permissões para criar o modelo de email. +Isso enviará um e-mail de verificação personalizado. Você pode também precisar de permissões para criar o template do e-mail. ```bash aws ses send-custom-verification-email --email-address --template-name aws sesv2 send-custom-verification-email --email-address --template-name ``` Ainda por testar. +## WorkMail pivot to bypass SES sandbox + +Quando `ses:GetAccount` indicar que a conta ainda está no SES sandbox e `ses:ListIdentities` não retornar remetentes verificados, os atacantes podem **pivot to WorkMail** para enviar imediatamente (sem sandbox e com cotas padrão mais altas) criando organizações, verificando domínios e registrando caixas de correio. + +{{#ref}} +../aws-workmail-post-exploitation/README.md +{{#endref}} + +## Referências + +- [Threat Actors Using AWS WorkMail in Phishing Campaigns](https://www.rapid7.com/blog/post/dr-threat-actors-aws-workmail-phishing-campaigns) + {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-workmail-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-workmail-post-exploitation/README.md new file mode 100644 index 000000000..0207cadf9 --- /dev/null +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-workmail-post-exploitation/README.md @@ -0,0 +1,76 @@ +# AWS - WorkMail Post Exploitation + +{{#include ../../../../banners/hacktricks-training.md}} + +## Abusando do WorkMail para contornar o SES sandbox + +Mesmo que o SES esteja preso no **sandbox** (apenas recipients verificados, ~200 msgs/24h, 1 msg/s), o WorkMail não possui restrição equivalente. Um atacante com long-term keys pode criar infraestrutura de e-mail descartável e começar a enviar imediatamente: + +1. **Create a WorkMail org (region-scoped)** +```bash +aws workmail create-organization --region us-east-1 --alias temp-mail --directory-id +``` +2. **Verify attacker-controlled domains** (WorkMail invokes SES APIs as `workmail.amazonaws.com`): +```bash +aws ses verify-domain-identity --domain attacker-domain.com +aws ses verify-domain-dkim --domain attacker-domain.com +``` +3. **Provision mailbox users** and register them: +```bash +aws workmail create-user --organization-id --name marketing --display-name "Marketing" +aws workmail register-to-work-mail --organization-id --entity-id --email marketing@attacker-domain.com +``` + +Notas: +- Cap padrão de **recipient** documentado pela AWS: **100,000 external recipients/day per org** (agregado entre usuários). +- A atividade de verificação de domínio aparecerá no CloudTrail sob SES mas com **`invokedBy`: `workmail..amazonaws.com`**, então eventos de verificação do SES podem pertencer à configuração do WorkMail em vez de campanhas SES. +- WorkMail mailbox users become **application-layer persistence** independent from IAM users. + +## Sending paths & telemetry gaps + +### Cliente web (WorkMail UI) +- Envia como eventos **`ses:SendRawEmail`** no CloudTrail. +- `userIdentity.type` = `AWSService`, `invokedBy/sourceIPAddress/userAgent` = `workmail..amazonaws.com`, então o **IP real do cliente fica oculto**. +- Os `requestParameters` ainda leak o remetente (`source`, `fromArn`, `sourceArn`, configuration set) para correlacionar com domínios/caixas de correio recém verificados. + +### SMTP (mais furtivo) +- Endpoint: `smtp.mail..awsapps.com:465` (SMTP over SSL) com a mailbox password. +- **No CloudTrail data events** are generated for SMTP delivery, even when SES data events are enabled. +- Pontos ideais de detecção são **provisionamento de org/domínio/usuário** e SES identity ARNs referenciados em eventos `SendRawEmail` enviados pela web subsequentes. + +
+Exemplo de envio SMTP via WorkMail +```python +import smtplib +from email.message import EmailMessage + +SMTP_SERVER = "smtp.mail.us-east-1.awsapps.com" +SMTP_PORT = 465 +EMAIL_ADDRESS = "marketing@attacker-domain.com" +EMAIL_PASSWORD = "SuperSecretPassword!" + +target = "victim@example.com" # can be unverified/external +msg = EmailMessage() +msg["Subject"] = "WorkMail SMTP" +msg["From"] = EMAIL_ADDRESS +msg["To"] = target +msg.set_content("Delivered via WorkMail SMTP") + +with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as smtp: +smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD) +smtp.send_message(msg) +``` +
+ +## Considerações de detecção + +- Se o WorkMail for desnecessário, bloqueie-o via **SCPs** (`workmail:*` deny) no nível da organização. +- Alertar sobre provisionamento: `workmail:CreateOrganization`, `workmail:CreateUser`, `workmail:RegisterToWorkMail` e verificações do SES com `invokedBy=workmail.amazonaws.com` (`ses:VerifyDomainIdentity`, `ses:VerifyDomainDkim`). +- Fique atento a eventos anômalos **`ses:SendRawEmail`** onde os ARNs de identidade referenciam domínios novos e o IP/UA de origem é igual a `workmail..amazonaws.com`. + +## References + +- [Threat Actors Using AWS WorkMail in Phishing Campaigns](https://www.rapid7.com/blog/post/dr-threat-actors-aws-workmail-phishing-campaigns) +- [AWS WorkMail limits](https://docs.aws.amazon.com/workmail/latest/adminguide/limits.html) + +{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md index 9f8ca5076..cccf66183 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md @@ -1,4 +1,4 @@ -# AWS - Enumeração de IAM, Identity Center & SSO +# AWS - IAM, Identity Center & SSO Enum {{#include ../../../banners/hacktricks-training.md}} @@ -10,11 +10,11 @@ Você pode encontrar uma **descrição do IAM** em: ../aws-basic-information/ {{#endref}} -### Enumeração +### Enumeration -Permissões principais necessárias: +Principais permissões necessárias: -- `iam:ListPolicies`, `iam:GetPolicy` e `iam:GetPolicyVersion` +- `iam:ListPolicies`, `iam:GetPolicy` and `iam:GetPolicyVersion` - `iam:ListRoles` - `iam:ListUsers` - `iam:ListGroups` @@ -22,9 +22,9 @@ Permissões principais necessárias: - `iam:ListAttachedUserPolicies` - `iam:ListAttachedRolePolicies` - `iam:ListAttachedGroupPolicies` -- `iam:ListUserPolicies` e `iam:GetUserPolicy` -- `iam:ListGroupPolicies` e `iam:GetGroupPolicy` -- `iam:ListRolePolicies` e `iam:GetRolePolicy` +- `iam:ListUserPolicies` and `iam:GetUserPolicy` +- `iam:ListGroupPolicies` and `iam:GetGroupPolicy` +- `iam:ListRolePolicies` and `iam:GetRolePolicy` ```bash # All IAMs ## Retrieves information about all IAM users, groups, roles, and policies @@ -88,37 +88,49 @@ aws iam get-account-password-policy aws iam list-mfa-devices aws iam list-virtual-mfa-devices ``` +### Confirmação furtiva de permissões via falhas intencionais + +Quando `List*` ou as APIs do simulador estão bloqueadas, você pode **confirmar permissões de mutação sem criar recursos duráveis** forçando erros de validação previsíveis. AWS ainda avalia o IAM antes de retornar esses erros, então ver o erro comprova que o chamador tem permissão para executar a ação: +```bash +# Confirm iam:CreateUser without creating a new principal (fails only after authz) +aws iam create-user --user-name # -> EntityAlreadyExistsException + +# Confirm iam:CreateLoginProfile while learning password policy requirements +aws iam create-login-profile --user-name --password lower --password-reset-required # -> PasswordPolicyViolationException +``` +Essas tentativas ainda geram eventos do CloudTrail (com `errorCode` definido) mas evitam deixar novos artefatos do IAM, tornando-as úteis para **validação de permissões com baixo ruído** durante recon interativo. + ### Força Bruta de Permissões -Se você estiver interessado em suas próprias permissões, mas não tiver acesso para consultar o IAM, você sempre pode forçá-las. +Se você está interessado nas suas próprias permissões mas não tem acesso para consultar o IAM, você sempre pode fazer brute-force nelas. #### bf-aws-permissions -A ferramenta [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) é apenas um script bash que executará, usando o perfil indicado, todas as ações **`list*`, `describe*`, `get*`** que puder encontrar usando as mensagens de ajuda do cli `aws` e **retornará as execuções bem-sucedidas**. +A ferramenta [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) é apenas um script bash que irá executar, usando o perfil indicado, todas as ações **`list*`, `describe*`, `get*`** que conseguir encontrar nas mensagens de ajuda do `aws` cli e **retornar as execuções bem-sucedidas**. ```bash # Bruteforce permissions bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt ``` #### bf-aws-perms-simulate -A ferramenta [**bf-aws-perms-simulate**](https://github.com/carlospolop/bf-aws-perms-simulate) pode encontrar suas permissões atuais (ou as de outros principais) se você tiver a permissão **`iam:SimulatePrincipalPolicy`** +A ferramenta [**bf-aws-perms-simulate**](https://github.com/carlospolop/bf-aws-perms-simulate) pode descobrir suas permissões atuais (ou as de outros principals) se você tiver a permissão **`iam:SimulatePrincipalPolicy`** ```bash # Ask for permissions python3 aws_permissions_checker.py --profile [--arn ] ``` #### Perms2ManagedPolicies -Se você encontrou **algumas permissões que seu usuário possui**, e você acha que elas estão sendo concedidas por um **papel gerenciado da AWS** (e não por um personalizado). Você pode usar a ferramenta [**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies) para verificar todos os **papéis gerenciados da AWS que concedem as permissões que você descobriu que possui**. +Se você encontrou **algumas permissões que seu usuário possui**, e acha que elas estão sendo concedidas por uma **role gerenciada da AWS** (e não por uma personalizada). Você pode usar a ferramenta [**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies) para verificar todos os **roles gerenciados da AWS que concedem as permissões que você descobriu possuir**. ```bash # Run example with my profile python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt ``` > [!WARNING] -> É possível "saber" se as permissões que você tem são concedidas por um papel gerenciado da AWS se você ver que **você tem permissões sobre serviços que não são utilizados**, por exemplo. +> É possível "saber" se as permissões que você tem foram concedidas por uma função gerenciada pela AWS se você vir que, por exemplo, **você tem permissões sobre serviços que não são usados**. #### Cloudtrail2IAM -[**CloudTrail2IAM**](https://github.com/carlospolop/Cloudtrail2IAM) é uma ferramenta Python que analisa **logs do AWS CloudTrail para extrair e resumir ações** realizadas por todos ou apenas por um usuário ou papel específico. A ferramenta irá **analisar todos os logs do cloudtrail do bucket indicado**. +[**CloudTrail2IAM**](https://github.com/carlospolop/Cloudtrail2IAM) é uma ferramenta Python que analisa **logs do AWS CloudTrail para extrair e resumir ações** realizadas por todos ou apenas por um usuário ou função específica. A ferramenta irá **processar cada log do CloudTrail do bucket indicado**. ```bash git clone https://github.com/carlospolop/Cloudtrail2IAM cd Cloudtrail2IAM @@ -126,16 +138,16 @@ pip install -r requirements.txt python3 cloudtrail2IAM.py --prefix PREFIX --bucket_name BUCKET_NAME --profile PROFILE [--filter-name FILTER_NAME] [--threads THREADS] ``` > [!WARNING] -> Se você encontrar .tfstate (arquivos de estado do Terraform) ou arquivos do CloudFormation (geralmente são arquivos yaml localizados dentro de um bucket com o prefixo cf-templates), você também pode lê-los para encontrar a configuração do aws e descobrir quais permissões foram atribuídas a quem. +> Se você encontrar .tfstate (Terraform state files) ou arquivos CloudFormation (estes geralmente são arquivos yaml localizados dentro de um bucket com o prefixo cf-templates), você também pode lê-los para encontrar a configuração do aws e descobrir quais permissões foram atribuídas a quem. #### enumerate-iam -Para usar a ferramenta [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam), você primeiro precisa baixar todos os endpoints da API AWS, a partir dos quais o script **`generate_bruteforce_tests.py`** obterá todos os **"list\_", "describe\_" e "get\_" endpoints.** E finalmente, ele tentará **acessá-los** com as credenciais fornecidas e **indicar se funcionou**. +To use the tool [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam) you first need to download all the API AWS endpoints, from those the script **`generate_bruteforce_tests.py`** will get all the **"list\_", "describe\_", and "get\_" endpoints.** And finally, it will try to **access them** with the given credentials and **indicate if it worked**. -(Com base na minha experiência, a **ferramenta trava em algum ponto**, [**veja esta correção**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c) para tentar corrigir isso). +(Na minha experiência a **ferramenta trava em algum ponto**, [**confira esta correção**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c) para tentar corrigir isso). > [!WARNING] -> Com base na minha experiência, esta ferramenta é como a anterior, mas funciona pior e verifica menos permissões. +> Na minha experiência esta ferramenta é parecida com a anterior, mas funciona pior e verifica menos permissões ```bash # Install tool git clone git@github.com:andresriancho/enumerate-iam.git @@ -154,7 +166,7 @@ python3 enumerate-iam.py --access-key ACCESS_KEY --secret-key SECRET_KEY [--sess ``` #### weirdAAL -Você também pode usar a ferramenta [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki). Esta ferramenta verificará **várias operações comuns em vários serviços comuns** (verificará algumas permissões de enumeração e também algumas permissões de privesc). Mas ela só verificará os testes codificados (a única maneira de verificar mais coisas é codificando mais testes). +Você também pode usar a ferramenta [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki). Esta ferramenta verificará **várias operações comuns em vários serviços comuns** (verificará algumas enumeration permissions e também algumas privesc permissions). Mas ela apenas executa as verificações codificadas (a única forma de testar mais coisas é implementar mais testes). ```bash # Install git clone https://github.com/carnal0wnage/weirdAAL.git @@ -178,7 +190,7 @@ python3 weirdAAL.py -m recon_all -t MyTarget # Check all permissions # [+] elbv2 Actions allowed are [+] # ['DescribeLoadBalancers', 'DescribeAccountLimits', 'DescribeTargetGroups'] ``` -#### Ferramentas de Hardening para BF permissões +#### Ferramentas de Hardening para permissões BF {{#tabs }} {{#tab name="CloudSploit" }} @@ -208,7 +220,7 @@ steampipe dashboard #### \ -Nenhuma das ferramentas anteriores é capaz de verificar todas as permissões, então se você conhece uma ferramenta melhor, envie um PR! +Nenhuma das ferramentas anteriores é capaz de verificar quase todas as permissões; se você conhece uma ferramenta melhor, envie um PR! ### Acesso Não Autenticado @@ -216,15 +228,15 @@ Nenhuma das ferramentas anteriores é capaz de verificar todas as permissões, e ../aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum/README.md {{#endref}} -### Escalação de Privilégios +### Escalada de Privilégios -Na página seguinte, você pode verificar como **abusar das permissões do IAM para escalar privilégios**: +Na página a seguir você pode ver como **abusar das permissões do IAM para escalar privilégios**: {{#ref}} ../aws-privilege-escalation/aws-iam-privesc/README.md {{#endref}} -### Pós Exploração do IAM +### Pós-Exploração do IAM {{#ref}} ../aws-post-exploitation/aws-iam-post-exploitation/README.md @@ -236,15 +248,15 @@ Na página seguinte, você pode verificar como **abusar das permissões do IAM p ../aws-persistence/aws-iam-persistence/README.md {{#endref}} -## Centro de Identidade do IAM +## IAM Identity Center -Você pode encontrar uma **descrição do Centro de Identidade do IAM** em: +Você pode encontrar uma **descrição do IAM Identity Center** em: {{#ref}} ../aws-basic-information/ {{#endref}} -### Conectar via SSO com CLI +### Conectar via SSO com a CLI ```bash # Connect with sso via CLI aws configure sso aws configure sso @@ -260,13 +272,13 @@ sso_region = us-east-1 Os principais elementos do Identity Center são: - Usuários e grupos -- Conjuntos de Permissões: Têm políticas anexadas +- Permission Sets: possuem políticas anexadas - Contas AWS -Então, relacionamentos são criados para que usuários/grupos tenham Conjuntos de Permissões sobre a Conta AWS. +Em seguida, são criados relacionamentos para que usuários/grupos tenham Permission Sets em Contas AWS. > [!NOTE] -> Note que existem 3 maneiras de anexar políticas a um Conjunto de Permissões. Anexando políticas gerenciadas pela AWS, políticas gerenciadas pelo cliente (essas políticas precisam ser criadas em todas as contas que o Conjunto de Permissões está afetando) e políticas inline (definidas lá). +> Observe que existem 3 maneiras de anexar políticas a um Permission Set: políticas gerenciadas pela AWS, políticas gerenciadas pelo cliente (essas políticas precisam ser criadas em todas as contas que o Permission Set afeta) e políticas inline (definidas no próprio Permission Set). ```bash # Check if IAM Identity Center is used aws sso-admin list-instances @@ -327,9 +339,9 @@ aws sso login --profile my-sso-profile # Use dependent-profile aws s3 ls --profile dependent-profile ``` -Quando um **perfil do SSO é usado** para acessar algumas informações, as credenciais são **armazenadas em cache** em um arquivo dentro da pasta **`$HOME/.aws/sso/cache`**. Portanto, elas podem ser **lidas e usadas a partir daí**. +Quando um **perfil do SSO é usado** para acessar alguma informação, as credenciais são **armazenadas em cache** em um arquivo dentro da pasta **`$HOME/.aws/sso/cache`**. Portanto, elas podem ser **lidas e usadas a partir daí**. -Além disso, **mais credenciais** podem ser armazenadas na pasta **`$HOME/.aws/cli/cache`**. Este diretório de cache é usado principalmente quando você está **trabalhando com perfis do AWS CLI** que usam credenciais de usuário IAM ou **assumem** funções através do IAM (sem SSO). Exemplo de configuração: +Além disso, **mais credenciais** podem ser armazenadas na pasta **`$HOME/.aws/cli/cache`**. Esse diretório de cache é usado principalmente quando você está **trabalhando com perfis do AWS CLI** que usam credenciais de usuário IAM ou **assumem funções** através do IAM (sem SSO). Exemplo de configuração: ```ini [profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRole @@ -343,13 +355,13 @@ external_id = 123456 ../aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum/README.md {{#endref}} -### Escalação de Privilégios +### Escalonamento de Privilégios {{#ref}} ../aws-privilege-escalation/aws-sso-and-identitystore-privesc/README.md {{#endref}} -### Pós Exploração +### Pós-Exploração {{#ref}} ../aws-post-exploitation/aws-sso-and-identitystore-post-exploitation/README.md @@ -363,10 +375,10 @@ external_id = 123456 aws identitystore create-user --identity-store-id --user-name privesc --display-name privesc --emails Value=sdkabflvwsljyclpma@tmmbt.net,Type=Work,Primary=True --name Formatted=privesc,FamilyName=privesc,GivenName=privesc ## After creating it try to login in the console using the selected username, you will receive an email with the code and then you will be able to select a password ``` -- Crie um grupo e atribua permissões a ele e defina um usuário controlado nele -- Dê permissões extras a um usuário ou grupo controlado -- Por padrão, apenas usuários com permissões da Conta de Gerenciamento poderão acessar e controlar o IAM Identity Center. +- Criar um grupo, atribuir permissões e configurar um usuário controlado nele +- Conceder permissões extras a um usuário controlado ou a um grupo +- Por padrão, apenas usuários com permissões da Management Account poderão acessar e controlar o IAM Identity Center. -No entanto, é possível, via Delegate Administrator, permitir que usuários de uma conta diferente o gerenciem. Eles não terão exatamente as mesmas permissões, mas poderão realizar [**atividades de gerenciamento**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html). +No entanto, é possível, via Delegate Administrator, permitir que usuários de uma conta diferente o gerenciem. Eles não terão exatamente as mesmas permissões, mas poderão executar [**management activities**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html). {{#include ../../../banners/hacktricks-training.md}}