Пожелания на новый год коронавирус

<>COVID-19 и новогодние поздравления: исследуем инструменты группировки Higaisa

В марте 2022 года специалисты PT Expert Security Center анализировали активность APT-группировки Higaisa. Впервые ее деятельность была подробно изучена аналитиками Tencent в ноябре 2022. Исследователи считают, что Higaisa имеет южнокорейские корни. Активность группировки прослеживается вплоть до 2009 года и продолжается по сей день. По данным Tencent основными целями Higaisa являются государственные, общественные и торговые организации в Северной Корее, однако в число атакованных стран также входят Китай, Япония, Россия, Польша и другие.

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

В связи с пандемией коронавируса (COVID-19) многие APT-группы, в числе которых Gamaredon, SongXY, TA428, Lazarus, Konni, Winnti, используют эту тему в своих кампаниях. Не стала исключением и Higaisa.

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

Объект 1: 20220308-sitrep-48-covid-19.pdf.lnk

Стадия 1. Ярлык

Заражение начинается с файла 20220308-sitrep-48-covid-19.pdf.lnk, замаскированного под PDF.

Рисунок 2. Содержимое LNK-файла

Файл является ярлыком .lnk с иконкой PDF-документа. При попытке открытия выполняется команда cmd.exe /c со следующей командной строкой (для улучшения читаемости добавлены переносы и пробелы):

Рисунок 3. Командная строка, исполняемая ярлыком

В результате во временную папку копируется сам ярлык и файл C:\Windows\System32\CertUtil.exe под именем msoia.exe. При этом вместо прямого указания названия CertUtil.exe используется маска *ertu*.exe и поиск с помощью команды for, что позволяет обойти сигнатуры на имя файла.

Запуском findstr.exe извлекается Base64-нагрузка, содержащаяся в конце LNK-файла, которая затем декодируется с помощью CertUtil.exe (msioa.exe).

Стадия 2. Архив

Результат декодирования представляет собой CAB-архив, который распаковывается в ту же папку %tmp% и содержит следующие файлы:

  • 3UDBUTNY7YstRc.tmp (DLL, используется при автозапуске),
  • 9sOXN6Ltf0afe7.js (скрипт установки),
  • 486AULMsOPmf6W.tmp (легитимный исполняемый файл, используется при автозапуске),
  • 20220308-sitrep-48-covid-19.pdf (приманка, оригинальный файл отчета ВОЗ),
  • cSi1r0uywDNvDu.tmp (XSL, содержит часть кода установки на VBScript),
  • MiZl5xsDRylf0W.tmp (полезная нагрузка установщика).

После извлечения запускается следующая стадия закрепления в системе ― файл 9sOXN6Ltf0afe7.js.

Стадия 3. JS-скрипт. Начало

Скрипт записан в виде одной строки:

Рисунок 4. Фрагмент кода 9sOXN6Ltf0afe7.js

Фактически скрипт исполняет следующие консольные команды:

Рисунок 5. Консольные команды в 9sOXN6Ltf0afe7.js

Во временной папке %tmp% создается папка с именем cscript.exe, куда копируется оригинальный скриптовый интерпретатор cscript.exe под именем msproof.exe, а также XSL-файл под именем WsmPty.xsl. XSL-файл имеет следующий вид:

Рисунок 6. Фрагмент кода WsmPty.xsl

С помощью интерпретатора запускается легитимный скрипт %windir%\System32\winrm.vbs (консольный инструмент для работы с API Windows Remote Management). Ему передается команда get wmicimv2/Win32_Process?Handle=4 и формат вывода: -format:pretty.

При указании такого формата winrm.vbs подтянет из директории, в которой находится интерпретатор cscript.exe, файл WsmPty.xsl. Этот файл будет использоваться для форматирования вывода команды (вне зависимости от успешности ее исполнения). В свою очередь, это приведет к выполнению встроенного в него VBScript-кода.

Данная техника, описанная в 2022 году Мэттом Гребером, позволяет обойти ограничения белых списков приложений и запустить произвольный неподписанный код. При этом необходимое условие работы winrm.vbs ― наличие строки cscript.exe в пути к интерпретатору. Именно поэтому папка, в которую он копируется, создается с таким именем.

Стадия 4. XSL

