Радужную таблицу можно рассматривать как словарь, за исключением того, что вместо слов и их определений на одной стороне находятся комбинации символов, а на другой – их хешированная форма.
Что такое хеш, и почему вы хотите знать, как хэшируются случайные комбинации символов?
Пароли в интернете почти всегда хранятся в хеше.
Хеш – это метод криптографии, который очень дешевый для вычисления в одном направлении, но очень дорогой для вычисления в противоположном направлении.
Шифрование и Хэширование. Отличие и применение
Это означает, что вы можете взять необработанный текстовый ввод, скажем, строковый пароль, и запустить алгоритм хеширования, такой как MD5, чтобы получить вывод 5F4DCC3B5AA765D61D8327DEB882CF99.
Хотя MD5 может быть заменен более сильными методами хеширования, такими как bcrypt, он все еще широко используется сегодня в стеках LAMP в Интернете.
Возвращаясь к радужным таблицам, у нас должна быть запись с паролем с одной стороны и 5F4DCC3B5AA765D61D8327DEB882CF99 с другой.
Если мы когда-нибудь натолкнемся на этот хеш, мы сможем найти нашу таблицу, найти ее и узнать, какой была исходная строка.
Однако, прежде чем мы сможем это сделать, мы должны научиться делать радужную таблицу.
В этом руководстве я продемонстрирую на основе Kali Linux, работающего на виртуальной машине, но инструкции для большинства дистрибутивов Linux будут в основном такими же.
Я также включу некоторую информацию для тех, кто работает на платформе Windows.
Шаг 1 Установите RainbowCrack
Мы будем использовать RainbowCrack для создания и сортировки наших таблиц.
Kali Linux поставляется с уже установленным RainbowCrack, но если у вас его нет или вы работаете в Windows, вы можете загрузить его или использовать aptitude, если вы находитесь в дистрибутиве на основе Debian, таком как Mint.
В Windows, как только вы скачали RainbowCrack, создайте новую папку, к которой вы можете легко перейти с помощью командной строки, и извлеките в нее все.
Затем откройте командную строку и перейдите к каталогу, который вы создали.
Перейдите к шагу 2, поскольку следующие абзацы относятся к Кали.
В Kali, как только мы убедимся, что RainbowCrack установлен, нам нужно будет создать новую папку и перейти в нее.
Здесь наши таблицы будут сгенерированы и отсортированы (см. Исключения в шагах 3 и 4).
Вы можете использовать следующие команды для настройки папки в вашем домашнем каталоге.
Лучше использовать новый и пустой каталог для процесса сортировки, который происходит после создания таблицы.
cd ~
mkdir RainbowTables
cd RainbowTables
Важно помнить, что радужные таблицы занимают огромное количество места для хранения, особенно когда вы включаете широкий набор символов и большую максимальную длину.
Убедитесь, что у вас есть место для сотен гигабайт как минимум.
Лучше иметь хотя бы половину свободного терабайта.
Если у вас нет этого места, вы все равно можете использовать меньшие наборы символов, более короткую максимальную длину и более короткую цепочку.
Шаг 2 Просмотрите параметры
Как только мы окажемся в каталоге, который мы создали, мы можем запустить rtgen, чтобы убедиться, что все установлено правильно.
Это также вернет некоторую удобную помощь, с некоторыми примерами использования rtgen и именования параметров.
rtgen
RainbowCrack 1.7
Copyright 2017 RainbowCrack Project. All rights reserved.
http://project-rainbowcrack.com/
usage: rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index chain_len chain_num part_index
rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index -bench
hash algorithms implemented:
lm HashLen=8 PlaintextLen=0-7
ntlm HashLen=16 PlaintextLen=0-15
md5 HashLen=16 PlaintextLen=0-15
sha1 HashLen=20 PlaintextLen=0-20
sha256 HashLen=32 PlaintextLen=0-20
examples:
rtgen md5 loweralpha 1 7 0 1000 1000 0
rtgen md5 loweralpha 1 7 0 -bench
Как вы можете видеть, для каждого примера даны два случая:
rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index chain_len chain_num part_index
rtgen md5 loweralpha 1 7 0 1000 1000 0
rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index -bench
rtgen md5 loweralpha 1 7 0 -bench
Конечно, из-за нехватки места параметры на самом деле не объясняются, поэтому я сделаю это, чтобы потом было легче следить за ними.
- hash_algorithm: это алгоритм хеширования, который мы хотим использовать в наших радужных таблицах. Вы можете увидеть список доступных алгоритмов в алгоритмах хеширования, реализованных в тексте возврата. В нашем примере мы будем использовать MD5, но RainbowCrack также способен создавать идеальные таблицы SHA1 и NTLM, и я предоставлю код для всех трех таблиц.
- charset: набор символов, используемых для генерации текстовых строк для радужных таблиц. Цифры – это цифры от 0 до 9, младшая буква – это буквы и цифры (все буквы и цифры от 0 до 9), но только в нижнем регистре. Полный список кодировок, которые вы можете использовать, см. В «charset.txt», который поставляется с RainbowCrack.
- plaintext_len_min: минимальная длина строк открытого текста. Например, если мы выберем числовой набор символов и минимальное и максимальное значения 1, наша таблица будет содержать все цифры 0–9 и их хешированный эквивалент.
- plaintext_len_max: максимальная длина строк открытого текста. Например, если мы выберем min 1 и max 2, мы получим все цифры 0–9 и 00–99 и их хешированные эквиваленты в нашей таблице.
- table_index: этот параметр выбирает функцию сокращения. Функция сокращения – это математическая формула, которая обрезает количество комбинаций, удаляя невероятно маловероятные комбинации. Тем самым он значительно сокращает время вычислений. Но обратная сторона в том, что существует небольшая вероятность того, что любая заданная функция сокращения пропустит искомую комбинацию, поэтому «идеальные» таблицы используют несколько прогонов с различными функциями сокращения, чтобы сделать «идеальные» таблицы, содержащие каждый возможная комбинация.
- chain_len: это контролирует длину каждой таблицы. Чем больше это число, тем больше открытых текстов хэшируются и сохраняются в таблице. Вот почему упомянутая выше функция сокращения имеет значение – она уменьшит возможные комбинации до выбранной вами длины цепи. Обратная сторона длинной цепи – время генерации. Если вам нужен «идеальный» и обширный стол, это может занять месяцы.
- chain_num: это количество цепочек для генерации. Каждая цепочка будет 16 байтов.
part_index: это для ситуаций, когда пространство на жестком диске или вычислительная мощность ограничены, или когда ваша файловая система не может обращаться к чрезвычайно большим файлам. Мы можем изменить это значение на 0, которое обычно должно быть для сегментирования файла таблицы на более мелкие части. - -bench: это флаг, который вы можете добавить, чтобы сделать эталон для выбранных вами настроек. На самом деле он не будет создавать никаких радужных таблиц, он просто определит некоторые числа, которые вы можете использовать, чтобы определить, насколько быстро вы можете создавать записи в таблицах. Исходя из этого, вы можете определить, сколько времени на самом деле займет генерация таблицы.
Шаг 3 Создайте Радужные Таблицы
Теперь давайте сгенерируем эти таблицы!
Обратите внимание, что если вы используете Windows вместо Linux, вам, возможно, придется использовать rtgen.exe вместо просто rtgen в моих примерах ниже.
Запустите каждую из команд ниже отдельно.
Но имейте в виду, что на их создание уйдут часы.
Вы можете нажать Ctrl-C на клавиатуре, чтобы выйти, и при следующем запуске этой же команды она возобновится с того места, где остановилась.
rtgen md5 loweralpha-numeric 1 7 0 2400 24652134 0
rtgen md5 loweralpha-numeric 1 7 1 2400 24652134 0
rtgen md5 loweralpha-numeric 1 7 2 2400 24652134 0
rtgen md5 loweralpha-numeric 1 7 3 2400 24652134 0
rtgen md5 loweralpha-numeric 1 7 4 2400 24652134 0
rtgen md5 loweralpha-numeric 1 7 5 2400 24652134 0
Приведенные выше команды генерируют шесть различных радужных таблиц, используя младшую цифро-цифровую кодировку, которая содержит 36 возможных символов.
Для любого открытого текста, попадающего в эту категорию, у нас будет более 99% вероятности того, что его хеш-эквивалент будет в наших таблицах.
rtgen md5 loweralpha-numeric 1 7 0 2400 24652134 0
rainbow table md5_loweralpha-numeric#1-7_0_2400x24652134_0.rt parameters
hash algorithm: md5
hash length: 16
charset name: loweralpha-numeric
charset data: abcdefghijklmnopqrstuvwxyz0123456789
charset data in hex: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 30 31 32 33 34 35 36 37 38 39
charset length: 36
plaintext length range: 1 - 7
reduce offset: 0x00000000
plaintext total: 80603140212
sequential starting point begin from 0 (0x0000000000000000)
generating...
65536 of 24652134 rainbow chains generated (0 m 21.3 s)
131072 of 24652134 rainbow chains generated (0 m 32.8 s)
196608 of 24652134 rainbow chains generated (0 m 32.2 s)
262144 of 24652134 rainbow chains generated (0 m 32.9 s)
327680 of 24652134 rainbow chains generated (0 m 32.2 s)
393216 of 24652134 rainbow chains generated (0 m 33.0 s)
458752 of 24652134 rainbow chains generated (0 m 33.3 s)
524288 of 24652134 rainbow chains generated (0 m 34.0 s)
589824 of 24652134 rainbow chains generated (0 m 33.3 s)
655360 of 24652134 rainbow chains generated (0 m 33.8 s)
720896 of 24652134 rainbow chains generated (0 m 33.0 s)
786432 of 24652134 rainbow chains generated (0 m 32.3 s)
851968 of 24652134 rainbow chains generated (0 m 34.0 s)
917504 of 24652134 rainbow chains generated (0 m 34.3 s)
983040 of 24652134 rainbow chains generated (0 m 34.4 s)
1048576 of 24652134 rainbow chains generated (0 m 33.7 s)
Когда каждая радужная таблица будет завершена, она будет сохранена в виде файла .rt, который генерирует команда, и поместит его в текущий каталог.
Таким образом, каждая радужная таблица получит свой уникальный файл .rt.
Обратите внимание, что в более новых версиях радужные таблицы могут быть сохранены в вашем каталоге /usr/share/rainbowcrack вместо вашего текущего каталога.
Если вы пытаетесь создать таблицы для SHA1 или NTLM или, возможно, другой кодировки и длины для MD5, вы можете ссылаться на таблицы, созданные командой RainbowCrack.
В нижней части страницы вы можете выбрать алгоритм, который вы ищете, чтобы просмотреть список команд, которые нужно запустить, чтобы создать свои собственные.
Шаг 4 Сортировка радужных таблиц
Наше генерация радужных таблиц завершена, но мы пока не можем их использовать.
Нам нужно отсортировать их в одну таблицу, которую мы затем сможем эффективно найти.
К счастью, сделать это легко, мы просто запустим:
rtsort .
Пока мы находимся в каталоге, в котором мы сгенерировали их, выполним rtsort.
Команда превратит все сгенерированные таблицы в простые для поиска файлы .rt.
Эти файлы будут доступны в выбранном нами каталоге, в данном случае – Rainbow Tables в домашнем каталоге.
Однако в некоторых версиях Rainbow Crack все файлы .rt будут сохраняться в каталоге /usr/share/rainbowcrack, независимо от того, в каком каталоге вы сейчас находитесь.
Приведенная выше команда все равно должна работать в папке, созданной на шаге. 1.
Теперь в вашем распоряжении почти идеальные радужные таблицы.
Мы обсудим, что мы можем сделать с этой таблицей, как это сделать и как защитить себя от людей, пытающихся использовать радужные таблицы для взлома ваших паролей, в другом руководстве, которое скоро появится.