В IT-сообществе принято считать безусловным злом любой софт, который крадет персональные данные пользователя и приносит огромную прибыль киберпреступникам. Между тем существуют вполне легальные компании, которые разрабатывают и продают трояны.

 

Нелегальное легально

Неужели действительно кто-то разрабатывает и продает вредоносное ПО легально? Да, только тот же самый софт, за создание которого еще вчера могли привлечь к ответственности, разрабатывается не со злым умыслом, а для решения вполне легитимных задач. Скажем, спецслужбы могут осуществлять с помощью программ, которые совсем недавно использовались как трояны, сбор оперативной информации — где тут вредоносность? Восьмого октября 2011 года крупнейший европейский хакерский клуб Chaos Computer Club (CCC) опубликовал отчет о реверс-инжиниринге трояна, который немецкая полиция якобы использовала не только для сбора пользовательских данных, но и для скрытой установки программного обеспечения на зараженные компьютеры. Власти официально этот факт подтвердили. А в декабре исследователь и завсегдатай форума XDA-developers Тревор Экхарт обнаружил, что ряд современных смартфонов, в том числе Android и iPhone, скрыто следят за действиями пользователей и передают собранную «статистику» производителям. Подробнее об этих двух инцидентах можешь прочитать во врезке. Сейчас же я предлагаю рассмотреть один из таких «легальных троянов» — Remote Control System, узнать, что о нем говорят разработчики, и разобраться, что он на самом деле собой представляет.

Реквизиты стороны, подписавшей x64-драйвер
Реквизиты стороны, подписавшей x64-драйвер
 

Remote Control System

Скажу прямо, сам производитель предоставляет о программе крайне скудную информацию. На официальном сайте итальянской компании HackingTeam можно найти всего лишь несколько презентаций и два видеоролика. Однако этого вполне достаточно для понимания того, что возможности RCS просто огромны. Программа позволяет собирать информацию об операционной системе, нажатиях клавиш, автоматически делает скриншоты экрана, окон и областей, в которых пользователь кликнул мышкой. Вдобавок программа умеет перехватывать переписку в чатах, а также разговоры в Skype, Google Talk и других IM. Если у зараженного пользователя подключена веб-камера, троян может делать с ее помощью фотографии и передавать их на сервер атакующего. Более того, в RCS имеется специальный модуль, который постоянно сканирует файловую систему зараженного компьютера, а затем передает на сервер файлы с определенными расширениями. Существуют версии зловреда для Windows, Mac и ряда мобильных платформ, среди которых следует особо выделить iPhone и Android. Производитель заверяет, что RCS совершенно не видна в зараженной системе и антивирусы с файерволами ей тоже не помеха. И это действительно так: при работе на зараженной машине троян не вызывает подозрений у «Антивируса Касперского» со стандартными настройками, файервол Zone Alarm спокойно пропускает трафик, а RootkitRevealer Руссиновича не показывает ничего подозрительного. Один лишь Wireshark, установленный на компьютере-маршрутизаторе, фиксирует некоторое количество HTTP-POST-запросов к одному из серверов в интернете.

Восстановленная функция выработки ключа A Реквизиты стороны, подписавшей x64-драйвер ndroid-версии малвари
Восстановленная функция выработки ключа A Реквизиты стороны, подписавшей x64-драйвер ndroid-версии малвари

 

Carrier IQ: легальный троян в смартфонах

Копаясь в прошивке Android-смартфонов фирмы HTC, Тревор Экхарт обнаружил программу, работающую в скрытом режиме и собирающую информацию о нажатиях клавиш на диалере или клавиатуре, просмотре рекламных объявлений, получении СМС, включении и отключении экрана, получении звонков, местоположении и т. д. Дальнейшие исследования показали, что эта программа является детищем фирмы Carrier IQ, которая активно сотрудничает с производителями как смартфонов, так и простых мобильных телефонов. Производитель оборудования получает исходники программы от CIQ, дорабатывает их и внедряет в прошивку устройства. Кроме того, CIQ предоставляет удобный интерфейс для работы с полученными данными.

Элементы кода программы были найдены в прошивках с Sense UI, а также на аппаратах производства Samsung с интерфейсом Touch Wiz. В результате проделанной работы Тревор написал программу, которая позволяет проверить телефон на наличие этого руткита и, если в смартфоне есть права root, попытаться удалить руткит подробнее читай тут.

Малварь в диспетчере приложений Android
Малварь в диспетчере приложений Android
 

Обнаружение

Как оказалось, обнаружить троян довольно легко, достаточно лишь загрузиться с загрузочной флешки и прошерстить винчестер зараженного компьютера. RCS создает директорию либо в корне диска C, либо в %APPDATA%, а также генерирует ключ реестра со случайным именем в разделе Run, причем при работе зараженной системы директория и ключ не видны для файл-менеджеров и редакторов реестра. Чуть позже я расскажу, почему, а пока остановлюсь на компонентах трояна.

Модная нынче тенденция реализовывать малварь не в виде exe, а в виде библиотеки dll не обошла стороной и разработчиков RCS. Вообще, версия этого трояна для Windows включает в себя следующие компоненты (имена модулей могут отличаться в зависимости от версии/хозяина):

  1. Основной модуль 7KOmPPPs.TRK (DLL, x86).
  2. Файл конфигурации a5jt555f.Qu6.
  3. Кодек для кодирования речи CrThBBBT.7ar (DLL, x86).
  4. Дополнительный x64-модуль tms5ggg8.T4t (DLL, x64).
  5. Драйвер x64 0Cfkvvvw.HiO (SYS, x64).
  6. Драйвер x86 YDxohhhn.pYS (SYS, x86).

Любой здравомыслящий человек сразу задаст вопрос о скрытой установке x64-драйвера в систему. Здесь нет ничего необычного, разработчики пошли по пути наименьшего сопротивления и просто подписали его своей электронной подписью. К слову сказать, это их и палит (смотри первую иллюстрацию), так как Гугл моментально наводит нас на сайт производителя трояна.

 

Где собака зарыта?

Сразу скажу, что я коснусь в основном только x86-версии RCS. Как уже отмечалось ранее, основной модуль представляет собой динамическую библиотеку для архитектуры x86. Dll экспортирует восемь функций с ничем не примечательными именами: HFF1, HFF2, …, HFF8. Значение ключа реестра в разделе Run, запускающее троян, имеет следующий вид:

rundll32.exe "c:\trSMKKK0\7KOmPPPs.TRK",HFF8

— и намекает на то, что в первую очередь необходимо изучить восьмую функцию HFF8. Вообще, закидывая dll в IDA, я думал, что нарвусь на какой-нибудь пакер или навороченную защиту, но и с этим разработчики не стали заморачиваться — антиотладочных средств я не обнаружил, программа имела только защиту против статического анализа кода, которая скорее направлена против антивирусов, нежели реверсера. Поэтому разбирать по косточкам эту малварь было легко, удобно и интересно.

Запуск

Работу функции HFF8 можно логически разделить на несколько блоков. Первый — проверка основных модулей трояна: сначала он проверяет, является ли rundll32.exe текущим процессом, далее перебирает все dll, подгруженные в адресное пространство, затем пытается получить в каждом из них адрес функции HFF1 и сравнивает полученный адрес с уже имеющимся значением. Далее при помощи функции GetModuleFileNameExW троян получает имя своей главной dll (с путем), преобразует его в ASCII и оставляет только имя файла. Путь к файлу и имя файла сохраняются в двух разных буферах в shared-сегменте, где выделена память для данных, доступ к которым нужен другим процессам, в чье адресное пространство также подгружена dll с трояном. Затем каждый символ полученного имени заменяется на другой в соответствии с некоторой таблицей, а новое имя файла (если все предыдущие шаги завершились успешно) копируется в shared-сегмент как имя файла с настройками. Каждый символ имени файла с настройками также кодируется при помощи некой таблицы для преобразования в имя еще одной части трояна. Таким образом и создаются все необходимые имена файлов, которые записываются в shared-сегмент динамической библиотеки. После имен файлов в разделяемый сегмент копируются имена объектов FileMapping. Всего таких объектов три, и их названия имеют префиксы KMS1, KMS2, KMS3. После каждого префикса идет еще восемь hex-значений. Троян считает проверку успешной, если найден основной модуль. Наличие остальных модулей на данном этапе не проверяется.

