Показать сообщение отдельно

  #2  
Старый 17.04.2008, 09:09
-=lebed=-
Флудер
Регистрация: 21.06.2006
Сообщений: 3,193
Провел на форуме:
12702287

Репутация: 4738


По умолчанию

[Создание своих модулей]
Представьте ситуацию - мы извлекли из БД форума кучу хэшей пользователей и, покопавшись в исходниках форума, обнаружили, что его автор использовал алгоритм, который не поддерживает ни один известный переборщик паролей - пусть, к примеру, это будет алгоритм md5(md5($pass).$pass). Сразу возникает вопрос - что делать? Правильно! Выбора нет - сначала надо сбегать за пивом...

Сбегали? А вот теперь у нас есть выбор.

Можно написать свой переборщик паролей под этот алгоритм, на что уйдет уйма времени, а можно сделать проще - написать лишь код для реализации нужного алгоритма, "обернуть" его парой функций, скомпилировать в DLL-файл и загрузить в PasswordsPro. Заманчиво? Не то слово! А если учесть, что в дистрибутиве программы находятся исходные тексты готового модуля на Visual C++ .NET 2003, то пользователь, имеющий хорошие навыки использования VC++, сможет брутить подобные хэши со всей "мощью" PasswordsPro, затратив всего 10-15 минут!

Смотрим каталог \Modules\API дистрибутива программы, находим в нем архив "RAdmin_Sources.zip", разархивируем и запускаем файл "RAdmin.vcproj". А теперь отвлечемся немного от Visual Studio и прочитаем небольшой файл "ReadMe.chm" в том же каталоге. Так-c... Для связи модуля с PasswordsPro достаточно... двух функций и пары флагов. Всего-то?! Да.
PHP код:
#include "stdafx.h"
#include "MD5.h"
#include "Modules.h"

BOOL APIENTRY DllMain(HANDLE hModuleDWORD ul_reason_for_callLPVOID lpReserved)
{
        return 
TRUE;
}

extern "C" __declspec(dllexportvoid GetInfo(MODULEINFO *info)
{
        
// Наш хэш зависит только от пароля и имеет бинарный формат
        
info->dwFlags MODULE_HASH_SIMPLE MODULE_HASH_BINARY;

        
// Тип нашего хэша
        
info->szHashType "md5(md5($pass).$pass)";

        
// О модуле
        
info->szAbout "Тестовый модуль для хэшей вида md5(md5($pass).$pass)";
}

extern "C" __declspec(dllexportint GetHash(HASHINFO *info)
{
        
unsigned char buf[256];

        
// Формируем md5($pass)
        
MD5_CTX context;
        
MD5Init(&context);
        
MD5Update(&context, (unsigned char *)info->szPasswordinfo->nPasswordLen);
        
MD5Final(buf, &context); // 16 байт хэша -> в buf

        // Т.к. PHP-функция md5() возвращает MD5-хэш
        // в 32-символьном текстовом виде, то и нам надо сделать
        // такое же преобразование. Автор использует для этого
        // собственную inline-функцию, написанную на Ассемблере,
        // но для сокращения места она не приводится, тем более,
        // что преобразовать 16 байт хэша в HEX-формат, к примеру:
        // "e2fc714c4727ee9395f324cd2e7f331f" - задача элементарная.

        // Преобразуем хэш в текстовую строку по адресу &buf[16]
        
HashToText(&buf[16], buf16);

        
// Копируем пароль после текстового хэша
        
memcpy(&buf[48], info->szPasswordinfo->nPasswordLen);

        
// Финальное хэширование строки md5($pass).$pass
        
MD5Init(&context);
        
MD5Update(&context, &buf[16], info->nPasswordLen 32);
        
MD5Final(info->pBuf, &context);

        return 
16;

Листинг 1. Исходный текст модуля для алгоритма md5(md5($pass).$pass).
Компилируем, запускаем PasswordsPro, открываем настройки, ищем закладку "Модули хэширования", кликаем правой кнопкой мыши, добавляем наш модуль в список и, если он скомпилирован правильно, программа радостно скажет "Модуль загружен успешно!".

Небольшое тестирование... Нажимаем F6, вызывая встроенный в программу генератор хэшей, и смотрим, как новоявленный модуль реагирует на изменение пароля. Для проверки стабильности работы модуля можно потестировать пароль на максимальную длину в 127 символов. Если все ок, то принимайте поздравления - вы успешно "подружили" PasswordsPro со своим алгоритмом!

Что делать теперь? Брутить, брутить и брутить! Но сначала сбегаем еще за пивом... Что значит "еще не закончилось"? Даже вторая бутылка не открыта? Ну вот, видите - создать нужный модуль хэширования к программе за 10 минут вполне реально.

Любители Дельфи или VB без труда сформируют собственные прототипы нужных функций, а поклонников Ассемблера ждет приятный сюрприз - на форуме программы есть уже готовые шаблоны для MASM'а и FASM'a.
[Заключение]
Ну что ж, мы воочию убедились, что программа PasswordsPro в умелых руках (особенно "укомплектованная" большим количеством хороших словарей и Rainbow-таблиц) - это реально боевая машина пехоты (в смысле - специалиста по аудиту), смело пробирающаяся по туманному миру хэшей, ломая их направо и налево. Но и она не всесильна, к сожалению.

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

Есть над чем подумать и в отношении коллизий - о них много говорят, но пока никто не нашел ни одной пары разных паролей, дающих одинаковый SHA-1 или MD5-хэш. Первая же найденная пара таких паролей даст бесценную информацию о том, как разные биты этих паролей "пробегают" по всем ступенькам хэширования, трансформируясь в одинаковый результат.

Конечно же, и существующие в программе атаки еще не до конца раскрыли свой потенциал, так что направлений развития программы - масса. От создания новых модулей хэширования и оптимизации существующих (к примеру, задействование видеопроцессоров для перебора паролей) до увеличения "интеллектуальности" самих атак.

Поэтому так и хочется воскликнуть: "PasswordsPro - все только начинается"!
(c)InsidePro
 
Ответить с цитированием