- Регистрация
- 5 Апр 2025
- Сообщения
- 99
- Реакции
- 2
- Баллы
- 8
Пароли остаются важным средством обеспечения кибербезопасности, и едва ли им найдется адекватная замена в обозримом будущем. Да, иногда вместо паролей применяют токены, но у них другая, не до конца изученная модель угроз, а ведь зачастую нужно выбирать проверенные средства. Не теряет своей актуальности и задача подбора паролей, причем задумываются над этим направлением работы не только лишь киберпреступники.
В статье мы рассмотрим, зачем ИБ-специалистам и этичным хакерам подбирать пароли, по каким сценариям проводятся подобные атаки, какие для этого используются методики и инструменты. Заодно совершим небольшой экскурс в историю аутентификации при помощи паролей.
Эта статья — адаптированный доклад Александра Песляка (aka Solar Designer) на конференции OffensiveCon24. Докладчик является основателем проекта Openwall, создателем популярного инструмента для подбора паролей John the Ripper и контрибьютором таких проектов, как OpenBSD и Debian.[/background][/size][/font][/color] Зачем использовать и взламывать пароли?
На сегодняшний день пароли являются уникальным фактором аутентификации, тем, «что мы знаем» в двухфакторной аутентификации (2FA) и многофакторной аутентификации (MFA). Они широко применяются для создания различных ключей: например, шифрования данных. Для предоставления seed-ключей, допустим, кошельков, могут использоваться мнемоники, когда выполняется исключительно кодирование. Пассфраза используется как дополнительный фактор над мнемоникой (пассфраза без мнемоники не работает). Обычно применяются сгенерированные порождающие фразы, к которым иногда добавляются дополнительные слова. Схожие концепции и техники применимы и к другим хэшируемым данным с низкой энтропией.
Впрочем, цели и способы работы с паролями в общих чертах понятны любому, кто имеет хоть какое-то отношение к кибербезу. Но зачем нужно подбирать пароли, если ты не злоумышленник? Перечислим по пунктам: Сценарии подбора паролей
Можно выделить четыре основных сценария, которые позволяют безопасникам добиться обозначенных выше результатов.
С основными способами снизить затраты на подбор паролей в общих чертах разобрались. Но как измерить полученные результаты?
При заданной производительности (проверок {пароль, хэш} за единицу времени, возможно, амортизированной) можно выделить следующие метрики.
Как видно из вышесказанного, современные и наиболее гибкие программы по подбору паролей (John the Ripper и Hashcat) поддерживают сотни различных типов и режимов хэширования на многих аппаратных платформах. Для оптимизации каждого типа и режима хэширования требуется масса усилий, так что степень оптимизации на данный момент различается в зависимости от инструментов и платформ. Есть способы многократно использовать оптимизации для разных типов хэшей и/или платформ. Среди таких высокоуровневых работ можно упомянуть john-devkit Алексея Черепанова и fast-small-crypto Аллена Эспиносы, являющиеся специализированными генераторами кода.
OpenCL также абстрагирует большую часть этих процессов, поэтому последняя версия Hashcat использует его, отказавшись от ручной оптимизации под CPU. Также применяется настройка в среде исполнения, потому что при запуске скачанного взломщика паролей на вашей системе его производительность необязательно будет оптимальной.
Автоматическая настройка есть и в John the Ripper, и в Hashcat, но иногда она находит субоптимальные параметры. Обычно пользователю необходимо начать подбор паролей за считанные секунды, и программа по подбору подстраивается под то, что смогла обнаружить за это короткое время. Притом иногда можно добиться лучших результатов при помощи ручной настройки. Фокус атаки на пароли
В любом деле важно оставаться в фокусе — атаки на пароли не исключение. В этом атакующим помимо прочего помогают генераторы кандидатов паролей. Генераторы кандидатов паролей (1980-е)
Еще в 1983 году я написал простую и несовершенную программу для проверки слабых паролей. К сожалению, я поторопился передать коллеге из Калифорнийского университета в Беркли её копию, которую он добавил в пакет безопасности, применявшийся в учебном заведении. Позже кто-то распространил ее, после чего программа стала публично доступной. Генераторы кандидатов паролей (начало 1990-х)
В 1991 году появилась программа Crack Алека Маффета.
Как же бороться с обозначенной выше проблемой? В правилах программы Crack поддерживалось множество команд «отклонить слово если/если не...», которые можно было использовать, чтобы избежать генерации дубликатов слов. В John the Ripper было добавлено больше команд отклонения слов, а также флаги отклонения правил. Эти команды активно используются в стандартном наборе правил, что является нетривиальной задачей. Если входные списки слов ограничены только нижним регистром, то получается эффективно бороться с дубликатами. Особенно благополучно все складывается, если передать на вход список распространённых паролей. Например, при наличии 89,6% уникальных кандидатов паролей для стандартного списка слов и примерно 3 тысяч правил алгоритм подавления дубликатов кандидатов паролей, использующий 256 МБ ОЗУ, улучшает этот показатель до 94,3%, создавая выходной поток примерно в 50 ГБ.
В наборах правил Hashcat обычно не применяется (или почти не применяется) отбрасывание слов, из-за чего возникает гораздо больше дубликатов (например, при наличии 59,7% уникальных кандидатов для того же списка слов с лучшими 3 тысячами правил из OneRuleToRuleThemStill в режиме совместимости с John the Ripper алгоритм подавления дубликатов, занимающий 256 МБ ОЗУ, улучшает этот показатель до 80,6%. Подавление дубликатов кандидатов паролей
Перефразируя известную максиму, не можешь устранить — подавляй. Функция «single crack» John the Ripper использует небольшие кольцевые буферы для каждой соли (а также хэш-таблицы для быстрого поиска), выявляя и подавляя недавно встреченных кандидатов.
С 2018 года Hashcat поддерживает «мозговую» функциональность для анализа кандидатов паролей. Вот некоторые ее преимущества.
На данный момент работает с процессами по отдельности — не подавляет дубликаты между процессами.
[*]
По умолчанию включается, когда используются правила модификации. При низкой частоте попаданий и высокой скорости другой обработки происходит автоматическое отключение. Возможна настройка использования памяти.
[*]
Скорость в несколько миллионов паролей в секунду, но последовательная и синхронизированная с остальными.
[*]
Обладает оппортунистическим (вероятностным) фильтром задаваемого размера и имеет вытеснение.
В статье мы рассмотрим, зачем ИБ-специалистам и этичным хакерам подбирать пароли, по каким сценариям проводятся подобные атаки, какие для этого используются методики и инструменты. Заодно совершим небольшой экскурс в историю аутентификации при помощи паролей.
Эта статья — адаптированный доклад Александра Песляка (aka Solar Designer) на конференции OffensiveCon24. Докладчик является основателем проекта Openwall, создателем популярного инструмента для подбора паролей John the Ripper и контрибьютором таких проектов, как OpenBSD и Debian.[/background][/size][/font][/color] Зачем использовать и взламывать пароли?
На сегодняшний день пароли являются уникальным фактором аутентификации, тем, «что мы знаем» в двухфакторной аутентификации (2FA) и многофакторной аутентификации (MFA). Они широко применяются для создания различных ключей: например, шифрования данных. Для предоставления seed-ключей, допустим, кошельков, могут использоваться мнемоники, когда выполняется исключительно кодирование. Пассфраза используется как дополнительный фактор над мнемоникой (пассфраза без мнемоники не работает). Обычно применяются сгенерированные порождающие фразы, к которым иногда добавляются дополнительные слова. Схожие концепции и техники применимы и к другим хэшируемым данным с низкой энтропией.
Впрочем, цели и способы работы с паролями в общих чертах понятны любому, кто имеет хоть какое-то отношение к кибербезу. Но зачем нужно подбирать пароли, если ты не злоумышленник? Перечислим по пунктам: Сценарии подбора паролей
Можно выделить четыре основных сценария, которые позволяют безопасникам добиться обозначенных выше результатов.
-
Аутентификация для предотвращения или получения доступа к системам при проведении аудитов безопасности и тестов на проникновение. -
Восстановление доступа (альтернатива сбросу пароля). -
Общее развитие: расширение списков подобранных/утекших паролей, обучающие и тестовые датасеты для инструментов, исследовательские проекты, соревнования, архивирование истории, анализ зловредного ПО и бэкдоров, OSINT, восстановление других хэшированных данных. История аутентификации при помощи паролей
Сейчас трудно представить, что когда-то пароли практически не защищались, а их подбор не представлял особого труда. Совершим небольшой экскурс в прошлое и проследим, как эволюционировали и развивались процессы аутентификации с течением времени. Итак, поехали! 1. Хранение паролей в открытом виде (TENEX, Unix, 1960-е — начало 1970-х, CTSS)
Разумеется, такие системы были ненадежны и подвержены взлому.
Причиной проблемы стала коллизия временных файлов текстового редактора. TENEX же столкнулся с проблемой утечки посимвольных таймингов, что усугублялось разбиением на страницы.«В CTSS однажды произошло следующее: любой вошедший пользователь обнаруживал, что вместо стандартного ежедневного сообщения ему отображается файл со всеми паролями».
Фернандо Корбато, «On Building Systems That Will Fail», 1991.
Не обошлось без неприятных сюрпризов и в системе Unix.
2. Хэширование паролей (Multics, начало 1970-х)«Изначально система Unix была реализована с файлом паролей, в котором хранились актуальные пароли для всех пользователей».
Роберт Моррис и Кен Томпсон, «Password Security: A Case History», 1978.
Главная проблема заключалась в том, что подсистема Multics User Control использовала хэш-функцию one-way encryption.
3. Хэширование паролей (Unix, середина 1970-х)«Я знал, что люди могут брать квадратные корни, поэтому возводил пароли в квадрат и выполнял операцию AND с ними и с маской, чтобы отсечь часть битов…
После успешного взлома системы группой экспертов Военно-воздушных сил США, проводивших проверку безопасности Multics в 1972-1974 годах, мы быстро поменяли способ хэширования на новый, более надёжный».
Том Ван Влек, «How the Air Force cracked Multics Security», 1993.
В середине 1970-х годов процессы хэширования несколько усложнились. Но всё равно подбор паролей не представлял особого труда для тех, кто обладал необходимыми навыками.
Фактически подобные схемы использовались и в веб-приложениях, и в Windows начала 2000-х. 4. Соль и другие модификации (Unix, конец 1970-х)«Сrypt(3) в Unix вплоть до шестой редакции использовал программу шифрования, которая имитировала шифровальную машину M-209. Такая машина применялась армией США во время Второй мировой войны. Пароль использовался не как текст, который нужно зашифровать, а как ключ для шифрования константы…
Процесс шифрования одного пробного пароля и проверки результата после изменения алгоритма с целью обеспечения максимальной скорости занимал на PDP-11/70 примерно 1,25 миллисекунды…По сути, требуется не больше времени для сверки зашифрованного пробного пароля со всеми паролями во всём файле паролей или со всей коллекцией зашифрованных паролей, в том числе и собранных из других установок».
Роберт Моррис и Кен Томпсон, «Password Security: A Case History», 1978.
Позже Unix усовершенствовал систему, добавив концепцию соли (последовательность данных, которую добавляют к криптографическому ключу для защиты от декодирования методом перебора), проверку парольных политик и медленную функцию хэширования. 5. BSDI, bcrypt, PBKDF2 (1990-е)
В эти годы единственным значимым изменением стала возможность настройки медленной хэш-функции. 6. Scrypt, Argon2 (2010-е)
В 2009 году автор Scrypt Колин Персиваль в своей статье ввел понятие функций с высоким расходом памяти — memory hardness. Они предназначены для потребления больших объемов памяти компьютера и, таким образом, сильно снижают эффективность параллельных вычислений.
Теперь задача подбора паролей стала двухмерной: для ее решения требовались не только вычислительные ресурсы, но и память. Другие способы аутентификации
Итак, мы кратко рассмотрели развитие парольной аутентификации на историческом таймлайне. Однако существуют и другие механизмы, которые начали появляться в 1990-х годах.
Их отличительная черта — передача пароля на сервер в незашифрованном виде. Зачастую это происходит через Transport Layer Security, но есть и другие способы аутентификации. Обычно такие системы тоже подвержены оффлайн-взлому при помощи определенных данных аутентификации:
Запрос/ответ (разные виды): сниффинг через сеть пары запроса/ответа. -
Kerberos: TGT, база данных пользователей AFS. -
S/Key, OPIE: файл skeykeys. -
SSH: приватный ключ, зашифрованный парольной фразой, хэшированный known_hosts. -
SRP (и другие PAKE): верификаторы. Скорость подбора паролей
Со временем развивались не только механизмы аутентификации, но и методики, направленные на ускорение подбора паролей. Еще в 1983 году были проведены первые соревнования по подбору паролей Unix. Если соль не используется, алгоритмы можно оптимизировать, снизив повторные затраты на хэширование. В хэшах без соли один раз вычисляется хэш от одного кандидата, а затем сравнивается со всеми искомыми хэшами. Такую систему можно ещё сильнее оптимизировать, как это было сделано в John the Ripper: одновременно вычислять целый ряд хэшей и загружать множество хэшей с солью, чтобы выполнять сравнение «многие ко многим». Можно также оптимизировать время построения и хэш-функцию, выводя некоторые операции во внешний цикл. Здесь снова происходит амортизация затрат благодаря многократному использованию окончательных или промежуточных результатов.Вот еще одна важная тема, которая требует отдельного рассмотрения: как снизить общие затраты на достижение тех же результатов при подборе паролей. Возможный способ добиться этого — уменьшить общий объем вычислений. В хорошо продуманных схемах хэширования можно амортизировать очень малый объём вычислений, однако это не единственный способ снижения затрат.
Наряду с вычислительной сложностью есть еще одна важная метрика — пространственная сложность. В реальном мире затраты могут требоваться на оборудование, обслуживание, энергию и так далее. Эти затраты связаны и с вычислительной, и с пространственной сложностью, а также с ограничениями реального мира, которые сильно различаются для тех или иных атакующих. Важно учитывать, сколько CPU и ОЗУ занято на какой промежуток времени, есть ли эти ресурсы в наличии или их надо покупать. После оценки таких затрат может оказаться, что основная проблема теперь вовсе не в CPU. Снижение затрат на подбор паролей на GPU (с 2008 года)
Пионером в этой области стал Андрей Беленко из Elcomsoft. Компания Elcomsoft выпускала коммерческие программы для восстановления паролей, продавая их конечным пользователям и правоохранительным органам. Она занималась несколькими целевыми платформами. GPU использовались для взлома NTLM, LM и сырых хэшей MD5, притом достигалась скорость 100 млн вычислений хэшей в секунду. Поначалу скорость взлома сильно варьировалась (по крайней мере, по современным стандартам). Даже PS3 могла достигать схожих скоростей. Однако показатели быстро совершенствовались: к 2010 году это уже были десятки миллиардов в секунду на многопроцессорных машинах. Стартовала настоящая гонка в области взлома паролей. Снижение затрат на взлом паролей при помощи параллельной обработки
Да, параллельная обработка имеет определенные ограничения при защитном хэшировании или получении ключей. Однако ее потенциал при взломе паролей практически неограничен.
Добавление элементов параллельной обработки (CPU/SIMD, увеличения количества/мощности GPU/FPGA/ASIC) может «произвольно» снизить длительность атаки. При этом необходимо соответствующее увеличение объёма памяти (если только схема хэширования не обеспечивает амортизацию затрат памяти, к тому же большинство старых схем всё равно не использует большой объем памяти).
Хотя параллельная обработка не снижает количество вычислений, она сокращает время, в течение которого заняты ресурсы, и амортизирует их затраты: то есть вместо одних CPU в шасси используются и CPU, и GPU. Снижение затрат на взлом паролей благодаря компромиссу между временем и памятью (TMTO)
Такой подход актуален при отсутствии соли или наличии нескольких часто используемых значений. Тогда можно попробовать предварительно вычислить и частично хранить хэши, чтобы не выполнять основной объем вычислений в последующих атаках.Вот пара примеров успешного применения такой практики: -
QCrack (1995-1997 годы) для взлома crypt(3) на основе DES помогал сэкономить примерно один день на каждый диск. -
Радужные таблицы также облегчают подбор паролей (Филипп Оекслин, 2003 год, на основе работ Мартина Хейлмана, 1980 год). Однако сейчас они довольно редко используются на практике. Подобные таблицы есть только для хэшей без соли, а их подбор и так не представляет особой сложности. Впрочем, при недостатке ресурсов этот инструмент оказывается полезным.
С основными способами снизить затраты на подбор паролей в общих чертах разобрались. Но как измерить полученные результаты?
При заданной производительности (проверок {пароль, хэш} за единицу времени, возможно, амортизированной) можно выделить следующие метрики.
-
Оборудование: площадь кристалла ASIC (кв. мм) при определенной архитектуре и тактовой частоте, а также при конкретном техпроцессе ASIC. -
Мощность(Вт): это не затраты сами по себе, но длительные атаки выливаются в затраты на энергию, коррелирующие с площадью кристаллов.
-
Оборудование: произведение площади кристалла ASIC и времени (area-time, AT), кв. мм * с. -
Энергия: произведение мощности и времени, Дж = Вт * с. Такая метрика коррелирует с AT, позволяя оценивать относительные затраты только в AT.
Как видно из вышесказанного, современные и наиболее гибкие программы по подбору паролей (John the Ripper и Hashcat) поддерживают сотни различных типов и режимов хэширования на многих аппаратных платформах. Для оптимизации каждого типа и режима хэширования требуется масса усилий, так что степень оптимизации на данный момент различается в зависимости от инструментов и платформ. Есть способы многократно использовать оптимизации для разных типов хэшей и/или платформ. Среди таких высокоуровневых работ можно упомянуть john-devkit Алексея Черепанова и fast-small-crypto Аллена Эспиносы, являющиеся специализированными генераторами кода.
OpenCL также абстрагирует большую часть этих процессов, поэтому последняя версия Hashcat использует его, отказавшись от ручной оптимизации под CPU. Также применяется настройка в среде исполнения, потому что при запуске скачанного взломщика паролей на вашей системе его производительность необязательно будет оптимальной.
Автоматическая настройка есть и в John the Ripper, и в Hashcat, но иногда она находит субоптимальные параметры. Обычно пользователю необходимо начать подбор паролей за считанные секунды, и программа по подбору подстраивается под то, что смогла обнаружить за это короткое время. Притом иногда можно добиться лучших результатов при помощи ручной настройки. Фокус атаки на пароли
В любом деле важно оставаться в фокусе — атаки на пароли не исключение. В этом атакующим помимо прочего помогают генераторы кандидатов паролей. Генераторы кандидатов паролей (1980-е)
Еще в 1983 году я написал простую и несовершенную программу для проверки слабых паролей. К сожалению, я поторопился передать коллеге из Калифорнийского университета в Беркли её копию, которую он добавил в пакет безопасности, применявшийся в учебном заведении. Позже кто-то распространил ее, после чего программа стала публично доступной. Генераторы кандидатов паролей (начало 1990-х)
В 1991 году появилась программа Crack Алека Маффета.
Первый проход Crack делает с данными, взятыми из поля пользовательского пароля. В моем тестовом файле на этом проходе можно получить примерно 4% паролей (из суммарных предположительных 15%). Кроме того, этот проход выполняется очень быстро, потому что работает с малым объёмом данных, которые крайне часто используются в качестве паролей.
Первый прогон второго прохода, состоящий из словарных статей в нижнем регистре, дает ещё примерно 5% паролей. Длительность первого прогона зависит от количества поддерживаемых CPU и словарей, но при использовании /usr/dict/words из Ultrix и моего bad_pws.dat на четырёх CPU он не занимает больше нескольких часов.
В дальнейших прогонах процент взломанных паролей постепенно снижается: 2%, 1%, 0,5%… Но они принадлежат людям с достаточно экзотическими паролями, поэтому логично, что для взлома потребуется какое-то время.Руководство пользователя Crack Алека Маффета. Генераторы кандидатов паролей (середина 1990-х)
В середине 1990-х годов программа Crack существенно усовершенствовалась, что упростило задачу фокуса атаки на пароли. Снова обратимся к руководству пользователя Crack Алека Маффета:
Crack 5.0 поддерживает концепцию словарных групп — сличения слов, взятых из выборки сырых текстовых словарей (с одним словом на строку). Это позволяет пользователю группировать словари в «наиболее вероятные», «менее вероятные» и «наименее вероятные» для генерации успешных предполагаемых паролей…
При запуске Crack создаётся ещё две группы словарей: «gecos» и «gcperm». Группа «gecos» содержит только слова, непосредственно извлеченные из информации, хранящейся в файле паролей. Группа «gcperm» содержит слова, механически созданные перестановками и комбинациями частей слов, содержащихся в файле паролей (например, «Alec Muffett» превращается в «AMuffett», «AlecM» и так далее)...
При работе взломщик последовательно использует правила модификации и применяет их к группе словарей. Примеры правил модификации
Правила модификации — это микрокоманды, по одной на строку, определяющие паттерны и действия, применяемые к словам из словаря для генерации последовательности кандидатов паролей. Эволюция правил модификации
Подавитель дубликатов кандидатов паролей John the Ripper использует для хранения фингерпринтов (других быстрых хэшей) элементов хэш-таблицу. Она похожа на «кукушкин фильтр», только имеет не два, а лишь один потенциальный бакет для каждого элемента. В настоящее время бакеты имеют ширину 8 элементов. Когда бакет заполнен, мы просто вытесняем/заменяем фингерпринт (из второй половины). Инструменты для устранения дубликатов из списков слов
Задача таких инструментов — удаление дублирующих строк без изменения и оптимизации их порядка. То есть сортировка дублирующих строк не производится, и не требуется место в памяти или на диске под весь вывод, за исключением этого вывода.
Начиная с версии 1.6 (1998 год) в John the Ripper встроена функция уникальности, позволяющая полностью устранять дубликаты предсказуемым образом. Когда вывод превосходит размер памяти, функция заново считывает уже записанный выходной файл, чтобы выявить дубликаты между тем, что находится в памяти и в выводе.
Среди других инструментов можно упомянуть следующее.
В John the Ripper: препроцессор, флаги отказа от правил (например, пропуск правила, если хэш нечувствителен к регистру), команды для пар слов (используется только для имён и фамилий, пример: johnsmith -> John Smith, John_Smith, John-Smith -p-c 1 <- (?a c $[ _\-] 2 (?a c), другие дополнительные команды.
Те же и дополнительные команды в InsidePro PasswordsPro и Hash Manager.
Те же и дополнительные команды в Hashcat (начиная с PasswordsPro).
«Первый в мире и единственный движок правил внутри ядра» Hashcat (OpenCL и CUDA).
Режим совместимости с Hashcat в John the Ripper. Наборы правил модификации
Старые стандартные правила John the Ripper писались вручную, одни из них предоставляли возможности настройки, другие нет. В свою очередь, правила KoreLogic (2010 год) нацелены на пользователей, имеющих дело с парольными политиками. KoreLogic уже позволяют использовать препроцессор (гораздо более короткий набор, расширяемый примерно до 7 миллионов правил).
Другие правила — InsidePro PasswordsPro — были импортированы сообществом пользователей Hashcat. За долгие годы сообществом было создано множество новых наборов правил (как написанных вручную, так и генерируемых). В результате проведения соревнований Hashcat best64 было выявлены 64 самых эффективных правила, позволяющих взламывать пароли с наибольшей вероятностью.
OneRuleToRuleThemAll — лучшие 25% из всех правил Hashcat (порядка 52 тысяч правил).
OneRuleToRuleThemStill — ещё более оптимизированный набор (около 49 тысяч правил).
-
Позже появились правила парольных фраз для Hashcat и John the Ripper (некоторые из них требуют особых входных данных), а также набор правил «All» John the Ripper (использующий вложенные директивы include) размером примерно в 11 миллионов. Настройка наборов правил модификации
Еще в 2012 году исследователь Симон Марешал занимался автоматической генерацией правил модификации (Rulesfinder) специально для John the Ripper, но в результате его работы не были интегрированы в проект. Изначальную реализацию Rulesfinder забросили, и проект был возрожден только в 2020 году.
В 2022 году в John the Ripper была добавлена функция PerRuleStats, которую применили для изменения порядка 7,6 тысяч строк вывода препроцессора из некоторых созданных вручную правил — теперь они используются по умолчанию.
Благодаря этому «были уменьшены веса, определяющие количество предположений и каждое правило на каждый тестируемый кандидат пароля». Такой порядок хорошо подходит для быстрых и среднескоростных хэшей. Он сгенерирован на основании вывода pwned-passwords-sampler для HIBP v8 (100 миллионов неуникальных, примерно 54 миллионов уникальных хэшей), учитывая уникальные предположения.
Правила были вручную разделены на лучшие (40%), средние (следующие 40%) и худшие (последние 20%). Соответственно, первые обеспечивают основную часть взломов (более 97%), вторые — чуть более 2%, а третьи не дают никаких результатов. Создание целевых словарей
Здесь ключевой момент заключается в том, что под каждый хэш собирается свой словарь, основанный на информации о конкретном пользователе. Дубликаты кандидатов паролей
Теперь поговорим о проблеме, которая часто возникает из-за наличия схожих входных паролей. Рассмотрим следующие строки из списка распространенных паролей, используемые в качестве списка слов: -
password -
password1 -
Password
-
password1 -
password11 -
password1
Как же бороться с обозначенной выше проблемой? В правилах программы Crack поддерживалось множество команд «отклонить слово если/если не...», которые можно было использовать, чтобы избежать генерации дубликатов слов. В John the Ripper было добавлено больше команд отклонения слов, а также флаги отклонения правил. Эти команды активно используются в стандартном наборе правил, что является нетривиальной задачей. Если входные списки слов ограничены только нижним регистром, то получается эффективно бороться с дубликатами. Особенно благополучно все складывается, если передать на вход список распространённых паролей. Например, при наличии 89,6% уникальных кандидатов паролей для стандартного списка слов и примерно 3 тысяч правил алгоритм подавления дубликатов кандидатов паролей, использующий 256 МБ ОЗУ, улучшает этот показатель до 94,3%, создавая выходной поток примерно в 50 ГБ.
В наборах правил Hashcat обычно не применяется (или почти не применяется) отбрасывание слов, из-за чего возникает гораздо больше дубликатов (например, при наличии 59,7% уникальных кандидатов для того же списка слов с лучшими 3 тысячами правил из OneRuleToRuleThemStill в режиме совместимости с John the Ripper алгоритм подавления дубликатов, занимающий 256 МБ ОЗУ, улучшает этот показатель до 80,6%. Подавление дубликатов кандидатов паролей
Перефразируя известную максиму, не можешь устранить — подавляй. Функция «single crack» John the Ripper использует небольшие кольцевые буферы для каждой соли (а также хэш-таблицы для быстрого поиска), выявляя и подавляя недавно встреченных кандидатов.
С 2018 года Hashcat поддерживает «мозговую» функциональность для анализа кандидатов паролей. Вот некоторые ее преимущества.
-
Сетевая архитектура клиент-сервер позволяет подавлять дубликаты между задачами. -
Такая функциональность требует лишь несложной ручной настройки даже для локального использования с одной задачей. -
По документации сервер имеет ограничение производительности примерно в 50 тысяч паролей в секунду. -
Функциональность записывает быстрые хэши кандидатов паролей на диск без ограничений и вытеснения.
На данный момент работает с процессами по отдельности — не подавляет дубликаты между процессами.
[*]
По умолчанию включается, когда используются правила модификации. При низкой частоте попаданий и высокой скорости другой обработки происходит автоматическое отключение. Возможна настройка использования памяти.
[*]
Скорость в несколько миллионов паролей в секунду, но последовательная и синхронизированная с остальными.
[*]
Обладает оппортунистическим (вероятностным) фильтром задаваемого размера и имеет вытеснение.
-
Duplicut (2014 год). В нём множественные потоки используются только тогда, когда файл достаточно велик, чтобы разбивать его на блоки. -
Hashcat-utils rli (2015 год), написанную на C, и работающую в однопоточном режиме независимо от размера файла. -
Rling. Более быстрая многопоточная альтернатива rli с большим количеством функций (2020 год) разработчика Waffle (автора программы подбора паролей MDXfind). Парольные словари
В прошлом при подборе паролей крякеры просто использовали списки словарных слов. Небольшие публичные списки распространенных паролей появились ещё в 1980-х: вспомним хотя бы те, что использовал червь Морриса. Более длинный упорядоченный список поддерживался John the Ripper (1997 год и далее).
Ситуацию сильно изменила утечка RockYou (2009 год, 32,6 миллиона незашифрованных паролей, 14,3 миллиона уникальных): появилась большая выборка паролей, менее подверженная взлому. Эта выборка стала стандартом для обучения, тестирования и использования инструментов парольной безопасности.
По-прежнему применяются списки словарных слов (например, коллекция списков слов Openwall 2003 года, в которой объединено множество источников). Дополнительные публикуемые списки слов скрейпятся, например, из Википедии (Себастьян Раво, 2009, 2012; книги проекта «Гутенберг» (CrackStation, 2010 год). Сообщества хэшкрякеров
На форумах сообществ, например, InsidePro, hashkiller.co.uk, hashes.org (практически все они ныне недоступны) было собрано множество хэшей для взлома и незащищенных паролей, обычно без указания источников и имен пользователей.
Файлы с этих форумов также сохранялись сообществом оборонительной безопасности Have I Been Pwned (HIBP) или Pwned Passwords. Сотни миллионов реальных паролей, ранее обнаруженных при утечках данных, были опубликованы Троем Хантом в виде хэшей SHA-1 и NTLM (рехэшированные из открытого вида) вместе с количеством вхождений в утечках данных.
Инструмент passwdqc способен проактивно сверять новые пароли с HIBP в режиме оффлайн. Незашифрованные словари с hashes.org по-прежнему можно найти в других местах. Можно заново подобрать почти все пароли с HIBP и сгенерировать упорядоченный список утекших паролей. Оптимизация словарей
HIBP v8 огромен: он содержит 847 миллионов уникальных паролей от нескольких миллиардов аккаунтов. Хотя трудно сказать, самая ли это большая коллекция. Что касается RockYou, то он меньше размером, но чище. Обе коллекции используются исследователями безопасности.
Нынешний password.1st из John the Ripper (2022 год, сгенерирован на то время для настройки набора правил модификации) основан на Pwned Passwords v8 (HIBP) с более чем сотней пересечений с RockYou. Инструмент отфильтрован таким образом, что требует более 97 пересечений поверх RockYou. Эти критерии подобраны так, чтобы пароль, используемый только одним человеком много раз, включался в список с очень малой вероятностью.
Сфокусированный список распространённых паролей содержит примерно 1,8 миллионов строк и весит примерно 15 МБ.
Очевидно, что распространять все эти словари совершенно этично, и они высокоэффективны. Вероятностные генераторы кандидатов паролей (середина 1990-х)
А вот еще один подход, который облегчает подбор паролей. Это «методика генерации кандидатов паролей из статистической модели» (Симон Марешал, 2012 год).
В 1995 году был разработан новый алгоритм для исчерпывающего поиска без дубликатов в пространстве ключей при движении вверх по 2D-поверхности Charset ** Length.
В John the Ripper 1.0 появился инкрементный режим (1996 год). Комбинации генераторов кандидатов паролей
Различные генераторы создают и уникальные, и частично пересекающиеся пароли. Желательно использовать разные генераторы и подавлять перекрёстные дубликаты. Однако на практике чаще всего применяются множественные генераторы, но без подавления. Стандартный вызов John the Ripper подавляет дубликаты между списком слов и проходами инкрементального режима. «Мозг» Hashcat может действовать так же. Ещё один способ подавления заключается в исчерпывающем переборе простых паттернов с последующим исключением их и сложных прогонов.
Генераторы можно оптимизировать для использования с некоторыми другими. Например, вероятностные генераторы обычно применяются после нескольких прогонов со списками слов. Обучение вероятностного генератора наиболее оптимальной работе зачастую может приводить к переобучению и взлому меньшего количества паролей вне списка слов. При сравнениях это часто не учитывается, что неверно. Процесс подбора паролей
Наилучшие результаты достигаются при использовании множества подходов на множестве этапов, наряду с применением различных генераторов кандидатов паролей. Последующие этапы должны основываться на уже полученном прогрессе подбора. Подобранные пароли должны применяться в качестве списка слов для повторного обучения.
Существуют инструменты для автоматизации процесса и управления задачами. Их функциональность частично пересекается с распределенной обработкой и координацией команды. Такие инструменты, например, применяются в соревнованиях и работе «красных команд». На основе результатов соревнований команды пишут статьи, в частности, по соревнованиям Crack Me If You Can, проводимым с 2010 года. В таких статьях можно поискать полезную информацию об организации рабочего процесса. Будущее взлома паролей Скорости
Очевидно, в дальнейшем будет повышаться вычислительная мощность CPU, GPU и FPGA, что повлияет на скорость хэширования. Возможные способы противостоять этому — настройка генерации хэшей и ключей, добавление в алгоритмы дополнительных итераций и задействование большего объема памяти. Надеюсь, так можно будет ограничить скорость проверки той же тысячей в секунду на близких по стоимости машинах.
Также в будущем нас ждет развитие и увеличение размеров публично доступных ASIC и FPGA с открытой архитектурой (или с обеими технологиями на чипе). Как вариант, возможно использование тайловой архитектуры, при которой можно применять один битовый поток для разных размеров FPGA (такой технологии пока не существует для коммерческих FPGA, но вероятно это изменится в обозримом будущем). Ждёт нас и увеличение количества тайлов, что позволит одновременно работать большему количеству ядер.
Среди менее крупных изменений можно ожидать дальнейшие оптимизации, например, скоро появится bitslicing хэшей Lotus/Domino.Оптимальный порядок поиска
В этой сфере следует ожидать улучшенной поддержки парольных фраз (инструменты, датасеты) и произвольной токенизации, дальнейшего развития нейронных сетей, решения проблемы дубликатов генеративных нейросетей. Также будут публиковаться заранее сгенерированные и отфильтрованные данные. В дальнейшем будет выполняться скрейпинг и обучение нейросетей на пользовательских данных. Фичи
Выделим несколько наиболее перспективных фичей в сфере подбора паролей. Прежде всего, это поддержка ПЗУ yescrypt. Нельзя забывать и об использовании обобщенной (unified) памяти NVIDIA, благодаря чему упрощается распределенная обработка (более простая настройка, динамическое переназначение, безопасность). Вместе с тем в перспективе появятся специализированные вспомогательные UI или LLM, которые упростят работу с программами, в том числе и для неопытных конечных пользователей. Вместо выводов
Подбор паролей лишь на первый взгляд кажется простой задачей. Он обладает низким порогом входа и плавной кривой обучения, но создание собственных инструментов для подбора паролей требует серьезных знаний computer science и разработки с нетривиальными социальными аспектами. Это по-прежнему активно развивающаяся и высококонкурентная сфера, приветствующая новых участников. Здесь крайне важна эффективность и оптимизация работы, все большее значение приобретают победы в специализированных соревнованиях, успехи в подборе пассфраз к криптокошелькам и так далее.
Как и в любой другой сфере наступательной информационной безопасности, постоянно появляются новые методики и результаты, которые влияют на архитектуру и параметры очередных защитных средств. Например, Yescrypt был спроектирован с опорой на технологии и методики, реализованные в John the Ripper.
-
Оффлайн-подбор локальных копий хэшей, дампов трафика, зашифрованных данных (именно этому, в основном, и будет посвящена наша статья). -
Онлайн-перебор на удаленных системах. В качестве примера можно вспомнить программу для перебора на авторизациях связок логин-паролей THC Hydra. Продукт разработал van Hauser. -
Онлайн-взлом удаленной системы с непривилегированным локальным доступом, определение паролей по сторонним каналам (тайминги сети или нажатия клавиш) и физический взлом защищенного от вмешательства устройства. -
Сброс паролей, их утечка/извлечение в открытом виде, обход проверки и прямое извлечение ключа посредством взлома. Цели атак
Как известно, цель оправдывает определяет средства. В зависимости от того, для чего именно выполняется атака с подбором паролей, применяются соответствующие инструменты. Так, одни решения предназначены для извлечения паролей аутентификации, другие — для получения доступа к зашифрованным файлам и файловым системам.
Впрочем, наиболее гибкие современные программы для подбора паролей или, другими словами, хэшкрякинга (John the Ripper и Hashcat), могут работать не только с паролями аутентификации: они вполне применимы для достижения других целей атак.
Например, John the Ripper позволяет оперировать так называемыми «не-хэшами» (non-hash): для этого в программе есть набор инструментов *2john.py, извлекающий из файлов псевдохэши. В свою очередь, инструмент BTCrecover применяется для подбора passphrase при использовании конкретной мнемоники. Оптимизация подбора
Достижение перечисленных целей требует немалых ресурсов. Чтобы подбор паролей не растянулся до бесконечности, этот процесс необходимо оптимизировать. И здесь снова приходят на помощь специализированные решения.
Обозначим основные моменты, которые позволяют оптимизировать работу программ для хэшкрякинга: -
Соотношение скорости и экономических затрат на подбор (оборудование, обслуживание, энергопотребление). Поиск паролей выполняется в оптимальном порядке, при котором избегается или минимизируется дублирование кандидатов паролей. Таким образом повышается уникальность кандидатов, оптимизируется использование памяти. Также проводятся сопоставление с загруженными хэшами или проверки корректности расшифровки. -
Требования к памяти и накопителю относительно скорости. -
Структура словарей: наиболее популярные пароли помещаются в начало, удаляются дубли и мусорные (слишком длинные и нереалистичные) пароли. -
Создание целевых словарей для каждого из хэшей. -
Циклы обратной связи и рабочие процессы (смена оптимального порядка поиска на основании уже взломанных паролей).