Второй блок — активация системы маскировки трояна. На этом этапе инициализации троян сначала пытается открыть устройство MSH4DEV1, которое создается x86-драйвером (номер 6 в списке файлов). Если все проходит успешно, то handle устройства сохраняется. Далее выполняется поиск антивирусного ПО, установленного на зараженной машине. Для поиска троян всегда использует один алгоритм: перебирает загруженные в систему драйвера и ищет нужный по определенному имени. Список распознаваемых антивирусов довольно внушителен: Avira, Avast, Eyee, ProcGuard, McAfee, Kerio, Comodo, Panda, TrendMicro, Ashampoo, Kaspersky, AVG, BitDefender и еще пара-тройка экзотических для наших широт продуктов. Учитывая особенности каждого антивируса, троян пытается установить в систему драйвер YDxohhhn.pYS (если он до сих пор не установлен), который копируется в системную директорию Windows и переименовывается в ndisk.sys. Установка выполняется при помощи функций ADVAPI32 типа CreateService, StartService и т. д. Затем троян пытается открыть устройство MSH4DEV1 и найти загруженный драйвер ndisk.sys. Отмечу, что драйвер устанавливается только в том случае, если на компьютере имеется любая антивирусная программа.

 

R2D2

Осенью крупнейший европейский хакерский клуб Chaos Computer Club (CCC) опубликовал отчет о «полицейском трое», который, как потом признали власти, действительно применялся силовыми ведомствами для сбора пользовательских данных. Из-за того что в основном модуле трояна имеется строка C3PO-r2d2-POE, ему присвоили имя R2D2. Малварь состоит из DLL с именем mfc42ul.dll и драйвера winsys32.sys для архитектуры x86. При заражении DLL прописывается в ветку реестра SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_/DLLs и, следовательно, подгружается в адресное пространство каждого GUI-приложения. Малварь скрыто делает скриншоты экрана, перехватывает нажатия клавиш клавиатуры, записывает звонки, совершаемые при помощи Skype, и передает всю эту информацию на удаленный сервер. Отмечу, что здесь механизм перехвата звонков такой же, как и в RCS. Самый главный фейл, который допустили разработчики, — это использование во всех версиях малвари фиксированных ключей шифрования и алгоритма AES в режиме ECB при полном отсутствии аутентификации, что позволяет практически любому пользователю интернета управлять зараженной машиной.

Исследователи из CCC зареверсили протокол взаимодействия немецкой малвари с командным сервером и разработали альтернативную программу управления. Члены клуба CCC также обнаружили еще одну версию трояна, о чем сообщает одна из последних заметок на их официальной странице www.ccc.de.

Третий блок — подготовка к шифрованию данных. Для шифрования данных используется алгоритм AES в режиме CBC с длиной блока и ключа по 128 бит. Вектор инициализации всегда нулевой, а сами ключи хранятся в открытом виде в сегменте данных. На этом этапе для каждого ключа выполняется процедура KeyExpansion, в ходе которой генерируются раундовые ключи. Результаты ее работы для каждого ключа помещаются в shared-сегмент. Такой подход значительно сокращает время, затрачиваемое на шифрование, так как он устраняет необходимость каждый раз разворачивать 128-битный ключ в набор раундовых ключей.

В четвертом блоке инициализируются агенты-процедуры сбора пользовательских данных. В процессе инициализации заполняется массив пар ключ-значение, где ключом является идентификатор агента, а значением — структура с указателями на функции первоначальной инициализации, функцию, код которой будет выполняться в другом процессе, и процедуру обработки полученных пользовательских данных. При этом для каждого агента также вызывается функция первоначальной инициализации. В ходе инициализации агентов дешифруется файл с настройками и инициализируются только те сборщики данных, которые указаны в конфиге.

