Как определить длину пароля по хэшу
Раньше большинство паролей хранилось в открытом виде, но очень быстро разработчики поняли, что так делать небезопасно. Лучше хранить не сам пароль, а его хэш, набор цифр определенного размера, который генерируется на основе пароля. В таком случае, даже если злоумышленник получит хэш, то он не сможет узнать пароль. Существуют различные способы хэширования, например, md5, sha1, sha2 и многие другие. Но существует способ восстановления пароля из хэша. Для этого можно использовать перебор, нам достаточно создавать хэш для каждого возможного пароля и сравнивать его с тем хэшем, который нужно расшифровать.
Для перебора хешей существуют различные программы, одна из них - это Hashcat. С помощью этой утилиты можно перебирать значение хэша по словарю или полным перебором по всем значениям. В этой статье мы рассмотрим как пользоваться Hashcat.
Какие хэши можно перебрать?
Как я уже говорил, существует несколько алгоритмов хэширования, но сложность перебора каждого из них отличается. Каждый из алгоритмов может иметь коллизии. Это когда для одного хэша можно подобрать несколько различных исходных наборов данных. Самым небезопасным из популярных алгоритмов на данный момент считается md5. Было доказано, что в этом алгоритме можно найти множество коллизий, а это значит, что перебрать значение такого хэша будет намного проще. Алгоритм sha1 тоже имеет коллизии, но их намного сложнее найти, а значит перебор будет ненамного проще. Существования коллизий для Sha2 пока не доказано, но не исключено.
Программа hashcat поддерживает работу с такими алгоритмами хэширования: md5, md5crypt, sha1, sha2, sha256, md4, mysql, sha512, wpa, wpa2, grub2, android, sha256crypt, drupal7, scrypt, django и другими.
Установка hashcat
Если вы используете Windows, то вам достаточно загрузить установщик из официального сайта.
Вам нужно выбрать hashcat binaries нужной версии внизу страницы. В архиве находятся исполняемые файлы для Windows, Linux и MacOS, так что у вас не возникнет проблем. В Linux вы также можете установить утилиту из официальных репозиториев. Например, в Ubuntu команда будет выглядеть вот так:
sudo apt install hashcat
Но это еще не все. Если в вашей системе есть видеокарта, то программа будет использовать ее. И на нее должен быть установлен драйвер, желательно проприетарный. Я не буду на этом останавливаться. Но если видеокарта слабая, то можно использовать процессор. Для этого нужно установить несколько пакетов для работы OpenCL на процессоре. Вот так выглядят команды установки в Ubuntu:
sudo apt install libhwloc-dev ocl-icd-dev ocl-icd-opencl-dev
$ sudo apt install pocl-opencl-icd
Теперь мы можем выполнить тестирование производительности:
Утилита hashcat
Сначала давайте рассмотрим синтаксис и возможные опции утилиты, а потом уже перейдем к ее использованию. Это консольная утилита, поэтому придется использовать ее через терминал. Давайте сначала рассмотрим синтаксис:
$ hashcat опции файл_хэшей словари_и_настройки
Как видите, все довольно просто. Начнем с основных опций, которые настраивают как будет вести себя утилита:
- -h - вывести доступные команды и опции;
- -V - версия программы;
- -m - тип хэша, который нужно перебрать, например, md5 или sha;
- -a - вид атаки;
- -b - запустить тестирование производительности;
- --hex-salt - указать соль, которая использовалась при хэшировании;
- --hex-charset - набор символов, для исходных данных;
- --status - автоматически обновлять состояние подбора;
- -o - файл для записи результата;
- -p - символ, которым разделены хэши для перебора;
- -c - размер кэша для словаря;
- -n - количество потоков;
- -l - ограничить количество слов для перебора;
- -r - файл с правилами генерации вариантов;
- -D - устройство для перебора, CPU или GPU;
- --pw-min - минимальная длина варианта, символов;
- --pw-max - максимальная длина варианта, символов;
- --table-min - длина пароля для табличной атаки;
- --table-max - максимальная длина пароля для табличной атаки;
- --table-file - файл таблицы, для атаки по таблице.
Мы рассмотрели все основные опции, которые сегодня будем использовать. Многие из параметров, например, тип хэша и атаки, задаются в виде цифр. Я не буду рассматривать цифровые коды для типа хэша подробно. Вы можете найти эту информацию, выполнив man hashcat. Рассмотрим типы атак:
- Straight - обычная атака, берет слова из словаря и проверяет их;
- Combination - комбинирует слова из словаря в разные комбинации;
- Toggle-Case - по очереди пробует разный регистр букв для каждого символа слова;
- Brute-force - атака простым перебором на основе маски или символов;
- Permutation - при этом типе атаки программа берет слова из словаря и меняет в них буквы местами для получения разных комбинаций;
- Table-Lookup - Табличная атака, берется одно слово и словаря, а затем на его основе создаются варианты из таблицы. Каждый символ из таблицы будет заменен на набор прописанных вариантов;
- Prince - новый вид атаки перебора, которая работает быстрее, обычной.
Кроме того, при переборе на основе брутфорса нам понадобится выбрать набор символов, которые будет использовать программа для генерации возможных вариантов. Вот возможные значения:
Теперь мы разобрали все необходимое и можно переходить к практике.
Как пользоваться Hashcat?
Как я уже сказал, утилита позволяет расшифровывать хэши, созданные с помощью различных алгоритмов с помощью перебора. Мы будем перебирать хэш md5 и рассмотрим два типа атаки - на основе словаря и полным перебором.
1. Перебор по словарю в Hashcat
Расшифровка md5 проще всего выполняется по словарю. Поскольку полный перебор занимает очень много времени, то перебрать наиболее часто употребляемые варианты может быть намного быстрее. Для перебора нам понадобится словарь, обычно используется rockyou. Словарь можно скачать командой:
Теперь нам еще осталось подготовить хэши, которые будем перебирать. Проще всего это сделать с помощью команды Linux md5sum:
echo -n "password" | md5sum
Например, создадим три хэша. Затем сложим их в файл
2ac9cb7dc02b3c0083eb70898e549b63
5f4dcc3b5aa765d61d8327deb882cf99
b59c67bf196a4758191e42f76670ceba
Теперь, когда все собрано, мы готовы к перебору. Команда перебора по словарю будет выглядеть вот так:
hashcat -m 0 -D 1 -a 0 -t 20
/rockyou.txt -o data.txt
Здесь -m 0 указывает на то, что нужно перебирать хэш md5, а -a 0 указывает на использование обычной атаки по словарю. С помощью опции -n мы задаем количество потоков. Опция -D 1 говорит программе, что нужно использовать процессор. Если вам нужна видеокарта hashcat, используйте -D 0.
Затем, мы указываем файл с хэшами, которые будем перебирать - hashes и словарь. Перебор может занять долгое время, но когда комбинация будет найдена, программа запишет ее в файл data.txt.
Что касается других алгоритмов, то для них нужно будет указать только другой номер типа хєша. Например, для SHA это будет 100. Чтобы узнать нужный номер вы можете использовать такую команду:
hashcat --help | grep SHA1
2. Расшифровка md5 полным перебором
Анализ по словарю выполняется достаточно быстро. На моем железе, такой небольшой словарь анализировался меньше минуты. Программа выдала скорость около 1300 kHash в секунду, а это очень много. Но в словаре есть далеко не все комбинации. Поэтому вы можете попытаться выполнить полный перебор нужной последовательности символов. Например:
hashcat -m 300 -a 3 -n 32 --custom-charset=?l?d
Здесь мы просто указали набор символов, буквы в нижнем регистре и цифры, а затем запустили перебор. Также можно указать ограничения на минимальное и максимальное количество символов:
hashcat -m 0 -a 3 --force -D 1 --potfile-disable --increment-min 5 --increment --increment-max 6 --custom-charset1=?l?d
Здесь мы говорим программе, что нужно начинать с размера слова 5 символов и завершить размером 6. Также можно использовать маски. Маска позволяет точно указать какой набор символов использовать, в какой последовательности и сколько. Указывать маску нужно на месте словаря. Например, маска слова из четырех цифр будет ?d?d?d?d, а маска из четырех любых цифр, букв разного регистра и специальных символов будет выглядеть ?a?a?a?a. Также можно комбинировать маску с известной частью: abc?a?a. Рассмотрим пример команды:
hashcat -m 0 -a 3 --force -D 1 --potfile-disable
Маска уменьшает в разы количество вариантов, тем самым увеличивая скорость. Таким образом, расшифровка хеша md5 длиной 4 символа была выполнена меньше чем за секунду. С помощью следующей команды вы можете проверить не перебирали ли вы раньше эти хэши:
hashcat -m 0 --show
Выводы
В этой статье мы рассмотрели как пользоваться Hashcat, с помощью которой может быть выполнена расшифровка md5 и других хэш-функций. Как видите, расшифровать хэш, можно достаточно быстро, зная параметры исходного пароля, поэтому не используйте простые пароли в своих системах и вообще не используйте md5 если вы разработчик. Надеюсь, эта инструкция hashcat была полезной для вас.
В мире существует несколько зеттабайт цифровых данных, но далеко не вся эта информация уникальна: повторы разбросаны по миллиардам носителей и серверов. Независимо от типа данных, для работы с ними требуется решать одни и те же принципиальные задачи. Это снижение избыточности за счет частичного устранения повторов (дедупликация), проверка целостности, инкрементное создание резервных копий и авторизация пользователей. Конечно, последний аспект интересует нас больше всего, однако все эти технические приемы базируются на общих методах обработки данных с использованием хеширования. Существуют облачные сервисы, которые позволяют использовать эту процедуру быстрее — с хорошо известными целями.
На первый взгляд кажется странным, что в разных задачах применяется общая процедура вычисления и сравнения контрольных сумм или хешей — битовых последовательностей фиксированной длины. Однако этот метод действительно универсален. Контрольные суммы служат своеобразными цифровыми отпечатками файлов, ключей, паролей и других данных, называемых в криптографии messages — сообщения. Хеши (или дайджесты, от англ. digest) позволяют сравнивать их между собой, быстро обнаруживать любые изменения и обезопасить проверку доступа. Например, с помощью хешей можно проверять соответствие введенных паролей, не передавая их в открытом виде.
Математически этот процесс выполняется одним из алгоритмов хеширования — итерационного преобразования блоков данных, на которое разбивается исходное сообщение. На входе может быть что угодно — от короткого пароля до огромной базы данных. Все блоки циклично дописываются нулями или урезаются до заданной длины до тех пор, пока не будет получен дайджест фиксированного размера.
Предельный объем исходных данных, который может обработать хеш‑функция, определяется формой их представления в алгоритме. Обычно они записываются как целое 64-битное число, поэтому типичный лимит составляет 2 64 бит минус единица, или два эксабайта. Такое ограничение пока не имеет практической значимости даже для очень крупных дата‑центров.
Обычно хеши записываются в шестнадцатеричном виде. Так их гораздо удобнее сравнивать на вид, а запись получается в четыре раза короче двоичной. Самые короткие хеши получаются при использовании Adler-32, CRC32 и других алгоритмов с длиной дайджеста 32 бита. Самые длинные — у SHA-512. Кроме них, существует с десяток других популярных хеш‑функций, и большинство из них способно рассчитывать дайджесты промежуточной длины: 160, 224, 256 и 384 бит. Попытки создать функцию с увеличенной длиной хеша продолжаются, поскольку чем длиннее дайджест, тем больше разных вариантов может сгенерировать хеш‑функция.
Неповторимость — залог надежности
Уникальность хеша — одно из его ключевых свойств, определяющее криптостойкость системы шифрования. Дело в том, что число вариантов возможных паролей теоретически бесконечно, а вот число хешей всегда конечное, хоть и очень большое. Дайджесты любой хеш‑функции будут уникальны лишь до определенной степени. Степени двойки, если быть точным. К примеру, алгоритм CRC32 дает множество всего из 2 32 вариантов, и в нем трудно избежать повторений. Большинство других функций использует дайджесты длиной 128 или 160 бит, что резко увеличивает число уникальных хешей — до 2 128 и 2 160 соответственно.
Строго говоря, к хеш‑функциям в криптографии предъявляются более высокие требования, чем к контрольным суммам на основе циклического кода. Однако эти понятия на практике часто используют как синонимы.
Совпадение хешей от разных исходных данных (в том числе паролей) называют коллизией. Она может быть случайной (встречается на больших объемах данных) или псевдослучайной — используемой в целях атаки. На эффекте коллизии основан взлом разных криптографических систем — в частности, протоколов авторизации. Все они сначала считают хеш от введенного пароля или ключа, а затем передают этот дайджест для сравнения, часто примешивая к нему на каком‑то этапе порцию псевдослучайных данных, или используют дополнительные алгоритмы шифрования для усиления защиты. Сами пароли нигде не сохраняются: передаются и сравниваются только их дайджесты. Здесь важно то, что после хеширования абсолютно любых паролей одной и той же функцией на выходе всегда получится дайджест одинакового и заранее известного размера.
Псевдореверс
Провести обратное преобразование и получить пароль непосредственно из хеша невозможно в принципе, даже если очистить его от соли, поскольку хеширование — это однонаправленная функция. Глядя на полученный дайджест, нельзя понять ни объем исходных данных, ни их тип. Однако можно решить сходную задачу: сгенерировать пароль с таким же хешем. Из‑за эффекта коллизии задача упрощается: возможно, ты никогда не узнаешь настоящий пароль, но найдешь совершенно другой, дающий после хеширования по этому же алгоритму требуемый дайджест.
Для этого надо сделать всего ничего — рассчитать 2 128 пар вида пароль — хеш или на порядок‑другой больше — в зависимости от длины дайджеста выбранной функции. Однако все эти двойки в чертовски большой степени отпугивают, только если думать о скромных возможностях собственной машины. Хорошо, что скорость нахождения пароля по его хешу сегодня необязательно зависит от вычислительной мощности компьютера самого атакующего, поскольку во многих случаях для этого уже не требуется выполнять долгий перебор. Многое уже сделано до нас.
Методы оптимизации расчетов появляются буквально каждый год. Ими занимаются команды HashClash, Distributed Rainbow Table Generator и других международных проектов криптографических вычислений. В результате на каждое короткое сочетание печатных символов или вариант из списка типичных паролей хеши уже вычислены. Их можно быстро сравнить с перехваченным, пока не найдется полное совпадение.
Раньше на это требовались недели или месяцы процессорного времени, которые в последние годы удалось сократить до нескольких часов благодаря многоядерным процессорам и перебору в программах с поддержкой CUDA и OpenCL. Админы нагружают расчетами таблиц серверы во время простоя, а кто‑то арендует виртуальный кластер в Amazon EC2.
Искать XOR вычислять
Популярные алгоритмы хеширования работают настолько быстро, что к настоящему моменту удалось составить пары «хеш — пароль» почти для всех возможных вариантов функций с коротким дайджестом. Параллельно у функций с длиной хеша от 128 бит находят недостатки в самом алгоритме или его конкретных реализациях, что сильно упрощает взлом.
В девяностых годах крайне популярным стал алгоритм MD5, написанный Рональдом Ривестом. Он стал широко применяться при авторизации пользователей на сайтах и при подключении к серверам клиентских приложений. Однако его дальнейшее изучение показало, что алгоритм недостаточно надежен. В частности, он уязвим к атакам по типу псевдослучайной коллизии. Иными словами, возможно преднамеренное создание другой последовательности данных, хеш которой будет в точности соответствовать известному.
Поскольку дайджесты сообщений широко применяются в криптографии, на практике использование алгоритма MD5 сегодня приводит к серьезным проблемам. Например, с помощью такой атаки можно подделать цифровой сертификат x.509. В том числе возможна подделка сертификата SSL, позволяющая злоумышленнику выдавать свой фейк за доверенный корневой сертификат (CA). Более того, в большинстве наборов доверенных сертификатов легко найти те, которые по‑прежнему используют алгоритм MD5 для подписи. Поэтому существует уязвимость всей инфраструктуры открытых ключей (PKI) для таких атак.
Изнурительную атаку перебором устраивать придется только в случае действительно сложных паролей (состоящих из большого набора случайных символов) и для хеш‑функций с дайджестами большой длины (от 160 бит), у которых пока не нашли серьезных недостатков. Огромная масса коротких и словарных паролей сегодня вскрывается за пару секунд с помощью онлайновых сервисов.
Бойцы облачного фронта
1. Проект «Убийца хешей» существует уже почти восемь лет. Он помогает вскрыть дайджесты MD5, SHA-160 и NTLM. Текущее количество известных пар составляет 43,7 миллиона. На сайт можно загружать сразу несколько хешей для параллельного анализа. Пароли, содержащие кириллицу и символы других алфавитов, кроме английского, иногда находятся, но отображаются в неверной кодировке. Еще здесь проводится постоянный конкурс взлома паролей по их хешам и доступны утилиты для облегчения этой задачи — например, программы для объединения списков паролей, их переформатирования и устранения повторов.
HashKiller не дружит с кириллицей, но знает кириллические пароли «Убийца хешей» нашел три пароля из пяти за полсекунды
2. «Крэк‑станция» поддерживает работу с хешами практически всех реально используемых типов. LM, NTLM, MySQL 4.1+, MD2/4/5 + MD5-half, SHA-160/224/256/384/512, ripeMD160 и Whirlpool. За один раз можно загрузить для анализа до десяти хешей. Поиск проводится по индексированной базе. Для MD5 ее объем составляет 15 миллионов пар (около 190 Гб) и еще примерно по 1,5 миллиона для каждой другой хеш‑функции.
«Крэк‑станция» находит многие словарные пароли даже по хешам NTLM
По уверениям создателей, в базу включены все слова из англоязычной версии Википедии и большинство популярных паролей, собранных из общедоступных списков. Среди них есть и хитрые варианты со сменой регистра, литспиком, повтором символов, зеркалированием и прочими ухищрениями. Однако случайные пароли даже из пяти символов становятся проблемой — в моем тесте половина из них не была найдена даже по LM-хешам.
«Крэк‑станция» с трудом вскрывает случайные пароли длиной от пяти символов даже по LM-хешам
«Облачный крэкер» мгновенно находит словарные пароли по их хешам
Собственного поиска на сайте пока нет, но пароль или его хеш можно написать прямо в адресной строке браузера, добавив его после адреса сайта и префикса /encrypt/.
Сервис MD5Decode знает все типы хешей от словарных паролей
MD5Decrypt находит составные словарные пароли, но хеши на анализ принимает только по одному
Ищем хеши Гуглом
Далеко не все сервисы готовы предоставить услугу поиска паролей по хешам бесплатно. Где‑то требуется регистрация и крутится тонна рекламы, а на многих сайтах можно встретить и объявления об услуге платного взлома. Часть из них действительно использует мощные кластеры и загружает их, ставя присланные хеши в очередь заданий, но есть и обычные пройдохи. Они выполняют бесплатный поиск за деньги, пользуясь неосведомленностью потенциальных клиентов.
Вместо того чтобы рекламировать здесь честные сервисы, я предложу использовать другой подход —находить пары хеш — пароль в популярных поисковых системах. Их роботы‑пауки ежедневно прочесывают веб и собирают новые данные, среди которых есть и свежие записи из радужных таблиц.
Поэтому для начала просто напиши хеш в поисковой строке Google. Если ему соответствует какой‑то словарный пароль, то он (как правило) отобразится среди результатов поисковой выдачи уже на первой странице. Единичные хеши можно погуглить вручную, а большие списки будет удобнее обработать с помощью скрипта BozoCrack.
Универсальный подход
Среди десятка хеш‑функций наиболее популярны MD5 и SHA-1, но точно такой же подход применим и к другим алгоритмам. К примеру, файл реестра SAM в ОС семейства Windows по умолчанию хранит два дайджеста каждого пароля: LM-хеш (устаревший тип на основе алгоритма DES) и NT-хеш (создается путем преобразования юникодной записи пароля по алгоритму MD4). Длина обоих хешей одинакова (128 бит), но стойкость LM значительно ниже из‑за множества упрощений алгоритма.
Постепенно оба типа хешей вытесняются более надежными вариантами авторизации, но многие эту старую схему используют в исходном виде до сих пор. Скопировав файл SAM и расшифровав его системным ключом из файла SYSTEM, атакующий получает список локальных учетных записей и сохраненных для них контрольных значений — хешей.
Далее взломщик может найти последовательность символов, которая соответствует хешу администратора. Так он получит полный доступ к ОС и оставит в ней меньше следов, чем при грубом взломе с помощью банального сброса пароля. Напоминаю, что из‑за эффекта коллизии подходящий пароль не обязательно будет таким же, как у реального владельца компьютера, но для Windows разницы между ними не будет вовсе. Как пела группа Bad Religion, «Cause to you I’m just a number and a clever screen name».
Аналогичная проблема существует и в других системах авторизации. Например, в протоколах WPA/WPA2, широко используемых при создании защищенного подключения по Wi-Fi. При соединении между беспроводным устройством и точкой доступа происходит стандартный обмен начальными данными, включающими в себя handshake. Во время «рукопожатия» пароль в открытом виде не передается, но в эфир отправляется ключ, основанный на хеш‑функции. Нужные пакеты можно перехватить, переключив с помощью модифицированного драйвера приемник адаптера Wi-Fi в режим мониторинга. Более того, в ряде случаев можно не ждать момента следующего подключения, а инициализировать эту процедуру принудительно, отправив широковещательный запрос deauth всем подключенным клиентам. Уже в следующую секунду они попытаются восстановить связь и начнут серию «рукопожатий».
Сохранив файл или файлы с хендшейком, можно выделить из них хеш пароля и либо узнать сам пароль, либо найти какой‑то другой, который точка доступа примет точно так же. Многие онлайновые сервисы предлагают провести анализ не только чистого хеша, но и файла с записанным хендшейком. Обычно требуется указать файл pcap и SSID выбранной точки доступа, так как ее идентификатор используется при формировании ключа PSK.
Пока с помощью онлайновых сервисов и радужных таблиц находятся далеко не все пары хеш — пароль. Однако функции с коротким дайджестом уже побеждены, а короткие и словарные пароли легко обнаружить даже по хешам SHA-160. Особенно впечатляет мгновенный поиск паролей по их дайджестам с помощью Гугла. Это самый простой, быстрый и совершенно бесплатный вариант.
Этичный хакинг и тестирование на проникновение, информационная безопасность
Что такое хеши и как они используются
Хеш-сумма (хеш, хеш-код) — результат обработки неких данных хеш-функцией (хеширования).
Это свойство хеш-функций позволяет применять их в следующих случаях:
Одним из применений хешов является хранение паролей. Идея в следующем: когда вы придумываете пароль (для веб-сайта или операционной системы) сохраняется не сам пароль, а его хеш (результат обработки пароля хеш-функцией). Этим достигается то, что если система хранения паролей будет скомпрометирована (будет взломан веб-сайт и злоумышленник получит доступ к базе данных паролей), то он не сможет узнать пароли пользователей, поскольку они сохранены в виде хешей. Т.е. даже взломав базу данных паролей он не сможет зайти на сайт под учётными данными пользователей. Когда нужно проверить пароль пользователя, то для введённого значения также рассчитывается хеш и система сравнивает два хеша, а не сами пароли.
По этой причине пентестер может столкнуться с необходимостью работы с хешами. Одной из типичных задач является взлом хеша для получения пароля (ещё говорят «пароля в виде простого текста» - поскольку пароль в виде хеша у нас и так уже есть). Фактически, взлом заключается в подборе такой строки (пароля), которая будет при хешировании давать одинаковое значение со взламываемым хешем.
Для взлома хешей используется, в частности, Hashcat. Независимо от выбранного инструмента, необходимо знать, хеш какого типа перед нами.
Как определить тип хеша
Существует большое количество хешей. Некоторые из них являются универсальными и применяются различными приложениями, например, MD5, SHA1, CRC8 и другие. Некоторые хеши применяются только в определённых приложениях (MySQL, vBulletin) и протоколами.
Кроме популярных хешей, разработчики могут использовать различные сочетания универсальных хешей (например, посчитать хеш с помощью MD5, а затем для полученной строки получить хеш SHA1), либо итерированные (с повторением) хеши (например, для пароля рассчитывается MD5 хеш, затем для полученной строки вновь рассчитывается MD5 хеш, затем для полученной строки вновь считается MD5 – и так тысячу раз).
Применительно к взлому, иногда хешем называют сформированную определённым образом строку или файл, которые не применяются целевым приложением, но которые были рассчитаны исходя из исходных данных так, что позволяют взломать пароль целевого файла или протокола.
Пример такой строки для WinZip: $zip2$*0*3*0*b5d2b7bf57ad5e86a55c400509c672bd*d218*0**ca3d736d03a34165cfa9*$/zip2$
Пример строки для взлома пароля файла PDF 1.7 Level 8 (Acrobat 10 - 11): $pdf$5*6*256*-4*1*16*381692e488413f5502fa7314a78c25db*48*e5bf81a2a23c88f3dccb44bc7da68bb5606b653b733bcf9adaa5eb2c8ccf53abba66539044eb1957eda68469b1d0b9b5*48*b222df06deb308bf919d13447e688775fdcab972faed2c866dc023a126cb4cd4bbffab3683ecde243cf8d88967184680
Обычно пентестеру известен источник хеша и он знает его тип. Но бывают исключения. В этой ситуации необходимо «угадать» какой хеш перед нами.
Это можно сделать сравнивая исходный хеш с образцами. Либо исходя из количества символов и используемого набора символов.
Также можно использовать инструменты, которые значительно ускоряют этот процесс. Программами для определения типа хеша являются hashID и HashTag.
hashID
Эта программа по умолчанию уже установлена в Kali Linux. Она идентифицирует различные типы хешей, используемых для шифрования данных, в первую очередь, паролей.
hashID – это инструмент, написанный на Python 3, который поддерживает идентификацию более 220 уникальных типов хешей используя регулярные выражения.
Использование программы очень простое:
Пара важных замечаний:
- хеш всегда лучше указывать в одинарных кавычках (а не без кавычек и не в двойных)
- имеется опция -m, при использовании которой выводится информация о режиме Hashcat
Хеш режимы Hashcat – это условное обозначение типа хеша, которое необходимо указать с опцией -m, --hash-type.
К примеру, мне необходимо идентифицировать хеш $S$C33783772bRXEx1aCsvY.dqgaaSu76XmVlKrW9Qu8IQlvxHlmzLf:
Как можно увидеть по скриншоту, это Drupal > v7.x в Hashcat для взлома данного хеша необходимо указать режим 7900.
Идентифицируем хеш $1$VnG/6ABB$t6w9bQFxvI9tf0sFJf2TR.:
Получаем сразу несколько вариантов:
MD5cryp – это алгоритм, который вызывает тысячу раз стандартный MD5, для усложнения процесса.
Для справки: MD5 использовался для хеширования паролей. В системе UNIX каждый пользователь имеет свой пароль и его знает только пользователь. Для защиты паролей используется хеширование. Предполагалось, что получить настоящий пароль можно только полным перебором. При появлении UNIX единственным способом хеширования был DES (Data Encryption Standard), но им могли пользоваться только жители США, потому что исходные коды DES нельзя было вывозить из страны. Во FreeBSD решили эту проблему. Пользователи США могли использовать библиотеку DES, а остальные пользователи имеют метод, разрешённый для экспорта. Поэтому в FreeBSD стали использовать MD5 по умолчанию. Некоторые Linux-системы также используют MD5 для хранения паролей.
Ещё один хеш $6$q8C1F6tv$zTP/eEVixqyQBEfsSbTidUJfnaE2ojNIpTwTHava/UhFORv3V4ehyTOGdQEoFo1dEVG6UcXwhG.UHvyQyERz01:
Программа говорит, что это SHA-512 Crypt – т.е. SHA512 (Unix).
HashTag
HashTag – это инструмент на python, который разбирает и идентифицирует различные хеши паролей на основе их типа. HashTag поддерживает определение более 250 типов хешей и сопоставляет их с более чем 110 режимами hashcat. HashTag способен идентифицировать единичный хеш, разобрать единичный файл и определить хеши внутри него или обойти директорию и все поддиректории в поисках потенциальных файлов хешей и идентифицировать все найденные хеши.
Т.е. это аналогичная предыдущей программа.
По умолчанию в Kali Linux она отсутствует, поэтому требуется её скачать:
Идентифицируем те же самые хеши:
Как видим, результаты аналогичны.
Примеры хешей
Большое количество классических хешей, а также хешей, специально составленных для взлома пароля и хеш-файлов вы найдёте здесь.
На той странице вы можете:
- попытаться идентифицировать свой хеш по образцам
- найти ошибку в составленном хеше для взлома пароля, сравнив его с правильным форматом
- проверить работу программ по идентификации хеша
Программы hashID и HashTag не всегда правильно идентифицируют хеш (по крайней мере, в явных ошибках замечена hashID).
К примеру, меня интересует хеш c73d08de890479518ed60cf670d17faa26a4a71f995c1dcc978165399401a6c4:53743528:
Это явно ошибочный результат, поскольку соль после двоеточия будто бы была отпрошена при идентификации хеша.
Получаем более правильный результат:
В действительности это sha256($pass.$salt).
Как рассчитать хеш (контрольную сумму)
В Linux имеются программы для расчёта и сверки популярных хешей:
Все эти программы установлены по умолчанию в большинстве дистрибутивов Linux, они позволяют рассчитать хеши для файлов или для строк.
Применение всех этих программ похожее – нужно указать имя файла, либо передать по стандартному вводу строку.
Если для расчёта хеша строки вы используете echo, то крайне важно указывать опцию -n, которая предотвращает добавление символа новой строки – иначе каждый хеш для строки будет неверным!
Пример подсчёта хеша SHA1 для строки test:
Ещё один способ передачи строки без добавления конечного символа newline
Этот же результат можно получить следующей конструкцией:
Программы для вычисления различных хешей
Кроме перечисленных встроенных в Linux утилит, имеются другие программы, способные подсчитывать контрольные суммы. Часто они поддерживают сразу несколько алгоритмов хеширования, могут иметь дополнительные опции ввода и вывода (поддерживают различные форматы и кодировки), некоторые из них подготовлены для выполнения аудита файловой системы (выявления несанкционированных изменений в файлах).
Список некоторых популярных программ для вычисления хешей:
Думаю, используя русскоязычную справку с примерами использования, вы без труда сможете разобраться в этих программах самостоятельно.
Последовательное хеширование с использованием трубы (|)
Но это неправильный вариант. Поскольку результатом выполнения в любом случае является непонятная строка из случайных символов, трудно не только обнаружить ошибку, но даже понять, что она есть. А ошибок здесь сразу несколько! И каждая из них ведёт к получению абсолютно неправильных данных.
Даже очень бывалые пользователи командной строки Linux не сразу поймут в чём проблема, а обнаружив первую проблему не сразу поймут, что есть ещё одна.
Очень важно помнить, что в строке вместе с хешем всегда выводится имя файла, поэтому выполняя довольно очевидную команду вроде следующей:
Выше уже рассмотрено, как из вывода удалять « -», кажется, теперь всё должно быть в порядке:
Давайте разобьём это действие на отдельные команды:
Второй этап хеширования:
Это и есть правильный ответ.
Проблема в том, что когда выводится промежуточный хеш, к нему добавляется символ новой строки, и второй хеш считается по этой полной строке, включающей невидимый символ!
Используя printf можно вывести результат без конечного символа новой строки:
Результат вновь правильный:
С printf не все дружат и проблематично использовать рассмотренную конструкцию если нужно хешировать более трёх раз, поэтому лучше использовать tr:
Вновь правильный результат:
Или даже сделаем ещё лучше – с программой awk будем использовать printf вместо print (это самый удобный и короткий вариант):
Как посчитать итерированные хеши
Итерация – это повторное применение какой-либо операции. Применительно к криптографии, итерациями называют многократное хеширование данных, которые получаются в результате хеширования. Например, для исходной строки в виде простого текста рассчитывается SHA1 хеш. Полученное значение вновь хешируется – рассчитывается SHA1 хеш и так далее много раз.
Итерация – очень эффективный метод для борьбы с радужными таблицами и с полным перебором (брут-форсом), поэтому в криптографии итерированные хеши очень популярны.
При помощи современного оборудования, мы можем почти наверняка расшифровать быстрый хеш, например, 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): комбинируются все элементы из двух словарей.
Гибридная атака (Hybrid): представляет собой атаку по словарю с примесью комбинаций сгенерированных по определенному шаблону.
Примечание 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).
Рисунок 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 + маска
Вначале сгенерируем статистику по маскам на базе паролей длиной 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 и более символов
Пример (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, где можно поискать хеши в исследовательских целях.
Напоследок хочу привести следующую цитату: «Успешный кибер-генерал перед началом проникновения в систему выполняет множество вычислений в терминале» (Cyber Sun Tzu).
Читайте также: