Понимание атак по словарю с помощью John the Ripper

Kali LinuxBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы получите практическое понимание атак по словарю с использованием John the Ripper, мощного инструмента для взлома паролей. Вы научитесь эффективно выбирать и комбинировать словари, поймете присущие этому методу атаки ограничения и даже сможете генерировать пользовательские словари для расширения своих возможностей взлома. К концу этой лабораторной работы вы сможете анализировать успешность атак по словарю и оценивать их роль в кибербезопасности.

Выбор подходящих словарей

На этом этапе вы научитесь выбирать и использовать подходящий файл словаря для атаки по словарю с помощью John the Ripper. Атака по словарю пытается взломать пароли, перебирая каждое слово из предопределенного списка (словаря). Эффективность этой атаки сильно зависит от качества и релевантности используемого словаря.

Сначала давайте проверим, установлен ли John the Ripper и присутствуют ли файлы с фиктивными паролями passwords.txt и файл словаря rockyou.txt в вашем каталоге ~/project.

john --version
ls -l ~/project/passwords.txt ~/project/rockyou.txt

Вы должны увидеть вывод, похожий на этот, подтверждающий наличие файлов:

John the Ripper password cracker, version 1.9.0-jumbo-1 ...
-rw-r--r-- 1 labex labex XX Mar XX:XX /home/labex/project/passwords.txt
-rw-r--r-- 1 labex labex XX Mar XX:XX /home/labex/project/rockyou.txt

Теперь давайте выполним базовую атаку по словарю, используя словарь rockyou.txt против нашего файла passwords.txt. Опция --wordlist указывает файл словаря для использования.

john --wordlist=/home/labex/project/rockyou.txt /home/labex/project/passwords.txt

John the Ripper попытается взломать пароли. В случае успеха он отобразит взломанные пароли. Вы можете увидеть вывод, похожий на этот:

Using default input encoding: UTF-8
Loaded 4 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user1)
admin            (user2)
123456           (user3)
labex            (user4)
4g 0:00:00:00 DONE (2023-03-15 10:30) 100.0% (ETA: 2023-03-15 10:30) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.

Чтобы просмотреть взломанные пароли в любое время, вы можете использовать опцию --show:

john --show /home/labex/project/passwords.txt

Эта команда отобразит взломанные пароли и соответствующие им имена пользователей.

user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)

4 password hashes cracked, 0 left

Это демонстрирует, как выбрать и использовать словарь для базовой атаки. Файл rockyou.txt является распространенным примером словаря, содержащего часто используемые пароли.

Комбинирование словарей для комплексных атак

На этом этапе вы научитесь комбинировать несколько словарей для создания более полного списка слов для John the Ripper. Комбинирование словарей может значительно увеличить шансы на взлом паролей, особенно если целевые пароли не найдены в одном словаре.

Сначала создадим еще один небольшой файл словаря с именем common_words.txt в вашем каталоге ~/project.

echo "welcome" > ~/project/common_words.txt
echo "security" >> ~/project/common_words.txt
echo "network" >> ~/project/common_words.txt

Теперь мы объединим rockyou.txt и common_words.txt в новый файл под названием combined_dictionary.txt. Мы можем использовать команду cat для объединения файлов, а затем отсортировать и удалить дубликаты с помощью sort | uniq.

cat ~/project/rockyou.txt ~/project/common_words.txt | sort | uniq > ~/project/combined_dictionary.txt

Давайте проверим содержимое нового файла combined_dictionary.txt, чтобы убедиться, что он содержит слова из обоих исходных словарей и не имеет дубликатов.

cat ~/project/combined_dictionary.txt

Вы должны увидеть отсортированный список уникальных слов из rockyou.txt и common_words.txt.

123456
admin
labex
network
password
secret
security
test
welcome

Теперь используем этот combined_dictionary.txt для атаки по словарю. Для этой демонстрации мы сначала очистим предыдущую сессию взлома John, чтобы обеспечить чистый старт.

john --session=clear

Затем выполним атаку, используя объединенный словарь:

john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt

John the Ripper попытается взломать пароли, используя расширенный список слов. Если бы в passwords.txt были добавлены новые пароли, присутствующие в common_words.txt, они были бы взломаны. Поскольку наш passwords.txt содержит только пароли из rockyou.txt, вывод будет похож на предыдущий шаг, но он демонстрирует процесс использования объединенного словаря.

Using default input encoding: UTF-8
Loaded 4 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user1)
admin            (user2)
123456           (user3)
labex            (user4)
4g 0:00:00:00 DONE (2023-03-15 10:35) 100.0% (ETA: 2023-03-15 10:35) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.

Этот процесс подчеркивает важность наличия разнообразного и полного словаря для эффективного взлома паролей.

Понимание ограничений атаки по словарю

На этом этапе вы изучите ограничения атаки по словарю. Хотя атаки по словарю мощны, они эффективны только против паролей, которые существуют в словаре. Они неэффективны против сложных, уникальных или случайно сгенерированных паролей, которых нет в списке слов.

Чтобы продемонстрировать это ограничение, давайте добавим нового пользователя с надежным, случайным паролем в наш файл passwords.txt. Мы будем использовать пароль, который крайне маловероятно найти в стандартном словаре. Например, P@ssw0rd!23AbC. Мы сгенерируем его MD5-хеш.

echo "user5:$(echo -n 'P@ssw0rd!23AbC' | md5sum | awk '{print $1}')" >> /home/labex/project/passwords.txt

Теперь давайте очистим предыдущую сессию John и снова попытаемся взломать пароли, используя наш combined_dictionary.txt.

john --session=clear
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt

Наблюдайте за выводом. John the Ripper, скорее всего, взломает первые четыре пароля (user1, user2, user3, user4), но не сможет взломать пароль user5, потому что P@ssw0rd!23AbC отсутствует в нашем словаре.

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password         (user1)
admin            (user2)
123456           (user3)
labex            (user4)
4g 0:00:00:00 DONE (2023-03-15 10:40) 80.0% (ETA: 2023-03-15 10:40) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.

Для подтверждения используйте опцию --show:

john --show /home/labex/project/passwords.txt

Вы увидите, что пароль user5 остался не взломанным.

user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)

4 password hashes cracked, 1 left

Это демонстрирует, что атаки по словарю ограничены содержимым словаря. Пароли, которых нет в словаре, особенно сильные и уникальные, не будут взломаны этим методом. Это подчеркивает важность использования надежных, непредсказуемых паролей.

Реализация генерации пользовательских словарей

На этом этапе вы научитесь генерировать пользовательский словарь. Хотя большие готовые словари, такие как rockyou.txt, полезны, иногда требуется создать словарь, адаптированный к конкретной цели или сценарию. Это может включать использование известной информации о цели (например, названий компаний, распространенных фраз, дат) для генерации потенциальных паролей.

Мы будем использовать инструмент crunch, который отлично подходит для генерации списков слов на основе указанных наборов символов и шаблонов. crunch не установлен по умолчанию, поэтому давайте сначала установим его.

sudo apt install -y crunch

Теперь давайте сгенерируем простой пользовательский словарь. Например, мы можем сгенерировать все возможные комбинации строчных букв определенной длины. Создадим словарь всех 4-символьных слов в нижнем регистре.

crunch 4 4 -o ~/project/custom_4char_dictionary.txt -t @@@@
  • 4 4: Указывает минимальную и максимальную длину генерируемых слов (здесь оба значения равны 4).
  • -o ~/project/custom_4char_dictionary.txt: Указывает выходной файл.
  • -t @@@@: Указывает шаблон. @ представляет строчные буквы.

Эта команда сгенерирует большой файл. В демонстрационных целях давайте сгенерируем меньший, более управляемый пользовательский словарь. Мы сгенерируем слова длиной от 3 до 4, используя только строчные буквы и начиная с 'a'.

crunch 3 4 abcdefghijklmnopqrstuvwxyz -o ~/project/custom_small_dictionary.txt -t a%@
  • 3 4: Минимальная длина 3, максимальная длина 4.
  • abcdefghijklmnopqrstuvwxyz: Указывает набор символов для использования.
  • -o ~/project/custom_small_dictionary.txt: Выходной файл.
  • -t a%@: Шаблон. a — это литерал 'a', % представляет цифры, @ представляет строчные буквы. Давайте исправим это, чтобы генерировать только строчные буквы.