В пятом блоке запускаются удаленные потоки, собирающие пользовательские данные. В запуске принимают участие другие экспортируемые функции: HFF1, HFF2, HFF3. После создаются локальные потоки, которые получают собранные пользовательские данные и обрабатывают их. На этом процедура начальной инициализации завершается, и указанный инициализационный поток погружается в бесконечный цикл (while(true){ Sleep(1000); }).

В ходе инициализации троян также проверяет, не заражена ли уже система. Алгоритм проверки на заражение достаточно прост: троян ищет объекты FileMapping с определенными именами (KMS1…, KMS2…, KMS3…), и если находит, то система считается зараженной и процесс инициализации прекращается. Следует сказать несколько слов и о вызове системных функций. Все функции WinAPI вызываются по адресам, которые выдает GetProcAddress. Имена всех вызываемых функций зашифрованы шифром простой замены. Эти имена хранятся в сегменте данных и расшифровываются каждый раз непосредственно перед использованием.

Версия трояна для 64-битных систем в принципе ничем не отличается от версии под x86. В ней используется тот же самый основной модуль, однако после запуска троян проверяет, не является ли система 64-битной, и если является, то в игру вступают dll и драйвер, написанные специально под x64.

Рекламная брошюра RCS
Рекламная брошюра RCS

 

Android-версия RCS

Android-версия описываемого трояна представляет собой обыкновенный apk-файл, который при установке запрашивает максимальное количество разрешений, что вполне может насторожить даже самых неопытных пользователей. Мне не удалось полностью декомпилировать apk в Java-сценарий при помощи ApkManager, так как код трояна слегка обфусцирован. Однако большая его часть вполне успешно восстанавливается, правда, без имен классов, переменных и т. д. ApkManager оставляет в виде опкодов невосстановленные участки кода и оборачивает их в комментарии, что позволяет почерпнуть дополнительную информацию о трояне. При разархивировании apk-файла сразу бросается в глаза, что в этой версии используется native-библиотека (so), а также имеется зашифрованный файл с ресурсами. Оказывается, этот файл также шифруется по алгоритму AES в режиме CBC. При этом последний блок дополняется по схеме PKCS#5 и, как и прежде, используется нулевой вектор инициализации. В данном случае ключ хранится не в открытом виде, а вырабатывается из фиксированной строки при помощи многократного вычисления хеш-функции. В расшифрованном файле с ресурсами находится множество строковых пар ключ-значение, позволяющих получить информацию об используемых криптографических алгоритмах.

Дальнейший анализ показал, что при запуске троян пытается проэксплуатировать какую-нибудь уязвимость в Android и получить права root (на моем кастомном билде ему это сделать не удалось). RCS также собирает пользовательские данные (SMS, MMS, контакты) и информацию о сети сотовой связи, периодически включает микрофон телефона и записывает разговоры вокруг и передает всё это добро на удаленный сервер. В диспетчере приложений малварь пытается замаскироваться под com.android.service, а при работе ест много памяти и сильно расходует батарею. Вообще, здесь следует отдать должное производителям Dr.Web Light — антивируса для Android, так как он спокойно палит этот троян и выдает пользователю соответствующее предупреждение.

Работа агента

В большинстве случаев код, внедренный в удаленный процесс, делает одно и то же: подгружает в адресное пространство своего процесса dll основного модуля. После этого открываются FileMapping’и (функция HFF4), а на определенные функции устанавливаются хуки (функция HFF3). По завершении этих процедур dll выгружается из адресного пространства процесса, а поток впадает в бесконечный цикл (засыпает на одну секунду, просыпается и засыпает вновь).

При установке хуков проверяется имя текущего процесса. Если оно не попадает в определенный список, то устанавливаются только те хуки, которые направлены на маскировку трояна в системе. Вообще, этот зловред распознает следующие процессы:

pcts*.exe
k7*.exe
avk.exe
admin.exe
bgscan.exe
avp.exe
pavark.exe
rku*.exe
svv.exe
IceSword.exe
gmer.exe
avgscanx.exe
RootkitRevealer.exe
avscan.exe
avgarkt.exe
sargui.exe
uncrackme.exe
hiddenfinder.exe
hackmon.exe
TaskMan.exe
outlook.exe
skypepm.exe
skype.exe
chrome.exe
firefox.exe

