CODINGBotMasterСписок сгенерированных доменовв своем распоряжении ключ для расшифровки этого файла. Идеяхорошая, но мы пойдем другим путем, воспользовавшись прелестямисовременных технологий.В июньском номере ][ в статье «Уязвимости ONLINE» мы рассмотрелибазовые аспекты создания веб-сервисов на основе технологийASP.NET. Теперь копнем немного глубже и посмотрим, как строятсязащищенные веб-приложения — это пригодится нам для построенияадминистративной панели командного центра. Веб-приложение, в роликоторого выступает «админка», предоставляет ресурсы (то есть командныйфайл) своим клиентам (ботам). Всем «нежелательным» личностямвеб-приложение должно показывать маршрут в сторону леса.Процесс определения санкционированного клиента состоит из двухпоследовательных этапов:• Аутентификация — непосредственно распознавание клиента, запрашивающегоресурс;• Авторизация — определение, имеет ли аутентифицированный клиентнеобходимые права на запрашиваемый им ресурс.Для установки процесса аутентификации в конфигурационном файлевеб-сервиса Config.Web необходимо внести соответствующие изменения:Таким образом мы устанавливаем процесс аутентификации на основеCookies-файлов. Далее для аутентификации клиента необходимо принятьот него данные (UserLogin и UserPassword), сверить их с требуемымии, в случае успеха, передать ему cookies-файлы, которые понадобятсяклиенту для получения доступа к защищенной части сайта, гдехранится командный файл:void Login_Click(Object sender, EventArgs E) {if ((UserLogin.Value == "DotSiteTeam")&& (UserPassword.Value == "BestITResource")) {CookieAuthentication.RedirectFromLoginPage(UserLogin.Value,true);}else {//âûâîä ñîîáùåíèÿ î íåïðàâèëüíî ââåäåííûõ äàííûõ}}BotBotBotСхема децентрализованной топологииВ ASP.NET различают два вида авторизации, которые определяют, естьли у клиента соответствующие права на доступ к запрашиваемому URL,где хранится файл с командами: URL и File. Нам интересен первыйспособ управления доступом, позволяющий проводить разграничениедоступа клиента к ресурсу в зависимости от его имени и роли.Например, следующая конфигурация разрешает доступ к URL всемклие нтам, прошедшим аутентификацию, и запрещает всем остальным:BotBot«Пилить» административную часть ботнета можно не менее продолжительноевремя, чем самого бота, тем более, если в распоряженииимеются интересные технологи защиты веб-приложений ASP.NET, поэтомумы не будем пытаться объять необъятное, а перейдем к ключевойчасти — боту.ÁÎÒ Â ÐÀÇÐÅÇÅЛюбой современный ботнет должен подразумевать расширение своегофункционала. Зачем? Ну, например, если у бот-мастера возникло желаниепереквалифицировать свою армию зомби в сеть распределенныхвычислений, которая будет моделированием последствий ядерныхвзрывов. Плагинная архитектура позволяет «развязать» руки администраторусети и наращивать или обновлять функционал по мере необходимости.Учитывая данный факт, составим алгоритм действий нашегобота:1. получение команды от сервера;2. обработка команды, то есть ее классификация на «известную» или«неизвестную»;3. обработка соответствующим образом параметров команды в зависимостиот ее типа;4. выполнение команды.Получение команд заключает в скачивании текстового файла с сервера(command.txt). Реализацию скачивания файла берет на себя функцияHTTPDownload(char *FileUrl, char *FileName). Данная функциятакже используется и для скачивания необходимых .dll для ботнета.Я решил не заниматься рутиной, работая с сокетами, а воспользоватьсястандартной библиотекой, которая присутствует в Windows: wininet.dll.Данная DLL представляет собой API для доступа к общим протоколаминтернет, включая FTP, HTTP и Gopher. Это высокоуровневый API,позволяющий, в отличие от WinSock или TCP/IP, не заботиться о деталяхреализации соответствующих интернет-протоколов.106 XÀÊÅÐ 08 /139/ 10
codingINFOРезультат работы генератора псевдослучайных чиселinfoИнформация представленаисключительнов целяхознакомления. Занезаконное использованиеее материаловгрозит уголовнаяответственность.Для получения команд бот должен периодическисоединяться с сервером, скачивать командный файли соответствующим способом его обрабатывать. Подобработкой мы подразумеваем действие, в результатекоторого бот получает две строки: название команды истроку, содержащую параметры к ней, перечисленныечерез символ пробела. Командный файл имеет следующуюструктуру:Структура командного файла [ïàðàìåòð(1)] [ïàðàìåòð(2)] …[ïàðàìåòð(i)] [ïàðàìåòð(1)] [ïàðàìåòð(2)] …[ïàðàìåòð(j)]… [ïàðàìåòð(1)] [ïàðàìåòð(2)] …[ïàðàìåòð(n)]где i, j, k меняются в интервале (1; бесконечность).Действия бота таковы:1. выделение k-ой строки;2. передача выделенной строки в функцию, которая реализуетподключение библиотеки, необходимой для выполнениякоманды (функция PlugLibrary());3. PlugLibrary() соответствующим образом интерпретируетстроку и выполняет необходимое действие, зависящиеот типа команды.Парсинг command.txt реализует функция Parse(char*FileName).В случае необходимости подключения скачанной dll’кис целью расширения функционала, функция PlugLibraryвыполняет следующие инструкции по заранее описанномуинтерфейсу подключения (он также должен быть оформленв самой dll)://ïîäêëþ÷åíèå áèáëèîòåêèhPlugin = LoadLibrary(DllName);//îïðåäåëåíèå òèïà (DefType)typedef int (*DefType)(char *);/*îïðåäåëåíèå àäðåñà ôóíêöèè «Load»,êîòîðóþ ýêñïîðòèðóåò áèáëèîòåêà*/DefType Load = (DefType)XÀÊÅÐ 08 /139/ 10GetProcAddress(hPlugin,"Load");/*âûçîâ ôóíêöèè "Load" è ïåðåäà÷à ïàðàìåòðîâýòîé ôóíêöèè*/int iCode=(*Load)(Parametrs);Функция Load, экспортируемая библиотекой, содержитнеобходимые инструкции, обеспечивающие расширениефункционала основной программы-бота.È ÝÒÎ ÒÎËÜÊÎ ÍÀ×ÀËÎ…В статье мы немного подсмотрели за процессом приготовленияботнета по правильному рецепту. Наше вниманиекоснулось большинства аспектов искусства зомбирования:проанализированы основные архитектуры бот-сетей, осуществленареализация наиболее актуальной топологиис устранением присущих ей недостатков, рассмотренадовольно перспективная область использования вебсервисовв качестве административной панели со своейзащищенной зоной, написан плагинный бот, которыйпо мере желания администратора может мутировать донеузнаваемости. И это только начало, ведь сколько нюансовосталось за кадром: сокрытие исполняемого файла всистеме, разделение ботнета на подсети и тому подобныезадачи, которые тебе еще предстоит решить. Я лишь задалтебе направление движения, естественно, исключительно вознакомительных целях. zВ эпоху Web 2.0 популярные сервисы выполняютроль командных центровDVDdvdНа диске тебя ждутисходные коды ботаи генератора доменовв виде проекта дляMS Visual Studio 2010.HTTP://WWWlinks•http://www.xakep.ru/magazine/xa/128/056/1.asp— статья «Вечныйботнет: принципызащиты больших ботсетей».•http://msdn.microsoft.com/ru-ru/library/dd335939.aspx — разработкаи развертываниезащищенных webприложенийдля ASP.NET•http://defec.ru —мой ресурс, где тыможешь найти материалыо различныхсетях распределенныхвычислений, атакже задать вопросыи поделиться идеями.107