Попробуем более релевантный пример для пользовательского словаря: генерация вариаций известного слова, такого как "labex", с добавлением чисел. Для этого мы будем использовать встроенные правила списков слов john, что более практично для распространенных вариаций паролей.

Сначала создадим базовый список слов, содержащий только "labex".

echo "labex" > ~/project/base_word.txt

Теперь мы будем использовать опцию --rules John с распространенным набором правил (например, Wordlist) для генерации вариаций. Это часто используется с базовым списком слов.

john --wordlist=/home/labex/project/base_word.txt --rules=Wordlist --stdout > ~/project/labex_variations.txt
  • --wordlist: Базовый список слов.
  • --rules=Wordlist: Применяет правила списков слов по умолчанию (например, добавление чисел, изменение регистра и т. д.).
  • --stdout: Выводит сгенерированные слова в стандартный вывод.
  • > ~/project/labex_variations.txt: Перенаправляет вывод в файл.

Давайте посмотрим на сгенерированные вариации:

head -n 10 ~/project/labex_variations.txt

Вы увидите такие вариации, как labex1, Labex, labex!, и т. д.

labex
Labex
LABEX
labex1
labex2
labex3
labex4
labex5
labex6
labex7

Это демонстрирует, как генерировать пользовательские словари или вариации слов, что может быть крайне важно для целевых атак, когда доступны конкретные шаблоны или известная информация о цели.

Анализ показателей успешности атаки по словарю

На этом этапе вы проанализируете показатели успешности атаки по словарю в зависимости от используемых словарей и сложности целевых паролей. Понимание показателей успешности помогает оценить эффективность ваших усилий по взлому и уровень безопасности систем.

Мы уже видели, что простые словарные слова легко взламываются, а сложные пароли — нет. Давайте количественно оценим это, посмотрев на количество взломанных паролей по сравнению с общим количеством хешей.

Сначала убедитесь, что сессия John очищена.

john --session=clear

Теперь давайте снова запустим атаку с нашим combined_dictionary.txt против passwords.txt (который теперь включает user5 с надежным паролем).

john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt

После завершения атаки используйте опцию --show, чтобы увидеть результаты.

john --show /home/labex/project/passwords.txt

Вывод покажет взломанные пароли и количество взломанных хешей по сравнению с общим количеством.

user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)

4 password hashes cracked, 1 left

Из этого вывода мы можем рассчитать показатель успешности: (Количество взломанных хешей / Общее количество хешей) _ 100%. В данном случае (4 / 5) _ 100% = 80%.

Этот показатель успешности в 80% указывает на то, что, хотя многие распространенные пароли были взломаны, надежный пароль user5 остался защищенным от этой атаки по словарю. Это подчеркивает, что атаки по словарю очень эффективны против слабых, распространенных или основанных на словаре паролей, но неэффективны против надежных, уникальных паролей.

Для дальнейшего анализа вы можете поэкспериментировать с различными словарями (например, очень маленьким, специфическим словарем против очень большого, общего) и наблюдать, как меняется показатель успешности. Чем больше и релевантнее словарь, тем выше потенциальный показатель успешности против распространенных паролей. Однако для действительно случайных и сложных паролей атаки по словарю всегда будут иметь низкий показатель успешности, что подчеркивает необходимость других методов взлома (например, полного перебора) или, что более важно, надежных политик паролей.

Этот анализ подтверждает важность использования надежных, уникальных паролей, которые нелегко угадать или найти в распространенных словарях, для защиты от подобных атак.

Резюме

В этой лабораторной работе вы получили практический опыт работы с John the Ripper и атаками по словарю. Вы научились выбирать и комбинировать словари для повышения эффективности взлома. Вы также поняли присущие атакам по словарю ограничения, особенно в отношении надежных, уникальных паролей. Кроме того, вы изучили методы генерации пользовательских словарей и проанализировали показатели успешности этих атак. Эта лабораторная работа предоставила вам практическое понимание фундаментальной техники взлома паролей и подчеркнула важность надежных практик безопасности паролей.