Передачи и приема данных по dde связи например слияние с программами ms office например winword
Продукты корпорации Microsoft поддерживают протокол динамического обмена данными - DDE (протокол - правила при коммуникациях). С использованием папки обмена CLIPBRD.EXE выполняются DDE -связи в компьютерной сети (стартует сетевая DDE -служба), при этом данные должны быть сделаны доступными - должен быть реализован общий доступ . В процессе обмена данными устанавливаются связи между папками обмена удалeнных компьютеров; данные буфера обмена должны находиться на страницах папки обмена. Такая связь может быть реализована и средствами Visual Basic . Приложения могут выполнять как роль клиента, запрашивающего и принимающего данные, так и роль сервера - источника данных.
Технология обмена данными между приложениями развита до такого уровня, что данные не нужно заново копировать - они после их изменения автоматически передаются через DDE - связь . OLE - следующий этап разработок в области обмена данных. Это технология связи программ, обеспечивающая приложениям совместное использование данных. Технология OLE поддерживается с помощью внедрённых и связанных объектов . Развитие OLE - это технология ActiveX.
Рассмотрим примеры использования Microsoft Access в роли сервера DDE для приложения-клиента, запрашивающего и принимающего даные по каналу связи DDE . Сеанс связи начинается с открытия канала связи; при этом используется функция DDEInitiate, в аргументе которой перечисляются: имя приложения ( база данных Access), имя файла базы данных , имя таблицы ; пример: intChan1 = DDEInitiate("MSAccess", "C:\Winnt\Profiles\Administrator\dde6;TABLE dde1")
После этого становится возможной передача данных в другое приложение по этому каналу. Для передачи требования на пересылку, например, текстовых данных из приложения-сервера по открытому каналу DDE используется функция DDERequest , в аргументе которой указывается номер канала связи и сформулирован запрос , пример: strResp1 = DDERequest(intChan1, "All") . После окончания передачи данных нужно вызвать в приложении-клиенте функцию DDETerminate для закрытия текущего канала обмена или функцию DDETerminateAll для закрытия всех каналов связи.
Практическая работа 40. DDE
40а. DDE. Простейший пример обмена данными
Задание: записать в файл результат запроса к данным таблицы базы данных (Access).
- создать базу данных (здесь - dde6), таблицу (здесь - dde1), сделать запрос, закрыть приложение Access,
- создать макрос в приложении Word, код макроса дан ниже,
- стартовать макроc; в результате его выполнения стартует закрытое ранее приложение Access,
- открыть файл dde61.txt (в редакторе Блокнот).
Содержимое полученного файла dde61.txt - это результат запроса ("All"): вывести всeсодержимое таблицы базы данных, рис. 6.1.
Рис. 6.1. Простейший пример DDE; данные, выводимые в файл
40в. DDE
Приводится аналогичный пример; создаются 4 таблицы: student, (рис. 6.2, рис. 6.3) stipendija, sessija, prikaz; выполняются 4 запроса (рис. 6.4, рис. 6.5), создается макрос в приложении Word (см. код, данный ниже), открываются 4 канала связи, результаты 4-х запросов по 4-м каналам связи выводятся в файлы dde621 - dde624. Пояснения к коду макроса:
Эта статья является частью серии «Fileless Malware». Все остальные части серии:
Кто-нибудь еще помнит DDE? Вероятно, немногие. Это был один из первых протоколов взаимодействия между процессами, который позволял приложениям и устройствам передавать данные.
Я сам немного знаком с ним, потому что раньше я проверял и тестировал телеком-оборудование. В то время DDE позволял, например, передавать для операторов колл-центров идентификатор звонящего абонента в CRM приложение, которое в конечном итоге открывало карточку клиента. Для этого вы должны были подключить кабель RS-232 между телефоном и компьютером. Вот были деньки!
Как оказалось, Microsoft Word все еще поддерживает DDE.
Что делает эту атаку эффективной без кода, так это то, что вы можете получить доступ к протоколу DDE непосредственно из автоматических полей документа Word (снимаю шляпу перед SensePost за исследования и публикации об этом).
Коды полей – это еще одна древняя функция MS Word, которая позволяет добавлять динамический текст и немного программирования в документ. В качестве самого очевидного примера можно привести поле «номер страницы», который можно вставить в нижний колонтитул с помощью значения . Это позволяет автоматическим образом генерировать номера страниц.
Подсказка: вы сможете найти пункт меню Полe (Field) в разделе Вставка (Insert)
Я помню, что когда впервые обнаружил эту возможность в Word, то был поражен. И вот пока патч не отключил ее, Word так и поддерживал параметр полей DDE. Идея состояла в том, что DDE позволит Word общаться с приложением напрямую, для возможности затем передать выходные данные программы в документ. Это была совсем юная технология в то время – поддержка обмена данными с внешними приложениями. Позже она была развита в технологии COM, которую мы также рассмотрим ниже.
В итоге, хакеры поняли, что этим приложением DDE может быть командная оболочка, которая, конечно же, запускает PowerShell, а оттуда хакеры могут делать всё, что им угодно.
На скриншоте ниже видно, как я использовал данную скрытную технику: маленький сценарий PowerShell (далее – PS) из поля DDE загружает другой PS скрипт, который запускает вторую фазу атаки.
Спасибо Windows за всплывающее предупреждение, о том что встроенное поле DDEAUTO скрытно пытается запустить оболочку
Предпочтительным методом эксплуатации уязвимости является использование варианта с полем DDEAUTO, которое автоматически запускает сценарий при открытии документа 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 обертку:
Хакеры и пентестеры обнаружили, что есть отдельные утилиты и приложения в Windows, которые принимают COM-объекты и, соответственно, скриптлеты тоже.
Я могу передать скриптлет в утилиту Windows, написанную на VBS, известную как pubprn. Она находится в недрах C:\Windows\system32\Printing_Admin_Scripts. Кстати, есть и другие утилиты Windows, которые принимают объекты в качестве параметров. Для начала рассмотрим этот пример.
В следующем посте я объясню, как скриптлеты COM могут быть использованы хакерами с помощью таблиц Excel.
Вам в качестве домашней работы – посмотреть это видео с Derbycon 2016 года, которое объясняет, как именно хакеры использовали скриптлеты. А также прочитать эту статью про скриптлеты и какой-то моникер.
Приложение, с данными которого требуется установить связь, должно поддерживать динамический обмен данными (DDE).
1 Выделите ячейку, из которой требуется создать связь.
2 Введите формулу, используя следующие синтаксис: имя приложения; имя документа или раздела документа; диапазон ячеек, значение, поле или данные, на которые сделана ссылка.
Приведенный ниже пример иллюстрирует различные части формулы с удаленными ссылками и используемые в ней разделители.
Знак (|) разделяет имя программы и имя документа или раздела. Восклицательный знак (!) отделяет имя документа или раздела от диапазона, значения поля или данных, на которые установлена ссылка.
3 Нажмите клавишу ENTER.
Примечание. Если имя приложения, документа, раздела или элемента данных содержит пробелы или специальные знаки формул, например двоеточие (:) или знак минуса (–), либо если имя имеет вид ссылки на ячейку, заключите его в апострофы
Пример1. Для связи с элементом (переменная x в рабочем пространстве MATLAB) через раздел Engine приложения MATLAB введите в ячейку Excel формулу:
=MATLAB|Engine!'x'
- При изменении значения переменной x в MATLAB содержимое ячейки Excel автоматически не обновляется. Для обновления значения требуется выделить данную ячейку и нажать клавишу <Enter>.
- Если x –матрица, то в ячейку Excel будет передан только элемент x(1,1).
Использование Visual Basic для MATLAB Сервера DDE
Связь осуществляется с помощью макросов на Visual Basic for Applications (VBA) с использованием методов (функций и процедур для объектов ):
Инициализация канала связи (VBA DDEInitiate метод)
Открывает DDE канал с приложением и возвращает номер канала.
DDEInitiate(App, Topic)
App (Тип- String). Имя приложения.
Topic (Тип- String). Имя раздела.
Пример1.Открывает канал связи с разделом Engine приложения MATLAB.
lngChannel = Application.DDEInitiate(App:="MATLAB", Topic:="Engine")
Открывает канал связи с разделом документ Word с именем на диске C:\WINWORD\FORMLETR.DOC приложения MS Word.
channelNumber = Application.DDEInitiate( _
Посылка команд к MATLAB для выполнения (VBA DDEExecute метод)
Клиенты посылают команды MATLAB, используя DDE операцию DDEExecute,
Application.DDEExecute(Channel, Command)
Application.DDEExecute Channel, Command
Channel (Тип- Long). Номер канала, установленный с помощью метода DDEInitiate.
Command (Тип- String). Команда имеющая смысл приложении, куда посылается.
Пример1: Передача в MATLAB на выполнение команды присвоения значений матрице
Организуем запрос реальных значений каналов узла разработанного проекта приложением MS Windows в качестве, которого выберем книгу MS Excel. Для этого выполним:
· запуск приложения MS Excel;
· запишем в двух ячейках первого столбца запросы на получение данных:
=RTM0|GET!Параметр
=RTM0|GET!Управление
где 0 – индивидуальный номер узла в проекте;
· запустим на исполнение узел АРМ RTM _1;
· в меню таблицы MS Excel Правка выберем команду Связи, выделим оба параметра и нажмем кнопку Обновить, после чего закроем окно кнопкой ОК.
Убедимся, что значения в ячейках книги Excel изменяются вместе с соответствующими реальными значениями каналов узла (значения канала Параметр меняется постоянно, а канала Управление – после введения нового значения с помощью ГЭ Кнопка):
МРВ как DDE-клиент
где в атрибуте Имя:
· Excel – имя приложения;
· Sheet1 – имя листа книги MS Excel;
· R3C3 – адрес ячейки.
ADVISE – режим посылки клиенту значения при каждом его изменении.
После необходимо создать канал класса Float типа Input с именем Из_таблицы и привязать к нему с помощью механизма drag - and - drop источник Excel . Sheet 1. R 3 C 3. После процедур сохранения проекта и подготовки его к запуску в реальном времени запустим MS Excel, а затем узел АРМ RTM _1. Вводя в ячейку R 3 C 3 произвольные значения, их можно наблюдать в атрибутах канала Из_таблицы с помощью окна просмотра компонентов, открываемого через основное меню отладчика:
Таким образом, в результате будем наблюдать следующее:
Подключение реального внешнего модуля ввода сигналов
Введем в созданный проект модуль удаленного ввода I -7017 с подключенным к одному из его входов задатчиком напряжения. Предварительно настроим модуль с помощью конфигурационной утилиты, поставляемой с модулем на указанную характеристику, зададим «инженерный» формат вывода данных, присвоим ему номер в сети RS -485 равный 1 и установим формат обмена данными 57600,n,8,1 без контрольной суммы. Подключим модуль к порту СОМ1 компьютера через автоматический конвертор интерфейсов I -7520, обеспечим питание обоих модулей.
Создание канала аналогового ввода данных от модуля I-7017
Создать один DCS-модуль аналогового ввода:
открыть слой Источники/приемники и через ПК создать в нем группу Распределенное УСО ( DCS ):
двойным щелчком ЛК открыть группу Распределенное УСО ( DCS )_1 и через ПК создать в ней группу I -7000;
Читайте также: