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

Исследователь Патрик Уордл продемонстрировал успешную атаку на macOS Catalina через цепочку эксплойтов.

Некоторые пользователи компьютеров под управлением macOS до сих пор уверены, что их машины не нуждаются в защите. Что еще хуже — нередко такого же мнения придерживаются системные администраторы в компаниях, где сотрудники работают на машинах Apple.

На конференции Black Hat USA 2020 исследователь Патрик Уордл попробовал избавить слушателей от этого заблуждения, представив свой анализ недавно пойманных вредоносов под macOS и построив цепочку эксплойтов, позволяющую захватить контроль над компьютером Apple.

Microsoft, макросы и Маки

Один из самых распространенных методов атаки на компьютеры под управлением macOS — через документы с вредоносными макросами. То есть через пакет Microsoft Office. Несмотря на наличие у Apple собственных инструментов для работы с документами, многие пользователи предпочитают офисный пакет Microsoft — кто-то в силу привычки, а кто-то ради удобства коллег.

Разумеется, о потенциальной угрозе документов с вредоносными макросами давно известно. Поэтому и у Microsoft, и у Apple есть механизмы, которые должны защитить пользователя от них.

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

Что касается Apple, то в последней версии своей системы macOS Catalina компания представила несколько новых защитных технологий. В частности, файловый карантин и «нотариальное заверение» (notarization) — метод, который блокирует запуск кода, попавшего на компьютер из сторонних источников.

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

Цепочка эксплойтов для побега макроса из песочницы

На деле многие защитные механизмы реализованы достаточно странно, поэтому исследователи и злоумышленники могут найти методы их обхода. Патрик Уордл проиллюстрировал свой доклад цепочкой эксплойтов.

1. Обход отключения макросов

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

Это можно сделать, используя формат файла Sylk (.slk). В нем применяется язык макросов XLM, а сам он разработан в 80-е годы прошлого века, и его последнее обновление датировано 1986 годом. Тем не менее, Sylk до сих пор поддерживается в приложениях Microsoft (в частности, в Excel) из соображений обратной совместимости. Данная уязвимость не нова — ее подробно описали еще в 2019 году.

2. Побег из песочницы

Мы уже выяснили, что атакующий может запустить макрос незаметно для пользователя. Но ведь код все равно выполнится в изолированной песочнице MS Office — как это поможет атаковать компьютер? Оказывается, сбежать из песочницы Microsoft на Маке не так сложно.

Дело в том, что из песочницы нельзя изменять хранящиеся на компьютере файлы, но можно их создавать. Эту возможность уже использовали для побегов из песочницы, поэтому Microsoft вроде бы закрыла эту лазейку. Однако, как выяснилось при более пристальном рассмотрении патча, он не решал проблему, а лечил симптомы — просто блокировал создание файлов в определенных местах, которые разработчики сочли небезопасными. Таких, как папка LaunchAgents, куда сохраняются скрипты, предназначенные для автоматического запуска после перезагрузки.

Но кто сказал, что при создании патча в Microsoft учли все опасные места? Как выяснилось, при помощи скрипта на Python, запущенного из офисного документа и поэтому исполненного внутри песочницы, можно создать объект типа Login Item. Такой объект автоматически запустится от имени системы в следующий раз, когда пользователь залогинится. Таким образом, на него уже не будут распространяться ограничения, предусмотренные Microsoft.

3. Обход защитных механизмов Apple

Хорошо, теперь мы знаем, как тайно запустить макрос и создать объект Login Item. Но ведь защитные механизмы macOS все равно не позволят запустить бэкдор, поскольку он не доверенный, создан подозрительным процессом из песочницы и потому помещен в карантин, правильно?

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

Остается лишь правильно выбрать место, куда распаковать этот файл и откуда он исполнится автоматически. Например, его можно поместить в директорию с пользовательскими библиотеками на один шаг выше той, где должны храниться объекты типа Launch Agent (те самые, которые в Microsoft правильно сочли опасными). В сам архив можно поместить папку под названием LaunchAgents, в которой будет лежать скрипт Launch Agent.

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

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

Итого:

  • Атакующий может втайне от пользователя, без всяких предупреждений и вопросов, запустить вредоносный макрос, причем даже в том случае, если в настройках выполнение макросов отключено. Все, что для этого нужно — чтобы жертва скачала офисный файл и открыла его.
  • Далее можно сбежать из песочницы Microsoft Office и создать объект Login Item и архив с Launch Agent внутри, автоматически запускаемый при следующем входе в систему.
  • С помощью нехитрых манипуляций можно обойти защитные механизмы Apple, достать из архива объект типа Launch Agent и избавиться таким образом от недоверенности, а после этого загрузить и запустить «боевую» часть вредоносного кода.

Как защититься от вредоносных макросов в macOS

Разумеется, исследователь сообщил о своих находках и в Apple и в Microsoft, и обе компании молча исправили недочеты, не афишируя их и даже не присвоив уязвимостям официальные идентификаторы CVE. Но эта ситуация в целом свидетельствует, что вполне реально найти методы обхода защитных механизмов, если хорошенько их изучить.

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

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

Советы

Как отключить слежку в iOS?

У вас есть iPhone, iPad или iPod? Потратьте несколько минут на настройку служб геолокации, чтобы сэкономить заряд батареи и сохранить конфиденциальность перемещений.