Радужные таблицы что это
Радужные таблицы в домашних условиях
Прошедшая неделя с точки зрения информационной безопасности выдалась исключительно «удачной»: то база хэшей LinkedIn утекла в сеть, то хэши last.fm. И во всех обсуждениях, так или иначе, упоминают о радужных таблицах.
Слышали о них почти все, но делали их своими руками очень немногие.
Думаю, не разумно рассказывать заново о том, что такое хеш и зачем в принципе нужны радужные таблицы или какие-то другие предвычисления. Для ликвидации белых пятен предлагается прочесть этот топик.
Интеллектуального прорыва в области радужных таблиц сегодня не планируется, а есть желание рассказать, что радужные таблицы – это не сложно, поэтому и писать будем на чем-то простом, а именно: PHP. Хранить таблицу в MySQL.
Весь код доступен на GoogleCode, я же опишу основные моменты, над которыми пришлось подумать и которые необходимо реализовать.
Для начала необходимо поговорить о входном алфавите. В наборе паролей участвует не все символы ASCII таблицы, а только те, которые можно без лишних хитростей набрать на клавиатуре ПК или мобильного устройства. Чем меньше входной алфавит, тем быстрее будет сгенерирована радужная таблица, но и паролей по заданным хэшам найдется меньше. В нашем случае будем использовать входной алфавит из цифр и букв латинского алфавита верхнего и нижнего регистров.
Для создания радужной таблицы используются цепочки, начало которых – это некоторый случайный пароль фиксированной длины. Очевидно, необходима функция генерация случайных паролей из символов входного алфавита:
Внутри цепочек попеременно применяется то хэш-функция, то функция редукции. С хэш-функцией все ясно – это MD5, SHA1 или любая другая (в нашем случае будем использовать MD5). С функцией редукции ясности меньше. Во-первых, функция редукции, получив на входе хэш, должна выдать некоторый пароль из символов входного алфавита. Во-вторых, функция редукции необходима не одна единственная, а упорядоченное множество функций редукции, причем мощность этого множества равна длине цепочки.
Конечно, можно было бы написать две-три функции редукции самостоятельно, но не в случае, когда длина цепочки равна 100 или 1000. Тем более, хотелось бы, чтобы длина цепочки хранилось в константе, которую можно заменить легким движением руки.
В голову приходить достаточно очевидное решение: нужно использовать Генератор псевдослучайных чисел (ГПСЧ). Для каждой конкретно взятой функции редукции инициализировать ГПСЧ определенным набором бит из хэша, поступающего на вход, а затем получать пароль с помощью вызова getWord().
В принципе действовать на уровне отдельных бит и не требуется. Инициализировать ГПСЧ нужно числом типа int, для моей платформы – это 32 бита или 4 байта. MD5 состоит из 16 байт (посмотрите на второй параметры у функции md5 в PHP), тогда количество возможных размещений равно 16! / (16 — 4)! = 43680 – даже для длины цепочки в 1000 хватит с запасом.
Тогда собственно функция редукции, принимающая на вход хэш и номер текущего шага в цепочке, будет иметь вид:
С учетом всего вышеописанного функция расчета конца цепочки по ее началу тривиальна:
Поздравляю, мы проделали большую работу, и остался только один аспект нахождения пароля по заданному хэшу, о котором необходимо рассказать.
В классическом варианте берется последняя n-ая функция редукции от хэша и получившийся пароль ищется в радужной таблице, если ничего не нашлось, берется n-1 редукция, потом вычисляется хэш, потом n-ая редукция и ищется в таблице и так далее, пока не найдется пароль. При использовании MySQL это могло бы вылиться в n однотипных SELECT-ов (в худшем случае) – даже начинающий веб-программист знает, что за это можно и по рукам получить! Конечно же, достаточно одного SELECT-а для поиска одного пароля, но для этого необходимо генерировать все пароли для поиска разом:
Все остальные манипуляции с MySQL прямого отношения к радужным таблицам не имеют, а другие части исходного кода, по моему мнению, понятны и без объяснений.
И напоследок ложка дегтя. PHP и MySQL прекрасно справляются с созданием прототипов на скорую руку, но PHP действительно не самый быстрый язык и хранение радужной таблицы в реляционной СУБД общего назначения не самое эффективное решение. Радужную таблицу для MD5 для 6-символьных паролей с длиной цепочки 1000 из 2 миллионов записей ноутбук на базе i3-330UM генерировал более 8 часов. В идеале полученная таблица может обратить 2*10^9 хэшей, но это число не соизмеримо с общим количеством 6-символьных паролей, которых 56,8*10^9 на выбранном входном алфавите.
Это в очередной раз показывает, насколько важен выбор подходящего инструмента для решения конкретной задачи.
Думаю, что задачу наглядно продемонстрировать принцип реализации радужных таблиц мне на пару с PHP всё-таки удалось решить.
Радужные таблицы
Радужная таблица (англ. rainbow table ) — специальный вариант таблиц поиска (lookup table), использующий механизм уменьшения времени поиска за счет увеличения занимаемой памяти или time-memory tradeoff. Радужные таблицы используется для вскрытия паролей, преобразованных при помощи необратимой хеш-функции.
Содержание
Теория
Радужная таблица создается построением цепочек возможных паролей. Каждая цепочка начинается со случайного возможного пароля, затем подвергается действию хеш-функции и функции редукции. Данная функция преобразует результат хеш-функции в некоторый возможный пароль. Промежуточные пароли в цепочке отбрасываются и в таблицу записывается только первый и последний элементы цепочек. Создание таблиц требует времени и памяти (вплоть до сотен гигабайт), но они позволяют очень быстро (по сравнению с обычными методами) восстановить исходный пароль.
Для восстановления пароля данное значение хеш-функции подвергается функции редукции и ищется в таблице. Если не было найдено совпадения, то снова применяется хеш-функция и функция редукции. Данная операция продолжается, пока не будет найдено совпадение. После нахождения совпадения, цепочка содержащая его, восстанавливается для нахождения отброшенного значения, которое и будет искомым паролем.
В итоге получается таблица, которая может с высокой вероятностью восстановить пароль за небольшое время.
Применение
При генерации таблиц важно найти наилучшее соотношения взаимосвязанных параметров:
Вышеназванные параметры зависят от настроек заданных при генерации таблиц:
При этом время генерации зависит почти исключительно от желаемой вероятности подбора, используемого набора символов и длины пароля. Занимаемое таблицами место зависит от желаемой скорости подбора 1 пароля по готовым таблицам.
При этом вероятность нахождения пароля с помощью данных таблиц составит 0.7542 (75.42 %), сами таблицы займут 596 Гб, генерация их на компьютере уровня Пентиум-3 1ГГц займёт 3 года а поиск 1 пароля по готовым таблицам не более 22 минут.
Однако процесс генерации таблиц возможно распараллелить, например расчёт одной таблицы с вышеприведёнными параметрами занимает примерно 33 часа. В таком случае если в нашем распоряжении есть 100 компьютеров, все таблицы можно сгенерировать через 11 суток.
Защита от радужных таблиц
Данные таблицы невозможно использовать против необратимых хеш-функций, которые включают salt («соль», или «затравка»). Например, рассмотрим следующую функцию для создания хеша от пароля:
где + обозначает конкатенацию.
Для восстановления такого пароля взломщику необходимы таблицы для всех возможных значений затравки.
По сути, затравка увеличивает длину и возможно сложность пароля. Если таблица рассчитана на некоторую длину или на некоторый ограниченный набор символов, то затравка может предотвратить восстановление пароля.
Использование
Практически все дистрибутивы ОС Unix, GNU/Linux и PHP используют простой хеш (обычно Microsoft Windows и Windows NT используют хеши LAN Manager и NT LAN Manager, которые также не используют соль, что делает их одними из самых популярных для создания радужных таблиц.
Все методы взлома MD5
Содержание статьи
Ни для кого не секрет, что криптография прочно вошла в нашу жизнь. Интернет-сервисы, социальные сети, мобильные устройства — все они хранят в своих базах пароли пользователей, зашифрованные с помощью различных алгоритмов. Наиболее популярным таким алгоритмом сегодня, безусловно, является MD5. О способах его взлома и пойдет речь.
Немного о криптографии
Современная криптография включает в себя три направления: шифрование с закрытым ключом, шифрование с открытым ключом и хеширование. Сегодня мы поговорим о том, что такое хеширование и с чем его едят. В целом под хешированием понимают преобразование входных данных произвольной длины в выходную битовую строку фиксированной длины. Чаще всего хеш-функции применяют в процессе аутентификации пользователя (в базе данных обычно хранится хеш пароля вместо самого пароля) и для вычисления контрольных сумм файлов, пакетов данных и т. п. Одним из наиболее известных и широко используемых алгоритмов хеширования является MD5.
WARNING!
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Начало
Алгоритм MD5 представляет собой 128-битный алгоритм хеширования. Это значит, что он вычисляет 128-битный хеш для произвольного набора данных, поступающих на его вход. Этот алгоритм разработал профессор Рональд Ривест из Массачусетского технологического института в 1991 году для замены менее надежного предшественника — MD4. Алгоритм был впервые опубликован в апреле 1992 года в RFC 1321. После этого MD5 стал использоваться для решения самых разных задач, от хеширования паролей в CMS до создания электронно-цифровых подписей и SSL-сертификатов.
О том, что алгоритм MD5 можно взломать, впервые заговорили в 1993 году. Исследователи Берт ден Боер и Антон Боссиларис показали, что в алгоритме возможны псевдоколлизии. Через три года, в 1996-м, Ганс Доббертин опубликовал статью, в которой доказал наличие коллизий и описал теоретическую возможность взлома MD5. Это был еще не взлом, но в мире начались разговоры о необходимости перехода на более надежные алгоритмы хеширования, например SHA1 (на момент написания этой статьи уже было доказано, что коллизии имеются и в этом алгоритме, поэтому рекомендую использовать SHA2) или RIPEMD-160.
Первые атаки
Непосредственный взлом MD5 начался 1 марта 2004 года. Компания CertainKey Cryptosystems запустила проект MD5CRK — распределенную систему поиска коллизий. Целью проекта был поиск двух сообщений с идентичными хеш-кодами. Проект завершился 24 августа 2004 года, когда четыре независимых исследователя — Ван Сяоюнь, Фэн Дэнгуо, Лай Сюэцзя и Юй Хунбо — обнаружили уязвимость алгоритма, позволяющую найти коллизии аналитическим методом за более-менее приемлемое время. С помощью этого метода можно всего лишь за час выявить коллизии на кластере IBM p690 (жаль, что у меня нет такого дома). 🙂 Первого марта 2005 года было продемонстрировано первое использование указанной уязвимости на практике. Группа исследователей представила два сертификата X.509 с разными наборами ключей, но с идентичными контрольными суммами. В том же году Властимил Клима опубликовал алгоритм, позволяющий обнаруживать коллизии на обычном ноутбуке за несколько часов. В 2006 он пошел дальше. Восемнадцатого марта 2006 года исследователь обнародовал алгоритм, находящий коллизии за одну минуту! Этот метод получил название «туннелирование». В 2008 году на конференции Chaos Communication Congress была представлена статья о методе генерации поддельных сертификатов X.509. Фактически это был первый случай реального использования коллизий в алгоритме MD5.
Пример коллизии MD5-хешей
Хакер #156. Взлом XML Encryption
Большая работа была также проделана и для ускорения взлома хешей. В 2007 году Кевин Бриз представил программу, использующую Sony PlayStation3 для взлома MD5. Он сумел добиться очень неплохих результатов: 1,4 миллиарда MD5-хешей генерировались всего лишь за одну секунду! Уже через два года, в 2009-м, на BlackHat USA вышла статья об использовании GPU для поиска коллизий, что позволяло повысить его скорость в несколько раз, особенно если он выполнялся с помощью нескольких видеокарт одновременно.
Видеокарта ATI Radeon HD 4850 X2 позволяет генерировать до 2,2 миллиардов хешей в секунду!
Использование алгоритма MD5 в ЭЦП неприемлемо вследствие недостаточной устойчивости этого алгоритма к поиску коллизий.
Это конец?
В 2011 году IETF согласилось внести изменения в RFC 1321 (MD5) и RFC 2104 (HMAC-MD5). Так появился документ RFC 6151. Он признает алгоритм шифрования MD5 небезопасным и рекомендует отказаться от его использования. На мой взгляд, этот документ официально положил конец MD5. Однако, несмотря на то что алгоритм MD5 был официально признан небезопасным, существуют тысячи, если не десятки и сотни тысяч приложений, которые используют его для хранения паролей, в электронно-цифровых подписях и для вычисления контрольных сумм файлов. Кстати, 31 октября 2008 года NIST объявила конкурс среди криптографов. Цель конкурса — разработать алгоритм хеширования на замену устаревшим SHA1 и SHA2. На данный момент финалисты уже определены — это BLAKE, Gostl, JH, Keccak и Skein.
Ighashgpu: взлом с помощью GPU
Мы используем вышеприведенный способ для взлома одного определенного хеша, сгенерированного при помощи алгоритма MD5. Максимальная длина возможного пароля составляет семь символов. Через какое-то время пароль будет найден (qwerty). Теперь давай попробуем взломать еще один хеш, но с немного другими условиями. Пусть наш хеш имеет вид d11fd4559815b2c3de1b685bb78a6283, а включает в себя буквы, цифры, знак подчеркивания и имеет суффикс «_admin». В данном случае мы можем использовать перебор пароля по маске, чтобы упростить программе задачу:
Здесь параметр ‘-u’ позволяет указать набор символов, используемых при переборе, а параметр ‘-m’ задает маску пароля. В нашем случае маска состоит из шести произвольных символов, после которых идет сочетание «_admin». Подбор пароля также не составит никакого труда.
Коллизии
Коллизией в криптографии называют два разных входных блока данных, которые для одной и той же хеш-функции дают один и тот же хеш. Каждая функция на выходе дает последовательность битов определенной длины, которая не зависит от размера первоначальных данных. Отсюда следует, что коллизии существуют для любого алгоритма хеширования. Однако вероятность того, что ты сможешь найти коллизию в «хорошем» алгоритме, практически стремится к нулю. К сожалению или к счастью, алгоритмы хеширования могут содержать ошибки, как и любые программы. Многие хеш-функции либо уже были сломаны, либо скоро будут. В данном случае «сломать» — значит найти коллизию за время, которое много меньше заявленной бесконечности.
Ighashgpu: списки
Теперь давай попробуем взломать сразу несколько паролей одновременно. Предположим, что к нам в руки попала база данных хешей паролей. При этом известно, что каждый пароль оканчивается символами c00l:
Сохрани хеши в файле encrypted.dat и запусти Ighashgpu как указано ниже:
После завершения работы программы в папке Ighashgpu появится файл ighashgpu_results.txt со взломанными паролями:
Взломаные хеши из файла encrypted.dat
Ighashgpu: соль
Напоследок давай произведем взлом «подсоленного» хеша. Предположим, что хеш генерируется по следующему алгоритму:
В итоге мы получили следующий хеш: 42151cf2ff27c5181bb36a8bcfafea7b. Ighashgpu позволяет указывать «соль» в параметре «-asalt»:
И мы снова получили искомый пароль легко и быстро.
Занимательная математика
Для 8-символьного пароля, составленного из первых 126 символов ASCII, доступно 63 527 879 748 485 376 возможных комбинаций. Для 254 символов количество возможных комбинаций возрастает до 17 324 859 956 700 833 536, что аж в 2,7 миллиарда раз больше, чем людей на нашей планете. Если создать текстовый файл, содержащий все эти пароли, то он займет миллионы терабайт. Конечно, в современном мире это возможно, но стоимость хранения такого файла будет просто заоблачной.
Взлом MD5 в режиме турбо
Взлом хешей путем полного перебора даже на самом лучшем железе занимает довольно много времени, особенно если пароль больше восьми символов. Самый простой способ увеличить скорость подбора пароля — это создать базу данных всех хешей для определенного набора символов. В 80-х годах прошлого столетия хакеры полагали, что когда у них появится более мощное железо, 640 Кб памяти и жесткий диск размером в 10 Мб, то такая база станет реальностью и подбор любого пароля превратится в минутное дело. Однако железо развивалось, а мечта так и оставалась мечтой. Ситуация изменилась лишь в августе 2003 года, после того, как Филипп Оэшлин, доктор философии в области компьютерных сетей из Швейцарского технологического института в Лозанне, опубликовал свою работу о проблеме выбора оптимального соотношения место-время. В ней описывался метод взлома хеш-функций с помощью «радужных» таблиц. Суть нового метода заключается в следующем. Сначала необходимо выбрать произвольный пароль, который затем хешируется и подвергается воздействию функции редукции, преобразующей хеш в какой-либо возможный пароль (к примеру, это могут быть первые 64 бита исходного хеша). Далее строится цепочка возможных паролей, из которой выбираются первый и последний элементы. Они записываются в таблицу. Чтобы восстановить пароль, применяем функцию редукции к исходному хешу и ищем полученный возможный пароль в таблице. Если такого пароля в таблице нет, хешируем его и вычисляем следующий возможный пароль. Операция повторяется, пока в «радужной» таблице не будет найден пароль. Этот пароль представляет собой конец одной из цепочек. Чтобы найти исходный пароль, необходимо прогнать всю цепочку заново. Такая операция не занимает много времени, в зависимости от алгоритма построения цепочки это обычно несколько секунд или минут. «Радужные» таблицы позволяют существенно сократить объем используемой памяти по сравнению с обычным поиском. Единственный недостаток описанного метода состоит в том, что на построение таблиц требуется довольно много времени.
Теперь перейдем от слов к делу и попробуем взломать пару-тройку хешей паролей с помощью этого метода.
Rainbow tables
«Радужные» таблицы — это особый тип словаря, который содержит цепочки паролей и позволяет подобрать пароль в течение нескольких секунд или минут с вероятностью 85–99%.
«Радужный» взлом
Сначала необходимо определиться с программой. Лично мне нравитсяRainbowCrack, которая распространяется бесплатно и работает как на Windows, так и на Linux. Она поддерживает четыре алгоритма хеширования: LN/NTLM, MD5 и SHA1. Программа не требует установки, достаточно распаковать ее куда-нибудь на диск. После распаковки необходимо найти «радужные» таблицы для алгоритма MD5. Здесь все не так просто: их можно либо скачать бесплатно, либо купить, либо сгенерировать самостоятельно. Один из самых больших архивов бесплатных таблиц доступен на сайте проекта Free Rainbow Tables. Кстати, ты тоже можешь помочь проекту, если скачаешь клиент с сайта и присоединишься к распределенной международной сети, которая генерирует «радужные» таблицы. На момент написания статьи на этом сайте уже было доступно 3 Тб таблиц для алгоритмов MD5, SHA1, LM и NTLM. Если у тебя нет возможности слить такой объем информации, то на том же сайте можно заказать диски с «радужными» таблицами. На данный момент предлагается три пакета: LN/NTLM, MD5 и SHA1 — по 200 долларов каждый. Мы же сгенерируем таблицы самостоятельно. Для этого необходимо использовать программу rtgen, входящую в состав RainbowCrack. Она принимает следующие входные параметры:
Рассмотрим последние параметры подробнее:
В данном случае мы создаем таблицу паролей, состоящих из цифр и прописных букв латинского алфавита и имеющих длину от одного до семи символов. На моем Eee PC с процессором Intel Atom N450 этот процесс занял почти два дня :). В итоге я получил файл md5loweralpha-numeric#1-702000×975054890.rt размером в 1,5 Гб.
Далее полученную таблицу необходимо отсортировать, чтобы оптимизировать поиск нужной нам цепочки. Для этого запускаем rtsort.exe:
Ждем пару минут и таблица готова! Теперь можно ломать сами пароли. Для начала попробуем подобрать пароль для одного хеша: d8578edf8458ce06fbc5bb76a58c5ca4. Запускаем rcrack_gui.exe и выбираем Add Hash. в меню File. В появившемся окне вводим хеш и нажимаем OK. Теперь выбираем файл с «радужной» таблицей. Для этого используем пункт Search Rainbow Tables. в меню Rainbow Table. В открывшемся окне для выбора файла ищем файл с таблицей, у меня это md5_loweralpha-numeric#1-7_0_2000x97505489_0.rt, затем жмем Open. Через несколько секунд пароль у нас в руках! Аналогичную операцию можно произвести и над списком хешей из файла.
Генерирую радужную таблицу
«Радужные» таблицы vs. CPU vs. GPU
Я думаю, ты обратил внимание на то, насколько быстро Ighashgpu способен взламывать MD5-хеши полным перебором, и на то, что RainbowCrack делает это еще быстрее при наличии хорошей «радужной» таблицы. Я решил сравнить скорость работы этих программ. Для чистоты эксперимента я использовал программу MDCrack, которая осуществляет брут пароля на CPU (и является одной из лучших среди программ такого типа). Вот что получилось в результате для GPU (nVidia GeForce GT 220M), CPU (Intel Atom N450, два ядра) и «радужных» таблиц:
Как видишь, скорость перебора с использованием CPU намного меньше, чем с использованием GPU или «радужных» таблиц. Более того, большинство специализированных программ позволяет создать кластер из видеокарт, благодаря чему скорость перебора пароля увеличивается в разы. Я думаю, ты обратил внимание на то, что скорость подбора 4- и 5-символьного паролей ниже, чем скорость подбора пароля из шести или семи символов. Это связано с тем, что поиск пароля начинается только после загрузки таблицы в память. Получается, что из шестнадцати секунд в среднем тринадцать тратится на загрузку и три — на взлом хеша.
Радужная таблица изнутри
bit.ly/vEhdir — добавление нового алгоритма хеширования в RainbowCrack при помощи API.
bit.ly/vTSB9K — описание формата «радужной» таблицы.
Вместо заключения
В конце я бы хотел немного поговорить о защите твоих паролей. Во-первых, не используй уязвимые алгоритмы хеширования, такие как MD5 или SHA1. На данный момент стоит задуматься об использовании одной из криптографических хеш-функций SHA2 или SHA3 (как только опубликуют соответствующий стандарт). Во-вторых, не используй функции хеширования напрямую. Всегда старайся использовать «соль» и комбинировать различные алгоритмы. И в-третьих, выбирай сложные произвольные пароли длиной как минимум восемь символов. Конечно, это не защитит тебя от взлома на 100 %, но хотя бы усложнит жизнь злоумышленникам.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как использовать радужные таблицы для взлома паролей Wi-Fi в Hashcat и John the Ripper
Радужные таблицы для брут-форса Wi-Fi паролей
Радужные таблицы — это предварительно рассчитанные хеши, которые используются для очень быстрого восстановления паролей из добытого хеша. Они представляют собой базы данных, в которых паролю соответствует вычисленный хеш.
То есть по радужной таблице ищется хеш, если он найден, то смотрим, какой пароль ему соответствует. Поиск по базе данных выполняется очень быстро. Благодаря ему становится возможной на первый взгляд невозможная операция: восстановление данных из контрольной суммы, например, из хеша MD5 мы можем получить исходную строку, для которой была вычислена контрольная сумма MD5.
В результате появления концепции радужных таблиц, теперь повсеместно распространено хеширование с солью и многократное (итерированное) хеширование.
Соль — это дополнительные уникальные данные, которые добавляются к паролю. В результате радужные таблицы становятся непригодными. Соль не является секретной, может храниться в открытом виде. Это не мешает ей делать непригодными радужные таблицы.
Итерация — это многократное хеширование, то есть когда полученные в результате хеширования данные хэшируются ещё раз и так много раз (сотни или десятки тысяч итераций не редкость).
Итак, что по поводу радужных таблиц для взлома Wi-Fi паролей? Дело в том, что это изначально алгоритм с солью — роль соли выполняет название точки доступа. То есть можно рассчитать радужную таблицу, но она будет пригодна только для точки доступа с определённым названием.
Какие преимущества использования радужных таблиц для брут-форса Wi-Fi?
Вычисление радужных таблиц занимает ровно столько же времени сколько и брут-форс. Но поиск по созданной радужной таблице занимает доли секунды. Отсюда следствие: если вы хотите проверить одно рукопожатие для Точки Доступа, то разницы между брут-форсом и использованием радужных таблиц нет.
Но всё меняется, если вы хотите проверить два и более рукопожатия для одной точки доступа. В этом случае вы можете проверить любое количество рукопожатий, затратив время как на одно. А это (проверка нескольких рукопожатий для одной ТД) не лишено смысла, ведь рукопожатия могут быть бракованными (составленными из нескольких), в результате не получится взломать пароль, даже если правильный пароль был проверен для такого бракованного рукопожатия.
Как уже было сказано, поиск по радужной таблице выполняется очень быстро и не требует серьёзных вычислительных ресурсов. То есть если вам нужно взломать Точку Доступа с известным именем, то вы можете предварительно рассчитать радужную таблицу для неё на мощном компьютере. А захватить и проверить по радужной таблице рукопожатие вы можете на маломощном (миниатюрном) оборудовании.
Из недостатков радужных таблиц — они занимают много места, намного больше чем просто файл паролей, на основе которой была вычислена радужная таблица, или маска, которая вообще не занимает места.
Виды радужных таблиц Wi-Fi. Состав радужных таблиц для взлома Wi-Fi
Главным элементом радужных таблиц для взлома Wi-Fi являются plainmasterkeys. Для их вычисления нужно название ТД (ESSID) и кандидат в пароли. Но: из plainmasterkeys невозможно извлечь пароль, с помощью которого он был вычислен (только если брут-форсом). Поэтому кроме plainmasterkeys в базе данных должны быть также исходные пароли.
Как именно это «оформить» программы решают по-своему. Среди знаменитых программ, которые уже давно используют радужные таблицы для взлома Wi-Fi, это Pyrit и coWPAtty. Причём Pyrit может использовать мощность видеокарты для выполнения вычислений, поэтому раньше справедливо назывался самым быстрым взломщиком Wi-Fi паролей. У Pyrit и coWPAtty разные форматы баз данных. Поскольку в настоящее время эти программы не очень актуальны, не будем на них останавливаться.
В настоящее время актуальными программами, которые могут использовать радужные таблицы для взлома Wi-Fi, являются Hashcat и John the Ripper. Обе эти программы могут использовать видеокарты. Но суть в том, что это неважно — эти программы только проверяют хеш перехваченного рукопожатия по радужной таблице. А саму радужную таблицу нужно создавать с помощью сторонней программы.
Hashcat и John the Ripper в качестве радужной таблицы принимают простой список plainmasterkeys, не содержащий соответствующих каждому PMK паролей! Запомним это…
Программа для генерации радужной таблицы Wi-Fi
Радужные таблицы Wi-Fi может создавать программа wlangenpmkocl из пакета hcxkeys.
Пакет hcxkeys включает две утилиты:
То есть разница между ними только в том, что wlangenpmkocl использует видеокарту, а wlangenpmk использует центральный процессор. Конечно же, предпочтительнее использовать версию для видеокарты (то есть wlangenpmkocl). Версия wlangenpmk только для крайних ситуаций — у вас нет дискретной видеокарты или вы не можете установить её драйвер для полноценной поддержки OpenCL
Как установить hcxkeys
Чтобы использовать wlangenpmkocl, установите драйверы для видеокарты, информацию об этом и о OpenCL вы найдёте в статьях:
Установка в Kali Linux
Если при выполнении команды make выведены следующие сообщения:
то это не ошибки — это информация. Компиляция всё равно должна завершиться успешно и можно продолжать.
Установка в BlackArch
Как создать радужную таблицу для взлома в Hashcat или John the Ripper
На этапе создания радужной таблицы рукопожатие или хеш не нужны. Нужно только название ТД, но название обязательно должно быть правильным.
К примеру, у меня есть захваченное рукопожатие, название ТД в нём можно посмотреть множеством способов, я воспользуюсь командой aircrack-ng:
Название показано в столбце ESSID, в моём случае это RT-WiFi_96.
Теперь нам нужно посмотреть номер устройства (видеокарты), которые мы укажем для использования в wlangenpmkocl. Если вы будете использовать wlangenpmk, то пропустите этот шаг.
Для вывода список OpenCL устройств используйте опцию -l:
Как мило — программа не только показала список устройств, но и написала, какие опции нужно указать, чтобы использовать то или иное железо:
Конечно же, я буду использовать GeForce GTX 1050 Ti, из представленного списка она самая мощная.
Теперь нужно запустить команду вида:
Для wlangenpmk всё точно также, но не нужно использовать опции -P и -D.
Скорость генерации около 100 тысяч хешей в секунду.
ВНИМАНИЕ: если в файле «ФАЙЛ-ВЫВОДА-PMK» уже есть строки, то файл будет дополнен, а не перезаписан!
Как в Hashcat использовать радужные таблицы для взлома Wi-Fi
Чтобы не запутаться, где какой файл указывать, разберёмся, как работают Hashcat и John с радужными таблицами. Эти программы работают по принципу «получен пароль → для него рассчитан хеш → хеш сравнивается с предоставленным». При работе с радужными таблицами в качестве «пароля» выступает хеш из радужной таблицы.
То есть мы будем работать с хешами двух типов: PMK и хеш рукопожатия. Значения PMK должны указываться в качестве кандидатов в пароли.
Теперь с помощью программы cap2hccapx из пакета hashcat-utils, нам нужно конвертировать захваченное рукопожатие в хеш, который может взламывать hashcat.
Установка hashcat-utils в Kali Linux:
Установка hashcat-utils в BlackArch:
Для конвертации используется команда вида:
То есть хеш сохранён в файл RT-WiFi_96.hash.
Теперь нужно запустить hashcat. В качестве режима взлома нужно указать -m 2501 (WPA-EAPOL-PMK).
В моём случае это следующая команда:
Проверка по почти 10 миллионам plainmasterkeys заняла меньше секунды.
Но радоваться пока рано, обычно взломанный пароль содержится после названия ТД через двоеточие, но посмотрим повнимательнее на нашу строку:
Там после двоеточия f390e0c3f2fcf6d6ef1f98067631406478ab76c8b04d218d1ce4f5941f16c4e0 — это plainmasterkey, мы можем даже найти его в файле pmk.txt, но толку от этого мало.
Как восстановить пароль из plainmasterkey
Есть два способа получить пароль — я покажу вариант от автора программы и второй, который я придумал сам. Вы сами можете выбрать, который вам нравится больше.
Нам нужен инструмент wlanpmk2hcx из пакета hcxtools.
Установка в Kali Linux
Установка в BlackArch
Теперь нужно выполнить команду вида
В моём случае это команда:
А вы думали вам покажут пароль? Неа. Нам дали новый хеш и мы его будет опять брут-форсить (не забывайте, дальше будет мой собственный способ, в котором можно обойтись без этого).
Итак, нам нужно использовать hashcat с режимом хеша 12000 (PBKDF2-HMAC-SHA1). Новый хеш:
Запускаем команду вида:
ХЕШ обязательно поместите в кавычки или сохраните в файл и в строке команды укажите файл.
Скорость перебора 247.5 kH/s и через 6 секунд хеш взломан.
Посмотрим на строку:
В ней подобранным паролем является 22011995 — это и есть пароль от ТД Wi-Fi.
Последняя стадия явно лишняя — мы сделали ненужную работу, которую можно было бы не делать. Давайте разберёмся с этим.
Как пропустить этап взлома plainmasterkey
Мы использовали программу wlangenpmkocl с опцией -a, что означает вывод plainmasterkeys в файл. У программы есть также опция -A, которая позволяет генерировать файл со строками вида plainmasterkey:ПАРОЛЬ. Создадим такой файл:
«Небольшой» минус этого формата в том, что с таким файлом не может работать hashcat. Поэтому мы будем использовать такую конструкцию (считывается ФАЙЛ-PMK, из него берётся только PMK без пароля и отправляется по стандартному вводу в hashcat в качестве кандидата) :
У меня файл с plainmasterkeys формата plainmasterkey:ПАРОЛЬ имеет имя pmk.txt, хеш, извлечённый из хендшейка, помещён в файл RT-WiFi_96.hash, тогда команда следующая:
Опять всё взломано за 0 секунд.
И опять вместо пароля нам дан хеш:
В чём тогда разница? А разница в нашем файле pmk.txt, в котором каждому хешу соответствует его пароль!
То есть теперь мы выполним команду вида:
Тогда команда следующая:
То есть найден хеш и соответствующий ему пароль (22011995), который идёт после двоеточия.
Как в John the Ripper использовать радужные таблицы для взлома Wi-Fi
В John the Ripper всё очень похоже, рассмотрим два варианта — последовательный взлом PMK и хеша и взлом только одного PMK.
1-й вариант
Создаём радужную таблицу командой вида:
Предыдущая команда по вычислению PMK одинаковая с той, которую мы использовали для Hashcat. Но для конвертации рукопожатия в хеш для John the Ripper команда отличается. Причём программа wpapcap2john (которая конвертирует рукопожатия для взлома по маске или по словарю) не подойдёт для взлома по радужным таблицам. Подробнее о wpapcap2john смотрите в «Полном руководстве по John the Ripper. Ч.2: утилиты для извлечения хешей».
Нам нужно использовать программу hcxpcapngtool из пакета hcxtools.
Установка в Kali Linux
Установка в BlackArch
Для конвертации рукопожатия в хеш для взлома по радужным таблицам в John используйте команду вида:
Теперь, когда вычислена радужная таблица и сгенерирован хеш рукопожатия, в john запустим по ней проверку хеша рукопожатия. В качестве словаря нам нужно указать файл с вычисленными PMK, общий вид команды:
Будет выбран формат хеша wpapsk-pmk. Существует также формат хеша wpapsk-pmk-opencl, который отличается тем, что используются вычисления на видеокарте. На самом деле, OpenCL форматы запускаются значительно дольше (несколько секунд), а вычисление даже на wpapsk-pmk выполняется за доли секунды. Поэтому особого смысла указывать опцию —format=wpapsk-pmk-opencl нет. Но просто помните о такой возможности на случай очень больших радужных таблиц.
Итак, мои plainmasterkeys сохранены в файл pmk.txt, а хеш рукопожатия сохранён в файл RT-WiFi_96.john, тогда команда для поиска по радужной таблице следующая:
Совпадение найдено, об этом говорит строка:
Если вы что-то пропустили, то взломанный пароль/хеш можно посмотреть командой вида:
Теперь нужно запустить команду вида:
В моём случае это команда:
Применительно к john, нам дано имя алгоритма: pbkdf2-hmac-sha1 для взлома, а также хеш:
Предыдущая команда и её вывод нам уже знакомы по разделу с Hashcat. В справке сказано, что можно добавить к ней опцию -j, которая означает, сохранить вывод для john в файл:
Но у меня это не сработало — поэтому просто сохраним приведённый выше хеш в файл forjohn.hash.
Теперь нужно запустить команду вида:
Вместо формата PBKDF2-HMAC-SHA1-opencl (взлом на видеокарте) можно указать PBKDF2-HMAC-SHA1 (взлом на центральном процессоре).
У меня словарь имеет имя rockyou_cleaned.txt, а хеш помещён в файл forjohn.hash, поэтому команда следующая:
Наконец-то взломан пароль от ТД, это: 22011995
2-й вариант (пропуск брут-форса plainmasterkey)
Запускаем wlangenpmkocl с опцией -A:
Теперь нужно запустить команду вида:
Обратите внимание, что опция —wordlist заменена на опцию —stdin, которая означает считывать кандидаты в пароли из стандартного ввода.
В нашем файле pmk.txt каждому хешу соответствует его пароль — это благодаря опции -A, которую мы использовали с программой wlangenpmkocl.
То есть теперь мы выполним команду вида:
Тогда команда следующая:
Найден хеш и соответствующий ему пароль (22011995), который идёт после двоеточия.
Как по маскам создавать радужные таблицы для взлома Wi-Fi
Программа wlangenpmkocl вместо опции -i СЛОВАРЬ может получать список кандидатов в пароли из стандартного ввода. То есть следующая команда
полностью эквивалентна этой
ВНИМАНИЕ: помните о разнице опций -A и -a и выберите ту из них, которая вам подходит.
По этой причине можно генерировать кандидаты паролей в программах, поддерживающих маски и передавать их на вход wlangenpmkocl.
Для вывода кандидатов в пароли с помощью Hashcat используйте опцию —stdout в команде вида:
В этой команде hashcat генерирует пароли по маске ?d?d?d?d?d?d?d?d (пароли из восьми цифр) и из них рассчитываются PMK.
В качестве альтернативы Hashcat можно использовать Maskprocessor в команде вида:
В John the Ripper помощью опции —stdout вы можете вместо запуска взлома показать создаваемые кандидаты в пароли.
Команда, аналогичная предыдущим: