Twisted Panda APT IOCs

security IOC

Check Point Research (CPR) обнаружили целевую кампанию, использующую санкционные приманки для атак на российские оборонные институты, входящие в корпорацию "Ростех". Расследование показало, что эта кампания является частью более крупной китайской операции по шпионажу, которая проводится против связанных с Россией организаций уже несколько месяцев. Исследователи CPR с высокой степенью уверенности считают, что кампания была проведена опытным и сложным китайским APT.

Twisted Panda

23 марта в несколько оборонных научно-исследовательских институтов, расположенных в России, были разосланы вредоносные электронные письма. Письма с темой "List of <название института> persons under US sanctions for invading Ukraine" содержали ссылку на контролируемый злоумышленниками сайт, имитирующий Министерство здравоохранения России minzdravros[.]com, с прикрепленным вредоносным документом.

В тот же день аналогичное письмо было отправлено неизвестному лицу в Минске, Беларусь, с темой "US Spread of Deadly Pathogens in Belarus". Все приложенные документы выглядят как официальные документы Министерства здравоохранения России, с его официальной эмблемой и названием.

Каждый документ загружает внешний шаблон с URL-адресов с похожим форматом, например https://www.microtreely.com/support/knowledgebase/article/AIUZGAE7230Z.dotm. Внешний шаблон содержит макрокод, который импортирует несколько API функций из kernel32 (LoadLibraryA, CreateFileA, WriteFile, ReadFile и т.д.) и использует их для:

  • Записать три файла (cmpbk32.dll, cmpbk64.dll и INIT) по пути: C:/Users/Public.
  • Загрузить cmpbk32.dll или cmpbk64.dll (в зависимости от архитектуры ОС системы) и выполнить экспортируемую функцию R1.

Выполнение экспортируемой функции R1 завершает инициализацию вредоносных файлов. Вредоносная программа создает рабочий каталог %TEMP%\\\OfficeInit и копирует в него файлы INIT и cmpbk32.dll, а также легитимный 32-битный исполняемый файл Windows cmdl32.exe из папки System32 или SysWOW64, в зависимости от того, является ли операционная система 32- или 64-битной.

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

Назначение cmpbk32.dll - загружать определенный шеллкод из INIT-файла, в зависимости от стадии заражения, и запускать его. Файл INIT содержит два шеллкода: шеллкод первой стадии запускает сценарий сохранения и очистки, а шеллкод второй стадии представляет собой многоуровневый загрузчик. Цель состоит в том, чтобы последовательно расшифровать три других слоя бесфайлового загрузчика и в конечном итоге загрузить в память основную полезную нагрузку. Чтобы различать этапы, точка входа DLL DllMain выполняет различные действия в зависимости от причины вызова.

Когда вредоносный документ закрывается, запускается событие PROCESS_DETACH. DLL выполняет часть файла INIT, отвечающего за очистку файлов, созданных вредоносным документом, и создает запланированную задачу для сохранения:

Основной процесс загрузки начинается с выполнения запланированной задачи cmdl32.exe, которая загружает вредоносную DLL cmpbk32.dll. Побочная загрузка DLL легитимным процессом - это техника, часто используемая субъектами угроз; сочетание ее с надежным процессом загрузки может помочь обойти современные антивирусные решения, поскольку в данном случае реально запущенный процесс является действительным и подписанным Microsoft. Обратите внимание, что cmpbk64.dll не копируется в папку %TEMP%\\\OfficeInit. 64-битная версия DLL используется только на начальном этапе заражения 64-битным процессом MS Word, так как 32-битный cmdl32.exe может загрузить только 32-битную cmpbk32.dll.

Когда DLL загружается, срабатывает событие PROCESS_ATTACH и запускается последовательность операций. Эта последовательность отслаивает несколько зашифрованных слоев от INIT-файла и, в конце концов, раскрывает и выполняет конечную полезную нагрузку. Сначала из INIT-файла считывается зашифрованный XOR блоб и расшифровывается в памяти с помощью простого XOR с ключом 0x9229. Расшифрованный блоб представляет собой позиционно-независимый код и первый из зашифрованных слоев, который "защищает" основную полезную нагрузку.

Этот первый уровень довольно прост. Он динамически загружает из Kernel32.dll функции WinAPI, которые необходимы для его работы. Далее он начинает последовательность операций для вскрытия второго уровня. Он использует RC4 со следующим жестко закодированным ключом: 0x1C, 0x2C, 0x66, 0x7C, 0x11, 0xCF, 0xE9, 0x7A, 0x99, 0x8B, 0xA3, 0x48, 0xC2, 0x03, 0x07, 0x55. Затем он декомпрессирует расшифрованный буфер с помощью RtlDecompressBuffer, и, наконец, использует скользящее XOR для декодирования результата и раскрытия второго уровня.

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

Полезная нагрузка использует две обфускации на уровне компилятора:

  • Сглаживание потока управления: изменяет поток кода, делая его нелинейным
  • Непрозрачные предикаты: определяют неиспользуемую логику и заставляют двоичный код выполнять ненужные вычисления.

