
Генератор угадывания паролей на основе вероятностной контекстно-свободной грамматики (PCFG)
PCFG = Вероятностная контекстно-свободная грамматика
PCFG = Очень Крутой Нечеткий Угадыватель
Короче: Набор инструментов для исследования того, как люди создают пароли. Их можно использовать для взлома хешей паролей, а также для генерации синтетических паролей (honeywords) или помощи в разработке более совершенных алгоритмов оценки стойкости паролей.
Trainer: 4.4
Guesser: 4.6
PRINCE_LING: 4.3
Password_Scorer: 4.4
Sphinx используется для динамического создания руководства разработчика на основе строк документации в коде. Чтобы собрать руководство разработчика, обратитесь к инструкциям в /doc/INSTRUCTIONS.rst
Предварительно собранный PDF-файл руководства разработчика также можно найти в /doc/build/latex/pcfgdevelopersguide.pdf. Обратите внимание: я не буду перестраивать это руководство между крупными релизами, чтобы история git оставалась чище. Иначе коммиты PDF быстро становятся беспорядочными. Поэтому предварительно собранное руководство может быть немного устаревшим; если вы используете его для помощи в написании/изменении кода, рекомендуется собрать руководство самостоятельно, а не использовать предварительно собранное.
Этот проект использует машинное обучение для выявления привычек создания паролей пользователями. Модель PCFG создается путем обучения на списке раскрытых паролей в открытом виде (или взломанных). В контексте этого проекта модель называется набором правил и содержит множество различных частей паролей, выявленных во время обучения, вместе с их вероятностями. Такое разбиение на составные части может быть полезно для других инструментов взлома, таких как PRINCE, и/или части набора правил могут быть напрямую включены в более традиционные атаки на основе словарей. Этот проект также включает генератор предположений PCFG, который использует этот набор правил для генерации паролей в порядке убывания вероятности. Это гораздо мощнее стандартных словарных атак, и в тестах доказано, что он способен взламывать пароли в среднем с использованием значительно меньшего количества попыток, чем другие общедоступные методы. Недостатком является то, что генерация предположений в порядке вероятности медленная — в среднем 50–100 тысяч попыток в секунду, в то время как алгоритмы на GPU могут выдавать миллионы и миллиарды (и больше) попыток в секунду для быстрых алгоритмов хеширования. Поэтому угадыватель PCFG лучше всего использовать для большого количества соленых хешей или других медленных алгоритмов хеширования, где точность предположений компенсирует вычислительные затраты.
pip3 install chardetНабор правил по умолчанию, включенный в этот репозиторий, был создан путем обучения на подмножестве из 1 миллиона паролей из набора RockYou. Лучшей производительности можно достичь, обучаясь на полном наборе из 32 миллионов паролей RockYou, но он был исключен, чтобы уменьшить размер загрузки. Вы можете использовать набор правил по умолчанию для начала генерации паролей без необходимости обучения на новом списке, но рекомендуется обучаться на целевом наборе паролей, который может быть ближе к тому, что вы хотите атаковать. Если вы создаете свой собственный набор правил, вот краткое руководство:
python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESETpython3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6
b. --save_sensitive: Если указано, чувствительные данные, такие как адреса электронной почты и полные веб-сайты, обнаруженные во время обучения, будут сохранены в наборе правил. Хотя генератор предположений PCFG в настоящее время не использует эти данные, они очень ценны в реальной атаке на взлом паролей. По умолчанию эта опция отключена, чтобы упростить использование этого инструмента в академических целях. Обратите внимание: даже если эта опция отключена, в наборе правил почти наверняка останутся персональные данные, поэтому защищайте созданные наборы правил соответствующим образом. Пример: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive
c. --comments: Добавляет комментарий в файл конфигурации набора правил. Это полезно, чтобы позже, взглянув на него, вы знали, почему и как был создан этот набор правил. Заключите комментарий, который хотите добавить, в кавычки.Это генерирует предположения в stdout, используя ранее обученный набор правил PCFG. Эти предположения затем можно передать по конвейеру в любую программу, которая будет их использовать. Если набор правил не указан, будет использоваться набор правил по умолчанию DEFAULT. Для целей этого руководства предполагается, что используется набор правил NEW_RULESET.
python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAMEpython3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --loadСуществует много случаев, когда вы можете захотеть оценить вероятность генерации пароля по ранее обученному набору правил. Например, это может быть частью метрики стойкости пароля или использоваться для других исследовательских целей. Включена примерная программа для выполнения этого.
python3 password_scorer -r NEW_RULESET -i INPUT_LISTНазвание: PRINCE Language Indexed N-Grams (Prince-Ling)
Обзор: Создает настраиваемые списки слов на основе уже обученного набора правил PCFG/грамматики для использования в комбинаторных атаках в стиле PRINCE. Идея заключается в том, что программа обучения PCFG разбивает обучающий набор паролей на отдельные разборы, и эту информацию можно использовать для создания целевых списков слов для других атак.
Основные принципы: Под капотом Prince-Ling — это, по сути, мини-генератор предположений PCFG. Он удаляет генерацию марковских предположений и заменяет базовые структуры, используемые в обычных атаках PCFG, на значительно уменьшенную базовую структуру, предназначенную для создания списков слов для PRINCE. Это позволяет генерировать слова из словаря в порядке убывания вероятности с учетом того, насколько эти слова, как ожидается, будут полезны в атаке PRINCE.
Использование Prince-Ling
python3 prince-ling.py -r RULESET_NAME -s SIZE_OF_WORDLIST_TO_CREATE -o OUTPUT_FILENAMEpython3 pcfg_guesser -r NEW_RULESET -s SESSION_NAME | ./john --stdin --format=bcrypt PASSWORDS_TO_CRACK.txt
Если вы заметили какие-либо ошибки или у вас есть функция, которую вы хотели бы добавить, пожалуйста, откройте issue на этой странице GitHub. Я также принимаю pull request'ы, но в идеале, пожалуйста, привязывайте pull request к issue, чтобы мне было проще его просмотреть, задать вопросы и лучше понять вносимые вами изменения.
Есть много улучшений, которые можно внести в моделирование стратегий создания паролей с помощью PCFG. Я открыт для новых идей, изменений и предложений. То, что код в настоящее время делает что-то определенным образом, не означает, что это лучший вариант. Например, фундаментальная базовая структура текущего подхода, при котором маски генерируются для строк из букв, цифр, других символов и т.д., была выбрана, потому что это был «самый простой» вариант реализации. В нашей команде было много споров о том, что лучшим вариантом может быть начать с базового слова, а затем моделировать более традиционные правила изменения, применяемые к нему, как переходы в PCFG. Так что смело экспериментируйте с этим кодом!