5 сентября специалистами F.A.C.C.T. было зафиксировано несколько рассылок группы PhantomCore, нацеленных в адрес:

  • российской ИТ-компании, являющейся разработчиком ПО и онлайн-касс;

  • компании, занимающейся организацией командировок;

  • конструкторского бюро;

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

Разобрали новые рассылки PhantomCore ведущий специалист по анализу вредоносного кода компании F.A.C.C.T. Артем Грищенко и аналитик группы исследования сложных угроз F.A.C.C.T. Алена Шандер.

Напомним, что PhantomCore – группа кибершпионов, действующая с начала 2024 года против российских организаций, была впервые раскрыта и описана в отчете исследователями компании F.A.C.C.T.  Группировка получила своё название по имени их уникального трояна удаленного доступа PhantomRAT. Весной и летом этого года киберешпионы атаковали российские организации в различных отраслях, но большинство целей было обнаружено среди промышленных компаний. Отличительной особенностью злоумышленников является то, что они предварительно компрометируют сторонние организации и используют их для проведения атак через фишинговые письма.

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

Рис. 1 – пример содержимого письма из рассылки PhantomCore от 05.09.2024
Рис. 1 – пример содержимого письма из рассылки PhantomCore от 05.09.2024

Письмо с вложением «Договор_на_поставку_обр_00694723_от_04_09_2024.rar» было отправлено с, вероятно, скомпрометированного адреса, принадлежащего компании, специализирующейся на строительстве и автоматизации объектов электроэнергетики и транспорта. Тема письма совпадает с названием вложения: “Договор на поставку обр №00694723 от 04.09.2024”. Такой формат вложений и тем злоумышленники часто применяют в своей деятельности, маскируя письмо под различные значимые документы, такие как договоры, заявления, счет-фактуры и т.д.

Вложение представляет собой защищенный паролем архив. Отметим, что злоумышленники усложнили пароль на архив, в старых атаках в качестве пароля использовался год, даты рассылок, легкие цифровые комбинации: «11112222», «2024», «1007», и другие, в то время как в текущей рассылке использовался пароль: «He@k43M24v». Архив включает в себя исполняемый файл и легитимный PDF-файл, являющийся документом-приманкой с таким же именем. Содержимое архива представлено на рисунке 2.

Рис. 2 - содержимое архива «Договор_на_поставку_обр_00694723_от_04_09_2024.rar»
Рис. 2 - содержимое архива «Договор_на_поставку_обр_00694723_от_04_09_2024.rar»

Злоумышленники по-прежнему эксплуатируют уязвимость CVE-2023-38831, которая заключается в том, что если пользователь с версией WinRAR меньшей 6.23 запустит PDF-файл, будет запущен исполняемый файл, содержащийся в одноименной директории архива. 

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

Рис. 3 – содержимое приманки «Договор_на_поставку_обр_00694723_от_04_09_2024.pdf»
Рис. 3 – содержимое приманки «Договор_на_поставку_обр_00694723_от_04_09_2024.pdf»

Исполняемый файл «Договор_на_поставку_обр_00694723_от_04_09_2024.pdf .exe» представляет собой вредоносную программу, классифицируемую нами как PhantomCore.KscDL_trim. В качестве C2 использует ip: 185[.]130[.]251[.]55:80.

PhantomCore.KscDL_trim - урезанная версия загрузчика PhantomCore.KscDL, написанная на языке программирования C++ и упакованная инструментом UPX . Загрузчик имеет следующие возможности: загрузка и запуск файлов с C2-адреса; выполнение произвольных команд в интерпретаторе команд Windows. PhantomCore.KscDL_trim использует HTTP-протокол для взаимодействия с сервером и библиотеку Boost.Beast.

После прохождения проверки будет установлена кодировка 866 и локаль "ru_RU.UTF-8". Далее будет запущена функция для подключения к серверу. Запрос будет выполнятся на gateway /connect. В случае неудачного подключения в лог будет добавлена строка: "[-] Retry in 5 seconds...", и после 5 секундного ожидания будет выполнена повторная попытка подключения. В случае удачного подключения в лог будет добавлена строка: "[+] Connected to server: {C2} successfully!", и процесс исполнения перейдет к задаче для получения и выполнения команд от C2. Также в ходе выполнения подключения к серверу по результату выполнения запроса в лог будет добавляться строка: "[+] Response from server: ".

В PhantomCore.KscDL_trim существует задача runRequester, которая выполняет следующую последовательность действий:

  • создание JSON-объекта с данными о системе и их отправка с помощью POST-запроса на gateway /init;

  • выполнение запроса /check и переход к получению и обработке команд от сервера (задача requesterThread).

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