Оба метода затрудняют анализ полезной нагрузки, но вместе они делают анализ болезненным, длительным и утомительным. Эти два типа обфускации ранее были замечены в совместном использовании в образцах, приписываемых китайскоязычной группе Stone Panda (APT10) и Mustang Panda.

Когда бэкдор SPINNER начинает работать, он создает мьютекс под названием MSR__112, чтобы обеспечить одновременный запуск только одного экземпляра полезной нагрузки. Полезная нагрузка также расширяет персистентность, ранее созданную загрузчиком. Она создает новый ключ реестра OfficeInit в разделе SOFTWARE\\\Microsoft\\\Windows\\\\CurrentVersion\\\Run, который указывает на путь cmdl32.exe.

Полный_c2_url расшифровывается с помощью XOR-дешифровки с ключом 0x50. После расшифровки функция InternetCrackUrlA используется для взлома URL на его составные части: поля c2_url_without_scheme, c2_uri, port и use_https.

Далее бэкдор запускает свой основной цикл, проверяя, первый ли это запуск и, следовательно, не произошла ли еще дактилоскопия системы. Если ответ отрицательный, бэкдор создает случайный 16-байтовый идентификатор бота и сохраняет его в файле %TEMP%\\\OfficeInit\\\init.ini. Затем он собирает данные о зараженной системе и создает строку, содержащую следующие данные:

  • ID бота
  • Имя компьютера
  • Локальный IP
  • Версия Windows
  • Имя пользователя
  • Время сна, полученное из конфигурации вредоносной программы
  • Идентификатор процесса
  • NULL, добавленный в конец строки.

Получив строку, содержащую все собранные данные, бэкдор подготавливает пакет для отправки на C&C сервер, построенный следующим образом:

Пакет отправляется через HTTP/S в зависимости от URL, полученного из конфигурации вредоносной программы. Как и запрос, ответ от сервера C&C шифруется с помощью RC4 и имеет такую же структуру, содержащую ключ, размер и данные. Ответ C&C может содержать одну из следующих команд:

Судя по поддерживаемым командам, эта версия бэкдора SPINNER имеет только базовые возможности для перечисления хост-системы. Его основное назначение - запуск дополнительных полезных нагрузок, полученных от сервера C&C. Хотя нам не удалось получить другие полезные нагрузки, на основании других результатов, описанных далее в исследовании, мы считаем, что избранные жертвы, скорее всего, получили полный бэкдор с дополнительными возможностями.

Indicators of Compromise

Domains

  • img.elliotterusties.com
  • minzdravros.com
  • www.microtreely.com
  • www.miniboxmail.com
  • www.minzdravros.com

URLs

  • https://www.microtreely.com/support/knowledgebase/article/AIUZGAE7230Z.dotm

MD5

  • 027845550d7a0da404f0f331178cb28b
  • 06865195c326ff587b2c0bed16021d08
  • 176d7239887a9d0dd24e2cce904277bc
  • 1f9a72dc91759cd06a0f05ac4486dda1
  • 25f3da186447794de5af2fa3ff3bcf23
  • 312dcd11c146323876079f55ca371c84
  • 3855dc19811715e15d9775a42b1a6c55
  • 443c66275e2802c00afe2cf16f147737
  • 6d4bf8dd4864f9ac564d3c9661b99190
  • 7a371437e98c546c6649713703134727
  • 7dd4c80acc4dca33af0d26477efe2002
  • 90e6878ebfb3e962523f03f9d411b35c
  • ce02ee477e1188f0664dd65b17e83d11
  • d723c18baea565c9263dca0eb3a11904
  • d95bbe8a97d864dc40c9cf845aeb4e9e
  • daa1da9b515a32032bc621e71d4ae4ca
  • e3072cc3f99dd3a32801e523086d9bb1
  • fd73eeead785470f79536e9eb2eb6ef2

SHA1

  • 698d1ade6defa07fb4e4c12a19ca309957fb9c40

SHA256

  • 28ecd1127bac08759d018787484b1bd16213809a2cc414514dc1ea87eb4c5ab8
  • 59dea38da6e515af45d6df68f8959601e2bbf0302e35b7989e741e9aba2f0291
  • 5b558c5fcbed8544cb100bd3db3c04a70dca02eec6fedffd5e3dcecb0b04fba0
  • 8b04479fdf22892cdfebd6e6fbed180701e036806ed0ddbe79f0b29f73449248
  • a9fb7bb40de8508606a318866e0e5ff79b98f314e782f26c7044622939dfde81
  • e0d4ef7190ff50e6ad2a2403c87cc37254498e8cc5a3b2b8798983b1b3cdc94f
  • efa754450f199caae204ca387976e197d95cdc7e83641444c1a5a91b58ba6198
  • f29a0cda6e56fc0e26efa3b6628c6bcaa0819a3275a10e9da2a8517778152d66
Добавить комментарий