Запускаемый VBScript-код содержит в себе hex-строку и код, выполняющий ее декодирование и исполнение с помощью execute. Преобразуем hex в байты и заменим обфусцированные названия переменных в соответствии с их значением:

Рисунок 7. Деобфусцированный VBScript-код

Суть кода сводится к созданию папки OFFICE12 в профиле пользователя и созданию ярлыка Accessories.lnk в папке автозагрузки. При этом ярлык запускает полезную нагрузку не напрямую, а с помощью функции FileProtocolHandler из библиотеки url.dll:

Кроме того, с помощью функции Write4D5A90 в %tmp% создается файл 2m7EBxdH3wHwBO.tmp, содержащий в себе три начальных байта EXE-файла — 0x4D, 0x5A, 0x90.

Стадия 3. JS-скрипт. Продолжение

После исполнения VBScript в XSL продолжается исполнение консольных команд, запущеных JS-кодом. В созданную в профиле пользователя папку OFFICE12 копируются три файла:

  • MSOSTYLE.EXE
  • OINFO12.OCX
  • Wordcnvpxy.exe

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

MSOSTYLE.EXE является легитимным файлом из поставки Microsoft Office 2007. С его помощью выполняется side-loading DLL-библиотеки OINFO12.OCX.

OINFO12.OCX содержит в себе только код для исполнения финальной нагрузки:

Рисунок 8. Запуск Wordcnvpxy.exe в DllMain

А также не исполняющийся на практике код в экспортируемых функциях (мы предполагаем, что это попытка обойти детектирование в песочницах):

Рисунок 9. Код GetOfficeData() Рисунок 10. Код DeleteOfficeData()

Последний шаг работы скрипта — открытие PDF-файла с приманкой.

Загрузчик Wordcnvpxy.exe

Полезная нагрузка является приложением, создающим скрытое окно (имя класса и окна ― SK_Parasite).

Рисунок 11. Создание окна и цикл обработки событий в Wordcnvpxy.exe

Необходимые для работы функции загружаются динамически, при этом для декодирования имен библиотек используется Base64 с алфавитом z2bqw7k90rJYALIQUxZK%sO=hd5C4piVMFlaRucWy31GTNH-mED8fnXtPvSojeB6g, а вместо имен функций используются их хеши по алгоритму SuperFastHash.

Рисунок 12. Динамически загружаемые библиотеки

Основной код выполняется в отдельном потоке: каждые 10 минут приложение обращается на C&C-сервер motivation[.]neighboring[.]site, передавая идентификатор компьютера в строке User-Agent. В качестве идентификатора используется SuperFastHash от серийного номера системного тома и имени компьютера.

Рисунок 13. Основной цикл загрузчика

Ответ сервера сохраняется во временном файле. При наличии в ответе не менее 10 байт, он декодируется Base64 и делится на две части по символу $: зашифрованный RC4 исполняемый файл и его имя без расширения.

Рисунок 14. Обработка ответа сервера

Интересен метод построения ключа для дешифровки RC4: он генерируется с помощью рекуррентной последовательности, которая начинается с двух чисел (28 и 39), а каждый следующий элемент в ней является суммой двух предыдущих по модулю 255. Ключ состоит из 64 байт и начинается с первой суммы в последовательности. Далее ключ расширяется до 256 байт (зацикливанием) и используется в стандартном алгоритме RC4.

Рисунок 15. Генерация RC4-ключа в Wordcnvpxy.exe

Полученный с сервера исполняемый файл сохраняется в %TEMP% под указанным именем и запускается.

Объект 2: 邀请函.doc (Приглашение.doc)

Представляет собой RTF-файл с поздравлениями:

Рисунок 16. Документ с поздравительным текстом

Документ создан с помощью популярного билдера Royal Road RTF (или 8.t), эксплуатирующего уязвимость CVE-2022-0798 в Microsoft Equation Editor. Этот билдер недоступен публично, однако широко распространен среди китайских APT-группировок, в числе которых TA428, Goblin Panda, IceFog, SongXY. Название 8.t связано с тем, что вредоносный документ в процессе эксплуатации создает во временной папке файл с именем 8.t, содержащий зашифрованную полезную нагрузку.

В результате эксплуатации уязвимости создается файл %APPDATA%\microsoft\word\startup\intel.wll. Это DLL-дроппер, который будет загружен при следующем старте Microsoft Word. Его полезная нагрузка состоит из двух файлов: %ALLUSERSPROFILE%\TotalSecurity\360ShellPro.exe и %ALLUSERSPROFILE%\TotalSecurity\utils\FileSmasher.exe. Файлы зашифрованы с помощью xor 0x1A.

Рисунок 17. Главная функция дроппера intel.wll (фрагмент)

Для закрепления в системе дроппер создает ярлык в папке автозагрузки, запускающий %ALLUSERSPROFILE%\TotalSecurity\360ShellPro.exe с ключом /func=5. Данный файл является модифицированным компонентом антивируса 360 Total Security. Он используется для передачи управления загрузчику FileSmasher.exe с помощью техники, подобной DLL side-loading.

В легитимный 360ShellPro.exe вшит набор относительных путей к исполняемым файлам. В зависимости от значения аргумента /func= выбирается и запускается нужный файл.

Рисунок 18. Выбор файла в зависимости от параметра func

Загрузчик FileSmasher.exe

Файл во многом похож на Wordcnvpxy.exe. Это также оконное приложение (имя класса: NIS_K), но для запуска основного кода в данном случае используется таймер с периодом 10 минут, а не отдельный поток.

Рисунок 19. Создание окна, установка таймера, цикл обработки событий в FileSmasher.exe

Динамическая загрузка DLL не используется (все импорты статические), адрес C&C-сервера восстанавливается с помощью аналогичной функции для дешифровки RC4 (вместо декодирования Base64 с нестандартным алфавитом). При этом начальные элементы последовательности, с помощью которой генерируется ключ, имеют другие значения — 8 и 5, а сам алгоритм генерации полностью повторяется.

Рисунок 20. Генерация RC4-ключа в FileSmasher.exe

В качестве идентификатора зараженной машины используется CRC32 от серийного номера системного тома. Он передается в явном виде в качестве GET-параметра. Полный адрес, по которому загрузчик обращается к серверу, выглядит как http://walker[.]shopbopstar[.]top/blog/index.php?ei=<32 random chars>&ti=

Рисунок 21. Построение URL для обращения к контрольному серверу в FileSmasher.exe

Алгоритм загрузки также практически не отличается:

  • Ответ сервера сохраняется во временном файле и обрабатывается только при наличии в нем не менее 10 байт.
  • В отличие от Wordcnvpxy.exe, декодирование Base64 отсутствует.
  • Разделение на две части происходит по символу & (вместо $).
  • Первая часть также представляет собой зашифрованный RC4 исполняемый файл, вторая — его имя без расширения.
  • Для дешифровки файла используется та же функция, что и для дешифровки адреса (параметры RC4 ключа — 8, 5).

Загруженный файл запускается с помощью CreateProcess.

Интересно, что среди ресурсов файлов Wordcnvpxy.exe и FileSmasher.exe присутствует диалоговое окно About с именем приложения и копирайтом.

Рисунок 22. Диалоговое окно About в ресурсах FileSmasher.exe

Такое окно, а также другие ресурсы (Menu, Accelerators), по всей видимости, генерируются Visual Studio при создании проекта. В случае Wordcnvpxy.exe имя приложения, указанное в диалоге, совпадает с именем класса окна (SK_Parasite). Однако в FileSmasher.exe это не так: приложение называется AttackBot, а в его версии мы видим сокращение NIS, которое ранее встречалось в имени оконного класса (NIS_K).

Эксперты Tencent связывают группу Higaisa с Республикой Корея, а в качестве основных интересов группы указывают северокорейские государственные и торговые организации. Это позволяет предположить, что NIS в данном случае может расшифровываться как National Intelligence Service — Национальное агентство разведки республики Корея. В то же время SK_Parasite можно считать отсылкой к южнокорейскому фильму «Паразиты» (2022 г.). Сами по себе эти данные недостаточны, чтобы делать какие-либо выводы, однако могут косвенно подтверждать связь файлов с Южной Кореей.

Связанные объекты

