BI.ZONE corporate blog
Information Security
Reverse engineering
19 June

Follow the money: как группировка RTM стала прятать адреса C&C-серверов в криптокошельке

Группировка киберпреступников RTM похищает деньги у банковских клиентов с 2015 г. Большинство ее жертв — российские компании. Вредоносное ПО, которое используют злоумышленники, в ИБ-сообществе так же принято называть RTM.


Об этой программе написано довольно много технических отчетов, которые подробно описывают общий механизм работы ВПО. В этой статье мы сосредоточимся на методах получения адресов управляющих (C&C) серверов RTM. В каждой итерации программы злоумышленники изобретательно подходят к этой задаче: они распространяют адрес через блоги, используют систему альтернативных DNS-серверов и сеть Tor. На днях же мы обнаружили, что RTM стала скрывать IP в транзакциях на биткойн-кошелек.


Что такое RTM


По своей сути, RTM — это банковский троян. Основная задача программы — позволить злоумышленникам манипулировать платежными поручениями компании-жертвы, чтобы незаметно перевести ее средства на счет киберпреступников.


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


Примеры исполняемых файлов с расширением .exe, распространяемых группировкой RTM

Примеры файлов на рисунке расположены в порядке распространения. Большую часть времени исполняемые файлы RTM были запакованы кастомным пакером и маскировались под PDF-документ. В начале 2019 года стали появляться первые образцы, которые представляют собой самораспаковывающийся RAR-архив и маскируются под файл в формате DOCX. В настоящее время RTM распространяется в виде самораспаковывающегося CAB-архива.


Бинарное представление файла «Оплата 11.06.exe»

После запуска исполняемый файл копирует запакованную DLL-библиотеку на диск и запускает ее с помощью утилиты rundll32.exe. Как правило, внутреннее имя данной библиотеки — core.dll. Ее последующее функционирование происходит в адресном пространстве процесса rundll32.exe.


Именно core.dll осуществляет первичное взаимодействие с управляющим сервером RTM, через который программа получает от злоумышленников команды и дополнительные модули.


Модули доставляются в зашифрованном виде и могут быть запущены различными способами. Эти компоненты дают злоумышленникам возможность удаленно управлять скомпрометированным компьютером, подменять платежные документы в системе 1С и пр.


Способы нахождения управляющего сервера


RSS


В первых версиях RTM для обновления адресов управляющих серверов использовалась RSS-лента. Злоумышленники создавали в LiveJournal блог, содержащий адреса C&C в зашифрованном виде. Для получения новых адресов управляющих серверов отправлялся запрос по адресу hxxps://.livejournal[.]com/data/rss/ и обрабатывался ответ, имеющий следующий формат (на примере https://f72bba81c921.livejournal.com/data/rss/):


Содержимое RSS-ленты. В поле description расположены зашифрованные адреса управляющих серверов


Расшифрованные строки с первоначальным адресом управляющего сервера и адресом RSS-ленты


.bit


В марте 2016 года RTM стала использовать в качестве адресов управляющих серверов домены в зоне .bit. Они поддерживаются альтернативным DNS-регистратором Namecoin, основанным на технологии блокчейн. Система децентрализована, поэтому .bit-домены сложно заблокировать.


IP-адреса управляющих серверов на .bit RTM получала одним из двух способов:


  • через API обозревателя блоков Namecoin;
  • через разрешение доменного имени с помощью специальных DNS-серверов.


Функция получения IP-адресов управляющих серверов

В функции получения IP-адресов управляющих серверов через API обозревателя блоков Namecoin происходит обработка содержимого, расположенного по адресу hxxps://namecoin.cyphrs[.]com/api/name_show/d/stat-counter-7 (на примере домена stat-counter-7[.]bit):


Функция получения IP-адресов управляющих серверов через API обозревателя блоков Namecoin

IP-адреса управляющего сервера получаются из тела ответа. Помимо запросов к hxxps://namecoin.cyphrs[.]com/api/name_show/d/ злоумышленники также использовали запросы к hxxps://namecha[.]in/name/d/, обрабатывая поле «Current value»:


Содержимое веб-страницы по URL-адресу hxxps://namecha[.]in/name/d/stat-counter-7

Если получить IP-адрес данным способом не удалось, злоумышленники резолвят доменное имя управляющего сервера функцией DnsQuery_A с помощью специальных DNS-серверов (взятых, например, отсюда).

Использование функции DnsQuery_A в программном коде библиотеки core.dll выглядит так:


Функция получения IP-адресов управляющих серверов через разрешение доменного имени с помощью специальных DNS-серверов

Функция DnsQuery_A имеет следующий прототип:


Прототип функции DnsQuery_A, объявленной в заголовочном файле WinDNS.h

4-м аргументом в функцию DnsQuery_A передается адрес структуры _IP4_ARRAY на стеке. По нему содержится массив IP-адресов специальных DNS-серверов:


Структура _IP4_ARRAY на стеке

В случае успешного выполнения функции DnsQuery_A IP-адрес управляющего сервера можно получить, прочитав следующее значение: pDnsRecord –> Data.A.IpAddress.


Из декомпилированного кода одного из экземпляров видно, что для разрешения доменного имени C&C используется специальный DNS-сервер 188.165[.]200.156. А в случае неудачи используется список из трех DNS-серверов: 91.217[.]137.37, 188.165[.]200.156, 217.12[.]210.54.


Tor


15 февраля 2019 года мы впервые обнаружили образцы RTM, управляющий сервер которых расположен в сети Tor (hxxp://[.]onion/index[.]php).


Адрес управляющего сервера в сети Tor среди расшифрованных строк


Участок дизассемблированного кода, в котором происходит разбор URL-адреса управляющего сервера

Такие сэмплы рассылались до 9 апреля 2019 года, после чего RTM снова перешла на использование доменной зоны .bit.

Биткойн


10 июня 2019 года мы обнаружили образец RTM, получающий IP-адреса C&C-серверов из транзакций на определенный криптокошелек. Каждый IP-адрес скрывается в количестве перечисленных биткойнов за две транзакции.


Для получения IP-адресов C&C ВПО осуществляет запрос по адресу hxxps://chain[.]so/api/v2/get_tx_received/BTC/. В ответе содержится набор транзакций на счет криптокошелька . Пример изображен на скриншоте:



Рассмотрим участок кода, в котором происходит получение IP-адресов управляющего сервера:



В функции FindValue происходит поиск дробной части от суммы перевода. Поиск осуществляется с конца буфера и при каждом следующем вызове функции обрабатываются данные, начиная с текущего индекса. То есть при последовательных вызовах функции FindValue будут получены значения 8483, 40030, 14728 и так далее. Программа генерирует два IP-адреса: каждый адрес скрыт в двух идущих подряд переводах.


Дизассемблированный код получения IP-адреса из сумм переводов на криптокошелек

Данный код делает следующее:

ip_address = str(value_1 & 0xff) + "." + str(value_1 >> 0x8) + "." + str(value_0 & 0xff) + "." + str(value_0 >> 0x8)

То есть, перечислив 0.00008483 BTC, а затем 0.00040030 BTC, злоумышленники скрыли для своей программы IP-адрес 94.156[.]35.33. Аналогичным образом из предыдущих двух транзакций RTM получает второй IP-адрес управляющего сервера.


В таком виде вредоносное ПО RTM рассылается по сегодняшний день.


Заключение


Можно заметить, что при организации передачи адреса C&C-сервера RTM любит использовать подходы, позволяющие динамически менять IP без модификации исходного кода ВПО.


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


+20
4.2k 24
Comments 6
Top of the day