{

    "BuildName": "5",

    "Domain": "{domain}",

    "Hostname": "{hostname}",

    "Interval": 15,

    "LocalIp": "{local_ip}",

    "Os": "{os_version}",

    "Username": "{computername}\{username}",

    "Uuid": "{uuid}"

}
  • Uuid - случайно сгенерированное значение по шаблону %08x-%04x-%04x-%04x-%012llx;

  • BuildName - содержится внутри файла (в исследуемом файле - "5");

  • Domain - извлекается с помощью WQL-запроса SELECT Domain FROM Win32_ComputerSystem к WMI-объекту Win32_ComputerSystem;

  • Hostname - извлекается с помощью WQL-запроса SELECT DNSHostName FROM Win32_ComputerSystem к WMI-объекту Win32_ComputerSystem;

  • Username - извлекается с помощью WQL-запроса SELECT RegisteredUser FROM Win32_OperatingSystem к WMI-объекту Win32_OperatingSystem;

  • LocalIp - локальный IP адрес, который будет получен с использованием функции boost::asio::ip::host_name();

  • Os - версия системы, которая будет получена в результате конкатенации двух WQL-запросов SELECT Version FROM Win32_OperatingSystem и SELECT Caption FROM Win32_OperatingSystem к WMI-объекту Win32_OperatingSystem;

  • Interval - содержится внутри файла и отвечает за промежуток времени между итерациями цикла в функции runRequester() (в исследуемом файле - 15).

Данный JSON-объект будет отправлен с помощью POST-запроса на gateway /init. Важно отметить, что данный объект и ответ от сервера будут добавлены в лог.

В случае успешной отправки данных процесс исполнения перейдет в цикличную отправку запроса /check и создание задачи requesterThread для получения и обработки команды от сервера. Для получения команды в контексте задачи циклично выполняется POST-запрос с gateway /command. В ответ на данный запрос будет получен JSON-объект вида:

{

    "Done": {done},

    "OperatorId": "{operator_id}",

    "Response": "{response}",

    "Command": "{command}",

    "AgentId": "{agent_id}",

    "Uuid": "{uuid}"

}

Данный объект содержит поле "Command", в котором расположена команда. После ее выполнения результат команды будет добавлен в поле "Response", а в поле "Done" будет установлено значение true. Также мы полагаем, что поле "OperatorId" содержит уникальный идентификатор злоумышленника, определяющий оператора ВПО, от которого была отправлена команда. Поле "AgentId" содержит сгенерированный UUID, обозначающий уникальный идентификатор агента, который расположен на зараженной системе (данный UUID будет отправлен на C2-сервер в контексте POST-запроса /init). А поле "Uuid" в контексте текущего запроса содержит уникальный идентификатор конкретной команды.

Поддерживаемые загрузчиком команды:

  • up {URL} - загрузить файл на зараженную систему. Команда содержит URL-адрес, к которой будет выполнен запрос для загрузки файла. Файл будет сохранен в текущую директорию процесса.

  • ex {cmd} – выполнить смену текущих директорий, а также произвольные команды в интерпретаторе команд Windows. Существует три варианта обработки команды:

    • если была получена команда "cd .." текущей директорией будет установлена родительская директория;

    • если шаблон строки "cd {filepath}", то выполнится проверка существования в системе файлового пути {filepath}. Если путь существует, он будет установлен как текущая директория;

    • если команда не соответствует шаблонам из пунктов 1 и 2, будет выполнена команда "cmd.exe /C {cmd}", результат команды будет отправлен на C2-сервер.

  • st {filepath} - выполнить запуск файла с помощью команды "cmd.exe {filepath}".

Важно отметить, что после выполнения каждой команды будет выполнен POST-запрос на C2-сервер с gateway /out, который будет содержать такой же шаблон JSON-объекта, который был получен от сервера при получении команды. Однако в поле "Response" будет добавлен результат команды, а в поле "Done", будет установлено значение 1.

Если полученная команда не совпадает с обрабатываемыми командами, на сервер будет отправлена ошибка: "ERROR: Input command incorrect!".

Во время анализа нам удалось получить несколько команд от управляющего сервера, что позволило установить, что атакующие предварительно профилируют жертву и решают, интересна ли она для развития атаки:

  • "ex dir";

  • "ex dir C:\\Users\\{USER}\\Desktop";

  • "ex arp -a";

  • "ex shutdown /t 0".

Рис. 4 – скриншот команд PhantomCore для профилирования жертвы, полученный из системы F.A.C.C.T. Managed XDR
Рис. 4 – скриншот команд PhantomCore для профилирования жертвы, полученный из системы F.A.C.C.T. Managed XDR

Индикаторы

  • Договор_на_поставку_обр_00694723_от_04_09_2024.rar

MD5: 0daf3c16f6941ced4ec87d2728c35579

SHA1: b007c49e0eaea34bffcaf3407b538d3127d2655e

SHA256: 76375264335bdc71e1b5273e56978f60ff27ad528eae16a0137d41a35f1ba052

  • Договор_на_поставку_обр_00694723_от_04_09_2024.pdf .exe

MD5: 4eed2d03a238df4b52182484cf4e6d9a

SHA1: e13bc13a628e44229faf7ee3bfa21da942e3a242

SHA256: dca85252d885882fb5eb38d21d48c44012f769a631114ea0c4bfc0f423d82c60

  • Договор_на_поставку_обр_00694723_от_04_09_2024.pdf - приманка

MD5: 679be90c870d468c8be97174c3150dc3

SHA1: 43e3011ccde9f6f3bfb6ce1dba70630c371c28ca

SHA256: 8687c337fdf5212fbcd6de6ade47a063a5cc9668db8acd95669d396e7b327198

  • hXXp://185.130.251[.]55/init 

  • hXXp://185.130.251[.]55/command

  • hXXp://185.130.251[.]55/check

  • hXXp://185.130.251[.]55/connect 

  • hXXp://185.130.251[.]55/out

  • hXXp://185.130.251[.]55/error

  • 185.130.251[.]55

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