Атака на хэши.
Статья предназначена в основном для тех кто брутит очереди хэшей (списки хэшей), а так же будет интересна начинающим бруттерам.
Для повышения уровня успешного восстановления паролей от хэшей в очередях сервисов, хотел поделится некоторыми советами и рекомендациями, т.е. указать конкретные этапы атак и их параметры для максимального успеха по восстановлению паролей за относительно короткое время.
[Простые пароли]
Давайте определимся с понятием, что собственно такое простые пароли?
Как правило это пароли, для восстановления которых требуется малое время (будем считать не более суток).
а) Пароль малой длинны, состоящий из полного набора символов (как правило 1-5)
б) Пароль большой длинны, состоящий из одного символа (напрмер 11111111111111111111111111111111111)
в) Пароль малой длинны, состоящий из ограниченного набора симовлов (как правило 6-7 символов строчных или заглавных букв).
г) Пароль произвольной длинны состоящий из рядом расположенных символов на клавиатуре (необходим словарь таких комбинаций).
д) Часто используемый пароль, который имеется у Вас в словарях.
е) Часто используемый модифицируемый пароль, на основе того же словаря часто используемых паролей.
ж) Пароль, состоящий из двух слов часто используемых паролей (например password12345).
[Какие виды атак использовать для поиска простых паролей?]
а) Ну конечно же это сначала предварительная атака.
б) Атака полным перебором (все символы, длинна 1-5, время атаки <20 мин.);
в) Атака полным перебором (все цифры, длинна 6-11, время атаки <30 мин.);
г) Атака полным перебором (все английские строчные 6-7, время атаки <30 мин.);
д) Атака полным перебором (все английские заглавные 6-7, время атаки <30 мин.);
е) Атака по Вашим словарям. (Используйте всё что есть, желательно чтоб словари состояли из используемых реально паролей). Время атаки зависит от словаря и как правило, не большое, потому как редко кто имеет большие словари, состоящие из десятков милиардов слов).
ж) Гибридная атака по словарям с использованием правил замены символов. (время атаки=время предыдущей атаки х колличество правил замены.)
з) Комбинированная атака по маленьким словарям, часто используемых слов. (я обычно ограничиваюсь комбинацией словаря InsidePro.dic с самим собой, Вы можете использовать и другие простые словари, которые уже идут в комплекте с программой).
Используя данные виды атак, за очень короткое время можно подобрать большое колличество простых паролей.
[Сложные пароли - быстрый поиск]
Что такое сложный пароль? Я отвечу просто, все оставшие хэши, которые остались без найденного пароля у Вас в списке, будем считать сложными! )) Атака на сложные пароли может идти очень долго, если использовать простой перебор...
Давайте подумаем какие же это могут быть пароли?
- Используется другой алгоритм хэширования
а) Например md5(md5(pass)), исходный пароль в этом случае представляет собой 128-битный хэш, который кроме как, атакой по словарю (который его содержит) нам не подсилу восстановить (32 символа алфавита 0-0a-f). Что делать? Меняем тип хэша на md5(md5()) и goto [простые пароли]!
б) Хэш солёный, например md5($pass.$salt) а соли мы не имеем -> комбинированная атака, где один словарь выступает в качестве пароля, а второй сгенирированный словарь - соль, хорошо бы конечно знать хотя-бы длину этой соли, часто используют 4-5 символов);
в) Хэш солёный, использует более сложный алгоритм предварительного хэширования, например md5(md5($pass).md5($salt)) или md5($pass.md5($salt)) и т.п. К сожалению сервис hash*****ing.info не поддерживает пароли больше чем 32 символа, поэтому восстановив такой пароль Вы не сможете добавить его в базу сервиса, хотя возможность восстановления так же есть: генерируем хэши от словарей, генерируем словарь хэшей от соли и используем комбинированную атаку. Вообщем такие ошибки сосикателя (т.е. если он подсунул нам таким образом сгенерированный хэш мы исправить не сможем). Единственная возможность в этом случае воспользоваться дополнительной возможностью сервиса Атака по словарю и указать алгоритм хэширования, но в этом случае Вам нужно так же как и в программе PasswordsPro указать конкретное значение соли.
в) Хэш MD4 - клиент ошибся адресом, на сервисе hash*****ing.info нет поддержки md4 - забиваем (хотя для меня будет полезно пробрутить, чтобы исключить ошибочные хэши из очереди, безусловно то, что и ему в природе имеется соответсвие, т.е. md5(pass1)=md4(pass2) - но нужно ли это нам? Ответ - скорее нет.
г) Сгенирированный пароль длинной до 8 символов. Тут Вам поможет атака по Rainbow Tables. Сразу скажу, что во-первых их надо иметь в наличии (таблицы) или потратить значительное время на их генерацию.
Надо заметить, что на поиск сложных паролей может уйти в n-раз больше времени, чем на поиск простых, в зависимости он колличества используемых алгоритмов хэширования, в случае, если Вы достаточно хорошо к этому подготовлены. (Имеете софт для работы со словарями, Скрипты для генерации хэшей, Радужные Таблицы и т.д.)
Таким образом, при соответсвующей подготовке, казалось бы очень сложные пароли для кого-то можно отнести условно к "простым" (я имею ввиду затраченное время на взлом).
Что же делать с оставшимися не расшифрованными паролями?
[Сложные пароли - Оптимальный поиск]
Давайте поразмыслим, что бы это у нас могло остаться?
а) Ну как ранее я указал Выше - другой алгорим хэширования или сложное предварительное хэширование.
б) Сгененированый программой сложный пароль длинной более 8 символов.
в) Осмысленный пароль, часто состоящий из цифр и букв и спецсимволов длинной более более 8 символов.
Как быть с поиском таких паролей?
В случае а) просто забиваем (желающие могут побрутить md4, что некоторые и делают).
В случае б) такие пароли без распределённого перебора восстановить очень сложно, потребуется очень много машинного времени. Второй вариант использование гибридных Rainbow Tables, но к сожалению в PasswordsPro нет поддержки таких таблиц, но сам принцип мы можем использовать в комбинированной атаке, но об этом ниже...
В случае в) нам может обернуться удача, если мы грамотно используем атаки по маске и комбинированную атаку по словарям.
Часто сложные пароли с длинной 8 и более символов представляют собой осмысленные комбинации цифр, заглавных и строчных букв, спецсимволов. В этом случае нам поможет атака по маске. Какие маски указывать? Давайте подумаем.
?*?l?l?l?l?d?d?d?d - возьмём, к примеру такую маску, чем она хороша? Она предназначена для поиска паролей вида ?pass1991 или >Lishp4513, т.е. первый символ пароля у нас любой, далее идут строчные четыре символа и в конце цифры. Таких масок можно придумать кучу, скажете Вы, но всё-таки в пароле просматривается определённая логика. Можно поставить неизвестный символ в середину пароля (между буквами и цифрами - такие тоже встречаются), а можно и в конец. Зачастую от верного пароля нас может отделять всего лишь один символ! И многие зная это именно его и ставят либо в конце/начале либо в середине.
Т.е. задав логичную маску пароля мы сокращаем диапазон перебора и выуживаем возможные оставшиеся пароли. Вот некоторые, маски, которые я использую:
Код:
?*?l?l?l?l?d?d?d?d длинна 6-9 символов
?l?l?l?l?*?d?d?d?d длинна 6-9 символов
?l?l?l?l?l?d?d?d?* длинна 9 символов
В случае работы с масками нам может улыбнуться удача, если пароль осмысленно придуман и его длинна 9-10 символов, с большими длиннами растёт время поиска как и в случае атаки полным перебором (это и есть полный перебор по сути, только для каждой части пароля - свой диапазон).
В случаях б) и в) нам так же может помочь комбинированная атака по специально сгенерированным словарям.
Что же это за словари? Возмём к примеру любой, достаточного объёма, (1-5 млн. слов) словарь и посчитаем возможные релевантные (часто встречающиеся) комбинации двух, трёх, четырёх символьные в словах из этого словаря и занесём в список. Далее, если такой словарь скомбинировать сам с собой 3-4 раза (возвести в 3-4 степень), то мы получим множество слов исходного словаря + дополнительные, возможно даже реально не существующие слова, но более вероятно используемые. Именно на этом принципе строятся Гибридные Rainbow Tables для программы UDC (она их поддерживает). Данным видом атаки мы сможем найти достаточно сложные пароли длинной 9-16 символов. Какой должен быть исходный словарь для генерации этих словарей? Конечно будет лучше, если он будет состоять из реальных паролей, используемых в интернете. Только предварительно из него надо исключить хэши, которые использованы в качестве пароля - они создадут "помехи" релевантности, так как никакой логики в 32 символьном хэше не просматривается (случайный набор цифр 0-9a-f).
Дополняем тему своими проверенными методиками
(с)античат -=lebed=-