При помощи современного оборудования, мы можем почти наверняка расшифровать быстрый хеш, например, MD5, NTLM, SHA1 и т. д. за разумное время.
Автор: NETMUX
Что я подразумеваю, когда говорю о взломе пароля длиной 12 и более символов? Я утверждаю, что при помощи современного оборудования, например, данной «бюджетной» установки, мы можем почти наверняка расшифровать быстрый хеш, например, MD5, NTLM, SHA1 и т. д. за разумное время. На практике подбор в лоб последовательностей длиной 8 и более символов бесперспективен в случае с распространенными алгоритмами хеширования. Когда же мы касаемся особенностей национального языка и человеческой психологии (например, среднее английское слово длиной 4.79 символа, а люди предпочитают использовать несколько слов при составлении паролей размером 10 и более символов), то здесь уже открываются более интересные возможности с точки зрения подбора подобных паролей. Более подробно о различных инструментах подбора рассказано в книге Hash Crack.
Почему пароли длиной 12 и более символов уязвимы?
Люди, создающие пароли длиной 10 и более символов вручную, как правило, используют стандартные слова и фразы. Почему? Потому что запомнить пароль «horsebattery123» намного проще, чем «GFj27ef8%k$39». Здесь мы сталкиваемся с инстинктом следования по пути наименьшего сопротивления, который, в случае с созданием паролей, будет проявлен до тех пор, пока менеджеры паролей не станут использоваться более массово. Я согласен, что серия рисунков, посвященная устойчивости пароля, вполне имеет право на жизнь, но только в случае небыстрыми алгоритмами хеширования, наподобие bcrypt. В этой статье будут показаны примеры атак типа Combo (когда комбинируются элементы словаря) и Hybrid (когда к атаке типа Combo добавляется прямой перебор) при помощи утилиты Hashcat, которые, надеюсь, расширят ваш арсенал. В примерах ниже будет продемонстрировано, как злоумышленник может эффективно перебрать пространство ключей и взломать пароли, которые на первый взгляд кажутся устойчивыми.
Базовая информация об атаках типа Combo и Hybrid
Комбинационная атака (Combo): комбинируются все элементы из двух словарей.
Пример
Входные данные: dictionary1.txt dictionary2.txt
Комбинации паролей:
pass => password, passpass, passlion
word => wordpass, wordword, wordlion
lion => lionpass, lionword, lionlion
Гибридная атака (Hybrid): представляет собой атаку по словарю с примесью комбинаций сгенерированных по определенному шаблону.
Пример
Входные данные: dictionary.txt ?u?l?l
Комбинации паролей:
pass => passAbc, passBcd, passCde
word => wordAbc, wordBcd, wordCde
lion => lionAbc, lionBcd, lionCde
Примечание 1: Последовательность генерации паролей не совсем точна и приведена для описания общей идеи.
Примечание 2: Более подробные объяснения приведены на сайте Hashcat.
Комбинационная атака
Рассмотрим комбинационную атаку с использованием словаря, состоящим из 10 тысяч наиболее употребительных слов в порядке убывания популярности. Анализ проводился при помощи N-грамм и частотного анализа на базе триллионного сборника, собранного поисковой системой Google.
Рассмотрим пример двух случайно выбранных слов, соединенных в пароль длиной 16 символов, например shippingnovember и осуществляем комбинационную атаку на данный пароль, если бы использовался алгоритм MD5:
Пример
hashcat -a 1 -m 0 hash.txt google-10000.txt google-10000.txt
При переборе всех комбинаций, состоящих из слов, соединенных друг с другом, при помощи современных аппаратных средств пароль взламывается менее чем за одну секунду. При работе с другими, более медленными, алгоритмами пароль также подбирается за разумное время.
Рисунок 1: Время подбора пароля shippingnovember при помощи комбинационной атаки
Критики могут возразить, мол, если вначале каждого слова сделать заглавные буквы или добавить цифру или специальный символ, то новый пароль (например, ShippingNovember) будет более устойчив. Проверим эту теорию на практике и скомбинируем словарь google-10000 в единый большой массив паролей при помощи утилиты combinator.bin, что позволит нам комбинировать полученные слова в сочетании с правилами.
Пример
combinator.bin google-10000.txt google-10000.txt > google-10000-combined.txt
Теперь, когда у нас есть словарь комбинаций, мы добавляем правила с целью подбора модифицированного пароля (ShippingNovember).
Пример
hashcat -a 0 -m 0 hash.txt google-10000-combined.txt -r best64.rule
Рисунок 2: Время подбора пароля ShippingNovember при помощи словаря комбинаций и правил
Новый пароль расшифрован за 28 секунд. Схожим образом добавляются правила, учитывающие специальные символы, различное местонахождение комбинации и так далее. Думаю, вы уловили суть.
Пароли из 3 слов
Используя созданный словарь комбинаций, попробуем подобрать пароль из трех слов, например «securityobjectivesbulletin», при помощи комбинационной атаки.
Пример
hashcat -a 1 -m 0 hash.txt google-10000-combined.txt google-10000.txt
Рисунок 3: Время подбора пароля securityobjectivesbulletin
Схожий пароль с добавлением других символов взломается чуть медленнее. Улавливаете тенденцию?
Пароли из 4 слов
Теперь рассмотрим взлом паролей, состоящих из четырех слов (пример: «sourceinterfacesgatheredartists»). В этом случае пространство ключей увеличивается до 10.000.000.000.000.000 кандидатов, но в итоге подбор занимает разумное время. В основном из-за того, что используется алгоритм MD5. Мы создаем новый словарь комбинаций и осуществляем комбинированную атаку при помощи Hashcat.
Пример
hashcat -a 1 -m 0 hash.txt google-10000-combined.txt google-10000-combined.txt
Рисунок 4: Время подбора пароля sourceinterfacesgatheredartists
Процесс перебора при помощи современных аппаратных средств мог занять 4 дня, но правильный кандидат был найден в течение 5 часов 35 минут. Добавление цифр или специальных символов сделало бы пароль вне нашей досягаемости, но использование лишь четырех случайных слов делает пароль уязвимым.
Гибридная атака
Гибридные атаки требуют большей находчивости, но когда нужный шаблон найден, находка становится сродни золотому слитку. Особенно незабываемые ощущения доставляет прокрутка расшифрованных паролей в терминале.
Атака по словарю Google-10000 + маска
В первом примере мы будем использовать тот же словарь из 10 тысяч наиболее встречающихся слов в качестве базы для генерации кандидатов для перебора. Затем мы воспользуемся пакетом утилит PACK (Password Analysis and Cracking Kit) и словарем hashesorg251015.txt с сайта weakpass.com. Я выбрал именно этот словарь из-за высокого рейтинга успешности и относительно небольшого размера. Мы будем изучать словарь hashesorg и по результатам анализа создадим маски на базе наиболее популярных паролей, ограниченных определенных набором символов. Эти маски будут использоваться в начале и в конце базовых слов из словаря google-10000.txt.
Пример
Вначале сгенерируем статистику по маскам на базе паролей длиной 5-6 символов и запишем результаты в отдельный файл (учтите, что процесс генерации может занять некоторое время).
python statsgen.py hashesorg251015.txt --minlength=5 --maxlength=6 --hiderare -o hashesorg_5or6.masks
Затем преобразуем маски в формат Hashcat (файл .hcmasks) для последующего использования в гибридных атаках.
python maskgen.py hashesorg_5or6.masks --optindex -o hashesorg_5or6.hcmask
Далее в режиме 6 в качестве параметров указывает словарь и набор масок. Алгоритм перебора будет выглядеть следующим образом: берется первая маска и комбинируется с каждым словом из словаря, затем вторая маска, третья и так далее, пока не закончится весь перечень масок. Некоторые атаки могут заканчиваться очень быстро, некоторые осуществляются чуть дольше. Во время тестирования будем подбирать пароль «environmentsqaz472»
Пример
hashcat -a 6 -m 0 hash.txt google-1000.txt hashesorg_5or6.hcmask
Рисунок 5: Время перебора пароля environmentsqaz472
Подбор занял около 20 минут. Вначале мы добрались до маски ?l?l?l?d?d?d, а затем в течение 14 взломали пароль.
Атака на базе словаря Rockyou + Rockyou-1-60.hcmask
Теперь воспользуемся набором масок, который идет в комплекте с утилитой Hashcat и сгенерирован на основе паролей из набора Rockyou. Данный набор масок разбит на отдельные порции, которые с возрастанием диапазона номеров возрастают по размеру. Размер, как я предполагаю, возрастает из-за процента паролей, на базе которых сгенерирована конкретная порция масок. Мы будем использовать файл с именем rockyou-1-60.hcmask, поскольку там наиболее ходовые маски, которые хорошо зарекомендовали себя при гибридных атаках. Этот набор масок мы будем комбинировать с паролями из словаря Rockyou. В случае с другими словарями будьте осторожны и используйте файлы не слишком большого размера. Иначе атака будет занимать СЛИШКОМ много времени. Обычно я пользуюсь словарями размером менее 500 Мб (и даже меньше) и добавляю маски в начале и в конце слов. Берем случайный пароль «sophia**!» из словаря Rockyou и в начало добавляем случайную дату «1996». В итоге получаем пароль 1996sophia**!. Во время тестов каждая маска будет комбинироваться с элементом словаря Rockyou.
Пример
hashcat -a 7 -m 0 hash.txt rockyou-1-60.hcmask rockyou.txt
Рисунок 5: Время подбора пароля 1996sophia**!
Во время перебора через несколько минут дело дошло до маски ?d?d?d?d. Данный пример показан с целью демонстрации процесса и эффективности гибридных атак. Файл rockyou-1-60.hcmask содержит 836 масок, сгенерированных на базе наиболее часто встречающихся паролей из словаря rockyou.txt. Если вам мало этого набора, в комплекте с Hashcat идут все маски, сгенерированные на базе остальных паролей.
Первые 5 символов + маска
Теперь создадим новый словарь и набор масок. Мы уже знаем, что среднее английское слово занимает 4.79 символов, и поэтому будем создавать словарь, содержащий элементы не более 5 символов. Данный словарь будет сгенерирован на базе файла rockyou.txt, где у каждого элемента будут отрезаны первые 5 знаков. Далее удаляются дубликаты, и полученный список сортируется и помещается в файл first5_dict.txt. Полученный словарь занимает 18 МБ, что слишком мало для атаки на быстрый алгоритм MD5, но вполне приемлемо для более медленного хеша.
Пример
cut -c 1-5 rockyou.txt | sort -u > first5_dict.txt
Затем мы будем комбинировать элементы словаря first5_dict.txt и маски из файла rockyou-1-60, который идет в комплекте с Hashcat. Некоторые кандидаты будут менее 12 символов, но вы можете исключить маски, длиной менее 7 символов и создать новый файл с расширением .hcmask. Вновь берем случайный пароль Alty5 из файла first5_dict.txt и добавим случайную последовательность цифр 9402847. В итоге получаем пароль Alty59402847.
Пример
hashcat -a 6 -m 0 hash.txt first5_dict.txt rockyou-1-60.hcmask
Рисунок 6: Время подбора пароля Alty59402847
Эта атака особенно эффективна против пользователей, которые любят пароли, где распространенное слово сочетается с цифрами в целях рандомизации. Подобный пароль подбирается в течение 30 минут.
Прямая атака по маске на пароль 12 и более символов
Я понимаю, что данный тип атак не относится к гибридным, но, тем не менее, использование 12 символьных и более масок все еще дает результаты особенно, если пользоваться утилитой PACK. Атака на пароль, закодированный определенным алгоритмом хеширования, может быть запланирована длительностью 1 день (86400 секунд) с учетом скорости аппаратных средств. Вначале нужно измерить скорость перебора, исходя из возможностей вашего оборудования, при помощи команды hashcat -b -m #type прямо в терминале. Быстро разберем создание масок для атаки на пароли длиной 12-15 символов при помощи утилиты PACK. Для генерации масок вновь воспользуемся словарем rockyou.txt, но вначале оценим скорость перебора хешей md5.
Пример (md5)
hashcat -b -m 0
Рисунок 7: Оценка скорости перебора хешей md5
По результатам тестирования выяснилось, что скорость перебора - 76,000,000,000 ключей в секунду. Далее создаем набор масок на базе словаря rockyou.txt при помощи утилиты PACK.
Пример
python statsgen.py rockyou.txt -o rockyou.masks
Теперь создаем файл hcmask, при помощи которого часть паролей длиной 12-15 символов будут перебираться в течение 1 дня (86400 секунд).
Пример
Рисунок 8: Процедура подбора паролей по маске
Затем мы можем запустить серию атак по маскам, используя файл rockyou_12-15.hcmask, для перебора хешей md5. Промежуточные переборы будут завершаться спустя 1 день.
Пример
hashcat -a 3 -m 0 hash.txt rockyou_12-15.hcmask
Заключение
Как вы могли убедиться, пароли длиной 12 символов не являются настолько неуязвимыми. Требуется лишь немного хитрости и творчества для выработки правильной стратегии перебора. Кроме того, не думайте, что если пароль более 11 символов, то ваш любимый онлай-сервис захеширует все правильно. Спасибо компании Yahoo. Я надеюсь, что примеры выше убедили вас, что нужно использовать пароли несколько сложнее, чем просто комбинация случайных слов в нижнем регистре. Другие доказательства приведены в статье моего друга Троя Ханта. Если вы достаточно умны, то начнете использовать приложение-менеджер, например, 1Password или Keepass, предназначенное для генерации и хранения паролей. Кроме того, я бы хотел упомянуть микроблог Dumpmon, где можно поискать хеши в исследовательских целях.
Напоследок хочу привести следующую цитату: «Успешный кибер-генерал перед началом проникновения в систему выполняет множество вычислений в терминале» (CyberSunTzu).
Ладно, не доказали. Но мы работаем над этим