
Инструмент для поиска секретов в различных типах файлов.
DumpsterDiver — это инструмент, который может анализировать большие объемы данных в поиске жестко закодированных секретов, таких как ключи (например, AWS Access Key, Azure Share Key или SSH-ключи) или пароли. Кроме того, он позволяет создавать простые правила поиска с базовыми условиями (например, сообщать только о CSV-файлах, содержащих не менее 10 адресов электронной почты). Основная идея этого инструмента — обнаруживать любые потенциальные утечки секретов. Вы можете посмотреть его в действии в демонстрационном видео или прочитать обо всех его функциях в этой статье.
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 - путь к папке, содержащей файлы для анализа.-a, --advance - если этот флаг установлен, все файлы будут дополнительно проанализированы с использованием правил, указанных в файле rules.yaml.-r, --remove - если этот флаг установлен, файлы, не содержащие никаких секретов (или ничего интересного, если установлен флаг -a), будут удалены.-s, --secret - если этот флаг установлен, все файлы будут дополнительно проанализированы на наличие жестко закодированных паролей.-o OUTFILE - выходной файл в формате JSON.Для запуска DumpsterDiver необходимо установить библиотеки Python. Это можно сделать, выполнив следующую команду:
$> pip install -r requirements.txt
Если у вас отдельно установлены Python 2 и 3, то следует использовать pip3 или pip3.6.
Не существует единственного инструмента, который подходит всем, и DumpsterDiver здесь не исключение. Есть два способа настроить поиск:
config.yaml--min-key MIN_KEY - задает минимальную длину анализируемого ключа (по умолчанию 20).--max-key MAX_KEY - задает максимальную длину анализируемого ключа (по умолчанию 80).--entropy ENTROPY - задает порог высокой энтропии (по умолчанию 4.3).Также добавлен отдельный скрипт, который позволяет подсчитать энтропию символа в одном слове. Это поможет вам лучше настроить DumpsterDiver под свои нужды. Вы можете проверить его с помощью следующей команды:
$> python3 entropy.py f2441e3810794d37a34dd7f8f6995df4
Этот способ весьма полезен, когда вы знаете, что ищете. Вот несколько примеров:
$> 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 или aws_secret_access_key:$> python3 DumpsterDiver.py -p ./test/ --grep-words *aws_access_key_id* *aws_secret_access_key* -a
Обратите внимание, что подстановочные знаки до и после слова для grep используются намеренно. Таким образом, выражения типа
"aws_access_key_id"илиaws_access_key_id=также будут сообщаться.
Использование энтропии для поиска паролей не очень эффективно, так как порождает много ложных срабатываний. Именно поэтому DumpsterDiver использует другой подход для поиска жестко закодированных паролей — он проверяет сложность пароля с помощью passwordmeter. Чтобы настроить этот поиск, вы можете использовать следующие команды:
--min-pass MIN_PASS - задает минимальную длину анализируемого пароля (по умолчанию 8). Требует добавления флага -s в синтаксис.--max-pass MAX_PASS - задает максимальную длину анализируемого пароля (по умолчанию 12). Требует добавления флага -s в синтаксис.--pass-complex {1,2,3,4,5,6,7,8,9} - задает порог сложности пароля от 1 (тривиальные пароли) до 9 (очень сложные пароли) (по умолчанию 8). Требует добавления флага -s в синтаксис.Например, если вы хотите найти сложные пароли (которые содержат заглавные, строчные буквы, спецсимволы, цифры и имеют длину от 10 до 15 символов), то вы можете сделать это с помощью следующей команды:
$> python3 DumpsterDiver.py -p [PATH_TO_FOLDER] --min-pass 10 --max-pass 15 --pass-complex 8
Возможно, вы захотите пропустить сканирование определенных файлов. Для этого вы можете использовать следующие параметры:
--exclude-files - задает имена файлов или расширения, которые не следует анализировать. Расширение файла должно содержать символ . (например, .pdf). Несколько имен файлов и расширений должны быть разделены пробелом.
--bad-expressions - задает нежелательные выражения. Если DumpsterDiver находит такое выражение в файле, то этот файл не будет анализироваться. Несколько нежелательных выражений должны быть разделены пробелом.
Если вы хотите указать несколько имен файлов, нежелательных выражений или слов для grep с помощью отдельного файла, вы можете сделать это с помощью следующего трюка в bash:
$> python3 DumpsterDiver.py -p ./test/ --exclude-files `while read -r line; do echo $line; done < blacklisted_files.txt`
Вместо использования нескольких параметров командной строки вы можете указать значения для всех вышеупомянутых параметров сразу в файле config.yaml.
DumpsterDiver также поддерживает расширенный поиск. Помимо простого поиска с подстановочными знаками, этот инструмент позволяет создавать условия. Предположим, вы ищете утечку корпоративных email-адресов. Кроме того, вас интересуют только крупные утечки, содержащие не менее 100 email-адресов. Для этого следует отредактировать файл rules.yaml следующим образом:
filetype: [".*"]
filetype_weight: 0
grep_words: ["*@example.com"]
grep_words_weight: 10
grep_word_occurrence: 100
Предположим другой сценарий: вы ищете термины "pass", "password", "haslo", "hasło" (если вы анализируете репозиторий польской компании) в файлах .db или .sql. Тогда вы можете добиться этого, изменив файл rules.yaml следующим образом:
filetype: [".db", ".sql"]
filetype_weight: 5
grep_words: ["*pass*", "*haslo*", "*hasło*"]
grep_words_weight: 5
grep_word_occurrence: 1
Обратите внимание, что правило сработает только тогда, когда общий вес (filetype_weight + grep_words_weight) будет >=10.
Для DumpsterDiver доступен Docker-образ. Запустите его с помощью:
$> docker run -v /path/to/my/files:/files --rm rzepsky/dumpsterdiver -p /files
Если вы хотите переопределить один из файлов конфигурации (config.yaml или 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
У вас есть лучшие идеи? Хотите помочь в этом проекте? Пожалуйста, свяжитесь со мной в Twitter @Rzepsky. Я буду более чем рад видеть здесь любых участников!
Здесь я хотел бы поблагодарить всех, кто помог в разработке этого проекта:
Смотрите файл LICENSE.