 |
ODBParser |
TL;DR
O ODBParser é uma ferramenta para pesquisar PII exposta em bancos de dados abertos.
APENAS para ser usado para identificar PII exposta e alertar os proprietários do servidor sobre manutenção irresponsável do banco de dados
OU para consultar bancos de dados aos quais você tem permissão de acesso!
POR FAVOR, USE RESPONSAVELMENTE
O que é isso?
Escrevi isso pois queria criar uma ferramenta OSINT completa para pesquisar, analisar e interpretar bancos de dados abertos, a fim de identificar vazamentos de PII em servidores de terceiros. Outras ferramentas parecem apenas pesquisar por bancos de dados abertos ou despejá-los assim que identificados, coletando dados indiscriminadamente. Começou com uma ou duas funções e se tornou o que está neste repositório, então o código não está tão limpo e bonito quanto poderia ser.
Funcionalidades
Para identificar bancos de dados abertos você pode:
- consultar o Shodan e o BinaryEdge usando todos os parâmetros possíveis (filtrar por país, número da porta, etc.)
- especificar um único endereço IP
- carregar um arquivo com uma lista de endereços IP
- colar uma lista de endereços IP da área de transferência
Opções de despejo:
- analisa todos os bancos de dados/coleções para identificar os dados que você especificar
- capturar tudo o que está hospedado no servidor
- capturar apenas um índice/coleção
- Use ctrl+c para pular o despejo de determinado índice
Pós-processamento:
- converter despejos JSON para CSV
- remover colunas inúteis do CSV
Outras funcionalidades:
- mantém registro de todos os endereços IP e bancos de dados que você consultou, juntamente com informações sobre cada servidor.
- mantém um arquivo de estatísticas com o número de IPs consultados, bancos de dados analisados e registros despejados.
- converter despejos JSON que você já possui para CSV
- para cada banco de dados que tenha um número total de registros acima do seu limite, o script criará uma entrada em um arquivo especial, juntamente com 5 registros de amostra, para que você possa revisar e decidir se vale a pena capturar o banco de dados.
- A saída padrão é um arquivo JSON separado por linhas, com um objeto JSON em cada linha. Você pode optar por gerar um arquivo JSON "correto" usando a flag "properjson".
- Você pode converter os arquivos para CSV em tempo real ou converter apenas alguns arquivos após a execução (recomendo o segundo). Os arquivos JSON convertidos serão movidos para uma pasta chamada "JSON backups" no mesmo diretório. OBSERVAÇÃO: Ao converter para CSV, o script remove linhas duplicadas exatas e remove colunas e linhas onde todos os valores são NaN, porque era isso que eu queria fazer. Sinta-se à vontade para editar a função se preferir uma cópia exata do arquivo JSON.
- Apenas Windows Se o script retornar um grande número de índices que contenham o campo que você especificou, ele listará os nomes dos bancos de dados, pausará e dará a você dez segundos para decidir se deseja continuar e extrair todos os dados de cada índice, pois descobri que, se muitos bancos de dados forem retornados mesmo após você especificar os campos desejados, há uma boa chance de os dados serem falsos ou logs inúteis, e você geralmente pode identificar pelo nome se é esse o caso. Se você não agir dentro de 10 segundos, o script irá despejar todos os índices.
- Como você deve ter notado, muitas pessoas estão escaneando bancos de dados MongoDB e mantendo-os como reféns, muitas vezes alterando o nome para algo como "TO_RESTORE_EMAIL_XXXRESTORE.COM." O scraper do MongoDB ignorará todos os bancos de dados e coleções que foram comprometidos, verificando o nome do banco de dados/coleção em relação a uma lista de strings que indicam comprometimento.
- O script é bastante verboso (talvez demais), mas gosto de ver o que está acontecendo. Sinta-se à vontade para silenciar as instruções print se preferir.
Personalização
Veja o arquivo odbconfig.py para especificar seus parâmetros, porque o objetivo principal é expor os dados que VOCÊ tem interesse. Forneci alguns exemplos no arquivo de configuração. Brinque com eles!
Você pode:
- especificar quais nomes de índices ou coleções deseja coletar, informando substrings no arquivo de configuração. Por exemplo, se tiver o termo "cliente", o script capturará o índice chamado "clientes" ou "dados_cliente." Recomendo manter essas listas em branco, pois você nunca sabe como os bancos de dados que lhe interessam se chamarão; em vez disso, especifique os campos que lhe interessam.
- especificar quais campos lhe interessam: se você quiser capturar apenas índices do ES que contenham "email" no nome do campo, por exemplo, "user_emails", pode fazer isso. Se quiser garantir que o índice tenha pelo menos 2 campos de seu interesse, também pode fazer. Ou se quiser capturar tudo, independentemente dos campos presentes, também pode.
- especificar quais índices você NÃO deseja, por exemplo, nomes de índices do sistema e outros que são geralmente usados para registro básico. Exemplos fornecidos no arquivo de configuração.
- substituir a configuração e capturar tudo em um servidor
- especificar a saída (padrão é JSON, pode escolher CSV)
- definir o tamanho mínimo e máximo do banco de dados que o script despejará por padrão e você pode definir uma flag para substituir o limite máximo de documentos caso a caso.
Instalação e Requisitos
- Clone ou baixe para sua máquina
- Obtenha chaves de API para Shodan e/ou BinaryEdge
- Configure os parâmetros no arquivo ODBconfig.py
- Instale os requisitos a partir do arquivo
Sugiro criar um ambiente virtual para o ODBParser para evitar problemas com versões incorretas de módulos.
Observação: Testado APENAS no Python 3.7.3 e no Windows 10.
POR FAVOR, USE RESPONSAVELMENTE
Próximos Passos e Problemas Conhecidos
- limpar um pouco mais o código
- paralelizar vários processos.
- expandir para outros tipos de banco de dados
- adicionar outros mecanismos de busca de diretórios abertos (Zoomeye, etc.)
- incapacidade de rolar além da primeira página para certas instâncias do ES devido à forma como o ES <2.0 funciona. Agradeço qualquer ajuda! Quase certo de que corrigi isso. Abra um issue se receber erros de scrollid
Uso
Exemplos: python ODBParser.py -cn US -p 8080 -t users --elastic --shodan --csv --limit 100
python ODBParser.py -ip 192.168.2:8080 --mongo --ignorelogs --nosizelimits
Danos até o momento: 0 servidores analisados | 0 bancos de dados despejados | 0 registros coletados
_____________________________________________________________________________
argumentos opcionais:
-h, --help mostra esta mensagem de ajuda e sai