
Strumento per cercare segreti in vari tipi di file.
DumpsterDiver è uno strumento in grado di analizzare grandi volumi di dati alla ricerca di segreti hardcoded come chiavi (ad es. AWS Access Key, Azure Share Key o chiavi SSH) o password. Inoltre, consente di creare semplici regole di ricerca con condizioni di base (ad es. segnala solo file CSV che includono almeno 10 indirizzi email). Puoi vederlo in azione nel video dimostrativo o leggere tutte le sue funzionalità in questo articolo.
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 - percorso della cartella contenente i file da analizzare.-a, --advance - quando questo flag è impostato, tutti i file verranno analizzati ulteriormente utilizzando le regole specificate nel file rules.yaml.-r, --remove - quando questo flag è impostato, i file che non contengono alcun segreto (o nulla di interessante se il flag -a è impostato) verranno rimossi.-s, --secret - quando questo flag è impostato, tutti i file verranno ulteriormente analizzati alla ricerca di password hardcoded.-o OUTFILE - file di output in formato JSON.Per eseguire DumpsterDiver devi installare le librerie Python. Puoi farlo eseguendo il seguente comando:
$> pip install -r requirements.txt
Se hai installato separatamente Python 2 e 3, dovresti usare pip3 o pip3.6.
Non esiste uno strumento singolo che soddisfi le esigenze di tutti e DumpsterDiver non fa eccezione. Ci sono 2 modi per personalizzare la ricerca:
config.yaml--min-key MIN_KEY - specifica la lunghezza minima della chiave da analizzare (default 20).--max-key MAX_KEY - specifica la lunghezza massima della chiave da analizzare (default 80).--entropy ENTROPY - specifica il limite di entropia alta (default 4.3).È stato aggiunto anche uno script separato che permette di calcolare l'entropia di un carattere in una singola parola. Ti aiuterà a personalizzare meglio DumpsterDiver secondo le tue esigenze. Puoi provarlo usando il seguente comando:
$> python3 entropy.py f2441e3810794d37a34dd7f8f6995df4
Questo metodo è molto utile quando sai cosa stai cercando. Ecco alcuni esempi:
$> 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
Nota che i wildcard prima e dopo una parola grep sono usati appositamente. In questo modo verranno segnalate anche espressioni come
"aws_access_key_id"oaws_access_key_id=.
Usare l'entropia per trovare password non è molto efficace perché genera molti falsi positivi. Ecco perché DumpsterDiver utilizza un approccio diverso per trovare password hardcoded: verifica la complessità della password tramite passwordmeter. Per personalizzare questa ricerca puoi usare i seguenti comandi:
--min-pass MIN_PASS - specifica la lunghezza minima della password da analizzare (default 8). Richiede l'aggiunta del flag -s alla sintassi.--max-pass MAX_PASS - specifica la lunghezza massima della password da analizzare (default 12). Richiede l'aggiunta del flag -s alla sintassi.--pass-complex {1,2,3,4,5,6,7,8,9} - specifica il limite di complessità della password tra 1 (password banali) e 9 (password molto complesse) (default 8). Richiede l'aggiunta del flag -s alla sintassi.Ad esempio, se vuoi trovare password complesse (che contengono maiuscole, minuscole, caratteri speciali, cifre e sono lunghe da 10 a 15 caratteri), puoi farlo usando il seguente comando:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-pass 10 --max-pass 15 --pass-complex 8
Potresti voler saltare la scansione di determinati file. A questo scopo puoi usare i seguenti parametri:
--exclude-files - specifica nomi di file o estensioni che non devono essere analizzati. L'estensione del file deve contenere il carattere . (ad es. .pdf). I nomi multipli e le estensioni devono essere separati da spazio.
--bad-expressions - specifica espressioni indesiderate. Se DumpsterDiver trova tale espressione in un file, quel file non verrà analizzato. Le espressioni multiple devono essere separate da spazio.
Se vuoi specificare più nomi di file, espressioni indesiderate o parole grep usando un file separato, puoi farlo tramite il seguente trucco bash:
$> python3 DumpsterDiver.py -p ./test/ --exclude-files `while read -r line; do echo $line; done < blacklisted_files.txt`
Invece di usare molti parametri della riga di comando, puoi specificare i valori per tutti i parametri sopra menzionati in una volta sola nel file config.yaml.
DumpsterDiver supporta anche la ricerca avanzata. Oltre a una semplice grep con wildcard, questo strumento ti permette di creare condizioni. Supponiamo che tu stia cercando una fuga di email aziendali. Inoltre, sei interessato solo a fughe di grandi dimensioni, che contengono almeno 100 indirizzi email. A questo scopo, dovresti modificare il file rules.yaml nel seguente modo:
filetype: [".*"]
filetype_weight: 0
grep_words: ["*@example.com"]
grep_words_weight: 10
grep_word_occurrence: 100
Supponiamo uno scenario diverso: stai cercando i termini "pass", "password", "haslo", "hasło" (se stai analizzando un repository di un'azienda polacca) in un file .db o .sql. Allora puoi ottenere questo modificando il file rules.yaml nel seguente modo:
filetype: [".db", ".sql"]
filetype_weight: 5
grep_words: ["*pass*", "*haslo*", "*hasło*"]
grep_words_weight: 5
grep_word_occurrence: 1
Nota che la regola verrà attivata solo quando il peso totale (filetype_weight + grep_words_weight) è >=10.
Un'immagine Docker è disponibile per DumpsterDiver. Eseguila usando:
$> docker run -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
Se vuoi sovrascrivere uno dei file di configurazione (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
Hai idee migliori? Vuoi aiutare in questo progetto? Per favore contattami su Twitter @Rzepsky. Sarei più che felice di vedere qui dei contributori!
Qui vorrei ringraziare tantissimo tutti coloro che hanno aiutato a sviluppare questo progetto:
Vedi il file LICENSE.