В конце июля 2019 года мы обнаружили интересный образец вредоносного ПО группы TA505. 22 июля 2019 года он был загружен на сервис ANY.RUN для проведения динамического анализа. Наше внимание привлекло то, что среди выставленных тегов, помимо обыденного для TA505 Servhelper, также появился тег netsupport, а среди срабатываний сетевых сигнатур идентифицирован — одноименный NetSupport RAT.
На первый взгляд это может показаться странным: ведь бэкдор группы ServHelper и сам обладает внушительной функциональностью для контроля ПК жертвы. Самое время рассмотреть работу ВПО в подробностях.
NSIS- и PowerShell-дропперы
Исполняемый PE-файл, с которого начинается наш анализ, представляет собой установщик на платформе Nullsoft Scriptable Install System (NSIS). NSIS-скрипт, выполняющий процесс установки, извлекает и запускает вложенный PowerShell-скрипт:
Запущенный PowerShell-скрипт содержит закодированный в Base64 буфер (усечен на рисунке ниже для наглядности), который после декодирования расшифровывается алгоритмом Triple DES (3DES) в режиме CBC:
Первая часть скрипта представляет собой функцию с говорящим названием heller и отвечает за повышение привилегий в системе и обход защиты UAC. Для этого используются две техники:
Техника № 1: с использованием задачи SilentCleanup в планировщике задач:
- Задача может быть запущена пользователем, но работает с повышенными привилегиями. В свойствах задачи прописан путь до исполняемого файла с использованием переменной среды %windir%. Значение переменной среды можно изменить (например, указать запуск PowerShell-скрипта), тогда запуск задачи приведет к исполнению PowerShell-скрипта с правами администратора без предупреждения UAC.
- Злоумышленники применяют данную технику на системах Windows 8 и Windows 10.
- Код, выполняющий данную технику, идентичен реализации модуля для фреймворка Metasploit.
Техника № 2: с использованием системной утилиты sysprep.exe и техники DLL Side-Loading:
- Сначала создается вспомогательный сценарий для перезапуска PowerShell-скрипта в каталоге C:\Windows\Temp. Затем формируется CAB-архив, который содержит вспомогательную DLL-библиотеку CRYPTBASE.dll (PowerShell-скрипт содержит как x86-, так и x64-версии библиотеки). Средствами системной утилиты wusa.exe данный архив распаковывается в каталог C:\Windows\System32\Sysprep. Затем запускается системная утилита sysprep.exe, которая загрузит ранее распакованную DLL-библиотеку, а она, в свою очередь, выполнит вспомогательный сценарий. В результате PowerShell-скрипт будет перезапущен с правами администратора без предупреждения UAC.
- Злоумышленники применяют данную технику на системе Windows 7.
- Подробное описание можно встретить в этой статье, а примеры реализации, например, в этом проекте на Github.
В скрипте встречается множество комментариев, неиспользуемая функция Test-Administrator, некоторые переменные используются без инициализации: все это признаки заимствования кода без внимательной проверки на предмет лаконичности.
После запуска скрипта с необходимыми привилегиями выполняется вторая часть скрипта. На этом этапе декодируются целевые полезные нагрузки:
- строка декодируется Base64,
- буфер разжимается с помощью Deflate,
- строка повторно декодируется Base64.
В результате в системе будут созданы следующие файлы:
- %systemroot%\help\hlp11.dat — x86/x64-версия библиотеки RDP Wrapper Library. Применяется для расширения функциональности сервиса RDP, в том числе для возможности нескольких одновременных подключений. Важно отметить, что библиотека модифицирована: в начале исполнения линейным XOR декодируется строка c:\windows\help\hlp12.dat, затем по полученному пути загружается DLL-библиотека:
- %systemroot%\help\hlp12.dat — x86/x64-версия бэкдора ServHelper, который будет рассмотрен в следующем разделе;
- %systemroot%\help\hlp13.dat — конфигурационный файл для RDP Wrapper Library,
- %systemroot%\system32\rdpclip.exe — компонент сервиса RDP для возможности обмениваться данными буфера обмена;
- %systemroot%\system32\rfxvmt.dll — компонент сервиса RDP для передачи данных с применением технологий RemoteFX.
После извлечения и записи полезной нагрузки скрипт настраивает корректную работу её компонентов:
- меняет владельца компонента rfxvmt.dll на NT SERVICE\TrustedInstaller и наделяет необходимыми правами;
- изменяет значение порта для RDP-соединений со стандартного 3389 на 7201;
- добавляет учетную запись сетевых сервисов в группу локальных администраторов;
- регистрирует hlp11.dat как RDP-службу и перезапускает сервис;
- удаляет созданные временные файлы.
ServHelper RAT → Dropper
Одним из результатов работы дропперов является DLL-библиотека hlp12.dat, которая представляет собой ВПО ServHelper. Может быть создана как x86-, так и x64-версия библиотеки в зависимости от битности ОС (принципиальных отличий между ними нет). Обе версии написаны на Delphi, упакованы UPX 3.95 (x64) и PeCompact 2.20 (x86). Наши коллеги из Proofpoint и Trend Micro ранее представляли анализ особенностей распространения и работы этого бэкдора. Арсенал возможностей нашего образца во многом сходится с тем, что уже известно: в частности, не изменился алгоритм расшифровки используемых строк (шифр Виженера):
Интересно, что шифрование реализовано не для всех строк: например, адреса управляющих доменов и веб-ссылок с дополнительными компонентами остаются в открытом виде:
При обращении к одной из таких ссылок (hxxp://letitbe.icu/2.txt) происходит загрузка зашифрованного файла (MD5: 0528104f496dd13438dd764e747d0778). При анализе конца файла в шестнадцатеричном редакторе можно заметить частые повторения значения байта 0x09:
Повторяющиеся значения байта — частый признак применения однобайтового XOR в качестве шифрования. В данном случае эта теория подтверждается кодом:
В результате расшифровки мы получим ZIP-архив со следующим содержанием:
Все файлы представляют собой легитимное ПО для удаленного управления ПК NetSupport Manager, которое не раз использовалось злоумышленниками из различных группировок.
Один из файлов (client32.ini) представляет собой конфигурационный файл, в котором указан адрес промежуточного шлюза, через который ПК жертвы будет соединяться со злоумышленниками:
Такая опция имеет смысл в случае, если жертва находится за межсетевым экраном, а доступ в интернет ограничивается по портам. Для корректной работы в интернете требуется открыть доступ по крайней мере к двум портам, 80 (HTTP) и 443 (HTTPS), поэтому вероятность успешного соединения повышается.
В сентябре 2019 года мы обнаружили несколько аналогичных образцов ServHelper с существенно ограниченным набором возможностей. На примере одного из них (MD5: 5b79a0c06aec6126364ce1d5cbfedf66): среди ресурсов исполняемого PE-файла находятся зашифрованные данные со схожим характерным признаком в виде повторяющегося байта:
Это вновь «заксоренный» одним байтом ZIP-архив, в котором находятся те же самые компоненты NetSupport Manager, правда на этот раз с другим промежуточным шлюзом: 179[.]43.146.90:443.
Выводы
В этой статье мы рассмотрели один из вариантов доставки и использования бэкдора группы TA505 — ServHelper. Кроме любопытных особенностей, предшествующих работе основного компонента (например, обхода UAC и повышения привилегий), мы заметили интересные метаморфозы основного бэкдора: базовая функциональность (кража данных, шпионаж и выполнение команд) дополнилась встраиванием еще одного инструмента для удаленного управления ПК — NetSupport RAT. Кроме этого, новые версии ServHelper уже не имели ключевых возможностей, делающих его полноценным бэкдором: теперь он выполняет только роль промежуточного дроппера для установки NetSupport RAT. Вероятно, злоумышленники нашли такой подход более эффективным как с точки зрения разработки, так и в плане возможности обнаружения. Однако список инструментов группы, представляющих для нас интерес, на этом не заканчивается.
Автор: Алексей Вишняков, Positive Technologies
IOCs
hxxp://185.225.17.175/wrkn157.exe — веб-ссылка, с которой загружался NSIS-дропперd2a062ca772fa3ace7c7edadbd95eaf7 — изначальный NSIS-дроппер
0cacea3329f35e88a4f9619190e3746f — PowerShell-дроппер shipkat.ps1
fb609b00e29689db74c853ca7d69f440 — CRYPTBASE.dll (x86)
843288a35906aa90b2d1cc6179588a26 — CRYPTBASE.dll (x64)
445cd6df302610bb640baf2d06438704 — hlp11.dat (x86)
083f66cc0e0f626bbcc36c7f143561bd — hlp11.dat (x64)
40bae264ea08b0fa115829c5d74bf3c1 — hlp12.dat (x86)
ac72ab230608f2dca1da1140e70c92ad — hlp12.dat (x64)
07f1dc2a9af208e88cb8d5140b54e35e — hlp13.dat
1690e3004f712c75a2c9ff6bcde49461 — rdpclip.exe
dc39d23e4c0e681fad7a3e1342a2843c — rfxvmt.dll
ServHelper C2:
179[.]43.156.32
185[.]163.45.124
185[.]163.45.175
185[.]225.17.150
185[.]225.17.169
185[.]225.17.175
185[.]225.17.98
195[.]123.221.66
195[.]123.246.192
37[.]252.8.63
94[.]158.245.123
94[.]158.245.154
94[.]158.245.232
fdguyt5ggs[.]pw
foxlnklnk[.]xyz
gidjshrvz[.]xyz
letitbe[.]icu
pofasfafha[.]xyz
0528104f496dd13438dd764e747d0778 — зашифрованный ZIP-архив с NetSupport RAT
Компоненты NetSupport Manager:
953896600dfb86750506706f1599d415 — cksini.exe
8d9709ff7d9c83bd376e01912c734f0a — client32.exe
2d3b207c8a48148296156e5725426c7f — HTCTL32.DLL
0e37fbfa79d349d672456923ec5fbbe3 — msvcr100.dll
26e28c01461f7e65c402bdf09923d435 — nskbfltr.inf
88b1dab8f4fd1ae879685995c90bd902 — NSM.ini
7067af414215ee4c50bfcd3ea43c84f0 — NSM.LIC
dcde2248d19c778a41aa165866dd52d0 — pcicapi.dll
a0b9388c5f18e27266a31f8c5765b263 — PCICHEK.DLL
00587238d16012152c2e951a087f2cc9 — PCICL32.DLL
2a77875b08d4d2bb7b654db33a88f16c — remcmdstub.exe
eab603d12705752e3d268d86dff74ed4 — TCCTL32.DLL
185[.]225.17.66:443 — NetSupport RAT GatewayAddress
5b79a0c06aec6126364ce1d5cbfedf66 — ServHelper с архивом NetSupport RAT
179[.]43.146.90:443 — NetSupport RAT GatewayAddress