
быстрый генератор списков паролей, инструмент для создания Smartlist и гибридного маскировочного анализа паролей, написанный на чистом безопасном Rust
Cracken — быстрый генератор списков паролей, инструмент для создания Smartlist и анализа гибридных масок паролей, написанный на чистом безопасном Rust (подробнее в talk/). Вдохновлён такими замечательными инструментами, как maskprocessor, hashcat, Crunch и 🤗 HuggingFace tokenizers.
На конференции DeepSec2021 мы представили новый метод анализа паролей как гибридных масок, использующий общие подстроки в паролях с помощью NLP-токенизаторов (подробнее в talk/).
Наш метод разделяет пароль на подслова вместо обычной маски символов. HelloWorld123! разбивается на ['Hello', 'World', '123!'], поскольку эти три подслова очень распространены и в других паролях.
?w1?w2?l?d).
полная таблица здесь
гибридных масок ОЧЕНЬ БЫСТРО 🦸⚡💨 (см. раздел производительность)Smartlist'ов — компактных и представительных списков подслов из заданных файлов паролей (с использованием 🤗 HuggingFace tokenizers)гибридных масок — построения статистики для лучших кандидатов паролей (опять же очень быстро)cracken -w rockyou.txt -w 100-most-common.txt '?w1?w2?d?d?d?d?s'hashcat, john или любую другую программу для взлома паролей.cracken createcracken entropyгибридные маски для быстрой генерации кандидатов паролей — cracken generate -i hybrid-masks.txtПодробнее см. раздел Использование
скачать (только Linux на данный момент): последний релиз 🔗
другие варианты установки см. в разделе установка
Запуск Cracken:
сгенерировать все слова длиной 8, начинающиеся с заглавной буквы, затем 6 строчных и цифра:
$ cracken -o pwdz.lst '?u?l?l?l?l?l?l?d'
сгенерировать слова из двух списков слов с суффиксом года (1000–2999) <имя><фамилия><год>
$ cracken --wordlist firstnames.txt --wordlist lastnames.lst --charset '12' '?w1?w2?1?d?d?d'
создать Smartlist размером 50 000 из подслов, извлечённых из rockyou.txt
$ cracken create -f rockyou.txt -m 50000 --smartlist smart.lst
оценить энтропию гибридной маски пароля HelloWorld123! с использованием Smartlist'а
$ cracken entropy -f smart.lst 'HelloWorld123!'
hybrid-min-split: ["hello", "world1", "2", "3", "!"]
hybrid-mask: ?w1?w1?d?d?s
hybrid-min-entropy: 42.73
--
charset-mask: ?l?l?l?l?l?l?l?l?l?l?d?d?d?s
charset-mask-entropy: 61.97
На момент написания Cracken, вероятно, самый быстрый в мире генератор списков паролей:
Cracken имеет примерно 25% прирост производительности по сравнению с быстрым maskprocessor от hashcat, написанным на C.
Cracken может генерировать около 2 ГБ/с на ядро.
Подробнее в benchmarks/ 🔗
Почему скорость важна? Типичный GPU может проверять миллиарды паролей в секунду в зависимости от хеш-функции пароля. Если генератор списков паролей выдает меньше слов в секунду, чем может обработать инструмент взлома, скорость взлома снижается.
Cracken использует алгоритм A* для очень быстрого анализа паролей. Он может найти минимальную гибридную маску файла паролей со скоростью ~100 000 паролей/с (cracken entropy -f words1.txt -f words2.txt ... -p pwds.txt)
установить Cracken или скомпилировать из исходников
скачать последний релиз из releases 🔗
Cracken написан на Rust и требует rustc для компиляции. Cracken должен поддерживать все платформы, которые поддерживает Rust.
инструкции по установке cargo 🔗
Есть два варианта сборки из исходников — установка через cargo из crates.io (предпочтительно) или ручная компиляция из исходников.
установка с помощью cargo:
$ cargo install cracken
клонировать Cracken:
$ git clone https://github.com/shmuelamar/cracken
собрать Cracken:
$ cd cracken
$ cargo build --release
запустить:
$ ./target/release/cracken --help
$ cracken --help
Cracken v1.0.0 - быстрый генератор списков паролей
ИСПОЛЬЗОВАНИЕ:
cracken [SUBCOMMAND]
ФЛАГИ:
-h, --help Вывод справки
-V, --version Вывод версии
ПОДКОМАНДЫ:
generate (по умолчанию) - Генерирует слова, разделённые новой строкой, в соответствии с заданной маской и файлами списков слов
create Создать новый smartlist из входного файла(ов)
entropy
Вычисляет приблизительную энтропию пароля или файла паролей.
Энтропия пароля — это log2(размер пространства) пароля.
Существует два типа оценки размера пространства:
* mask — пространство каждого символа (цифры=10, строчные=26...).
* hybrid — поиск минимального разбиения на подслова и наборы символов.
Для справки по конкретной подкоманде выполните: cracken <subcommand> --help
Примеры использования:
## Примеры подкоманды Generate:
# все цифры от 00000000 до 99999999
cracken ?d?d?d?d?d?d?d?d
# все цифры от 0 до 99999999
cracken -m 1 ?d?d?d?d?d?d?d?d
# слова с префиксом pwd - pwd0000 до pwd9999
cracken pwd?d?d?d?d
# все пароли длиной 8, начинающиеся с заглавной, затем 6 строчных, затем цифра
cracken ?u?l?l?l?l?l?l?d
# то же, но вывод в pwds.txt вместо stdout
cracken -o pwds.txt ?u?l?l?l?l?l?l?d
# пользовательский набор символов - все шестнадцатеричные значения
cracken -c 0123456789abcdef '?1?1?1?1'
# 4 пользовательских набора символов - порядок определяет id набора
cracken -c 01 -c ab -c de -c ef '?1?2?3?4'
# 4 строчных символа с суффиксом годов 2000-2019
cracken -c 01 '?l?l?l?l20?1?d'
# начинается с имени из списка слов, затем 4 цифры
cracken -w firstnames.txt '?w1?d?d?d?d'
# начинается с имени из списка слов с фамилией из списка слов, оканчивается символом
cracken -w firstnames.txt -w lastnames.txt -c '!@#$' '?w1?w2?1'
# повторение списков слов несколько раз и комбинирование наборов символов
cracken -w verbs.txt -w nouns.txt '?w1?w2?w1?w2?w2?d?d?d'
## Примеры подкоманды Create Smartlist:
# создать smartlist из одного файла в smart.txt
cracken create -f rockyou.txt --smartlist smart.txt
# создать smartlist из нескольких файлов с несколькими алгоритмами токенизации
cracken create -t bpe -t unigram -t wordpiece -f rockyou.txt -f passwords.txt -f wikipedia.txt --smartlist smart.txt
# создать smartlist с минимальной длиной подслова 3 и максимальным размером подслов, состоящих только из цифр, 6
cracken create -f rockyou.txt --min-word-len 3 --numbers-max-size 6 --smartlist smart.txt
## Примеры подкоманды Entropy:
# оценка энтропии пароля
cracken entropy --smartlist vocab.txt 'helloworld123!'
# оценка энтропии файла паролей с помощью энтропии по маске набора символов (по умолчанию гибридная)
cracken entropy --smartlist vocab.txt -t charset -p passwords.txt
# оценка энтропии файла паролей
cracken entropy --smartlist vocab.txt -p passwords.txt
cracken-v1.0.0 linux-x86_64 компилятор: rustc 1.56.1 (59eed8a2a 2021-11-01)
подробнее: https://github.com/shmuelamar/cracken
$ cracken generate --help
cracken-generate
(по умолчанию) - Генерирует слова, разделённые новой строкой, в соответствии с заданной маской и файлами списков слов
ИСПОЛЬЗОВАНИЕ:
cracken generate [FLAGS] [OPTIONS] <mask> --masks-file <masks-file>
ФЛАГИ:
-h, --help
Вывод справки
-s, --stats
Выводит количество слов, которые будут сгенерированы этой командой, и завершает работу
-V, --version
Вывод версии
ОПЦИИ:
-c, --custom-charset <custom-charset>...
Пользовательский набор символов (строка символов). До 9 пользовательских наборов - ?1 до ?9. Используйте ?1 в маске для первого набора
-i, --masks-file <masks-file>
Файл, содержащий маски для генерации
-x, --maxlen <max-length>
Максимальная длина маски, с которой начинать
-m, --minlen <min-length>
Минимальная длина маски, с которой начинать
-o, --output-file <output-file>
Выходной файл для записи списка слов; по умолчанию stdout
-w, --wordlist <wordlist>...
Имя файла, содержащего слова, разделённые новой строкой (0xA). Примечание: в настоящее время все списки слов загружаются в память
АРГУМЕНТЫ:
<mask>
Маска списка слов для генерации.
Доступные маски:
встроенные наборы символов:
?d - цифры: "0123456789"
?l - строчные: "abcdefghijklmnopqrstuvwxyz"
?u - заглавные: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
?s - символы: " !\"\#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
?a - все символы: ?d + ?l + ?u + ?s
?b - все двоичные значения: (0-255)
пользовательские наборы символов ?1 до ?9:
?1 - первый пользовательский набор, заданный --charset 'mychars'
списки слов ?w1 до ?w9:
?w1 - первый список слов, заданный --wordlist 'my-wordlist.txt'
$ cracken create --help
cracken-create
Создать новый smartlist из входного файла(ов)
ИСПОЛЬЗОВАНИЕ:
cracken create [FLAGS] [OPTIONS] --file <file>... --smartlist <smartlist>
ФЛАГИ:
-h, --help Вывод справки
-q, --quiet Отключает отображение индикатора прогресса
-V, --version Вывод версии
ОПЦИИ:
-f, --file <file>... Входное имя файла; можно указать несколько раз для нескольких файлов
--min-frequency <min_frequency> Минимальная частота слова; актуально только для токенизатора BPE
-l, --min-word-len <min_word_len> Фильтрует слова короче указанной длины
--numbers-max-size <numbers_max_size> Фильтрует числа (только цифры) длиннее указанного размера
-o, --smartlist <smartlist> Выходное имя файла smartlist
-t, --tokenizer <tokenizer>... Используемый токенизатор; можно указать несколько раз.
Один из: bpe, unigram, wordpiece [по умолчанию: bpe] [возможные значения: bpe, unigram, wordpiece]
-m, --vocab-max-size <vocab_max_size> Максимальный размер словаря
$ cracken entropy --help
cracken-entropy
Вычисляет приблизительную энтропию пароля или файла паролей.
Энтропия пароля — это log2(размер пространства) пароля.
Существует два типа оценки размера пространства:
* mask — пространство каждого символа (цифры=10, строчные=26...).
* hybrid — поиск минимального разбиения на подслова и наборы символов.
ИСПОЛЬЗОВАНИЕ:
cracken entropy [FLAGS] [OPTIONS] <password> --smartlist <smartlist>...
ФЛАГИ:
-h, --help Вывод справки
-s, --summary Вывод сводки энтропии для пароля
-V, --version Вывод версии
ОПЦИИ:
-t, --mask-type <mask_type> Тип маски для вывода; один из: charsets(только наборы символов), hybrid(наборы символов+списки слов) [возможные значения: hybrid, charset]
-p, --passwords-file <passwords-file> Файл паролей, разделённых новой строкой, для оценки энтропии
-f, --smartlist <smartlist>... Входной файл smartlist для оценки энтропии; текстовый файл, разделённый новой строкой
АРГУМЕНТЫ:
<password> Пароль для
Cracken лицензирован под MIT. ДАННЫЙ ПРОЕКТ ДОЛЖЕН ИСПОЛЬЗОВАТЬСЯ ТОЛЬКО В ЗАКОННЫХ ЦЕЛЯХ ⚖️
Cracken находится в активной разработке; если вы хотите помочь, ниже представлен частичный план развития этого проекта. Не стесняйтесь отправлять pull request'ы и открывать issues.