
Werkzeug zum Durchsuchen von Geheimnissen in verschiedenen Dateitypen.
DumpsterDiver ist ein Werkzeug, das große Datenmengen nach fest codierten Geheimnissen wie Schlüsseln (z.B. AWS Access Key, Azure Share Key oder SSH-Schlüssel) oder Passwörtern durchsuchen kann. Zusätzlich ermöglicht es die Erstellung einfacher Suchregeln mit grundlegenden Bedingungen (z.B. nur CSV-Dateien melden, die mindestens 10 E-Mail-Adressen enthalten). Der Hauptgedanke dieses Tools ist es, potenzielle Geheimnislecks zu erkennen. Sie können es in Aktion im Demo-Video sehen oder über alle Funktionen in diesem Artikel lesen.
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 - Pfad zum Ordner, der die zu analysierenden Dateien enthält.-a, --advance - Wenn dieses Flag gesetzt ist, werden alle Dateien zusätzlich mit den in der Datei rules.yaml angegebenen Regeln analysiert.-r, --remove - Wenn dieses Flag gesetzt ist, werden Dateien, die kein Geheimnis (oder nichts Interessantes, wenn das -a Flag gesetzt ist) enthalten, entfernt.-s, --secret - Wenn dieses Flag gesetzt ist, werden alle Dateien zusätzlich auf fest codierte Passwörter untersucht.-o OUTFILE - Ausgabedatei im JSON-Format.Um DumpsterDiver auszuführen, müssen Sie die Python-Bibliotheken installieren. Sie können dies mit dem folgenden Befehl tun:
$> pip install -r requirements.txt
Wenn Sie Python 2 und 3 separat installiert haben, sollten Sie pip3 oder pip3.6 verwenden.
Es gibt kein einzelnes Tool, das für jedermanns Bedürfnisse geeignet ist, und DumpsterDiver ist hier keine Ausnahme. Es gibt zwei Möglichkeiten, Ihre Suche anzupassen:
config.yaml-Datei--min-key MIN_KEY - Gibt die minimale zu analysierende Schlüssellänge an (Standard ist 20).--max-key MAX_KEY - Gibt die maximale zu analysierende Schlüssellänge an (Standard ist 80).--entropy ENTROPY - Gibt die Grenze für hohe Entropie an (Standard ist 4,3).Es gibt auch ein separates Skript, mit dem Sie die Entropie eines Zeichens in einem einzelnen Wort zählen können. Es hilft Ihnen, DumpsterDiver besser an Ihre Bedürfnisse anzupassen. Sie können es mit dem folgenden Befehl überprüfen:
$> python3 entropy.py f2441e3810794d37a34dd7f8f6995df4
Diese Methode ist sehr hilfreich, wenn Sie wissen, wonach Sie suchen. Hier sind einige Beispiele:
$> 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 oder aws_secret_access_key suchen:$> python3 DumpsterDiver.py -p ./test/ --grep-words *aws_access_key_id* *aws_secret_access_key* -a
Bitte beachten Sie, dass Platzhalter vor und nach einem Suchwort absichtlich verwendet werden. Auf diese Weise werden auch Ausdrücke wie
"aws_access_key_id"oderaws_access_key_id=gemeldet.
Die Verwendung von Entropie zum Auffinden von Passwörtern ist nicht sehr effektiv, da sie viele Fehlalarme erzeugt. Aus diesem Grund verwendet DumpsterDiver einen anderen Ansatz, um fest codierte Passwörter zu finden – es überprüft die Passwortkomplexität mit passwordmeter. Um diese Suche anzupassen, können Sie die folgenden Befehle verwenden:
--min-pass MIN_PASS - Gibt die minimale zu analysierende Passwortlänge an (Standard ist 8). Erfordert das Hinzufügen des -s Flags zur Syntax.--max-pass MAX_PASS - Gibt die maximale zu analysierende Passwortlänge an (Standard ist 12). Erfordert das Hinzufügen des -s Flags zur Syntax.--pass-complex {1,2,3,4,5,6,7,8,9} - Gibt die Grenze der Passwortkomplexität zwischen 1 (triviale Passwörter) und 9 (sehr komplexe Passwörter) an (Standard ist 8). Erfordert das Hinzufügen des -s Flags zur Syntax.Wenn Sie beispielsweise komplexe Passwörter finden möchten (die Großbuchstaben, Kleinbuchstaben, Sonderzeichen, Ziffern enthalten und 10 bis 15 Zeichen lang sind), können Sie dies mit dem folgenden Befehl tun:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-pass 10 --max-pass 15 --pass-complex 8
Möglicherweise möchten Sie das Scannen bestimmter Dateien überspringen. Dazu können Sie die folgenden Parameter verwenden:
--exclude-files - Gibt Dateinamen oder Erweiterungen an, die nicht analysiert werden sollen. Die Dateierweiterung sollte das Zeichen . enthalten (z.B. .pdf). Mehrere Dateinamen und Erweiterungen sollten durch Leerzeichen getrennt werden.
--bad-expressions - Gibt schlechte Ausdrücke an. Wenn DumpsterDiver einen solchen Ausdruck in einer Datei findet, wird diese Datei nicht analysiert. Mehrere schlechte Ausdrücke sollten durch Leerzeichen getrennt werden.
Wenn Sie mehrere Dateinamen, schlechte Ausdrücke oder Suchwörter mit einer separaten Datei angeben möchten, können Sie dies mit dem folgenden Bash-Trick tun:
$> python3 DumpsterDiver.py -p ./test/ --exclude-files `while read -r line; do echo $line; done < blacklisted_files.txt`
Anstatt mehrere Befehlszeilenparameter zu verwenden, können Sie Werte für alle oben genannten Parameter auf einmal in der config.yaml-Datei angeben.
DumpsterDiver unterstützt auch eine erweiterte Suche. Über einfaches Greppen mit Platzhaltern hinaus ermöglicht dieses Tool die Erstellung von Bedingungen. Nehmen wir an, Sie suchen nach einem Leck von Unternehmens-E-Mails. Außerdem interessieren Sie sich nur für große Lecks, die mindestens 100 E-Mail-Adressen enthalten. Dazu sollten Sie die Datei rules.yaml wie folgt bearbeiten:
filetype: [".*"]
filetype_weight: 0
grep_words: ["*@example.com"]
grep_words_weight: 10
grep_word_occurrence: 100
Nehmen wir ein anderes Szenario an: Sie suchen nach den Begriffen "pass", "password", "haslo", "hasło" (wenn Sie ein polnisches Firmen-Repository analysieren) in einer .db- oder .sql-Datei. Dies erreichen Sie durch Ändern der Datei rules.yaml wie folgt:
filetype: [".db", ".sql"]
filetype_weight: 5
grep_words: ["*pass*", "*haslo*", "*hasło*"]
grep_words_weight: 5
grep_word_occurrence: 1
Beachten Sie, dass die Regel nur ausgelöst wird, wenn das Gesamtgewicht (filetype_weight + grep_words_weight) >=10 ist.
Ein Docker-Image ist für DumpsterDiver verfügbar. Führen Sie es wie folgt aus:
$> docker run -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
Wenn Sie eine der Konfigurationsdateien (config.yaml oder rules.yaml) überschreiben möchten:
$> docker run -v /path/to/my/config/config.yaml:/config.yaml -v /path/to/my/config/rules.yaml:/rules.yaml -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
Haben Sie bessere Ideen? Möchten Sie bei diesem Projekt helfen? Bitte kontaktieren Sie mich über Twitter @Rzepsky. Ich würde mich sehr freuen, hier Mitwirkende zu sehen!
Ich möchte mich hier bei all denen bedanken, die zur Entwicklung dieses Projekts beigetragen haben:
Siehe die Datei LICENSE.