Салют, Хабр! На связи Павел Максютин и Шаих Галиев из отдела экспертизы PT Sandbox антивирусной лаборатории PT ESC (экспертного центра безопасности Positive Technologies).

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

Хакеры использовали сложную схему сокрытия вредоносной нагрузки в архивах-полиглотах. Полиглоты — это файлы, которые могут быть валидны с точки зрения спецификации нескольких форматов. Сама вредоносная нагрузка является новой обфусцированной вариацией инструмента PhantomRShell, который использует группировка PhantomCore. Ее деятельность была ранее исследована нашими коллегами из департамента киберразведки PT ESC.

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

Таймлайн

В открытых системах агрегации сведений о ВПО информация о семплах появилась только утром 25 августа.

Дата обнаружения ВПО на сайте VirusTotal
Дата обнаружения ВПО на сайте VirusTotal

И через сутки после появления информации он все еще не обнаруживался большинством популярных антивирусных решений.

Обнаружения семпла на 26 августа (их очень мало)
Обнаружения семпла на 26 августа (их очень мало)

­­­­­­­Благодаря возможностям поведенческого анализа PT Sandbox смогла задетектировать новый вредонос еще вечером 24 августа — именно в тот момент, когда началась атака на российские организации с его использованием. По нашим данным, злоумышленники атаковали оборонные и промышленные предприятия, а также банковский сектор.

Рассмотрим действия злоумышленников пошагово.

Подробное описание атаки

Схема атаки
Схема атаки

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

Письмо не содержит признаков фишинга, поэтому вполне может обойти средства защиты почты. Вложение содержит архив. Но на самом деле это не просто архив, а файл-полиглот, состоящий из трех последовательно склеенных файлов разных типов: DLL, PDF и ZIP-архив. Рассмотрим подробно эти файлы.

16 нулевых байтов и начало DLL-файла
16 нулевых байтов и начало DLL-файла
Начало PDF-файла
Начало PDF-файла
Начало данных ZIP-архива
Начало данных ZIP-архива

Из-за особенности формата ZIP при распаковке сигнатура ищется по всему файлу, поэтому такой файл будет корректным архивом, а «приклеенные» к нему файлы останутся незамеченными. Такой трюк позволяет злоумышленникам обойти статические анализаторы, которые не проводят глубокую проверку содержимого файла.

В архиве лежит LNK-файл «Задание_на_оценку_N_2046_от_05_августа_2025_года.pdf.lnk», маскирующийся под PDF-формат для обмана жертвы. Задача LNK-файла заключается в закреплении в системе через подмену ключа InProcServer32 реестра COM-объекта PSFactoryBuffer. Эта техника закрепления особенно примечательна и не была зафиксирована в других подобных атаках. Наша песочница такое поведение обнаруживает следующим правилом.

Срабатывание правила на перехват COM-объектов
Срабатывание правила на перехват COM-объектов

 Таким образом, DLL злоумышленника будет загружена во все процессы, которые используют данный COM-объект, — браузеры, почтовые клиенты, explorer.exe.

Процессы с загруженной npmproxy.dll
Процессы с загруженной npmproxy.dll

Затем из «архива» на диск записываются следующие файлы:

C:\programdata\winnt64_.dll  (d585aa73d28af621abcef44ae024fde62366c29f5730a3cb31ff3c8bb5eb84a8)
С:\sponge-bob\exe-zip-injector\Задание_на_оценку_N_2046_от_05_августа_2025_года.pdf (ae2c4a0beb4b6d8042b88b3c921fefe0a1436b1e3b23ada9b26e20c069897ec9)

Что можно заметить в коде ярлыка:

Код в LNK-файле
Код в LNK-файле

PDF-файл представляет собой имитацию либо реальный документ для отвлечения внимания.

Содержимое PDF-файла
Содержимое PDF-файла

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

Подключение к управляющему серверу в нашей песочнице
Подключение к управляющему серверу в нашей песочнице

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

Сетевые детекты нашей песочницы на рассматриваемое ВПО
Сетевые детекты нашей песочницы на рассматриваемое ВПО

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

Многие константы, такие как С2, стали расшифровываться динамически.

