
Varra por buckets S3 mal configurados em APIs compatíveis com S3!
Funcionalidades - Uso - Guia Rápido - Instalação - Discutir
INPUT: (1 obrigatório)
-bucket string Nome do bucket a ser verificado.
-bucket-file string Arquivo com nomes de buckets a serem verificados.
-mq Conectar ao RabbitMQ para obter buckets. Requer a chave "mq" no arquivo de configuração. Padrão: "false"
OUTPUT:
-db Salvar resultados em um banco de dados Postgres. Requer a chave "db.uri" no arquivo de configuração. Padrão: "false"
-json Imprimir logs no stdout em formato JSON em vez de legível. Padrão: "false"
OPÇÕES:
-enumerate Enumerar objetos do bucket (pode consumir tempo). Padrão: "false"
-provider string Provedor de armazenamento de objetos: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom requer arquivo de configuração. Padrão: "aws"
-threads int Número de threads para varredura. Padrão: "4"
DEBUG:
-verbose Habilitar log detalhado. Padrão: "false"
-version Exibir versão. Padrão: "false"
Se o arquivo de configuração for necessário, estes locais serão pesquisados por config.yml: "." "/etc/s3scanner/" "$HOME/.s3scanner/"
Se você achou esta ferramenta útil, considere doar para apoiar seu desenvolvimento. Você pode encontrar opções de patrocínio na lateral desta página do repositório ou em FUNDING.yml
Muito obrigado à Tines por ser um patrocinador contínuo deste projeto.
Varrer AWS por nomes de buckets listados em um arquivo, enumerar todos os objetos
$ s3scanner -bucket-file nomes.txt -enumerate
Varrer um bucket no GCP, enumerar todos os objetos e salvar resultados no banco de dados
$ s3scanner -provider gcp -db -bucket meu-bucket -enumerate
s3scanner requer exatamente um tipo de entrada: -bucket, -bucket-file ou -mq.
INPUT: (1 obrigatório)
-bucket string Nome do bucket a ser verificado.
-bucket-file string Arquivo com nomes de buckets a serem verificados.
-mq Conectar ao RabbitMQ para obter buckets. Requer a chave "mq" no arquivo de configuração. Padrão: "false"
-bucketVarrer um único bucket
s3scanner -bucket uploads_secretos
-bucket-fileVarrer todos os nomes de bucket listados no arquivo
s3scanner -bucket-file nomes.txt
onde nomes.txt contém um nome de bucket por linha
$ cat nomes.txt
bucket123
assets
image-uploads
Nomes de bucket listados várias vezes serão varridos apenas uma vez.
-mqConecta a um servidor RabbitMQ e consome mensagens contendo nomes de buckets para varrer.
s3scanner -mq
As mensagens devem ser objetos Bucket codificados em JSON - consulte mqingest para um exemplo de publicação em Golang.
-mq requer as chaves mq.uri e mq.queue_name no arquivo de configuração. Veja a seção Arquivo de Configuração para exemplo.
OUTPUT:
-db Salvar resultados em um banco de dados Postgres. Requer a chave "db.uri" no arquivo de configuração. Padrão: "false"
-json Imprimir logs no stdout em formato JSON em vez de legível. Padrão: "false"
-dbSalva todos os resultados da varredura em um banco de dados PostgreSQL
s3scanner -bucket imagens -db
db.uri no arquivo de configuração. Veja a seção Arquivo de Configuração para exemplo.-db, os resultados também serão impressos no console se usar -json ou o modo de saída legível padrão.s3scanner executa o recurso Auto Migration do Gorm sempre que se conecta ao banco de dados. Se
o esquema já tiver tabelas com nomes esperados pelo Gorm, ele pode alterar a estrutura dessas tabelas. Recomenda-se criar um esquema PostgreSQL dedicado aos resultados do s3scanner.-jsonEm vez de exibir resultados da varredura no console em formato legível, exibe JSON legível por máquina.
s3scanner -bucket imagens -json
Isso imprimirá um objeto JSON por linha no console, que pode ser redirecionado para jq ou outras ferramentas que aceitam entrada JSON.
Exemplo: Imprimir nome do bucket e região para todos os buckets que existem
$ s3scanner -bucket-file nomes.txt -json | jq -r '. | select(.bucket.exists==1) | [.bucket.name, .bucket.region] | join(" - ")'
10000 - eu-west-1
10000.pizza - ap-southeast-1
images_staging - us-west-2
OPÇÕES:
-enumerate Enumerar objetos do bucket (pode consumir tempo). Padrão: "false"
-provider string Provedor de armazenamento de objetos: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom requer arquivo de configuração. Padrão: "aws"
-threads int Número de threads para varredura. Padrão: "4"
-enumerateEnumerar todos os objetos armazenados no bucket. Por padrão, o s3scanner apenas verifica as permissões dos buckets.
s3scanner -bucket anexos -enumerate
s3scanner solicitará "páginas" de 1.000 objetos. Se houver mais de 5.000 páginas de objetos, ele ignorará o restante.-providerNome do provedor de armazenamento a ser usado ao verificar buckets.
s3scanner -bucket assets -provider gcp
providers.custom listadas na seção Arquivo de Configuração.-threadsNúmero de threads para varredura.
s3scanner -bucket docs_secretos -threads 8
DEBUG:
-verbose Habilitar log detalhado. Padrão: "false"
-version Exibir versão. Padrão: "false"
-verboseHabilita log detalhado de mensagens de depuração. Esta opção produzirá muitos logs e não é recomendada a menos que esteja reportando um bug.
s3scanner -bucket planilhas -verbose
-versionExibe as informações de versão e sai.
s3scanner -version
dev se compilado a partir do código-fonte.Um arquivo docker compose está incluído que cria 4 contêineres:
2 perfis estão configurados:
dev - Ambiente de desenvolvimento padrãodev-mitm - Ambiente configurado com mitmproxy para observação mais fácil do tráfego HTTP ao depurar ou adicionar novos provedores.Para iniciar o ambiente de desenvolvimento execute make dev ou make dev-mitm. Entre no contêiner app com docker exec -it -w /app app_dev sh, depois go run .
Se estiver usando o perfil dev-mitm, abra http://127.0.0.1:8081 em um navegador para visualizar e manipular chamadas HTTP feitas a partir do contêiner app.
Se estiver usando flags que exigem opções de configuração, o s3scanner pesquisará por config.yml em:
/etc/s3scanner/$HOME/.s3scanner/# Necessário por -db
db:
uri: "postgresql://usuario:[email protected]:5432/nome_esquema"
# Necessário por -mq
mq:
queue_name: "aws"
uri: "amqp://usuario:senha@localhost:5672"
# providers.custom necessário por `-provider custom`
# address_style - Estilo de endereçamento usado pelos endpoints.
# tipo: string
# valores: "path" ou "vhost"
# endpoint_format - Formato das URLs de endpoint. Deve conter '$REGION' como espaço reservado para o nome da região
# tipo: string
# insecure - Ignorar erros SSL
# tipo: boolean
# regions deve conter pelo menos uma opção
providers:
custom:
address_style: "path"
endpoint_format: "https://$REGION.vultrobjects.com"
insecure: false
regions:
- "ewr1"
Quando o s3scanner analisa o arquivo de configuração, ele pegará o endpoint_format e substituirá $REGION por todas as regions listadas para criar uma lista de URLs de endpoint.
Nota: O S3Scanner atualmente só suporta varredura de permissões de usuários anônimos para serviços não AWS
📚 Mais informações sobre APIs não AWS podem ser encontradas na wiki do projeto.
Esta ferramenta tentará obter todas as informações disponíveis sobre um bucket, mas cabe a você interpretar os resultados.
Permissões possíveis para buckets:
Qualquer uma ou todas essas permissões podem ser definidas para os 2 grupos principais de usuários:
O que isso significa: O fato de um bucket não permitir leitura/escrita de ACLs não significa que você não pode ler/escrever arquivos no bucket. Inversamente, você pode ser capaz de listar ACLs mas não ler/escrever no bucket.
MIT
| Plataforma | Versão | Passos |
|---|
| BlackArch | pacman -S s3scanner | |
| Docker | docker run ghcr.io/sa7mon/s3scanner | |
| Go | go install -v github.com/sa7mon/s3scanner@latest | |
| Kali Linux | apt install s3scanner | |
| MacOS | brew install s3scanner | |
| Parrot OS | apt install s3scanner | |
| Windows - winget | winget install s3scanner | |
| NixOS stable | nix-shell -p s3scanner | |
| NixOS unstable | nix-shell -p s3scanner | |
| Outro - Compilar a partir do código-fonte | git clone [email protected]:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner . |