NAME последовательно, по кругу». Были и другие префиксы.
Проект получился коммерчески очень удачным. После Mail.ru мы добавили Yandex.ru, Gmail.com, AOL.com, Yahoo.com и другие почтовые сервисы. Мы продали вебмейлер более 12 клиентам по цене от $4000 за копию. Любой дополнительный сервис стоил денег. Также мы сдавали вебмейлеры в аренду. А Mail.ru тем временем захватила волна спама. На это компания отреагировала усилением фильтрации, да с такой степенью, что их фильтры рубили часть легитимной переписки.
В 2009 году новые владельцы Spamdot, партнерская программа Spam It, решили провести конкурс среди участников форума. Суть конкурса была в том, что участникам выдается небольшая почтовая база со специально вставленными контрольными адресами, далее по ней в определенное время нужно провести рассылку. Организаторы проверяют контрольные ящики и распределяют места. Я тогда получил статус Master of Inbox на Spamdot. Рассылки делал вебмейлером через Яндекс. Почту. Botnet
Архитектура
Настоящий спамер должен иметь свой ботнет. Тогда и загрузки, и базы будут в безопасности. Так мы и решили с братом. Для этого нужно было сделать максимально эффективного бота — экономного к памяти, не грузящего CPU и невидимого. И написать максимально эффективный к системным ресурсам сервер управления, чтоб не разориться на железе. Например, у Cutwail серверная часть была написана на Python и не держала больше четырех тысяч онлайна. Онлайн ботнета — это количество ботов, отстучавших на сервер управления в течение некоторого времени. Боты подключаются к серверу, например, раз в минуту, отчитываются о выполненных задачах и получают новые. Держать постоянные соединения нет смысла. Бот того же Cutwail работал в usermode, то есть его трафик был виден снифферам (работающим на уровне ядра операционной системы), и он был уязвим к антивирусам.
Разработка началась с посещения мной «Буквоеда» рядом с метро «Площадь Восстания» в Питере. Там я отыскал штук пять книг по руткитам[29] и одну — по разработке драйверов. Из всех книг по руткитам самая ценная была книга Хоглунда и Батлера «Руткиты: внедрение в ядро Windows». В ней было очень много реальных примеров кода.
Мне в то время очень хотелось равняться на Reactor Mailer (Srizbi). Его бот был руткитом ядра ОС Windows. Windows — самая распространенная десктопная операционная система, и писать руткит под Linux коммерчески невыгодно. Srizbi общался напрямую с драйвером сетевого адаптера по интерфейсу NDIS (Network Driver Interface Specification), то есть был невидим для любого антивируса и сниффера.
Книга «Руткиты: внедрение в ядро Windows» как раз и описывала работу бота в ядре операционной системы: как прятать файлы, как прятать драйверы и процессы в памяти, как работать с сетью на низком уровне. Чего мне не хватало, так это знаний в разработке драйверов. Ведь, по сути, хороший руткит режима ядра — это драйвер, который сам себя и маскирует.
Итак, нужно было сделать:
• Сервер управления ботнетом. Требования по памяти и CPU очень критичны. Серверное приложение должно было уместиться на средненьком сервере с 8 Гб памяти, при этом выдерживать онлайн 60 тысяч ботов.
• Бота — руткит режима ядра операционной системы: скрытие своего файла на диске, ключей в реестре, скрытие сетевого трафика, минимальная нагрузка на CPU, минимальный расход оперативной памяти.
• Модульную систему. То есть должна быть центральная транспортная часть, обеспечивающая обмен сообщениями между модулями. На серверной части загружается модуль управления (в виде DLL), на боте с сервера подгружается рабочий модуль. Система должна поддерживать обновление модулей прямо в реальном времени. Модули, загружаемые на бота, не должны сохраняться где-либо на диске.
• Веб-интерфейс управления ботнетом.
Архитектуру ботнета в виде модульной структуры я взял из «Адаманта», а они, в свою очередь, с Half-Life 2. Мне очень понравилась идея экспортировать из модуля в виде библиотеки всего две функции: Create Module и Delete Module. Первая возвращает интерфейс IModule, который и реализует функциональность. В сам же модуль передаются интерфейсы IKernel — функций ядра, ISocks — сетевого интерфейса и т. д. Все красиво и прозрачно.
При подключении к управляющему серверу бот сообщает, какие версии каких модулей у него загружены. И в случае отсутствия или устаревания какого-либо модуля контрольный сервер пакует файл SYS (это, по сути, библиотека режима ядра ОС) и передает на бота. Ядро бота распаковывает модуль и выполняет его загрузку в память, инициализацию и запуск. То есть на диске сохраняется только ядро, которое не умеет спамить. А модуль может расширить его функциональность до чего угодно.
Это была очень интересная и творческая работа, я полностью погрузился в процесс. А моему брату это было очень удобно, он делал только веб-интерфейс на PHP и модифицировал систему макросов от NorthWind для работы в ботнете, при этом у него оставалось еще уйма свободного времени. Он взял на себя роль СТАРШЕГО, восполнив на тот момент мою потребность в родителе и наставнике. Потребность в родителе, который мог сказать те самые слова «отличная работа, молодец», в родителе, который мог бы посоветовать, как поступить в сложной ситуации.
Позже ботнет получит название Festi. ФСБшники при аресте моего брата ошибочно решат, что это он написал ботнет, а его ник на Spamdot был Engel. С их же подачки это подхватит и Брайан Кребс.
Бот
Программирование драйверов сильно отличается от разработки прикладных программ. Если вы знакомы с кольцами привилегий процессора, то знаете, что ядро Windows и драйверы работают на нулевом. А процессоры архитектуры x86 реализуют четыре кольца привилегий для процессов, нулевое использует ядро операционной системы — у него есть полный доступ ко всему оборудованию. Прикладные процессы же работают в четвертом кольце, любое прямое обращение к оборудованию или вызов каких-либо привилегированных инструкций вызывает исключение, которое обрабатывается ядром ОС. Более того, любое падение прикладного процесса (например, обращение по несуществующему адресу, деление на ноль) никак не влияет на работу операционной системы и остальных прикладных процессов. В то время как ошибка в коде драйвера часто приводит к BSOD (Blue Screen Of Death — синий экран смерти). Требования к разработке драйверов и квалификации программиста возрастают на порядки. Если бы, например, руткит писал Botmaster (создатель XRumer, который постоянно падает), — капец машинам пользователей.
Далее хороший бот должен иметь минимальный размер. Большую часть кода в таких небольших программках несет The C runtime Library (CRT), которая линкуется к любому стандартному проекту по умолчанию. И прибавляет к небольшому файлу весом 30