
Монитор командных серверов ботнетов
Hale — это монитор/шпион для ботнет-командных серверов (C&C) с модульной архитектурой, упрощающей разработку новых модулей для отслеживания новых протоколов, используемых C&C-серверами. Hale поставляется с IRC- и HTTP-мониторами, разработанными на Twisted для обеспечения масштабируемости при большом количестве соединений. Эти модули имеют настраиваемую грамматику протокола и параметры бота, но также могут быть изменены под ваши нужды. Все перехваченные логи и файлы сохраняются в базу данных, а в случае IRC — также отслеживаются IP-адреса.
Чтобы скрыть местоположение оператора, соединения могут выполняться через SOCKSv5-прокси; это настраивается через веб-интерфейс, где также можно просматривать все логи вместе со статистическими графиками и временными шкалами. Интерфейс разработан с использованием Django и Google Visualization API. Дополнительные возможности веб-интерфейса включают поддержку RESTful API с OAuth и поисковый движок.
Основная идея Hale — помочь охоте на ботнеты и исследованиям, создав сеть сенсоров (мониторов Hale). Для улучшения этой идеи доступен XMPP-бот для подключения к централизованному XMPP-серверу, где в настоящее время используются две разные групповые комнаты: одна для координации между сенсорами и одна для обмена логами и файлами. В комнате координации используются хэши ботнетов, созданные из уникальных ключей в настройках ботнета; таким образом, два ботнета с одинаковым хэшем (идентичностью) не должны отслеживаться одновременно, что повышает эффективность использования. Чтобы помочь сторонним лицам воспользоваться этой сетью, бот может присоединиться к комнате координации и попросить сенсор начать отслеживание ботнета, если он не отслеживается, отправив его конфигурацию. Кроме того, в комнате обмена сторонние боты могут получать логи и файлы, захваченные сенсорами в реальном времени. Для работы с историей логов можно использовать веб-API, поддерживающее GET-запросы.
Hale имеет следующие зависимости:
Python == 2.6
Django == 1.2.1
Twisted == 10.1.0
GeoIP-Python == 1.2.4 (и библиотека GeoIP C)
Whoosh == 0.3.18
django-haystack == 1.0.1-final
django-piston == 0.2.3rc1
pefile == 1.2.10-63
sleekxmpp == 0.9Rrc1
wsgiref == 0.1.2
zope.interface == 3.6.1
oauth2 == 1.2.0
httplib2 == 0.6.0
Кроме того, монитору требуется драйвер бэкенда базы данных, соответствующий базе данных, используемой Django. Когда эти библиотеки установлены, загрузите исходный код отсюда и распакуйте его в любом месте.
Сначала создайте базу данных, которая будет использоваться Hale; движок базы данных может быть любым на ваш выбор. Если вы используете существующую базу данных, пропустите этот шаг.
Следующий шаг — установить драйверы бэкенда Python для базы данных, соответствующие используемому серверному движку.
Отредактируйте settings.py в hale/src/webdb/ и настройте следующие параметры: ENGINE, NAME, USER, PASSWORD, HOST и PORT, где параметр engine, например, равен django.db.backends.mysql, если ваш серверный движок — MySQL. Параметр name — это имя вашей базы данных, использованное при её создании.
Если вы не хотите запускать собственный веб-интерфейс, пропустите этот шаг и перейдите к пункту 8). В settings.py измените PATH_TO_APP, указав полный путь к приложению Django, например: '/home/..../Hale/src/webdb'. В каталоге webdb выполните следующую команду: python manage.py syncdb. Если возникнут ошибки, скорее всего, настройки базы данных в settings.py некорректны. Кроме того, во время синхронизации укажите суперпользователя, который будет использоваться при администрировании пользователей.
Для поддержки поиска в веб-интерфейсе выполните python manage.py rebuild_index, чтобы поисковый движок проиндексировал данные в первый раз. Будет создан каталог whoosh.index/; чтобы веб-сервер мог в него записывать, выполните chmod o+w whoosh.index/. После этого вместо этой команды запускайте python manage.py update_index и добавьте её в cron для регулярного обновления индексов с выбранным вами интервалом.
Выполните python manage.py runserver и перейдите на http://127.0.0.1:8000, чтобы проверить правильность настройки.
Команда runserver запускает development-сервер, который не рекомендуется для продакшн-использования из-за проблем с производительностью. Вместо этого разверните веб-интерфейс, установив mod_wsgi для Apache. Предполагая, что вы используете Ubuntu, выполните apt-get install libapache2-mod-wsgi. В /etc/apache2/sites-available/default добавьте следующее:
Alias /media /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media/
<Location /media>
Order allow,deny
Allow from all
</Location>
WSGIDaemonProcess username processes=2 maximum-requests=500 threads=10
WSGIProcessGroup group
WSGIScriptAlias / /home/..../webdb/django.wsgi
и укажите имя пользователя (username) и группу (group), от которых должен работать WSGI-демон. Параметр WSGIScriptAlias должен указывать полный путь к файлу django.wsgi, расположенному в каталоге webdb. Указанный выше Alias необходим для корректного отображения страницы администрирования. Чтобы иметь возможность загружать модули через веб-интерфейс, выполните chmod o+w webdb/modules.
Загрузите модули, которые будут использоваться из hale/src/modules/, или напишите свои собственные (см. раздел «Разработка»). Загрузите нужный модуль в административном интерфейсе, указав, например, имя модуля irc и имя файла ircModule.py. Укажите правила конфигурации для модуля в соответствующем разделе, расположенном в hale/conf/modules.conf, и вставьте их в текстовое поле; также добавьте разделы uniqueKeys для загружаемого модуля.
Перед запуском монитора отредактируйте hale.conf в hale/src/conf/, если вы хотите использовать XMPP-сервер. Чтобы активировать XMPP-бота, установите для параметра use значение True и либо укажите данные существующей учётной записи и сервера, либо запустите собственный XMPP-сервер. Важный шаг при запуске XMPP-сервера — увеличить максимальный размер stanza с значения по умолчанию до примерно 10 МБ. В противном случае передача вредоносного ПО (malware advertisement) будет невозможна. Настройки канала (channel) в hale.conf используются для групповой комнаты обмена, используемой ботом, а настройка coord — для групповой комнаты, где происходит вся координация между сенсорами.
Отредактируйте hale.conf и укажите настройки клиента и сервера.
Чтобы запустить монитор, перейдите в hale/src/ и выполните python server.py. Если он запустится с ошибками, значит файл settings.py Django настроен некорректно или отсутствуют некоторые библиотеки. С помощью клиента можно отправлять команды серверу, но для этого требуется аутентификация пользователя на сервере; доступ предоставляется пользователям, назначенным как staff-участники через веб-интерфейс. Когда клиент запущен, введите help или ?, чтобы получить список доступных команд. Введите help команда, чтобы получить дополнительную информацию о конкретной команде. Запуск монитора-бота осуществляется сначала редактированием файла hale/src/conf/modules.conf, например, с использованием следующей IRC-конфигурации:
[uniqueKeys]
irc = botnet, *grammar
[ircConf]
module = irc
botnet = irc.freenode.net
port = 6667
password = None
nick = nickname
username = agent007
realname = Spying
channel = #channelname
channel_pass = somepass
pass_grammar = PASS
nick_grammar = NICK
user_grammar = USER
join_grammar = JOIN
version_grammar = VERSION
time_grammar = TIME
privmsg_grammar = PRIVMSG
topic_grammar = TOPIC
currenttopic_grammar = 332
ping_grammar = PING
pong_grammar = PONG