Descubra como encontrar buckets ocultos na nuvem da Amazon S3! 👀🔍
Tags: aws, security, vulnerabilities, gobuster
Published: 2023-10-28 21:40:05

Hoje vamos falar sobre uma parada que é pura emoção: encontrar diretórios ocultos nos famosos S3 buckets da Amazon.

Mas, antes de irmos fundo nesse assunto, um aviso importante: aqui é tudo na base da educação, ok? Se você fizer lambança e der ruim, a responsa não é minha. Sempre peça permissão antes de sair fazendo varredura, força bruta ou exploração em sistemas alheios. Beleza? 😉


### Amazon S3
O Amazon S3 é um serviço de armazenamento de objetos altamente escalável e durável oferecido pela Amazon Web Services (AWS). Ele foi projetado para armazenar, gerenciar e recuperar grandes quantidades de dados de forma confiável e segura na nuvem. O S3 é amplamente utilizado por empresas de todos os tamanhos para armazenar uma variedade de tipos de dados, como arquivos, imagens, vídeos e backups, tornando-o uma escolha popular para soluções de armazenamento na nuvem. Sua escalabilidade, alta disponibilidade e segurança o tornam uma ferramenta essencial para diversas aplicações, desde hospedagem de sites até análise de dados e backup de informações críticas.


### Configurações e riscos de segurança S3

O Amazon S3 é uma plataforma incrivelmente versátil, atendendo a uma ampla gama de necessidades, desde o armazenamento de backups e dados de websites até a execução de análises de Big Data e o gerenciamento de arquivos. No entanto, ao lidar com um volume tão vasto e diversificado de dados em um único local, surgem preocupações legítimas sobre segurança.

Então, quais são essas preocupações de segurança e quais configurações de segurança um administrador pode implementar para proteger adequadamente um "bucket" e seus arquivos no Amazon S3?

Em primeiro lugar, é fundamental entender que o Amazon S3 é considerado uma "plataforma publicamente acessível". Isso significa que, com a URL e as permissões apropriadas, qualquer "bucket" pode ser acessado de qualquer lugar por meio de solicitações HTTP, semelhante ao que um navegador faz para acessar um site comum.

A acessibilidade de um "bucket" por meio de sua URL depende das medidas de segurança habilitadas ou não. No entanto, é importante destacar que o Amazon S3 não é um recurso escondido, disponível apenas após passar por várias camadas de autenticação. Pelo contrário, é um recurso que pode ser acessado por meio dos endpoints da AWS de qualquer lugar na web, o que representa o principal risco de segurança. Qualquer "bucket" S3 e seus dados associados têm o potencial de serem acessíveis.

No que diz respeito à segurança do Amazon S3, as verificações implementadas pelo serviço para autorizar o acesso a um recurso S3, seja um "bucket" ou um objeto, são robustas. O S3 avalia as permissões em nível de usuário, por meio de políticas de "bucket", listas de controle de acesso (ACLs) de "bucket" e ACLs de objeto. Essas camadas de segurança são essenciais para garantir que apenas usuários autorizados possam acessar e manipular os dados armazenados no S3.

### Como encontrar buckets abertos da Amazon S3

