Varonis Systems corporate blog
Information Security
Programming
PowerShell
Visual Basic for Applications
18 July

Приключения неуловимой малвари, часть IV: DDE и поля документа Word

Original author: Andy Green
Translation


Эта статья является частью серии «Fileless Malware». Все остальные части серии:


В этой статье я собирался погрузиться в еще более сложный многоэтапный cценарий безфайловой атаки с закреплением в системе. Но тут я наткнулся на невероятно простую атаку без кода — не требуется никаких макросов Word или Excel! И это гораздо более эффективно доказывает мою изначальную гипотезу, лежащую в основе этой серии статей: преодолеть внешний периметр любой организации – совсем несложная задача.

Первая атака, которую я опишу, использует уязвимость Microsoft Word, которая основана на устаревшем протоколе динамического обмена данными (DDE). Она уже была исправлена. Вторая использует более общую уязвимость в Microsoft COM и возможности передачи объектов.

Назад в будущее с DDE


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

Я сам немного знаком с ним, потому что раньше я проверял и тестировал телеком-оборудование. В то время DDE позволял, например, передавать для операторов колл-центров идентификатор звонящего абонента в CRM приложение, которое в конечном итоге открывало карточку клиента. Для этого вы должны были подключить кабель RS-232 между телефоном и компьютером. Вот были деньки!

Как оказалось, Microsoft Word все еще поддерживает DDE.

Что делает эту атаку эффективной без кода, так это то, что вы можете получить доступ к протоколу DDE непосредственно из автоматических полей документа Word (снимаю шляпу перед SensePost за исследования и публикации об этом).

Коды полей – это еще одна древняя функция MS Word, которая позволяет добавлять динамический текст и немного программирования в документ. В качестве самого очевидного примера можно привести поле «номер страницы», который можно вставить в нижний колонтитул с помощью значения {PAGE \*MERGEFORMAT}. Это позволяет автоматическим образом генерировать номера страниц.


Подсказка: вы сможете найти пункт меню Полe (Field) в разделе Вставка (Insert)

Я помню, что когда впервые обнаружил эту возможность в Word, то был поражен. И вот пока патч не отключил ее, Word так и поддерживал параметр полей DDE. Идея состояла в том, что DDE позволит Word общаться с приложением напрямую, для возможности затем передать выходные данные программы в документ. Это была совсем юная технология в то время – поддержка обмена данными с внешними приложениями. Позже она была развита в технологии COM, которую мы также рассмотрим ниже.

В итоге, хакеры поняли, что этим приложением DDE может быть командная оболочка, которая, конечно же, запускает PowerShell, а оттуда хакеры могут делать всё, что им угодно.
На скриншоте ниже видно, как я использовал данную скрытную технику: маленький сценарий PowerShell (далее – PS) из поля DDE загружает другой PS скрипт, который запускает вторую фазу атаки.


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

Предпочтительным методом эксплуатации уязвимости является использование варианта с полем DDEAUTO, которое автоматически запускает сценарий при открытии документа Word.
Давайте подумаем, что с этим можно сделать.

Как начинающий хакер, вы можете, например, отправить фишинговое письмо, притворившись, что вы из ФНС, и встроить поле DDEAUTO со скриптом PS для первого этапа (дроппер по сути). Причем вам даже не нужно делать никакого реального кодирования макросов и пр., как я это делал в предыдущей статье.
Жертва открывает ваш документ, встроенный скрипт активируется, и хакер оказывается внутри компьютера. В моем случае удаленный сценарий PS лишь печатает сообщение, но он может также легко запустить клиент PS Empire, который предоставит удаленный доступ к оболочке.
И прежде, чем жертва успеет произнести хоть что-то, хакеры окажутся самыми богатыми подростками на селе.


Оболочка была запущена без малейшего кодирования. Даже ребенок сможет это сделать!

DDE и поля


Позже Microsoft все-таки отключила DDE в Word, но перед этим компания заявила, что эта функция была просто неправильно использована. Их нежелание что-то менять понятно. Из своего опыта я сам наблюдал такой пример, что обновление полей при открытии документа было включено, но макросы Word были отключены ИТ-службой (но с показом уведомления). Кстати, соответствующие параметры вы сможете найти в разделе настроек Word.

Однако, даже если обновление полей включено, Microsoft Word дополнительно уведомляет пользователя, когда поле запрашивает доступ к удаленным данным, как в случае с DDE выше. Microsoft действительно предупреждает вас.

Но скорее всего, пользователи все равно пропустят это предупреждение и активируют обновление полей в Word. Это одна из редких возможностей поблагодарить Microsoft за отключение опасной функции DDE.

Насколько трудно сегодня найти непропатченную систему Windows?

Для этого тестирования я использовал среду AWS Workspaces для получения доступа к виртуальному рабочему столу. Таким образом я получил непропатченную виртуальную машину с MS Office, которая позволила мне вставить поле DDEAUTO. Не сомневаюсь, что подобным же образом можно найти и другие компании, которые до сих пор не установили нужные патчи безопасности.

Тайна предметов


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

Чтобы понять этот сценарий, давайте вспомним Модель компонентного объекта Microsoft, или сокращенно COM (Component Object Model).

COM существует с 1990-х годов, и определяется как «нейтральная к языку программирования объектно-ориентированная модель компонентов» на основе удаленных вызовов процедур RPC. Для общего понимания терминологии COM прочтите этот пост на StackOverflow.

По большому счету, вы можете представить приложение COM как исполняемый файл Excel или Word, или какой-либо другой запускаемый бинарный файл.

Оказывается, COM-приложение также может запускать сценарий — JavaScript или VBScript. Технически это называется скриптлет. Возможно, вы встречали расширение.sct у файлов в Windows – это и есть официальное расширение для скриплетов. По сути, они являются кодом скрипта, заключенного в XML обертку:

<?XML version="1.0"?>

<scriptlet>
<registration
description="test"
progid="test"
version="1.00"
classid="{BBBB4444-0000-0000-0000-0000FAADACDC}"
remotable="true">
</registration>
<script language="JScript">
<![CDATA[

var r = new ActiveXObject("WScript.Shell").Run("cmd /k powershell -c Write-Host You have been scripted!");

]]>
</script>
</scriptlet>

Хакеры и пентестеры обнаружили, что есть отдельные утилиты и приложения в Windows, которые принимают COM-объекты и, соответственно, скриптлеты тоже.

Я могу передать скриптлет в утилиту Windows, написанную на VBS, известную как pubprn. Она находится в недрах C:\Windows\system32\Printing_Admin_Scripts. Кстати, есть и другие утилиты Windows, которые принимают объекты в качестве параметров. Для начала рассмотрим этот пример.


Вполне естественно, что оболочку можно запустить даже из сценария печати. Вперед, Microsoft!

В качестве тестирования я создал простой удаленный скриптлет, который запускает оболочку и печатает забавное сообщение «Вас только что проскриптовали!». По сути, pubprn создает экземпляр объекта scriptlet, позволяя коду VBScript запустить оболочку. Данный метод предоставляет явные преимущества хакерам, которые хотят незаметно проникнуть и спрятаться в вашей системе.

В следующем посте я объясню, как скриптлеты COM могут быть использованы хакерами с помощью таблиц Excel.

Вам в качестве домашней работы – посмотреть это видео с Derbycon 2016 года, которое объясняет, как именно хакеры использовали скриптлеты. А также прочитать эту статью про скриптлеты и какой-то моникер.

+10
2.4k 32
Comments 1
Top of the day