Сегодня я покажу вам, как создать целевой список слов на основе огромного дампа утечки паролей — rockyou2021. Ниже приведено множество материалов по машинному обучению и большим данным. Если вам не хочется их читать, перейдите непосредственно на страницу загрузки списка слов.
Я был взволнован, увидев выпуск вордлиста RockYou2021, но после загрузки 100 ГБ паролей я понял, что это слишком много для вордлиста, используемого для взлома одного пароля. Было бы разумно выполнить какие-то задачи предварительной обработки, т.е. удалить дубликаты или отсортировать их по вероятности использования. Попытка удалить дубликаты с помощью ядра Linux, например sort -u utils, заняла так много времени, что я решил прекратить это. Даже команде Instant wc -l требуется несколько секунд, чтобы подсчитать количество строк. Задача Big Data была принята! И правильным инструментом для решения этой проблемы стал Apache Spark.
Первая часть преобразований включает в себя следующие шаги (код для любопытных):
- Удалить пустые строки
- Удалите строки, состоящие только из цифр (так как это слишком скучно и может быть легко сгенерировано)
- Удалить дубликаты
- Отбрасывать пароли, у которых недостаточно общих подслов с паролями из этого списка слов. Этот шаг используется для уменьшения размера и выбора паролей с достаточно хорошими характеристиками.
Вторая часть включала в себя обучение классификатора паролей «вероятно русский» по следующим этапам:
- Русские пароли были взяты из данного словаря. Нерусские пароли были взяты путем случайной выборки из вордлиста RockYou2021 (опять же, на python это было невозможно из-за ограничений скорости и памяти, см. код здесь).
- Классификатор обучался на данных с первого шага (код). Отчет о классификации тестового набора приведен ниже:
3. Вывод вероятности пароля был сделан по файлу, полученному из первой части.
4. Пароли отсортированы по вероятности (опять же проблема больших данных, код).
5. Результат был собран и разобран на части. В начало первой части я добавил пароли из этого словаря с 1 млн наиболее часто используемых паролей, а затем удалил дубликаты.
Давайте посмотрим на результаты.
Здесь мы видим крошечную часть нашего словаря с общеупотребительным русским именем — Влад (неофициально Владик). Или вот примеры с названием «jktymrf» «Оленька», формой слова «Ольга», набранной на непереключаемой клавиатуре. Список выглядит довольно скучно, но, похоже, мы достигли цели — сконцентрировали русские пароли в 100 ГБ всевозможных паролей.
Вот так, народ! Пожалуйста, обращайтесь с любыми вопросами в комментарии. Спасибо за внимание!