
Ferramenta para pesquisar segredos em vários tipos de arquivo.
DumpsterDiver é uma ferramenta que pode analisar grandes volumes de dados em busca de segredos codificados (hardcoded secrets) como chaves (por exemplo, AWS Access Key, Azure Share Key ou chaves SSH) ou senhas. Além disso, permite criar regras de pesquisa simples com condições básicas (por exemplo, relatar apenas arquivos csv contendo pelo menos 10 endereços de email). A ideia principal desta ferramenta é detectar qualquer potencial vazamento de segredo. Você pode vê-la em ação no vídeo de demonstração ou ler sobre todas as suas características neste artigo.
usage: DumpsterDiver.py [-h] -p LOCAL_PATH [-r] [-a] [-s] [-o OUTFILE]
[--min-key MIN_KEY] [--max-key MAX_KEY]
[--entropy ENTROPY] [--min-pass MIN_PASS]
[--max-pass MAX_PASS]
[--pass-complex {1,2,3,4,5,6,7,8,9}]
[--exclude-files EXCLUDE_FILES [EXCLUDE_FILES ...]]
[--bad-expressions BAD_EXPRESSIONS [BAD_EXPRESSIONS ...]]
-p LOCAL_PATH - caminho para a pasta contendo os arquivos a serem analisados.-a, --advance - quando esta flag é definida, todos os arquivos serão adicionalmente analisados usando regras especificadas no arquivo rules.yaml.-r, --remove - quando esta flag é definida, os arquivos que não contêm nenhum segredo (ou nada interessante se a flag -a estiver definida) serão removidos.-s, --secret - quando esta flag é definida, todos os arquivos serão adicionalmente analisados em busca de senhas codificadas (hardcoded passwords).-o OUTFILE - arquivo de saída no formato JSON.Para executar o DumpsterDiver, você precisa instalar as bibliotecas Python. Você pode fazer isso executando o seguinte comando:
$> pip install -r requirements.txt
Se você instalou Python 2 e 3 separadamente, então deve usar pip3 ou pip3.6.
Não existe uma ferramenta única que atenda às necessidades de todos e o DumpsterDiver não é exceção aqui. Existem 2 maneiras de personalizar sua pesquisa:
config.yaml--min-key MIN_KEY - especifica o comprimento mínimo da chave a ser analisada (padrão é 20).--max-key MAX_KEY - especifica o comprimento máximo da chave a ser analisada (padrão é 80).--entropy ENTROPY - especifica o limite de alta entropia (padrão é 4.3).Há também um script separado que permite contar a entropia de um caractere em uma única palavra. Isso ajudará você a personalizar melhor o DumpsterDiver de acordo com suas necessidades. Você pode verificá-lo usando o seguinte comando:
$> python3 entropy.py f2441e3810794d37a34dd7f8f6995df4
Essa maneira é bastante útil quando você sabe o que está procurando. Aqui estão alguns exemplos:
$> python3 DumpsterDiver.py -p [CAMINHO_PARA_PASTA] --min-key 40 --max-key 40 --entropy 4.3
$> python3 DumpsterDiver.py -p [CAMINHO_PARA_PASTA] --min-key 66 --max-key 66 --entropy 5.1
$> python3 DumpsterDiver.py -p [CAMINHO_PARA_PASTA] --min-key 76 --max-key 76 --entropy 5.1
aws_access_key_id ou aws_secret_access_key:$> python3 DumpsterDiver.py -p ./test/ --grep-words *aws_access_key_id* *aws_secret_access_key* -a
Por favor, note que os curingas antes e depois de uma palavra de grep são usados de propósito. Desta forma, expressões como
"aws_access_key_id"ouaws_access_key_id=também serão relatadas.
Usar entropia para encontrar senhas não é muito eficaz, pois gera muitos falsos positivos. É por isso que o DumpsterDiver usa uma abordagem diferente para encontrar senhas codificadas - ele verifica a complexidade da senha usando passwordmeter. Para personalizar esta pesquisa, você pode usar os seguintes comandos:
--min-pass MIN_PASS - especifica o comprimento mínimo da senha a ser analisada (padrão é 8). Requer adicionar a flag -s à sintaxe.--max-pass MAX_PASS - especifica o comprimento máximo da senha a ser analisada (padrão é 12). Requer adicionar a flag -s à sintaxe.--pass-complex {1,2,3,4,5,6,7,8,9} - especifica o limite de complexidade da senha entre 1 (senhas triviais) a 9 (senhas muito complexas) (padrão é 8). Requer adicionar a flag -s à sintaxe.Por exemplo, se você deseja encontrar senhas complexas (que contenham maiúsculas, minúsculas, caractere especial, dígito e tenham de 10 a 15 caracteres), então pode fazer isso usando o seguinte comando:
$> python3 DumpsterDiver.py -p [CAMINHO_PARA_PASTA] --min-pass 10 --max-pass 15 --pass-complex 8
Você pode querer pular a varredura de certos arquivos. Para isso, você pode usar os seguintes parâmetros:
--exclude-files - especifica nomes de arquivos ou extensões que não devem ser analisados. A extensão do arquivo deve conter o caractere . (por exemplo, .pdf). Vários nomes de arquivos e extensões devem ser separados por espaço.
--bad-expressions - especifica expressões ruins. Se o DumpsterDiver encontrar tal expressão em um arquivo, este arquivo não será analisado. Várias expressões ruins devem ser separadas por espaço.
Se você deseja especificar vários nomes de arquivos, expressões ruins ou palavras de grep usando um arquivo separado, pode fazê-lo através do seguinte truque bash:
$> python3 DumpsterDiver.py -p ./test/ --exclude-files `while read -r line; do echo $line; done < blacklisted_files.txt`
Em vez de usar vários parâmetros de linha de comando, você pode especificar valores para todos os parâmetros mencionados acima de uma só vez no arquivo config.yaml.
O DumpsterDiver também suporta uma pesquisa avançada. Além de uma simples busca com curingas, esta ferramenta permite criar condições. Vamos supor que você está procurando por um vazamento de e-mails corporativos. Além disso, você está interessado apenas em vazamentos grandes, que contenham pelo menos 100 endereços de e-mail. Para este propósito, você deve editar o arquivo rules.yaml da seguinte forma:
filetype: [".*"]
filetype_weight: 0
grep_words: ["*@example.com"]
grep_words_weight: 10
grep_word_occurrence: 100
Vamos supor um cenário diferente: você está procurando pelos termos "pass", "password", "haslo", "hasło" (se você estiver analisando o repositório de uma empresa polonesa) em um arquivo .db ou .sql. Então você pode conseguir isso modificando o arquivo rules.yaml da seguinte forma:
filetype: [".db", ".sql"]
filetype_weight: 5
grep_words: ["*pass*", "*haslo*", "*hasło*"]
grep_words_weight: 5
grep_word_occurrence: 1
Note que a regra será acionada apenas quando o peso total (filetype_weight + grep_words_weight) for >=10.
Uma imagem Docker está disponível para o DumpsterDiver. Execute-a usando:
$> docker run -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
Se você quiser substituir um dos arquivos de configuração (config.yaml ou rules.yaml):
$> docker run -v /path/to/my/config/config.yaml:/config.yaml /path/to/my/config/rules.yaml:/rules.yaml -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
Você tem ideias melhores? Quer ajudar neste projeto? Por favor, entre em contato comigo pelo Twitter @Rzepsky. Ficaria mais do que feliz em ver aqui quaisquer contribuidores!
Aqui gostaria de agradecer imensamente a todos que ajudaram a desenvolver este projeto:
Veja o arquivo LICENSE.