Пригоди невловимої малварі, частина IV: DDE та поля документа Word

Пригоди невловимої малварі, частина IV: DDE та поля документа Word

Ця стаття є частиною серії "Fileless Malware". Всі інші частини серії:

У цій статті я збирався поринути в ще складніший багатоетапний сценарій безфайлової атаки із закріпленням у системі. Але тут я натрапив на неймовірно просту атаку без коду – не потрібно ніяких макросів Word чи Excel! І це набагато ефективніше доводить мою початкову гіпотезу, яка лежить в основі цієї серії статей: подолати зовнішній периметр будь-якої організації – зовсім нескладне завдання.

Перша атака, яку я опишу, використовує вразливість Microsoft Word, яка заснована на застарілому протокол динамічного обміну даними (DDE). Вона вже була виправлена. Друга використовує більш загальну вразливість у Microsoft COM та можливості передачі об'єктів.

Назад у майбутнє з DDE

Хто ще пам'ятає DDE? Ймовірно, мало хто. Це був один із перших протоколів взаємодії між процесами, який дозволяв додаткам та пристроям передавати дані.

Я сам трохи знайомий з ним, тому що раніше я перевіряв та тестував телеком-обладнання. У той час DDE дозволяв, наприклад, передавати для операторів кол-центрів ідентифікатор абонента в CRM додаток, який зрештою відкривав картку клієнта. Для цього ви повинні були підключити кабель RS-232 між телефоном та комп'ютером. Ось були дні!

Як виявилося, Microsoft Word все ще підтримує DDE.

Що робить цю атаку ефективною без коду, так це те, що ви можете отримати доступ до протоколу DDE безпосередньо з автоматичних полів документа Word (знімаю капелюх перед SensePost за дослідження та публікації про це).

Коди полів – це ще одна давня функція MS Word, яка дозволяє додавати динамічний текст та трохи програмування до документа. Як очевидний приклад можна навести поле «номер сторінки», який можна вставити в нижній колонтитул за допомогою значення {PAGE *MERGEFORMAT}. Це дозволяє автоматично генерувати номери сторінок.

Пригоди невловимої малварі, частина IV: DDE та поля документа Word
Підказка: ви зможете знайти пункт меню Поле (Field) у розділі Вставка (Insert)

Я пам'ятаю, що коли вперше виявив цю можливість у Word, то був вражений. І ось доки патч не відключив її, Word так і підтримував параметр полів DDE. Ідея полягала в тому, що DDE дозволить Word спілкуватися з програмою безпосередньо, для можливості потім передати вихідні дані програми в документ. Це була дуже молода технологія на той час – підтримка обміну даними із зовнішніми додатками. Пізніше вона була розвинена у технології COM, яку ми також розглянемо нижче.

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

Пригоди невловимої малварі, частина IV: DDE та поля документа Word
Дякую Windows за спливаюче попередження, що вбудоване поле DDEAUTO потай намагається запустити оболонку

Переважним методом експлуатації вразливості є використання варіанта з полем DDEAUTO, який автоматично запускає сценарій при відкритті документ Word.
Давайте подумаємо, що із цим можна зробити.

Як початківець хакер, ви можете, наприклад, відправити фішингове лист, вдавши, що ви з ФНП, і вбудувати поле DDEAUTO зі скриптом PS для першого етапу (дропер по суті). Причому вам навіть не потрібно робити ніякого реального кодування макросів тощо, як я це робив у попередня стаття.
Жертва відкриває ваш документ, вбудований скрипт активується, і хакер виявляється усередині комп'ютера. У моєму випадку віддалений сценарій PS лише друкує повідомлення, але він може легко запустити клієнт PS Empire, який надасть віддалений доступ до оболонки.
І перш, ніж жертва встигне вимовити хоч щось, хакери виявляться найбагатшими підлітками на селі.

Пригоди невловимої малварі, частина IV: DDE та поля документа Word
Оболонка була запущена без найменшого кодування. Навіть дитина зможе це зробити!

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:Windowssystem32Printing_Admin_Scripts. До речі, є й інші утиліти Windows, які приймають об'єкти як параметри. Спочатку розглянемо цей приклад.

Пригоди невловимої малварі, частина IV: DDE та поля документа Word
Цілком природно, що оболонку можна запустити навіть зі сценарію друку. Вперед, Microsoft!

Як тестування я створив простий віддалений скриптлет, який запускає оболонку та друкує кумедне повідомлення «Вас щойно проскриптували!». По суті pubprn створює екземпляр об'єкта scriptlet, дозволяючи коду VBScript запустити оболонку. Даний метод надає явні переваги хакерам, які хочуть непомітно проникнути та сховатися у вашій системі.

У наступному пості поясню, як скриптлети COM можуть бути використані хакерами з допомогою таблиць Excel.

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

Джерело: habr.com

Додати коментар або відгук