Подбор LM-хеша – радужные таблицы против прямого перебора при помощи GPU

Подбор LM-хеша – радужные таблицы против прямого перебора при помощи GPU

Недавно я и Эрик Грубер (Eric Gruber) дискутировали о создании оборудования для подбора паролей. И каждый раз возникал один и тот же вопрос: «Как насчет использования радужных таблиц?»

Автор: Karl Fosaaen

Недавно я и Эрик Грубер (Eric Gruber) дискутировали о создании оборудования для подбора паролей. И каждый раз возникал один и тот же вопрос: «Как насчет использования радужных таблиц?»

В общем и целом мы склонялись к тому, что радужные таблицы нам больше не нужны, поскольку оборудование позволяет взламывать большинство хешей. Однако в процессе дискуссии меня заинтересовал вопрос, в чем достоинства/недостатки подбора LM-хешей при помощи GPU по сравнению с более традиционными радужными таблицами.

Формат хранения Windows-хешей

Ранее все хеши в Windows создавались при помощи алгоритма LM. На смену алгоритму LM пришел алгоритм NTLM, однако LM все еще продолжает использоваться для шифрования как локальный паролей, так и паролей в домене.

При использовании алгоритма LM пароль разделяется на две части. Каждая часть может быть длиной до 7 символов. Если пароль состоит из 7 или менее символов, вторая часть представляет собой пустой LM-хеш. Все буквенные символы конвертируются в верхний регистр, поскольку стандарт LM не чувствителен к регистру. Пароли, чувствительные к регистру, кодируются по алгоритму NTLM.

В примере ниже, хеш для пароля «QBMzftvX» разделен на две части (QBMZFTV и X). Из рисунка ниже видно, что все незашифрованные символы LM-хешей находятся в верхнем регистре.

Рисунок 1: Пароль, преобразованный в LM-хеш

В этой статье будет рассказано о достоинствах/недостатках перебора LM-хешей при помощи радужных таблиц. При переборе NTLM-хешей радужные таблицы также могут использоваться с большим успехом, однако в данной статье перебор NTLM-хешей при помощи радужных таблиц и GPU рассматриваться не будет.

Перебор при помощи радужных таблиц

По сложившейся традиции LM-хеши подбираются при помощи радужных таблиц. Довольно просто создать таблицы с комбинацией пароль/хеш для всех возможных LM-хешей, поскольку количество комбинаций ограничено (от 1 до 7 символов). Как только вы получили таблицы с половинками хешей, можно переключаться на перебор регистрозависимых NTLM-хешей.

Этот метод работает неплохо, однако дисковые операции часто могут проходить на маленькой скорости. Кроме того, в некоторых случаях компьютер занят выполнением других задач, и поиск в LM-таблицах может замедлить работу системы. Хороший прирост производительности дало использование многопоточного чтения радужных таблиц. Однако проблема в том, что у меня под рукой не оказалось корректного многопоточного формата радужных таблиц для использования совместно с rcrack_mt. Меня выручило то, что для хранения радужных таблиц использовался SSD диск. В конце статьи приведено время поиска по таблицам при помощи rcrack_mt.

Есть два больших недостатка при использовании радужных таблиц. Главный недостаток – для хранения таблиц требуется большое дисковое пространство. Я знаю, что сейчас диски относительно дешевы, но лет пять назад это было бы большой проблемой. Второй недостаток – время, необходимое для генерации радужных таблицы. Если вы не скачали таблицы в интернете (что, в общем, тоже затратно по времени), вам потребуются дни (и возможно месяцы) для генерации таблиц с нуля.

Перебор при помощи GPU

Я бесконечно благодарен людям, которые работают над проектами Hashcat. Они проделали огромною работу и создали программное обеспечение, которые мы ежедневно используем. oclHashcat осуществляет прямой перебор LM-хешей при помощи GPU. Как только хеш подобран, половинки пересобираются и запускается Toggle-Case атака (когда на каждое слово в словаре генерируются все возможные варианты в различных регистрах) при помощи hashcat (CPU-версия). GPU позволяет сэкономить дисковое пространство и использовать централизованную систему для подбора пароля. Поскольку весь процесс автоматизирован, мне остается передать в скрипт LM/NTLM хеши и откинуться на спинку стула с чашечкой кофе. Однако остается вопрос об экономии времени.

Сочетание радужных таблиц и GPU

Существуют программы (RainbowCrack), позволяющие осуществлять гибридные атаки, где при просмотре радужных таблиц используется GPU. Я слышал положительные отзывы о работе этих программ, однако RainbowCrack поддерживает GPU только в Windows, и мы не можем использовать эту утилиту в нашем оборудовании.

Заключение

В качестве эксперимента я сгенерировал 100 LM/NTLM хешей для паролей различной длины (от 6 до 14 символов). Подбор при помощи радужных таблиц делался на моем ноутбуке на базе Windows (2.70GHz Intel i7, 16 GB RAM, SSD). Подбор при помощи GPU осуществлялся на нашем оборудовании, состоящем из 5 GPU.

Метод перебора

Взломано

Время перебора

Радужные таблицы (OphCrack*)

99/100

24 минуты 5 секунд

oclHashcat/CPU Hashcat

100/100

18 минуты 56 секунд

Rcracki (многопоточный**)

100/100

5 минут 40 секунд

*OphCrack 3.6.0 работал со специальными XP таблицами

**Rcracki_mt работал в 24 потока

После всех экспериментов я не могу утверждать, что использование oclHashcat/Hashcat – самый быстрый способ, но результаты меня вполне устраивают. Если у вас нет собственного оборудования на базе GPU, возможно, вам будет лучше использовать радужные таблицы, особенно в несколько потоков на твердотельном накопителе. 

Ищем баги вместе! Но не те, что в продакшене...

Разбираем кейсы, делимся опытом, учимся на чужих ошибках

Зафиксируйте уязвимость своих знаний — подпишитесь!