
Herramienta para buscar secretos en varios tipos de archivos.
DumpsterDiver es una herramienta que puede analizar grandes volúmenes de datos en busca de secretos codificados como claves (por ejemplo, AWS Access Key, Azure Share Key o claves SSH) o contraseñas. Además, permite crear reglas de búsqueda simples con condiciones básicas (por ejemplo, reportar solo archivos csv que incluyan al menos 10 direcciones de correo electrónico). La idea principal de esta herramienta es detectar cualquier posible fuga de secretos. Puedes verla en acción en el video de demostración o leer sobre todas sus características en este artículo.
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 - ruta a la carpeta que contiene los archivos a analizar.-a, --advance - cuando esta bandera está activada, todos los archivos serán analizados adicionalmente usando las reglas especificadas en el archivo rules.yaml.-r, --remove - cuando esta bandera está activada, los archivos que no contengan ningún secreto (o nada interesante si la bandera -a está activada) serán eliminados.-s, --secret - cuando esta bandera está activada, todos los archivos serán analizados adicionalmente en busca de contraseñas codificadas.-o OUTFILE - archivo de salida en formato JSON.Para ejecutar DumpsterDiver debes instalar las librerías de Python. Puedes hacerlo ejecutando el siguiente comando:
$> pip install -r requirements.txt
Si tienes instalados por separado Python 2 y 3, entonces debes usar pip3 o pip3.6.
No existe una herramienta única que se adapte a las necesidades de todos y DumpsterDiver no es una excepción. Hay 2 formas de personalizar tu búsqueda:
config.yaml--min-key MIN_KEY - especifica la longitud mínima de clave a analizar (por defecto es 20).--max-key MAX_KEY - especifica la longitud máxima de clave a analizar (por defecto es 80).--entropy ENTROPY - especifica el límite de alta entropía (por defecto es 4.3).También se ha añadido un script separado que te permite calcular la entropía de un carácter en una sola palabra. Te ayudará a personalizar mejor DumpsterDiver según tus necesidades. Puedes probarlo usando el siguiente comando:
$> python3 entropy.py f2441e3810794d37a34dd7f8f6995df4
Esta forma es muy útil cuando sabes lo que buscas. Aquí hay algunos ejemplos:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 40 --max-key 40 --entropy 4.3
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 66 --max-key 66 --entropy 5.1
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-key 76 --max-key 76 --entropy 5.1
aws_access_key_id o aws_secret_access_key:$> python3 DumpsterDiver.py -p ./test/ --grep-words *aws_access_key_id* *aws_secret_access_key* -a
Ten en cuenta que los comodines antes y después de una palabra de búsqueda se usan a propósito. De esta forma, expresiones como
"aws_access_key_id"oaws_access_key_id=también serán reportadas.
Usar la entropía para encontrar contraseñas no es muy efectivo ya que genera muchos falsos positivos. Por eso DumpsterDiver utiliza un enfoque diferente para encontrar contraseñas codificadas: verifica la complejidad de la contraseña usando passwordmeter. Para personalizar esta búsqueda puedes usar los siguientes comandos:
--min-pass MIN_PASS - especifica la longitud mínima de contraseña a analizar (por defecto es 8). Requiere añadir la bandera -s a la sintaxis.--max-pass MAX_PASS - especifica la longitud máxima de contraseña a analizar (por defecto es 12). Requiere añadir la bandera -s a la sintaxis.--pass-complex {1,2,3,4,5,6,7,8,9} - especifica el límite de complejidad de contraseña entre 1 (contraseñas triviales) y 9 (contraseñas muy complejas) (por defecto es 8). Requiere añadir la bandera -s a la sintaxis.Por ejemplo, si quieres encontrar contraseñas complejas (que contengan mayúsculas, minúsculas, caracteres especiales, dígitos y tengan entre 10 y 15 caracteres de longitud), puedes hacerlo usando el siguiente comando:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-pass 10 --max-pass 15 --pass-complex 8
Puede que quieras omitir el escaneo de ciertos archivos. Para ello puedes usar los siguientes parámetros:
--exclude-files - especifica nombres de archivos o extensiones que no deben ser analizados. La extensión debe contener el carácter . (por ejemplo, .pdf). Varios nombres y extensiones deben separarse por espacio.
--bad-expressions - especifica expresiones malas. Si DumpsterDiver encuentra dicha expresión en un archivo, ese archivo no será analizado. Varias expresiones malas deben separarse por espacio.
Si quieres especificar varios nombres de archivo, expresiones malas o palabras de búsqueda usando un archivo separado, puedes hacerlo mediante el siguiente truco de bash:
$> python3 DumpsterDiver.py -p ./test/ --exclude-files `while read -r line; do echo $line; done < blacklisted_files.txt`
En lugar de usar múltiples parámetros de línea de comandos, puedes especificar valores para todos los parámetros mencionados anteriormente de una vez en el archivo config.yaml.
DumpsterDiver también admite una búsqueda avanzada. Más allá de un simple grep con comodines, esta herramienta te permite crear condiciones. Supongamos que estás buscando una fuga de correos electrónicos corporativos. Además, solo te interesan las fugas grandes que contengan al menos 100 direcciones de correo. Para ello debes editar el archivo rules.yaml de la siguiente manera:
filetype: [".*"]
filetype_weight: 0
grep_words: ["*@example.com"]
grep_words_weight: 10
grep_word_occurrence: 100
Supongamos otro escenario: buscas los términos "pass", "password", "haslo", "hasło" (si estás analizando un repositorio de una empresa polaca) en un archivo .db o .sql. Entonces puedes lograrlo modificando el archivo rules.yaml de la siguiente manera:
filetype: [".db", ".sql"]
filetype_weight: 5
grep_words: ["*pass*", "*haslo*", "*hasło*"]
grep_words_weight: 5
grep_word_occurrence: 1
Ten en cuenta que la regla se activará solo cuando el peso total (filetype_weight + grep_words_weight) sea >=10.
Una imagen de Docker está disponible para DumpsterDiver. Ejecútala usando:
$> docker run -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
Si quieres sobrescribir uno de los archivos de configuración (config.yaml o 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
¿Tienes mejores ideas? ¿Quieres ayudar en este proyecto? Por favor contáctame en Twitter @Rzepsky. ¡Estaría más que feliz de ver aquí a cualquier colaborador!
Aquí me gustaría agradecer mucho a todos los que ayudaron a desarrollar este proyecto:
Consulta el archivo LICENSE.