Расшифровка адреса управляющего сервера
Расшифровка адреса управляющего сервера

Подробнее про подобные способы обфускации строк можно почитать в различных источниках, например тут: https://gist.github.com/EvanMcBroom/ace2a9af19fb5e7b2451b1cd4c07bf96

А указатели на функции хранятся в неявном виде и вычисляются перед вызовом.

Обфусцированные указатели в интерфейсе дизассемблера
Обфусцированные указатели в интерфейсе дизассемблера

Функционал этого вредоноса вполне стандартный в рамках этого семейства: инструмент позволяет злоумышленнику удаленно выполнять произвольный код.

Код выполнения произвольной команды
Код выполнения произвольной команды

А также скачивать произвольные файлы с компьютера жертвы.

Код скачивания произвольного файла
Код скачивания произвольного файла

Иными словами, бэкдор может привести к полной компрометации инфраструктуры жертвы и похищению конфиденциальной информации.

Но как злоумышленникам удалось отправить эту нагрузку от легитимного отправителя?

Как мы выявили возможную атаку на отправителя

В заголовках одного из отправленных злоумышленниками писем с вредоносным вложением виден его путь через существующие почтовые серверы отправителя — спуфинга или отправки с иного внешнего сервера не происходило. То есть исходящее письмо прошло путь внутри компании и было отправлено через интернет: exch-05.<SENDER>.local (<SENDER-LOCAL-IP>) -SMTP-> exch-05 (<SENDER-LOCAL-IP>) -NAT->  mx.<SENDER>.ru (<SENDER-PUBLIC-IP>) -smtp-> mx-01.<VICTIM>.ru:   

