Achei chaves da AWS, como testá-las e avisar os donos?
Published: 2023-08-19 19:12:56

> 💡 DISCLAIMER: é uma boa ideia avisar os donos das credenciais quando vc descobrir quem são. Detalhes como descobrir para chaves da AWS abaixo

Muitas vezes acabamos nos deparando com chaves da AWS perdidas/esquecidas por aí. Se você viu esse post [Kubernetes Exposed: One Yaml away from Disaster](https://blog.aquasec.com/kubernetes-exposed-one-yaml-away-from-disaster) ou esse post abaixo do Twitter, já deve ter percebido que existem várias por aí.

{% embed https://twitter.com/sushicomabacate/status/1691549600203542886?s=20 %}

Normalmente, é simples reconhecer que uma sequencia de caracteres é uma chave da AWS. Primeiro porque há um sufixo nos Access Key Ids. Eles sempre começam com `AKIA` como mostrado abaixo ([fonte](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-prefixes)). Segundo, o Access Key Id possui 20 caracteres alpha-numéricos


![AWS Keys](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sg1ksrlho5ugh4ehg8p3.png)

Esse post lista algumas das técnicas que eu uso para checar se chaves da AWS que achei por aí 👀 ainda estão funcionando, descobrir quem é o dono, os recursos acessíveis, etc.

## 1️⃣ Teste simples

Esse teste é simplesmente para descobrir se a chave ainda funciona e vai bem na linha de uma checagem manual. Você só precisa ter o CLI (Command Line Interface) da AWS instalado ([link](https://aws.amazon.com/pt/cli/)).

```
AWS_ACCESS_KEY_ID=AKIA... AWS_SECRET_ACCESS_KEY=Gy... aws sts get-caller-identity
```

Tendo como resultado

![AWS Cli](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dahl9jr61bq82k1oigw8.png)

Caso você esteja sem sorte, e a chave seja inválida, o resultado será
```
An error occurred (InvalidAccessKeyId)...
An error occurred (SignatureDoesNotMatch)...
```
O que o comando acima faz? Não tem muito mistério. O comando usa as credenciais passadas para chamar a função `get-caller-identity` do Security Token Service (STS).

O Security Token Service (STS) permite que você solicite credenciais temporárias com privilégios limitados para usuários ([link](https://docs.aws.amazon.com/cli/latest/reference/sts/)).

O `get-caller-identity` mostra informações sobre a identidade do IAM usada para autenticar a solicitação ([link](https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html)).

Essa técnica pode dar uma dica de quem é o dono da chave, mas o retorno é apenas o username da conta. Geralmente não é o suficiente pra achar a pessoa.

## 2️⃣ Teste mais completo

Esse é o teste que normalmente faço, utilizando a ferramenta [Pacu](https://github.com/RhinoSecurityLabs/pacu).
Fazer esse teste é menos simples no começo, mas os resultados são bem completos. 

Primeira coisa é executar o Pacu e dar um novo nome a sessão. Aqui estou usando o nome `teste01`.


![pacu1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/81eih2jrzx5dzw9bu62h.png)

Após isso, é exibido o help do pacu.
Em seguida, executo o comando `set_keys` passando as credenciais que quero testar (Sim, dessa imagem pra baixo, estou usando outro terminal 🤣).

![pacu2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lw33jnd0gpj9ewrf3af4.png) 

Para iniciar os testes, eu gosto de executar `run iam__enum_permissions` e depois `run organizations__enum`


![pacu3](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6tnjh2qgxg1zood9zha0.png)

Após isso, você pode digitar um `whoami` trazendo mais informações do usuário:

![pacu4](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnchmk7o0lfhac003r41.png)

E usar o comando `data` que vai trazer mais informações sobre a conta da AWS, incluindo um email de contato para avisar os responsáveis 👍.

![pacu5](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ooe3oj27hcaeqe41m5ys.png)

Se as chaves já tiverem sido revogadas, ou forem inválidas, você deve ver uma mensagem como a seguinte:

![pacu6](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rcf2blv0cndsmlgd60zu.png)



## 3️⃣ Teste deprecado

Anteriormente, eu utilizava a ferramenta [enumerate-iam](https://github.com/andresriancho/enumerate-iam) para enumerar as permissões das credenciais achadas. Porém, muitas vezes a execução desse script travava. Por fim, ao invés de usá-lo, passei a usar o Pacu.

## Conclusão
Diversas grandes empresas provedoras de serviços online, como AWS e o Github, monitoram ativamente chaves vazadas e informam os proprietários. No entanto, nem sempre isso é possível. Muitas vezes as chaves estão expostas, mas é necssário um pouco de exploração da aplicação. Como nesse caso aqui ⬇️
{% embed https://twitter.com/sushicomabacate/status/1691586466349019491?s=20 %}

Ajude a fazer da internet um ambiente mais seguro e caso encontre esse tipo de credenciais por aí 👀. Avise os responsáveis da aplicação e/ou o provider.

> DISCLAIMER: Esse é um conteúdo educativo sobre cibersegurança e sobre os riscos de não conhecê-la 🤣. Se voce tomar qualquer ação baseada nas informações desse post, tome por sua própria conta e risco. Abusar de vulnerabilidades pode trazer graves consequências legais.