Nos últimos anos, presenciamos incidentes alarmantes de vazamentos de dados em grandes empresas devido à exposição de "buckets" no Amazon S3. Se você quiser conferir uma lista dos vazamentos mais notórios, pode encontrá-la [aqui](https://github.com/nagwww/s3-leaks). Através dessas falhas de segurança, uma ampla gama de informações confidenciais foi, inadvertidamente, tornada acessível ao público. Estamos falando de números de Seguro Social, fotos pessoais, registros de vendas, nomes de usuário e senhas, históricos médicos e relatórios de crédito, entre outras coisas.

### Ferramentas de pesquisa de bucket S3

Se você está interessado em explorar "buckets" disponíveis publicamente no Amazon S3, é necessário utilizar uma ferramenta que execute testes para verificar a existência desses "buckets". Quando um nome de "bucket" não existe, o serviço retornará um código de erro chamado "NoSuchBucket". Felizmente, existem várias ferramentas disponíveis para essa finalidade.

Inicialmente, algumas das primeiras ferramentas de busca de "buckets" no S3 incluíam opções como o Bucket Lazy S3, bucket_finder, AWS Cred Scanner, sandcastle, Mass3, Dumpster Diver, S3 Bucket Finder, gobuster e S3Scanner. Essas ferramentas desempenharam um papel importante ao verificar palavras-chave nos nomes de "buckets" publicamente acessíveis, embora apresentassem algumas limitações. Os resultados muitas vezes incluíam "buckets" irrelevantes e exibiam apenas os primeiros mil arquivos de seu conteúdo.


### O que é Gobuster

Desenvolvido na linguagem Go, o Gobuster é um scanner de alta performance que se revela uma ferramenta valiosa para localizar diretórios ocultos, URLs, subdomínios e buckets S3.

A pergunta que frequentemente surge é: "E quanto ao Ffuf?" Embora o Ffuf seja um web fuzzer notável, o Gobuster emerge como uma alternativa ainda mais veloz e versátil. Além disso, o Gobuster oferece suporte a extensões que ampliam suas funcionalidades, o que é um diferencial. O programa também é capaz de dimensionar suas operações com o uso de múltiplas threads e realizar varreduras paralelas para agilizar os resultados.

Agora, quanto à instalação do Gobuster, o processo é bastante simples. Se você estiver usando o Kali Linux ou o Parrot OS, o Gobuster já estará pré-instalado para você.

Se, por outro lado, você utiliza o Ubuntu ou um sistema baseado no Debian, é possível instalar o Gobuster com facilidade utilizando o apt:

Linux
```sh
apt install gobuster
```

MacOs
```sh
brew install gobuster
```

Após concluir a instalação, será necessário contar com uma lista de palavras. Essa lista pode englobar senhas, nomes de usuário, subdomínios e assim por diante. Existem várias fontes onde você pode obter listas de palavras úteis.

Minha recomendação é utilizar o Seclists. O Seclists é um repositório abrangente de diversas listas usadas em avaliações de segurança. Isso inclui coleções de nomes de usuário, senhas, URLs, e muito mais. Se você estiver utilizando o Kali Linux, pode encontrar o Seclists no diretório /usr/share/wordlists.

Para experimentar o Gobuster em tempo real, você tem a opção de usar seu próprio site como alvo ou, de forma prática, empregar um aplicativo da web chamado Damn Vulnerable Web Application (DVWA). O DVWA é uma aplicação da web propositadamente mal configurada, criada para ser vulnerável de forma intencional. É uma ferramenta frequentemente utilizada por profissionais de testes de penetração para praticar e aprimorar suas habilidades em ataques a aplicações web.


### Módulo DNS

O DNS, que significa Sistema de Nomes de Domínio, é um pilar da Internet que converte nomes de domínio fáceis de entender para endereços IP, que são usados por computadores para identificar recursos na rede. Ele age como uma espécie de "catálogo telefônico" da Internet, permitindo que navegadores e aplicativos localizem servidores e sites correspondentes aos nomes de domínio inseridos pelos usuários. O DNS desempenha um papel crucial na facilitação da navegação na web e na comunicação online.

O modo DNS é empregado para descobrir subdomínios ocultos dentro de um domínio-alvo. Por exemplo, se você possui um domínio chamado meudomínio.com, é possível utilizar o Gobuster para encontrar subdomínios como admin.meudominio.com, suporte.meudominio.com e assim por diante.

```sh
┌──(higordiego㉿host)-[~]
└─$ gobuster dns -h
Uses DNS subdomain enumeration mode

Usage:
  gobuster dns [flags]

Flags:
  -d, --domain string      The target domain
  -h, --help               help for dns
      --no-fqdn            Do not automatically add a trailing dot to the domain, so the resolver uses the DNS search domain
  -r, --resolver string    Use custom DNS server (format server.com or server.com:port)
  -c, --show-cname         Show CNAME records (cannot be used with '-i' option)
  -i, --show-ips           Show IP addresses
      --timeout duration   DNS resolver timeout (default 1s)
      --wildcard           Force continued operation when wildcard found

Global Flags:
      --debug                 Enable debug output
      --delay duration        Time each thread waits between requests (e.g. 1500ms)
      --no-color              Disable color output
      --no-error              Don't display errors
  -z, --no-progress           Don't display progress
  -o, --output string         Output file to write results to (defaults to stdout)
  -p, --pattern string        File containing replacement patterns
  -q, --quiet                 Don't print the banner and other noise
  -t, --threads int           Number of concurrent threads (default 10)
  -v, --verbose               Verbose output (errors)
  -w, --wordlist string       Path to the wordlist. Set to - to use STDIN.
      --wordlist-offset int   Resume from a given position in the wordlist (defaults to 0)
                                                                                             
```

Iremos executar uma enumeração de dns, você pode executar com o seguinte comando:

```sh
┌──(higordiego㉿host)-[~]
└─$ gobuster dns -d test.io -w /usr/share/wordlists/dirb/common.txt 

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Domain:     test.io
[+] Threads:    10
[+] Timeout:    1s
[+] Wordlist:   /usr/share/wordlists/dirb/common.txt
===============================================================
Starting gobuster in DNS enumeration mode
===============================================================
Found: api.test.io

Progress: 4614 / 4615 (99.98%)
===============================================================
Finished
===============================================================


```

### Módulo AWS S3

O Amazon S3 é amplamente adotado por um grande número de empresas para distribuir conteúdo, abrangendo desde material público, como imagens de sites, até arquivos privados e confidenciais.

Agora, vamos explorar o comando de ajuda para identificar os diversos parâmetros oferecidos pelo Gobuster em seu modo S3.


```sh

┌──(higordiego㉿host)-[~]
└─$ gobuster s3 -h                                                                                           
Uses aws bucket enumeration mode

Usage:
  gobuster s3 [flags]

Flags:
      --client-cert-p12 string            a p12 file to use for options TLS client certificates
      --client-cert-p12-password string   the password to the p12 file
      --client-cert-pem string            public key in PEM format for optional TLS client certificates
      --client-cert-pem-key string        private key in PEM format for optional TLS client certificates (this key needs to have no password)
  -h, --help                              help for s3
  -m, --maxfiles int                      max files to list when listing buckets (only shown in verbose mode) (default 5)
  -k, --no-tls-validation                 Skip TLS certificate verification
      --proxy string                      Proxy to use for requests [http(s)://host:port] or [socks5://host:port]
      --random-agent                      Use a random User-Agent string
      --retry                             Should retry on request timeout
      --retry-attempts int                Times to retry on request timeout (default 3)
      --timeout duration                  HTTP Timeout (default 10s)
  -a, --useragent string                  Set the User-Agent string (default "gobuster/3.6")

Global Flags:
      --debug                 Enable debug output
      --delay duration        Time each thread waits between requests (e.g. 1500ms)
      --no-color              Disable color output
      --no-error              Don't display errors
  -z, --no-progress           Don't display progress
  -o, --output string         Output file to write results to (defaults to stdout)
  -p, --pattern string        File containing replacement patterns
  -q, --quiet                 Don't print the banner and other noise
  -t, --threads int           Number of concurrent threads (default 10)
  -v, --verbose               Verbose output (errors)
  -w, --wordlist string       Path to the wordlist. Set to - to use STDIN.
      --wordlist-offset int   Resume from a given position in the wordlist (defaults to 0)

```

Vamos criar um arquivo chamado 'bucket_list.txt' e adicionar uma lista de nomes que podem ser usados como nomes de buckets no Amazon S3. Após a criação do arquivo, seguiremos adiante com a execução do comando a seguir.

```sh
┌──(higordiego㉿host)-[~]
└─$ gobuster s3 -w bucket_list.txt 
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Threads:                 10
[+] Wordlist:                bucket_list.txt
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
[+] Maximum files to list:   5
===============================================================
Starting gobuster in S3 bucket enumeration mode
===============================================================
[ERROR] Get "https://dev.app.test.io.com.br.s3.amazonaws.com/?max-keys=5": tls: failed to verify certificate: x509: certificate is valid for *.s3.amazonaws.com, s3.amazonaws.com, not dev.app.test.io.com.br.s3.amazonaws.com
[ERROR] Get "https://beta.test.io.com.br.s3.amazonaws.com/?max-keys=5": tls: failed to verify certificate: x509: certificate is valid for *.s3.amazonaws.com, s3.amazonaws.com, not beta.test.io.com.br.s3.amazonaws.com
[ERROR] Get "https://echo.test.io.s3.amazonaws.com/?max-keys=5": tls: failed to verify certificate: x509: certificate is valid for *.s3.amazonaws.com, s3.amazonaws.com, not echo.test.io.s3.amazonaws.com
[ERROR] Get "https://test.io.com.br.s3.amazonaws.com/?max-keys=5": tls: failed to verify certificate: x509: certificate is valid for *.s3.amazonaws.com, s3.amazonaws.com, not test.io.com.br.s3.amazonaws.com
[ERROR] Get "https://test.com.br.s3.amazonaws.com/?max-keys=5": tls: failed to verify certificate: x509: certificate is valid for *.s3.amazonaws.com, s3.amazonaws.com, not test.com.br.s3.amazonaws.com
[ERROR] Get "https://app.test.io.com.br.s3.amazonaws.com/?max-keys=5": tls: failed to verify certificate: x509: certificate is valid for *.s3.amazonaws.com, s3.amazonaws.com, not app.test.io.com.br.s3.amazonaws.com

http://prod_test.s3.amazonaws.com/

http://test-images.s3.amazonaws.com/

Progress: 8 / 9 (88.89%)
===============================================================
Finished
===============================================================

```

### Módulo de Diretório

A função de exploração de diretórios no Gobuster desempenha um papel fundamental na busca por arquivos ocultos e caminhos de URL. Isso engloba uma ampla variedade de recursos, abrangendo desde imagens e arquivos de script até praticamente qualquer tipo de arquivo disponível na Internet.


Segue abaixo o comando para buscar o módulo dir no dns achado no passo anterior.

```sh
┌──(higordiego㉿host)-[~/Documentos/artigo-s3]
└─$ gobuster dir -w files_list.txt  -u http://test-images.s3.amazonaws.com/ 
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://test-images.s3.amazonaws.com/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                files_list.txt
[+] Negative Status codes:   404
[+] Exclude Length:          243
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================

/image/b26086426c7e483b2924e775485b3215.jpg (Status: 200) [Size: 629968]
/image/contrato.jpg   (Status: 200) [Size: 2830252]

===============================================================
Finished
===============================================================

```
### Como posso evitar ataque de enumeração com o Gobuster ?

Se você está preocupado com a segurança do Amazon S3 e deseja evitar a enumeração de buckets, aqui estão algumas medidas que você pode adotar:

- Controle de Acesso: Utilize políticas de controle de acesso e permissões estritas no Amazon S3 para garantir que apenas as pessoas autorizadas possam listar, acessar ou modi

- Monitore Atividades: Implemente a monitorização de atividades em seu Amazon S3 para detectar tentativas de acesso não autorizado ou enumeração de buckets.

- Restrinja o Acesso por Referência: Utilize referenciamento condicional para restringir o acesso ao bucket com base no cabeçalho "Referer" da solicitação HTTP.

- Bloqueie Acesso a Diretórios: Configure os diretórios dentro do bucket de forma a não permitir listagem, o que dificulta a enumeração de subdiretórios.

- Proteja Suas Credenciais: Mantenha suas credenciais seguras e evite compartilhá-las de maneira inadequada.

- Realize Auditorias Regulares: Realize auditorias regulares em sua configuração do Amazon S3 para garantir que suas medidas de segurança estejam atualizadas e eficazes.

- Use soluções de proteção contra bots: serviços de proteção contra bots como o Cloudflare impedirão qualquer ataque de força bruta, tornando incrivelmente difícil atacar seu aplicativo web.


# Conclusão

Lembre-se de que a segurança do Amazon S3 é crucial, pois o acesso não autorizado aos seus buckets pode levar a vazamentos de dados e outras vulnerabilidades.
 
Certifique-se de seguir as melhores práticas de segurança da AWS para proteger adequadamente seus recursos no S3.

### Referências

https://medium.com/quiknapp/fuzz-faster-with-ffuf-c18c031fc480
https://medium.com/@janijay007/s3-bucket-misconfiguration-from-basics-to-pawn-6893776d1007
https://takahiro-oda.medium.com/project-perform-s3-bucket-enumeration-using-various-s3-bucket-enumeration-tools-f4f63923b28
https://medium.com/stealthsecurity/finding-hidden-directories-sub-domains-and-s3-buckets-using-gobuster-5c2e3c41ff96