Received: from mx-01.<VICTIM>.ru (mx-01.<VICTIM> [<VICTIM-PUBLIC-IP>])
  (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
   key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
  (No client certificate requested)
  by <VICTIM> (Postfix) with ESMTPS
  for <<VICTIM-EMAIL>@<VICTIM>.ru>; Mon, 25 Aug 2025 02:40:55 +0300 (MSK)
Authentication-Results: mx-01.<VICTIM>.ru;
  iprev=pass (mx.<SENDER>.ru) smtp.remote-ip=<SENDER-PUBLIC-IP>;
  dkim=pass header.d=<SENDER>.ru header.s=dkim header.a=rsa-sha256;
  dmarc=pass header.from=<SENDER>.ru
Received: from mx.<SENDER>.ru ([<SENDER-PUBLIC-IP>])
  by mx-01.<VICTIM>.ru with esmtps  (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  (Exim 4.98.2)
  (envelope-from <<SENDER-EMAIL>@<SENDER>.ru>)
  for <VICTIM-EMAIL>@<VICTIM>.ru;
  Mon, 25 Aug 2025 02:40:55 +0300
Content-Type: multipart/mixed;
  boundary="--boundary_5920_85f5dbea-3cb3-424d-be37-64b1b89be9ba"
DKIM-Signature: v=1; a=rsa-sha256; d=<SENDER>.ru; s=dkim; c=simple/simple;
<...>
Received: from exch-05 (<SENDER-LOCAL-IP>) by exch-05.<SENDER>.local
 (<SENDER-LOCAL-IP>) with Microsoft SMTP Server id 15.0.1473.3; Mon, 25 Aug 2025
 02:40:55 +0300

Как видно, в письме уже указана версия почтового сервера отправителя — 15.0.1473.3. Но даже если бы у нас не было тела письма, можно было бы найти ее другим образом.

Узел mx.<SENDER>.ru является единственным MX-сервером, опубликованным в DNS:

; <<>> Net::DNS::Dig 0.12 <<>> -t mx <SENDER>.ru.
;;
;; Got answer.
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28754
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;<SENDER>.ru.		IN	MX

;; ANSWER SECTION:
<SENDER>.ru.	424	IN	MX	 10 mx.<SENDER>.ru.

;; Query time: 22 ms
;; SERVER: 8.8.8.8# 53(8.8.8.8)
;; WHEN: Tue Aug 26 01:34:08 2025
;; MSG SIZE rcvd: 46 -- XFR size: 2 records

Указанный почтовый сервер при обращении по SMTP представляется как MS Exchange:

220 exch-05.<SENDER>.local Microsoft ESMTP MAIL Service ready at Tue, 26 Aug 2025 11:37:01 +0300 [221 ms]
EHLO mx.test.ru
250-exch-05.<SENDER>.local Hello [<CHECKER-IP>]
<...>

При переходе на указанный узел открывается OWA:

Веб-интерфейс Outlook сервера отправителя
Веб-интерфейс Outlook сервера отправителя

На этом этапе у нас появилась гипотеза, что почтовый сервер подвергся распространенным атакам на Exchange: ProxyShell, ProxyLogon и так далее. Как проверить эту гипотезу?

В коде этой страницы отображается версия продукта — 15.0.1473.

Исходный код страницы аутентификации
Исходный код страницы аутентификации

Согласно таблице версий MS Exchange, есть соответствие двум релизам:

Exchange Server 2013 CU22 Mar21SU March 2, 2021 15.0.1473.6 15.00.1473.006
Exchange Server 2013 CU22 February 12, 2019 15.0.1473.3 15.00.1473.003

Указанные версии Exchange имеют ряд уязвимостей, позволяющих осуществить удаленное выполнение кода, например CVE-2022-41082.

Exchange Versions Vulnerable to CVE-2022-41080/CVE-2022-41082
2019
15.2.1118.15 - 15.2.1118.7 <-- strict match of all 4 numbers required
15.2.986.30 - 15.2.986.5 <-- strict match of all 4 numbers required
15.2.922.27 - 15.2.196.0 (anything less than or equal to 15.2.922 ) 
^^^ looser match of the first 3 numbers is required
2016
15.1.2507.13 - 15.1.2507.6 <-- strict match of all 4 numbers required
15.1.2375.32 - 15.1.2375.7 <-- strict match of all 4 numbers required
15.1.2308.27 - 15.1.225.16 (anything less than or equal to 15.1.2308) 
^^^ looser match of the first 3 numbers is required
2013
15.0.1497.31 - 15.0.1497.2 <-- strict match of all 4 numbers required
15.0.1473.6 - 15.0.516.32 (anything less than or equal to 15.0.1473)
^^^ looser match of the first 3 numbers is required

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

Как защититься

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

  1. Перенести почтовые серверы за межсетевой экран для осуществления доступа по HTTPS только через корпоративный VPN.

  2. Обновить MS Exchange до актуальных версий.

  3. Убедиться, что почта защищена минимально необходимым для безопасности средством защиты — почтовым шлюзом с функционалом антиспама, антифишинга, набором фильтров и антивирусными движками.

  4. Если нужно использовать OWA — осуществлять публикацию через межсетевой экран уровня веб-приложений (WAF).

А для защиты от подобных атак необходимо:

  1. Использовать не только базовую защиту почты, но и полнофункциональное решение, включающее в себя песочницу, которая настроена на активную блокировку писем с обнаруженными угрозами, то есть стоит «в разрыв» почтового трафика.

  2. Проверять не только входящие, но и исходящие/внутренние письма.

  3. Отказаться от белых списков отправителей.

Индикаторы компрометации

Название

Индикатор

Исходный архив-полиглот

66dd68177a5b31159579cfcab558771097d753a17b63c1cbf4dadc2f5c4f0e2e

5265332860d0c81a5687f75d836441e5e1f45eb98e6dea6e3d8830d70c97783a

LNK-файл

b9579e65e5499be393cf182496103941a006479ff8b41c0ad3b57b1d678d9794

Вредоносная DLL

d585aa73d28af621abcef44ae024fde62366c29f5730a3cb31ff3c8bb5eb84a8

PDF-документ для отвлечения внимания

ae2c4a0beb4b6d8042b88b3c921fefe0a1436b1e3b23ada9b26e20c069897ec9

C2

31.58.171.246

31[.]57.61.137

Путь к бэкдору в скомпрометированной системе

C:\ProgramData\winnt64_.dll

Путь к PDF-decoy-файлу в скомпрометированной системе

C:\sponge-bob\exe-zip-injector\Задание_на_оценку_N_2046_от_05_августа_2025_года.pdf