Содержание исходного документа (поздравления с новогодними праздниками) и даты компиляции файлов (22.12.2022) позволяют определенно говорить о периоде, в котором он использовался злоумышленниками. Однако это не единственный подобный объект: аналитиками Tencent была зафиксирована рассылка в тот же период вредоносных исполняемых файлов с именами Happy-new-year-2022.scr и 2022-New-Year-Wishes-For-You.scr. В данном случае исходные файлы являются исполняемыми, а приманка присутствует в виде поздравительной JPG-открытки, которая распаковывается и открывается в программе просмотра по умолчанию:

Рисунок 23. Открытка в Happy-new-year-2022.scr Рисунок 24. Открытка в 2022-New-Year-Wishes-For-You.scr

Структура этих угроз, за вычетом эксплуатации CVE-2022-0798, практически идентична RTF-документу. SCR-файлы являются дропперами, полезная нагрузка дешифруется с помощью xor 0x1A и распаковывается в подпапку в %ALLUSERSPROFILE%.

Рисунок 25. Главная функция дроппера 2022-New-Year-Wishes-For-You.scr (фрагмент)

Полезная нагрузка состоит из легитимного исполняемого файла (используется rekeywiz.exe из поставки Windows 7) и DLL-библиотеки загрузчика Duser.dll. Легитимный файл добавляется в автозагрузку с помощью ярлыка.

Загрузчик расшифровывает URL с помощью RC4 (начальные значения: 8, 5 и 9, 5), добавляет в GET-параметры случайную строку и CRC32 — идентификатор компьютера.

Рисунок 26. Построение URL для обращения к контрольному серверу в Duser.dll (дроппер 2022-New-Year-Wishes-For-You.scr)

Экземпляр загрузчика, распакованный из 2022-New-Year-Wishes-For-You.scr, для соединения с C&C-сервером использует статически слинкованную библиотеку libcurl, другой экземпляр — статически импортированные функции из библиотеки winhttp.dll, как и FileSmasher.exe.

Обращения происходят по адресам: http://adobeinfo[.]shopbopstar[.]top/notice/index.php и http://petuity[.]shopbopstar[.]top/research/index.php.

В обоих случаях от сервера ожидаются данные в том же формате, что и в FileSmasher.exe.

Несмотря на то, что оба описанных дроппера не создают никаких окон, в них также встречается стандартный набор оконных ресурсов, включая диалоговое окно About. В качестве имени приложения используются строки “K_NIS” и “KISA”.

Ответы C&C-сервера

В качестве полезной нагрузки, распространяемой C&C-сервером, использовались два вида компонентов:

  • Сборщик информации о системе (InfoStealer), работа которого сводится к исполнению консольной команды systeminfo & ipconfig -all & tasklist & net view & dir c:\ & dir c:\users\ & dir d:\ & dir e:\ и отправке ее вывода на командный сервер.
  • Gh0st RAT в различных модификациях, в частности с реализацией всей существенной функциональности в DLL-плагинах, загружаемых с C&C-сервера.

Полученные экземпляры Gh0st RAT в сравнении с публично доступным исходным кодом интересны наличием нестандартного шифрования отправляемых и принимаемых данных. Для пакетов, содержащих более 10 байт полезной нагрузки (не считая заголовка), первые 10 байт обрабатываются XOR с ключом 0x12, причём байты 0x0 и 0x12 не меняются. При этом для сжатия данных вместо zlib используется LZO.

Рисунок 27. Декомпилированный код функции CClientSocket::OnRead

Кроме того, поле m_bPacketFlag — сигнатура пакетов, отправляемых на командный сервер, инициализируется псевдорандомным значением, которое вычисляется на основе вызова GetTickCount(). В оригинальном коде поле равно Gh0st.

Рисунок 28. Инициализация поля CClientSocket::m_bPacketFlag

Заключение

По результатам исследования мы видим, как эволюционировали со временем вредоносные объекты, используемые для заражения группировкой Higaisa — от прямого распространения исполняемых файлов до применения эксплойтов и сложных многоступенчатых угроз. Однако структура используемых инструментов (дропперы, загрузчики) во многом остается неизменной. Для усложнения детектирования злоумышленники варьируют отдельные детали, такие как URL контрольного сервера, параметры RC4-ключа, используемые для DLL side-loading легитимные файлы, библиотеки для HTTP-взаимодействия.

Автор: Алексей Захаров, Positive Technologies

Закладка Постоянная ссылка.