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

Динамический обмен данными (DDE)

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

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

DDE состоит из различных сообщений для взаимодействия, таких как Poke, Request, Advise & Execute. каждый со своим назначением и использованием, поток DDE выглядит так:

MSWord как клиент DDE

То, что произошло с опубликованными атаками, - это DDE, который используется в Word, Excel и других в качестве клиента, сообщая ему (используя формулу DDE), например, следующее:

cmd!”/c notepad”!A0
{DDEAUTO c:\\windows\\system32\\cmd.exe "/k calc.exe"  }

поэтому формула сообщает процессу подключиться к несуществующему серверу DDE с именем CMD с темой «/ c notepad», операция завершается ошибкой, и процесс запускает ее, запустив cmd.exe и передав тему в качестве параметра, CMD выполняет тема отсюда и выполнение команды.

После нажатия «Да» MSWord снова пытается инициировать сеанс DDE с вновь созданным cmd, терпит неудачу и показывает это предупреждающее сообщение, чтобы указать, что - после того, как RCE произошло в любом случае -.

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

MSWord как сервер DDE

Несмотря на то, что DDE заменяется другими методами для RPC, древний сервер DDE все еще существует в офисных продуктах, обеспечивая интеграцию с другими системами и формами, каждый продукт имеет свой собственный сервер со своими Темами и ожидает сообщений, когда продукт будет начал.

Пытаясь отправить несколько сообщений DDE, я заметил, что WinWord -Word DDE server- странным образом отвечает на сообщения WM_DDE_EXECUTE.

если вы отправите серверу WinWord сообщение по теме «Система», он разместит его прямо в активном листе, но - пусть начинается самое интересное - если вы заключили сообщение в квадратные скобки [], Word поместит сообщение в макрос-функцию TmpDDE () внутри модуль под названием WordTmpDDEMod и выполняет его.

это означает, что если бы мы могли запустить выполнение DDE с помощью MSWord, мы могли бы внедрить наш собственный код и выполнить его в процессе Word.exe.

Для этого я использовал клиент DDE Дэвида Нейлора на питоне для отправки кода выполнения, а затем выяснил, что есть другие инструменты командной строки, такие как CMCDDE и другие, которые вы можете использовать для той же цели.

теперь, если вы пытались отправить обычный код VB, Word сделает следующее:

  • он дополняет функцию вроде CreateObject суффиксом __.
  • он добавляет к известным функциям, таким как MsgBox, префиксы WordBasic. , что делает большинство функций бесполезными.
  • он заменяет некоторые точки запятыми, также определяет неопределенные переменные.

так что допустимая команда, например:

[CreateObject («Wscript.Shell»). Запустить «Блокнот»]

преобразуется в это:

CreateObject ___ («Wscript.Shell»), запустите «Блокнот»

что дает синтаксическую ошибку, так как не распознает эту функцию, или "," не совсем корректно.

после некоторых попыток найти работающий код со старым «При ошибке возобновить следующее» я понял, что WordBasic.Shell является допустимой функцией, поэтому отправив:

[оболочка «блокнот»]

Word приступит к его выполнению как:

WinWord.Shell («блокнот»)

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

в текущем состоянии этот метод работает только как полезная нагрузка 2-го уровня, поскольку для него требуется, чтобы Word был запущен, и клиент DDE, которым мы можем управлять своим сервером, темой и данными, которые мы отправляем в Word.

Я также пробовал это со сценариями вроде:

  • запустите клиент DDE как гостевую учетную запись в том же сеансе администратора: Успешно.
  • запустите клиент DDE как другую учетную запись удаленно, используя psexc: Successful.

Проблема с вышеуказанными методами заключается в том, что обмен сообщениями Windows не работает между сеансами / рабочими столами, поэтому вам понадобится учетная запись Admin | SYSTEM для выполнения в других сеансах - это меньшее, что вы будете учитывать -.

Я просканировал свой компьютер -Win10x64 с Office16- на наличие exe / dll, которые используют DdeClientTransaction и связанные с ним API, и нашел только следующие:

  • shell32.dll: думаю, для запуска приложений с / ddeexec.
  • twain_32.dll: я понятия не имею, для чего здесь используется клиент DDE.
  • vbe7.dll и msvbvm60.dll: для сценариев DDE в VBA.
  • ieframe.dll: я могу подробнее изучить здесь и проверить путь его выполнения.

Было весело читать документы и статьи по DDE, особенно файл справки Word95 wrdbasic .. Я надеюсь, что эта статья куда-то приведет других. Особая благодарность Этьену Стальмансу и Саифу Эль-Шери за их работу.

хорошего дня.