Искусство зомбирования: Азбука создания неугоняемых ботнетовСовременные бот-сети по своей численности давно перешагнули миллионную планку. Их масштабы позволяют бот-мастерам «распараллелить» финансовые потоки от предоставляемых услуг. Нынешние подходы к проектированию ботнета позволяют использовать его как для осуществления уже ставших классикой в наше время DDoS-атак, так и для работы на уровне отдельно взятых хостов. Зачем? Например, с целью получения какой-либо конфиденциальной информации, сбора TAN (Transaction authentication number, используется в качестве дополнительного средства аутентификации в сервисах онлайн-банкинга), аккаунтов к целевым ресурсам. И все эти манипуляции осуществляются в параллельном режиме разными частями одной бот-сети. По мере роста «персональной армии» могут появиться дополнительные подводные камни, которые трудно отследить на этапе проектировки бота и еще труднее от них избавиться, так как любое изменение в его архитектуре может разрушить ботнет как карточный домик. Именно поэтому у будущего бот-мастера должно быть четкое представление масштабов своей сети, решаемых ею задач и варианты действий на случай ее утраты. Последний пункт особенно актуален для бот-сетей больших масштабов или принадлежащих к кардерской инфраструктуре. Заинтересоваться детищем могут как конкуренты, так и правоохранительные органы. Все возможные риски должны быть также выявлены и устранены на этапе проектировки. Год назад в нашем журнале концепцию идеального ботнета детально описал Роман Хоменко в своей статье «Вечный ботнет». В ней он изложил принципы создания бота, организацию получения команд от командного центра, а также внес некоторые постулаты проектирования бот-сети. Советую взять его материал за основу. В свою очередь, следуя теоретическим аспектам построения «идеальной армии», мы рассмотрим практическую сторону создания бота. Архитектура — наше всеСуществует множество способов управления зараженными хостами и передача команд каждой машине. Все зависит от конкретных предпочтений бот-мастера. В зависимости от типа используемого протокола командным центром может выступать:
Не нужно беспокоиться о своевременном получении команды конкретным ботом. Факты получения, выполнения, успешного/ неуспешного завершения задачи легко фиксируются, что позволяет вести детальную статистику. Однако централизованная топология остается актуальной лишь для небольших бот-сетей по следующим причинам:
Децетрализованная топология полностью лишена вышеперечисленных недостатков и в силу особенностей своей архитектуры обеспечивает большую «живучесть» бот-сети. Но, как всегда, в бочку меда обязательно кем-то вылита солидная ложка дегтя, и в нашем случае — не одна:
В большинстве случаев обилие недостатков и сложность реализации P2P-ботнетов являются решающими факторами в пользу выбора централизованной топологии. Мы также не будем изобретать велосипед, а воспользуемся мировыми практиками. Капризный командный центр, который постоянно находится в условии неустойчивого равновесия, стремясь упасть при малейшем росте нашей «армии», так и норовит отдаться в руки правоохранительных органов, которые вот-вот прикроют главный домен. Пусть прикрывают — хакер его сменит. Псевдослучайные именаГенератор псевдослучайных чисел имеет одну особенность, которая является ключевой для бот-мастера — получая на вход параметр в виде фиксированного значения, ГПЧ генерирует случайную последовательность, которая будет одинакова на различных рабочих станциях при условии получения их генераторами этого параметра. Чтобы тебе не пришлось долго искать смысл в использовании ГПЧ, рассмотрим следующую функцию: Функция генерации псевдослучайной последовательности Базовыми функциями, отвечающими за инициализацию и генерацию псевдослучайной последовательности, являются давно знакомые нам srand() и rand(). На основе переменной seed функция srand() инициализирует множество чисел, на котором, в свою очередь, будет работать функция генерации rand(). Результат работы функции generator() при значении seed=123:
Таким образом, seed является тем самым параметром, на основе которого будет генерироваться последовательность доменов. Легким движением руки и небольшим шевелением извилин генератор псевдослучайной числовой последовательности превращается в генератор псевдослучайной последовательности доменных имен. Способ генерации доменного имени основан на простой работе со строками. Ничего сверхъестественного в исходном коде генератора нет, поэтому приводить его здесь не будем — ищи исходники с комментариями на диске. Несколько слов можно сказать об окончаниях доменных имен: доменные зоны берутся из массива и склеиваются со сгенерированной строкой, поэтому, чем больше массив с этими элементами, тем шире диапазон всевозможных вариантов. Имея в своем функционале генератор доменного имени, в случае недоступности командного центра на основном домене бот генерирует новый и связывается с ним. В свою очередь, бот-мастер также имеет в наличии аналогичный генератор (с нужным входным параметром seed), что позволяет ему заранее зарегистрировать новое доменное имя для своей «армии». Таким образом мы избавились от одного из основных недостатков централизованной топологии — возможности уничтожения командного центра. Однако остается угроза получения контроля над доменом и несанкционированной передачи команд ботам. Данная проблема решае тся специально спроектированной админской частью (также известной как «административная панель»). Ботнет и .NETОдин из методов защиты от несанкционированной передачи заданий ботам заключается в использовании шифрования командного файла на стороне сервера. Клиент, коим выступает зараженная машина, имеет в своем распоряжении ключ для расшифровки этого файла. Идея хорошая, но мы пойдем другим путем, воспользовавшись прелестями современных технологий. В июньском номере ][ в статье «Уязвимости ONLINE» мы рассмотрели базовые аспекты создания веб-сервисов на основе технологий ASP.NET. Теперь копнем немного глубже и посмотрим, как строятся защищенные веб-приложения — это пригодится нам для построения административной панели командного центра. Веб-приложение, в роли которого выступает «админка», предоставляет ресурсы (то есть командный файл) своим клиентам (ботам). Всем «нежелательным» личностям веб-приложение должно показывать маршрут в сторону леса.
Для установки процесса аутентификации в конфигурационном файле веб-сервиса Config.Web необходимо внести соответствующие изменения:
Таким образом мы устанавливаем процесс аутентификации на основе Cookies-файлов. Далее для аутентификации клиента необходимо принять от него данные (UserLogin и UserPassword), сверить их с требуемыми и, в случае успеха, передать ему cookies-файлы, которые понадобятся клиенту для получения доступа к защищенной части сайта, где хранится командный файл:
В ASP.NET различают два вида авторизации, которые определяют, есть ли у клиента соответствующие права на доступ к запрашиваемому URL, где хранится файл с командами: URL и File. Нам интересен первый способ управления доступом, позволяющий проводить разграничение доступа клиента к ресурсу в зависимости от его имени и роли. Например, следующая конфигурация разрешает доступ к URL всем клие нтам, прошедшим аутентификацию, и запрещает всем остальным:
«Пилить» административную часть ботнета можно не менее продолжительное время, чем самого бота, тем более, если в распоряжении имеются интересные технологи защиты веб-приложений ASP.NET, поэтому мы не будем пытаться объять необъятное, а перейдем к ключевой части — боту. Бот в разрезеЛюбой современный ботнет должен подразумевать расширение своего функционала. Зачем? Ну, например, если у бот-мастера возникло желание переквалифицировать свою армию зомби в сеть распределенных вычислений, которая будет моделированием последствий ядерных взрывов. Плагинная архитектура позволяет «развязать» руки администратору сети и наращивать или обновлять функционал по мере необходимости. Учитывая данный факт, составим алгоритм действий нашего бота:
Получение команд заключает в скачивании текстового файла с сервера (command.txt). Реализацию скачивания файла берет на себя функция HTTPDownload(char *FileUrl, char *FileName). Данная функция также используется и для скачивания необходимых .dll для ботнета. Я решил не заниматься рутиной, работая с сокетами, а воспользоваться стандартной библиотекой, которая присутствует в Windows: wininet.dll. Данная DLL представляет собой API для доступа к общим протоколам интернет, включая FTP, HTTP и Gopher. Это высокоуровневый API, позволяющий, в отличие от WinSock или TCP/IP, не заботиться о деталях реализации соответствующих интернет-протоколов. Для получения команд бот должен периодически соединяться с сервером, скачивать командный файл и соответствующим способом его обрабатывать. Под обработкой мы подразумеваем действие, в результате которого бот получает две строки: название команды и строку, содержащую параметры к ней, перечисленные через символ пробела. Командный файл имеет следующую структуру: Структура командного файла
где i, j, k меняются в интервале (1; бесконечность). Действия бота таковы:
В случае необходимости подключения скачанной dll’ки с целью расширения функционала, функция PlugLibrary выполняет следующие инструкции по заранее описанному интерфейсу подключения (он также должен быть оформлен в самой dll):
Функция Load, экспортируемая библиотекой, содержит необходимые инструкции, обеспечивающие расширение функционала основной программы-бота. И это только начало…В статье мы немного подсмотрели за процессом приготовления ботнета по правильному рецепту. Наше внимание коснулось большинства аспектов искусства зомбирования: проанализированы основные архитектуры бот-сетей, осуществлена реализация наиболее актуальной топологии с устранением присущих ей недостатков, рассмотрена довольно перспективная область использования вебсервисов в качестве административной панели со своей защищенной зоной, написан плагинный бот, который по мере желания администратора может мутировать до неузнаваемости. И это только начало, ведь сколько нюансов осталось за кадром: сокрытие исполняемого файла в системе, разделение ботнета на подсети и тому подобные задачи, которые тебе еще предстоит решить. Я лишь задал тебе направление движения, естественно, исключительно в ознакомительных целях. Links
NET
|