Распознавание процессов осуществляется только по именам, поэтому, переименовав RootkitRevealer.exe в ololo.exe, мы сможем легко обнаружить троян. 🙂

Процессы взаимодействуют друг с другом посредством открытых файл-маппингов. На адресное пространство процесса маппится не какой-то определенный файл, а участок свопа. Маппинг с префиксом имени KMS1 имеет маленький размер (порядка 20 Кб) и служит для управления агентами. Каждый агент периодически заглядывает в DWORD по адресу «начало/маппинга» + «идентификатор/агента» и считывает оттуда определенную команду основного модуля. Второй маппинг служит для передачи основному модулю собранных данных и имеет размер порядка 300 Кб. Данные в виде картинки переводятся в формат JPEG, голосовые данные кодируются кодеком speex (CrThBBBT.7ar). Обработанная информация шифруется с помощью алгоритма AES в режиме CBC (с нулевым вектором инициализации), сохраняется в текущей директории и удаляется после передачи на сервер. Имена сохраняемых в директории файлов представляют собой зашифрованную простой заменой строку вида LOG/XXXX/YYYYYYYYY.log, где XXXX — идентификатор агента, а Y…Y — случайные числа. Данные передаются по протоколу HTTP в теле POST-запроса. Какая-либо аутентификация как на сервере, так и на клиенте отсутствует, поэтому, зареверсив этот простенький алгоритм передачи, можно здорово заспамить удаленный сервер и попытаться угнать его клиенты. 🙂

Отдельный агент, постоянно сканирующий файловую систему компьютера, подготавливает для передачи файлы с определенными расширениями. Следует упомянуть и еще об одном потоке, который постоянно сканирует список текущих процессов, чтобы заражать новые процессы. Троян запускает новые процессы на компьютере от имени explorer.exe за счет инжекции кода в Эксплорер. Зловред использует крайне забавный способ для мониторинга активности Firefox: загружает из интернета библиотеки mozcrt19.dll, softokn3.dll и mozsqlite3.dll, которые просто посылают запросы к SQLite-базам браузера. Подобным образом троян работает и с некоторыми другими программами.

 

Реакция антивируса

В качестве эксперимента я установил «Антивирус Касперского» и настроил его на максимальное информирование. При загрузке системы АВ выдает сообщение о запуске dll как приложения и попытке получения доступа к защищенному хранилищу паролей. В этом сообщении, прямо скажем, нет ничего информативного, что раскрывало бы суть вирусной активности на компьютере (если бы я был обыкновенным пользователем, то, наверное, вообще никак на него не прореагировал). При этом журнал антивируса начинает пестреть сообщениями о разрешенном внедрении кода в сторонний процесс, о разрешенном доступе к хранилищу паролей и так далее. В общем, никакой пользы для конечного пользователя нет. Единственный положительный момент состоит в том, что «Касперский» видит папку с трояном, однако она не вызывает у него никаких подозрений, то есть заметить ее довольно сложно.

Отчет Dr.Web Light об обнаруженных вирусах
Отчет Dr.Web Light об обнаруженных вирусах
 

Summary

Вообще, видео на сайте производителя испугало меня больше, чем сам троян. Его несложно обнаружить и нейтрализовать, к тому же после знакомства с современными средствами создания ботнетов от расковырянной коммерческой малвари остаются весьма противоречивые впечатления. Версия для Android вообще не выдерживает критики — она может испортить жизнь только тем пользователям, которые вообще не следят за своим смартфоном, устанавливают приложения из неизвестных источников и безразлично относятся к количеству подтверждений, запрашиваемых приложениями. На примере этого трояна хорошо видно, что технологии коммерсантов отстают от технологий их криминальных коллег — создателей Zeus, TDSS, SpyEye и других подобных вещей.

 

Оставить мнение

Check Also

Безопасность превыше всего. 9 простых трюков, которые сделают жизнь линуксоида секьюрнее

Жизнь обычных людей складывается из мелочей. Жизнь линуксоида складывается из множества ма…