
Комбинация Summer2026! кажется надежной: содержит заглавную букву, цифры, специальный символ и достаточную длину. Однако программы для взлома могут подобрать такой вариант быстрее, чем случайную короткую последовательность. Это объясняется тем, что люди создают пароли по узнаваемым шаблонам, а автоматизированные системы успешно имитируют человеческие привычки.
Инструменты вроде Hashcat и John the Ripper применяются для восстановления забытых паролей и оценки защищенности учетных записей. Эффективность зависит от алгоритма хеширования, используемого оборудования и стратегии перебора. Рассмотрим процесс на примере собственных файлов, учебных данных и информации, доступ к которой был согласован в рамках аудита.
Механизм подбора паролей
Сервисы обычно не хранят пароли в открытом виде. При регистрации вычисляется контрольное значение с помощью специальной функции, а при входе эта операция повторяется для введенной комбинации. Совпадение результатов подтверждает правильность пароля. В разговорной речи всю сохраненную запись называют хешем, хотя она может включать также название алгоритма, соль и параметры вычисления.
Хеширование отличается от шифрования. Шифрование предусматривает обратную операцию с ключом, а криптографическое хеширование необратимо. Программа для подбора генерирует кандидата, выполняет вычисления и сравнивает результат с сохраненным значением. Слабый пароль можно угадать, не обращая хеш-функцию. Известные проблемы MD5 и SHA-1 с коллизиями, когда разные данные дают одинаковый хеш, также не означают возможность мгновенного восстановления любого пароля.
Стандартные MD5, SHA-1 и SHA-256 слишком быстро вычисляются для безопасного хранения паролей. Даже криптографически стойкий SHA-256 без специальных механизмов позволяет проверять множество вариантов за короткое время. Для защиты применяют функции, которые намеренно замедляют процесс вычислений, а современные алгоритмы дополнительно используют значительный объем памяти.
После получения базы хешей подбор может осуществляться локально. Ограничения на количество попыток входа, задержки на сайте и CAPTCHA в таких вычислениях не участвуют. Многофакторная аутентификация защищает вход в аккаунт, но не препятствует подбору пароля по уже украденному хешу.
Роль соли и ресурсоемких вычислений
Соль представляет собой случайное значение, генерируемое отдельно для каждой учетной записи и сохраняемое вместе с результатом вычислений. Ее не нужно скрывать. Разные соли обеспечивают различные хеши даже для одинаковых паролей, что исключает возможность использования предварительно вычисленных таблиц для всей базы.
Для несоленых хешей одного типа программа может вычислить кандидата один раз и сравнить результат сразу со множеством записей. При наличии разных солей ресурсоемкую часть операции приходится повторять для каждой соли. Однако утверждение, что миллион записей всегда подбирается в миллион раз дольше, некорректно. Время зависит от количества уникальных солей, параметров функции, оборудования, найденных совпадений и организации процесса.
Соль сама по себе не замедляет отдельную попытку подбора. За сложность вычислений отвечают алгоритм и его настройки. В bcrypt параметр cost определяет вычислительную сложность по экспоненциальному закону. Увеличение значения с 10 до 12 примерно в четыре раза повышает нагрузку. В Argon2id на стоимость влияют объем памяти, количество проходов и степень параллелизма. Название алгоритма без указания параметров недостаточно для оценки уровня защиты.
Современные форматы хранения
Перед началом работы необходимо определить, что именно содержится в файле. Последовательность из 32 шестнадцатеричных символов может представлять MD5, NT-хеш или другое значение. Длина строки дает подсказку, но не определяет алгоритм однозначно. Происхождение записи, код приложения и полный формат обычно более информативны, чем автоматическое распознавание.
В системах встречаются как непосредственно хеши паролей, так и данные для проверки догадок в зашифрованных документах или сетевом обмене. Называть весь набор «хешами» удобно, но для выбора режима в hashcat различия имеют принципиальное значение.
| Формат | Особенности | Режим hashcat |
|---|---|---|
| NT-хеш, часто называемый NTLM-хешем | Результат применения MD4 к паролю в кодировке UTF-16LE без соли. Используется в механизмах хранения паролей Windows. | -m 1000 |
| NetNTLMv2 | Данные ответа на запрос при сетевой аутентификации. Для проверки требуются дополнительные поля обмена, а не только короткий хеш. | -m 5600 |
| sha512crypt | Схема с солью и повторными вычислениями, обычно с префиксом $6$. Отличается от обычного SHA-512. |
-m 1800 |
| bcrypt | Соль и параметр стоимости входят в запись. Часто встречаются префиксы $2a$, $2b$ и $2y$. |
-m 3200 |
| Переносимый формат phpass | Старые записи с префиксами $P$ и $H$. Название WordPress в описании режима не охватывает все современные пароли WordPress. |
-m 400 |
| Argon2id и yescrypt | Схемы с затратами памяти. Поддержку конкретного формата и способ вычислений нужно проверять в используемой сборке. | Выбирается по полной записи и возможностям сборки. |
В Linux локальные парольные записи обычно находятся в /etc/shadow, но единого алгоритма для всех дистрибутивов нет. Многие современные системы, включая Debian, Ubuntu и Fedora, перешли на yescrypt с префиксом $y$. Старые записи могут сохранять sha512crypt до смены пароля. Поэтому обновленная операционная система еще не означает, что все учетные записи используют новый формат.
Аналогичная ситуация возникла в WordPress. Начиная с версии 6.8 стандартная схема хранения паролей использует bcrypt с предварительной обработкой на основе SHA-384. Новые записи по умолчанию начинаются с $wp$2y$. Простое удаление $wp и запуск обычного bcrypt недостаточно, поскольку изменена обработка входного пароля. Старые записи phpass продолжают проверяться и обычно обновляются при следующем успешном входе или смене пароля.
Документы, архивы, кэшированные доменные учетные данные и материалы Kerberos требуют собственных форматов. Например, извлеченная запись зашифрованного архива может содержать соль, параметры получения ключа и фрагмент шифротекста. Расширение файла или знакомое название приложения не заменяют проверки конкретной схемы.
Подготовка данных и инструментов
Hashcat удобен для управляемого перебора с различными способами генерации кандидатов и поддерживает вычисления на совместимом оборудовании. John the Ripper, особенно расширенная сборка Jumbo, полезен разнообразием форматов и утилитами подготовки данных из документов и контейнеров. Формат вывода таких утилит не всегда подходит для hashcat без дополнительной обработки.
Работайте с копией исходного файла и сохраняйте полную парольную запись. Не удаляйте соль, количество итераций и служебные поля, пока не выясните их назначение. Перед подбором сопоставьте структуру с примерами хешей выбранного режима и проверьте обработку одной записи с заранее известным паролем.
В hashcat полезно начать с проверки версии, доступных вычислительных устройств и возможных типов входных данных. Далее предполагается, что команда hashcat доступна из командной строки. В Windows исполняемый файл обычно называется hashcat.exe.
hashcat --versionhashcat -Ihashcat --identify hashes.txt
Опция --identify может предложить несколько подходящих алгоритмов. Выбирать первый результат наугад нельзя. Сообщение об ошибке загрузки часто означает неверный режим или поврежденную запись, а успешная загрузка еще не доказывает правильность выбора. Контрольный пример помогает отделить ошибку подготовки от неудачного словаря.
Почему видеокарта не всегда обеспечивает высокую скорость
Графический процессор эффективно выполняет множество однотипных независимых вычислений. Быстрые хеши особенно выгодно считать параллельно. Однако преимущество зависит от алгоритма, реализации и конкретного оборудования. Правило «bcrypt лучше подбирать на процессоре» слишком упрощено, как и обещание одинакового ускорения для всех форматов.
Argon2id, scrypt и yescrypt усложняют массовый перебор за счет затрат памяти. Значение имеют ее объем, пропускная способность и характер обращений. Даже для одного алгоритма скорость меняется с параметрами записи. Сравнивать результаты для bcrypt с cost=5 и cost=12 без учета настроек бессмысленно.
Встроенный тест производительности позволяет оценить оборудование, но не заменяет короткого запуска на рабочем наборе. Количество солей, длина кандидатов, правила, нагрев и ограничения мощности могут изменить результат. Например, следующая команда проверяет bcrypt на тестовых параметрах программы, которые могут отличаться от параметров вашей базы.
hashcat -b -m 3200
Небольшой словарь может не загрузить видеокарту полностью. Причиной бывают недостаточный объем параллельной работы, накладные расходы и способ генерации кандидатов. Добавлять бессмысленные миллиарды вариантов ради красивой загрузки тоже не стоит. Для аудита важнее количество найденных слабых паролей за отведенное время.
Словари и правила на примере
Словарный режим проверяет готовые варианты из текстового файла. Правила преобразуют каждое слово, например меняют регистр, добавляют цифры или заменяют буквы. Такой подход позволяет проверить человеческие шаблоны без полного перебора всех комбинаций заданной длины.
Создадим учебный хеш пароля Orbit2026!, словарь из двух слов и одно правило. Команды рассчитаны на Bash в Linux с установленными hashcat и стандартными утилитами. Обычный SHA-256 выбран для наглядности. Хранить реальные пользовательские пароли таким способом не рекомендуется.
printf '%s' 'Orbit2026!' | sha256sum | cut -d ' ' -f 1 > hashes.txtprintf '%sn' orbit comet > words.txtprintf '%sn' 'c$2$0$2$6$!' > demo.rulehashcat -m 1400 -a 0 hashes.txt words.txt -r demo.rule --session demo --potfile-path demo.potfilehashcat -m 1400 hashes.txt --show --potfile-path demo.potfile
Параметр -m 1400 выбирает SHA-256, -a 0 включает словарный режим, а -r задает файл правил. Операция c делает первую букву заглавной, остальные строчными. Последовательность $2$0$2$6$! добавляет символы 2026! в конец. Из слова orbit получается нужный кандидат. Опция --show выводит уже найденные результаты из указанного файла.
| Правило | Действие | Пример |
|---|---|---|
$1$2$3 |
Добавить 123 в конец | orbit превращается в orbit123 |
^3^2^1 |
Последовательно добавить символы в начало | orbit превращается в 123orbit |
so0 |
Заменить все строчные o на нули | robot превращается в r0b0t |
o10 |
Записать ноль в позицию 1, считая от нуля | robot превращается в r0bot |
Последний пример показывает, что hashcat умеет изменять отдельные позиции. Ограничение «только все вхождения или ни одного» относится к конкретной операции замены, а не ко всем возможностям программы. Для проверки сложного набора правил используйте --stdout, чтобы сначала увидеть кандидатов без подбора хешей.
hashcat --stdout words.txt -r demo.rule
Маски и реальный объем перебора
Маска описывает допустимые символы в каждой позиции. Подход полезен, когда известна структура пароля, например пять латинских букв и четыре цифры. Словарь при таком переборе не обязателен, программа сама строит комбинации из заданных наборов.
Встроенные обозначения не охватывают автоматически любые языки и символы Unicode. Особенно легко ошибиться с ?a, приняв набор печатных ASCII-символов за все возможные символы компьютера.
?lзадает 26 строчных латинских букв.?uзадает 26 заглавных латинских букв.?dзадает десять цифр.?sзадает специальные печатные ASCII-символы, включая пробел.?aобъединяет предыдущие наборы и содержит 95 символов.?bзадает любой из 256 вариантов байта, а не произвольный символ Unicode.
Маска ?u?l?l?l?l?d?d?d?d охватывает 118 813 760 000 комбинаций. Если условная измеренная скорость составляет миллион проверок в секунду, полный проход займет около 33 часов. При тысяче проверок в секунду потребуется примерно 3,8 года. Расчет предполагает одну проверяемую запись, постоянную скорость и полный проход без досрочной остановки.
Без дополнительных параметров маска задает фиксированную длину. Для перебора более коротких вариантов включают --increment и явно задают границы. Например, следующая команда проверяет цифровые строки длиной от четырех до шести знаков. Пароль из учебного примера в такой набор не входит.
hashcat -m 1400 -a 3 hashes.txt '?d?d?d?d?d?d' --increment --increment-min 4 --increment-max 6
Комбинации, парольные фразы и статистические модели
Словарь и маску можно объединять. Режим -a 6 добавляет маску после словарного слова, а -a 7 ставит перед ним. Режим -a 1 соединяет слова из двух списков. Если первый список содержит 100 тысяч записей, а второй тысячу, получится до 100 миллионов комбинаций еще до дополнительных преобразований.
Несколько файлов правил также способны резко увеличить объем работы. При последовательном применении двух наборов hashcat комбинирует правила между собой. Поэтому очередной большой файл может увеличить длительность запуска гораздо сильнее, чем число полезных кандидатов. Начинать разумно с небольших наборов и добавлять преобразования, которые проверяют конкретную гипотезу.
Длинная парольная фраза не обязательно непредсказуема. Известная цитата, строка песни или распространенное выражение могут попасть в словарь целиком. Случайно выбранные независимые слова дают другую модель стойкости, но здесь важен именно случайный выбор. Придуманная человеком фраза обычно сохраняет смысловые связи и привычный порядок слов.
Модели Маркова используют статистику последовательностей символов, а нейросетевые генераторы учатся предлагать вероятные пароли по примерам. Оба подхода помогают строить кандидатов, но не устраняют необходимость проверять каждый вариант. Полезность генератора нужно измерять на отдельном наборе, который не использовали при обучении и настройке, иначе программа может просто воспроизводить знакомые записи.
Кодировки и ограничения длины
Пароль проходит через несколько представлений. Человек видит символы, текстовый файл хранит байты, а алгоритм может требовать определенную кодировку. Для NT-хеша пароль представляют в UTF-16LE. В UTF-8 обычная русская буква занимает два байта. Перепутанная кодировка словаря способна оставить правильный на вид пароль за пределами фактически проверенных кандидатов.
Визуально одинаковый текст тоже может иметь разные последовательности Unicode, например готовую букву с диакритическим знаком и букву с отдельным комбинируемым знаком. Некоторые приложения приводят ввод к нормальной форме. При аудите нужно воспроизвести обработку конкретного приложения, включая нормализацию, если приложение ее выполняет. Искаженный вывод терминала сам по себе еще не доказывает неправильные вычисления.
У обычного bcrypt широко распространен предел в 72 байта. В зависимости от библиотеки слишком длинный ввод может обрезаться или отклоняться. Для кириллицы предел достигается раньше, чем для латиницы. У hashcat существует отдельное ограничение, связанное с оптимизированными вычислительными ядрами. Флаг -O может ускорить работу, одновременно уменьшив поддерживаемую длину кандидатов. Перед запуском проверьте заявленные программой границы.
Интерпретация результатов и типичные ошибки
Статус Exhausted означает, что программа завершила заданный набор кандидатов. Такой результат не доказывает стойкость оставшихся паролей. Причиной отсутствия совпадений могут быть неподходящий словарь, неправильный формат, кодировка, слишком узкая маска или ограничение длины. Сначала исключите технические ошибки на контрольной записи, затем расширяйте гипотезы.
Файл potfile сохраняет найденные соответствия между хешами и паролями. При повторном запуске hashcat может пропустить уже известные записи. Для рабочего восстановления такая экономия полезна, но сравнение двух методов на общей истории результатов легко исказить. Сравнивайте одинаковые исходные наборы с раздельными файлами результатов и одинаковым бюджетом времени.
Для аудита фиксируйте алгоритм и параметры, число учетных записей, количество уникальных хешей и солей, оборудование, версию программы и длительность запусков. Доля найденных уникальных хешей может отличаться от доли затронутых аккаунтов. Один подобранный несоленый хеш способен соответствовать паролю нескольких пользователей.
Опции --debug-mode=4 и --debug-file помогают увидеть исходное слово, успешное правило и полученный кандидат. Такой журнал показывает успешные совпадения, но не является полным счетчиком всех применений правила. Пересекающиеся преобразования и порядок запуска влияют на то, как распределяются находки между методами.
Хеши, найденные пароли и отладочные журналы остаются чувствительными данными. Храните рабочие файлы в защищенном месте, ограничивайте доступ и заранее определяйте срок удаления. Для отчета обычно достаточно обезличенных примеров и статистики. Копировать действующие пароли в презентацию или загружать корпоративную базу в публичный сервис подбора не стоит.
Рекомендации после проверки
Для нового приложения разумно выбирать Argon2id через поддерживаемую библиотеку. Параметры нужно подбирать под сервер, допустимое время входа и пиковое число одновременных запросов. Единой оптимальной задержки в 100 миллисекунд для всех сервисов нет. Слишком быстрая проверка облегчает подбор, чрезмерно медленная способна перегрузить сам сервис.
При переходе на новую схему пересчитывайте запись после успешного входа или смены пароля. Для давно неактивных аккаунтов нужен отдельный план, поскольку старые хеши могут оставаться в базе годами. Дополнительный секрет, часто называемый перцем, можно хранить отдельно от базы паролей. Такая защита помогает при утечке одной базы, но не заменяет правильного алгоритма и требует продуманной смены секрета.
Пользователям полезнее длинные уникальные пароли и менеджер паролей, чем обязательная перестановка цифры и восклицательного знака. При создании и смене пароля проверяйте варианты по списку распространенных и скомпрометированных значений, разрешайте длинные фразы и вставку из менеджера. Плановая смена ради календаря часто приводит к предсказуемым продолжениям старого пароля. При признаках компрометации пароль, напротив, нужно менять.
В Windows защита не заканчивается сложностью пароля. При подходящих условиях похищенный NT-хеш позволяет пройти аутентификацию без восстановления исходного текста пароля. Такой прием называется Pass-the-Hash. Поэтому вместе с аудитом нужны защита учетных данных, ограничение административных прав и сокращение ненужного использования NTLM. Даже пароль, который не удалось подобрать, не делает украденный материал аутентификации безвредным.
