Всем известна старая атака по словарю. А так же ее дополнение
( имеется в виду атака с нескольких машин ). В общем случае это
выглядит так :
1. Клиент(далее Crk-client) обращается к серверу(далее Crk-server)
за очередной порцией паролей
2. Crk-server помечает эту порцию как находящуюся в работе
3. Crk-client пробует все пароли из этой порции .
а) Если один из них подошел , отправляется сообщение на Crk-server,
и на этом заканчиваем перебор.
б) Если нет то Crk-client отсылает на Crk-server сообщение об
окончании перебора и берет новую порцию.
в) Если соединение разрывается по ошибке или Crk-client завис, то
он ,естественно ,ничего не отправляет.
4. Crk-server получает сообщение об окончании перебора ( см.3б ),
тогда эта порция удаляется как уже обработанная .
Или , по time-out'у , Crk-server помечает эту порцию как
необработанную ( см.3в )
Теперь непосредственно сама идея.
Рассмотрим например chat.ru(далее сервер). Он предоставляет следующие виды сервиса :
1. Размещение страниц
2. Почту ( как POP3 , так и SMTP )
и т.д. ( остальное нас не интересует)
Рассмотрим как можно организовать перебор пароля на ЛЮБОЙ сервис
данного сервера.
Crk-client можно написать в виде апплета на яве и положить апплет
на сервер. Это делается для того , что бы перебором паролей занимались
посетители этой страницы ( даже не подозревая об этом ).
В логах сервера перебор будет разнесен во времени и пространстве,
т.е. попытки будут происходить через неравные промежутки времени и
из разных мест. И к тому же невозможно будет определить кто же в
действительности подбирает пароль.
Этот апплет может коннектиться только с тем сервером
откуда он был загружен (chat.ru). Нам это и нужно.
Проблема в следующем: как разместить на сервере Crk-server ?
Очевидно , что это не получится . Покажем как можно обойтись без
Crk-server'а ...
Регистрируем два аккаунта(далее WordList и TMP) на сервере, размещаем
HTML-страничку с апплетом Crk-client, а словарь ложим в почтовый ящик
(WordList) на сервере. Словарь необходимо разбить на порции , например
по 20 паролей. При этом каждая порция лежит отдельным письмом.
Crk-client при запуске, обращается на WordList по протоколу POP3 и
берет первое-же письмо ( удаляя его с WordList , но отсылая его по
SMTP на TMP). Далее Crk-client начинает перебор. Если пароль успешно
найден, отправляем его по SMTP себе :))
Если перебор завершился впустую , удаляем из TMP эту порцию . Здесь
может возникнуть проблемма , когда одновременно работают несколько
клиентов. Но "свою" порцию можно найти используя команду POP3
TOP msg n.
Если Crk-client не доработал из-за ошибки , то эта порция не потеряется
и ее можно переместить из TMP в WordList . Делать это придется или вручную
( что нежелательно ) или возложить эту функцию на Crk-client. Тут возникает
еще одна проблема, как отличить в TMP порции которые обрабатываются
сейчас от тех которые надо переместить в WordList . Для этого нужно
анализировать дату отправки порции и текущее время. Если разница
порядка часа , то эту порцию перемещаем в WordList.
Скорость перебора зависит от качества связи с сервером и от количества
посетителей этой странички. Как сделать страничку посещаемой - тема
для отдельной статьи :)))
Сейчас я работаю над реализацией этого алгоритма. Пока что это только
теория. В процессе работы возникло сомнение , а может ли апплет работать
с почтовыми протоколами ? Оказалось, может, пример прилагается .
Теперь немного о применение вышеописанного.
На первый взгляд может показаться , что это работает только для халявных
серверов , но это не так. Это работает и для серверов провайдеров , если
только HTTP , POP3 и SMTP ослуживаются одной машиной.
P.S.
С некоторыми изменениями, этот алгоритм можно использовать для
серверов которые предоставляют только HTTP. Правда для этого сервер
должен поддерживать методы DELETE и PUT , ну и GET , естественно.
Журнал HackZone