Введение
В этой лабораторной работе вы изучите процесс взлома хешей SHA1 с помощью John the Ripper, мощного инструмента с открытым исходным кодом для взлома паролей. Понимание того, как взламываются хеши, имеет решающее значение для понимания уязвимостей в безопасности паролей и внедрения более надежных мер безопасности. Вы научитесь генерировать хеши SHA1 из паролей в открытом тексте, подготавливать эти хеши для John the Ripper, а затем использовать этот инструмент для восстановления исходных паролей. Этот практический опыт даст представление об эффективности алгоритмов хеширования и важности надежных, уникальных паролей.
Генерация хешей SHA1 из паролей
На этом этапе вы сгенерируете хеши SHA1 из нескольких образцов паролей. SHA1 (Secure Hash Algorithm 1) — это криптографическая хеш-функция, которая принимает входные данные и выдает хеш-значение длиной 160 бит (20 байт), обычно представляемое в виде 40-значного шестнадцатеричного числа. Хотя SHA1 считается криптографически уязвимым для определенных приложений из-за наличия уязвимостей, он по-прежнему полезен для демонстрации принципов взлома хешей.
Сначала создадим файл с именем passwords.txt, который будет содержать несколько простых паролей.
echo -e "password123\nlabexuser\nsecretpass" > passwords.txt
Теперь мы будем использовать команду sha1sum для генерации хеша SHA1 для каждого пароля в файле passwords.txt. Опция -t указывает sha1sum читать в текстовом режиме, а опция -b указывает читать в двоичном режиме. Мы будем использовать xargs для передачи каждой строки файла в качестве аргумента команде sha1sum.
cat passwords.txt | xargs -I {} sh -c 'echo -n "{}" | sha1sum' > hashes.txt
Эта команда считывает каждый пароль из passwords.txt, передает его по конвейеру команде sha1sum (используя echo -n для предотвращения добавления символа новой строки, который изменил бы хеш), а затем перенаправляет вывод (хеш и исходный пароль) в новый файл с именем hashes.txt.
Просмотрим содержимое файла hashes.txt:
cat hashes.txt
Вы должны увидеть вывод, похожий на этот, где каждая строка содержит хеш SHA1, за которым следует исходный пароль:
5d41402abc4b2a76b9719d911017c592070b4783 password123
1234567890abcdef1234567890abcdef12345678 labexuser
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 secretpass
Примечание: Второй столбец (исходный пароль) включается командой sha1sum по умолчанию. Для взлома John the Ripper обычно требуется только сам хеш. Мы подготовим файл для John на следующем шаге.
Подготовка файла хешей для SHA1
На этом этапе вы подготовите файл hashes.txt таким образом, чтобы он содержал только хеши SHA1, что является форматом, ожидаемым John the Ripper для взлома. Файл hashes.txt в настоящее время содержит как хеш, так и исходный пароль, что не является идеальным для ввода в John.
Мы извлечем только значения хешей из hashes.txt и сохраним их в новый файл с именем sha1_hashes_for_john.txt. Для этого мы можем использовать команду awk, поскольку она позволяет легко выбирать определенные столбцы из файла.
awk '{print $1}' hashes.txt > sha1_hashes_for_john.txt
Эта команда указывает awk напечатать первое поле ($1) каждой строки в hashes.txt и перенаправить вывод в sha1_hashes_for_john.txt.
Теперь давайте проверим содержимое нового файла, чтобы убедиться, что он содержит только хеши:
cat sha1_hashes_for_john.txt
Вы должны увидеть вывод, похожий на этот, где перечислены только хеши SHA1:
5d41402abc4b2a76b9719d911017c592070b4783
1234567890abcdef1234567890abcdef12345678
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
Этот файл теперь готов к использованию в качестве входных данных для John the Ripper.
Взлом хешей SHA1 с помощью John the Ripper
На этом этапе вы будете использовать John the Ripper для взлома хешей SHA1, хранящихся в файле sha1_hashes_for_john.txt. John the Ripper — это быстрый взломщик паролей, доступный для многих операционных систем. Его основная цель — обнаружение слабых паролей Unix. Он поддерживает различные типы хешей, включая SHA1.
Мы будем использовать John the Ripper в режиме "словарной атаки" (wordlist mode) для попытки взлома хешей. Этот режим перебирает пароли из предопределенного списка (словаря). Для этой лабораторной работы мы создадим простой словарь, содержащий исходные пароли. В реальных сценариях вы бы использовали гораздо больший и более полный словарь.
Сначала создайте простой файл словаря с именем wordlist.txt:
echo -e "password123\nlabexuser\nsecretpass\nwrongpass\notherpass" > wordlist.txt
Теперь запустите John the Ripper с подготовленным файлом хешей и словарем:
john --format=raw-sha1 --wordlist=wordlist.txt sha1_hashes_for_john.txt
Разберем команду:
john: Команда для вызова John the Ripper.--format=raw-sha1: Указывает, что входные хеши являются "сырыми" хешами SHA1. John поддерживает множество форматов, и указание правильного формата помогает ему эффективно взламывать.--wordlist=wordlist.txt: Указывает John использоватьwordlist.txtв качестве словаря для взлома.sha1_hashes_for_john.txt: Файл, содержащий хеши для взлома.
После выполнения команды John попытается взломать хеши. В случае успеха он отобразит взломанные пароли.
Вы должны увидеть вывод, похожий на этот, указывающий на взломанные пароли:
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (Raw-SHA1 [SHA1])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (5d41402abc4b2a76b9719d911017c592070b4783)
labexuser (1234567890abcdef1234567890abcdef12345678)
secretpass (5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8)
3g 0:00:00:00 DONE (2023-10-27 10:30) 100.0% (ETA: 00:00:00) 3.000g/s 100.0p/s 100.0c/s 100.0C/s password123..secretpass
Session completed.
Чтобы снова просмотреть взломанные пароли, вы можете использовать опцию --show:
john --show sha1_hashes_for_john.txt
Эта команда отобразит все хеши, которые John успешно взломал и сохранил в своем внутреннем файле "pot".
password123:5d41402abc4b2a76b9719d911017c592070b4783
labexuser:1234567890abcdef1234567890abcdef12345678
secretpass:5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
3 password hashes cracked, 0 left
Анализ производительности взлома SHA1
На этом этапе вы кратко проанализируете производительность John the Ripper при взломе хешей SHA1. Хотя в нашем примере используется очень маленький словарь и простые пароли, в реальных сценариях производительность взлома является критически важным фактором.
John the Ripper предоставляет некоторые метрики производительности в своем выводе, такие как "g/s" (guesses per second — угадываний в секунду) и "p/s" (passwords per second — паролей в секунду). Эти метрики показывают, сколько попыток подбора паролей John может выполнить в секунду.
Давайте снова запустим команду взлома и внимательно посмотрим на вывод:
john --format=raw-sha1 --wordlist=wordlist.txt sha1_hashes_for_john.txt
Найдите в выводе строки, похожие на эту:
3g 0:00:00:00 DONE (2023-10-27 10:30) 100.0% (ETA: 00:00:00) 3.000g/s 100.0p/s 100.0c/s 100.0C/s password123..secretpass
Здесь 3.000g/s указывает, что John обработал 3 угадывания в секунду, а 100.0p/s — 100 паролей в секунду. Для такого небольшого набора хешей и крошечного словаря взлом происходит почти мгновенно.
Факторы, влияющие на производительность взлома:
- Сложность пароля: Простые, распространенные пароли взламываются гораздо быстрее, чем сложные и уникальные.
- Размер и качество словаря: Больший и более релевантный словарь увеличивает шансы на взлом, но также увеличивает затрачиваемое время.
- Алгоритм хеширования: Некоторые алгоритмы хеширования разработаны так, чтобы быть вычислительно интенсивными (например, bcrypt, scrypt), чтобы замедлить попытки взлома, в то время как другие, такие как raw SHA1, относительно быстры.
- Оборудование: Вычислительная мощность (CPU/GPU) машины для взлома значительно влияет на производительность.
Этот краткий анализ показывает, что даже с таким мощным инструментом, как John the Ripper, сила исходного пароля и алгоритм хеширования играют решающую роль во времени, необходимом для взлома хеша.
Понимание характеристик хеша SHA1
На этом этапе вы получите более глубокое понимание характеристик хеша SHA1 и того, почему важно использовать более надежные алгоритмы хеширования для хранения паролей.
Ключевые характеристики SHA1:
- Фиксированный размер вывода: SHA1 всегда производит хеш-значение длиной 160 бит (20 байт) независимо от размера входных данных. Именно поэтому вы видите шестнадцатеричную строку из 40 символов.
- Односторонняя функция: Обратить процесс хеширования, чтобы получить исходные входные данные из хеша, вычислительно невозможно. Именно поэтому взлом полагается на атаки перебора (brute-force) или словарные атаки.
- Детерминированность: Одинаковые входные данные всегда будут давать одинаковый хеш SHA1. Это свойство необходимо для проверки целостности данных.
- Лавинный эффект: Небольшое изменение во входных данных (даже одного бита) приводит к кардинально другому выходному хешу. Это затрудняет угадывание входных данных на основе сходства хешей.
Почему SHA1 считается небезопасным для хранения паролей:
- Коллизионные атаки: В 2017 году была продемонстрирована практическая коллизионная атака на SHA1. Коллизия возникает, когда два разных входных значения дают одинаковый хеш-вывод. Хотя нахождение коллизии напрямую не раскрывает исходный пароль, это подрывает целостность хеш-функции и может быть использовано в различных атаках.
- Скорость: SHA1 относительно быстро вычисляется. Эта скорость в сочетании с современной вычислительной мощностью делает его уязвимым для атак перебора и словарных атак, особенно для распространенных или слабых паролей.
- Отсутствие "соли" (Salting): "Сырые" хеши SHA1, как показано в этой лабораторной работе, по своей сути не включают "соль". Соль включает добавление уникальной случайной строки к каждому паролю перед хешированием. Это предотвращает эффективность предварительно вычисленных радужных таблиц (rainbow tables) и гарантирует, что два одинаковых пароля будут иметь разные хеши, даже если они хранятся в одной базе данных.
Для безопасного хранения паролей сегодня рекомендуются более надежные, медленные и "соленые" алгоритмы хеширования, такие как bcrypt, scrypt или Argon2. Эти алгоритмы разработаны так, чтобы быть вычислительно интенсивными, что делает атаки перебора гораздо более трудоемкими и дорогостоящими.
Эта лабораторная работа продемонстрировала основные принципы взлома хешей с использованием SHA1. Она служит напоминанием о важности использования надежных алгоритмов хеширования и сильных, уникальных паролей для защиты конфиденциальной информации.
Резюме
В этой лабораторной работе вы успешно научились генерировать хеши SHA1 из обычных текстовых паролей и подготавливать их для взлома. Затем вы использовали John the Ripper в режиме словаря для взлома этих хешей SHA1, восстановив исходные пароли. Кроме того, вы получили представление о факторах, влияющих на производительность взлома хешей, и поняли ключевые характеристики SHA1, включая причины, по которым он больше не считается безопасным для хранения паролей из-за своей скорости и уязвимости к коллизионным атакам. Этот практический опыт подчеркивает важность использования надежных, уникальных паролей и современных, устойчивых алгоритмов хеширования, таких как bcrypt, scrypt или Argon2, для безопасного управления паролями.


