
PACK (Набор для анализа и взлома паролей)
PACK (Password Analysis and Cracking Toolkit) — это набор утилит, разработанных для анализа списков паролей с целью повышения эффективности их взлома за счёт обнаружения закономерностей в масках, правилах, наборах символов и других характеристиках паролей. Инструментарий генерирует корректные входные файлы для семейства программ для взлома паролей Hashcat.
ПРИМЕЧАНИЕ: Сам инструментарий не умеет взламывать пароли, а предназначен для повышения эффективности работы программ взлома.
Прежде чем мы сможем начать работу с инструментарием, необходимо установить критерии выбора списков паролей. Поскольку мы стремимся проанализировать, как люди создают свои пароли, мы должны получить как можно большую выборку утёкших паролей. Одним из таких отличных списков является список, основанный на утечке RockYou.com. Этот список предоставляет достаточно большую и разнообразную коллекцию, дающую хорошие результаты для распространённых паролей, используемых на подобных сайтах (например, социальных сетях). Анализ, полученный из этого списка, может не подойти для организаций со специфическими политиками паролей. Поэтому выбор входной выборки должен быть максимально близок к вашей цели. Кроме того, старайтесь избегать получения списков, основанных на уже взломанных паролях, так как это создаст статистическое смещение в сторону правил и масок, использованных лицом(ами), взломавшим(и) список, а не actual пользователей.
Самый простой анализ, который вы можете выполнить — это просто получение наиболее распространённой длины, набора символов и других характеристик паролей в предоставленном списке. В примере ниже мы будем использовать 'rockyou.txt', содержащий около 14 миллионов паролей. Запустите statsgen.py со следующей командой:
$ python statsgen.py rockyou.txt
Ниже представлен вывод указанной команды:
_
StatsGen #.#.# | |
_ __ __ _ ___| | _
| '_ \ / _` |/ __| |/ /
| |_) | (_| | (__| <
| .__/ \__,_|\___|_|\_\
| |
|_| [email protected]
[*] Анализ паролей в [rockyou.txt]
[+] Проанализировано 100% (14344390/14344390) паролей
ПРИМЕЧАНИЕ: Статистика ниже приведена относительно количества проанализированных паролей, а не общего количества паролей
[*] Длина:
[+] 8: 20% (2966037)
[+] 7: 17% (2506271)
[+] 9: 15% (2191039)
[+] 10: 14% (2013695)
[+] 6: 13% (1947798)
...
[*] Набор символов:
[+] loweralphanum: 42% (6074867)
[+] loweralpha: 25% (3726129)
[+] numeric: 16% (2346744)
[+] loweralphaspecialnum: 02% (426353)
[+] upperalphanum: 02% (407431)
...
[*] Сложность пароля:
[+] digit: min(0) max(255)
[+] lower: min(0) max(255)
[+] upper: min(0) max(187)
[+] special: min(0) max(255)
[*] Простые маски:
[+] stringdigit: 37% (5339556)
[+] string: 28% (4115314)
[+] digit: 16% (2346744)
[+] digitstring: 04% (663951)
[+] othermask: 04% (576324)
...
[*] Расширенные маски:
[+] ?l?l?l?l?l?l?l?l: 04% (687991)
[+] ?l?l?l?l?l?l: 04% (601152)
[+] ?l?l?l?l?l?l?l: 04% (585013)
[+] ?l?l?l?l?l?l?l?l?l: 03% (516830)
[+] ?d?d?d?d?d?d?d: 03% (487429)
...
ПРИМЕЧАНИЕ: Вы можете уменьшить количество отображаемых выбросов, включив флаг --hiderare, который не будет показывать элементы с частотой встречаемости менее 1%.
Вот что мы можем сразу узнать из приведённого списка:
Последний раздел, "Расширенные маски", содержит наиболее часто встречающиеся маски в формате Hashcat. Отдельные символы можно интерпретировать следующим образом:
?l - один символ в нижнем регистре
?u - один символ в верхнем регистре
?d - одна цифра
?s - один специальный символ
Например, самая первая маска, "?l?l?l?l?l?l?l?l", будет соответствовать всем паролям из строчных букв. Учитывая размер выборки, вы сможете взломать примерно 4% паролей. Однако после генерации первоначального вывода вам может быть интересно использовать фильтры для сужения данных о паролях.
Давайте посмотрим, как пользователи RockYou склонны выбирать свои пароли, используя простую маску "stringdigit" (строка, за которой следуют цифры):
$ python statsgen.py ../PACK-0.0.3/archive/rockyou.txt --simplemask stringdigit -q --hiderare
[*] Анализ паролей в [rockyou.txt]
[+] Проанализировано 37% (5339556/14344390) паролей
ПРИМЕЧАНИЕ: Статистика ниже приведена относительно количества проанализированных паролей, а не общего количества паролей
[*] Длина:
[+] 8: 23% (1267260)
[+] 7: 18% (981432)
[+] 9: 17% (939971)
[+] 10: 14% (750938)
[+] 6: 11% (618983)
[+] 11: 05% (294869)
[+] 12: 03% (175875)
[+] 13: 01% (103047)
[+] 14: 01% (65958)
[*] Набор символов:
[+] loweralphanum: 88% (4720184)
[+] upperalphanum: 06% (325941)
[+] mixedalphanum: 05% (293431)
[*] Сложность пароля:
[+] digit: min(1) max(252)
[+] lower: min(0) max(46)
[+] upper: min(0) max(31)
[+] special: min(0) max(0)
[*] Простые маски:
[+] stringdigit: 100% (5339556)
[*] Расширенные маски:
[+] ?l?l?l?l?l?l?d?d: 07% (420318)
[+] ?l?l?l?l?l?d?d: 05% (292306)
[+] ?l?l?l?l?l?l?l?d?d: 05% (273624)
[+] ?l?l?l?l?d?d?d?d: 04% (235360)
[+] ?l?l?l?l?d?d: 04% (215074)
...
В самом верху вывода указано, какой процент от общего числа паролей был проанализирован. В данном случае, взламывая только пароли, соответствующие маске "stringdigit", можно восстановить лишь около 37% от общего набора, как и было показано в первоначальном выводе. Далее видно, что только 11% паролей этого типа содержат символы, отличные от строчных. Поэтому было бы разумно сосредоточиться только на строках из строчных букв, соответствующих этой маске. Наконец, в разделе "Расширенные маски" мы видим, что большинство паролей "stringdigit" состоят из строки, после которой следуют две или четыре цифры. Используя информацию, полученную из приведённого вывода, мы можем начать создавать мысленный образ шаблонов генерации паролей целевых пользователей.
Существует несколько других фильтров для длины пароля, маски и набора символов:
Length: --minlength и/или --maxlength
Simple Mask: --simplemask [numeric, loweralpha, upperalpha, mixedalpha, loweralphanum и т.д.]
Character sets: --charset [digit, string, stringdigit, digitstring, digitstringdigit и т.д.]
ПРИМЕЧАНИЕ: Можно указать более одного фильтра одного класса, перечислив их через запятую:
--simplemask="stringdigit,digitstring"