Всем известна старая атака по словарю. А так же ее дополнение ( имеется в виду атака с нескольких машин ). В общем случае это выглядит так :
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 , естественно.