MSRPC (Microsoft Remote Procedure Call)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:05, 9 июня 2019.
MSRPC (Microsoft Remote Procedure Call)
Communications protocol
Rpc-flow.png
Purpose Управление сетевыми протоколами и связью
Developer(s) Microsoft
Introduced 2005; 14 years ago (2005)
Based on OSI
OSI layer transport

MSRPC (Microsoft Remote Procedure Call)- это протокол, использующий принцип клиент-сервера.Он нужен для того, чтобы программа смогла запросить обслуживание у другой программы на удаленном компьютере, не затрагивая при этом другие программные обеспечения. MSRPC с самого начала был создан с открытым исходным кодом, но был усовершенствован, а также защищен авторским правом Microsoft.[Источник 1]

История создания

MSRPC (Microsoft Remote Procedure Call) является производной этапа реализации Distributed Computing Environment 1.1 от Open Software Foundation, но защищен авторским правом Microsoft. Первоначально RPC был заказом Open Software Foundation для того, чтобы ввести новые стандарты для вычислительной инфраструктуры. В то время ни один из поставщиков программного обеспечения не хотел использовать сложный DCE или компоненты похожие на него. Стандарт бинарного интерфейса Microsoft в значительной степени основывался на MSRPC, добавляя новые функции. [Источник 2]

Собственная технология Microsoft, Distributed Component Object Model (DCOM), предназначена для взаимодействия программных компонентов, распределенных по нескольким компьютерам. "D" был добавлен в COM из-за широкого использования DCE / RPC. DCOM, который первоначально назывался «Network OLE», способствовал улучшению COM-интерфейса Microsoft и обеспечивал коммуникационный субстрат в рамках инфраструктуры сервера приложений Microsoft + COM. Данные протоколы устарели, и поэтому спрос возрос в пользу Microsoft.

Использование протокола MSRPC (Microsoft Remote Procedure Call)

Рисунок 1 - Процедура Microsoft Remote Procedure Call

Данный протокол использовала компания Microsoft для получения моделей серверов. К примеру, некоторые протоколы Windows Server полностью основаны на MSRPC, как и система администрирования DNS от Microsoft. Большая часть интерфейсов Microsoft Exchange Server это клиент-серверные программы MSRPC, а его MAPI стал защищенней благодаря шифрованию MAPI через набору функций MSRPC, который зашифровывал информацию на уровне MSRPC без использования протокола MAPI. [Источник 3]

Протокол MSRPC использует спецификацию распределенной вычислительной среды Microsoft или удаленного вызова процедур (DCE / RPC) для обеспечения безагентного шифрованного сбора событий. Протокол MSRPC обеспечивает более высокую частоту событий, чем стандартный протокол журнала безопасности Microsoft Windows, который использует для сбора событий порты WMI / DCOM.

Протокол MSRPC работает на 6-м и 7-м уровне модели OSI, т.е. на уровне представления и приложений. Средство тестирования MSRPC проверяет связь между устройством QRadar® и хостом Windows. Средство тестирования MSRPC является частью RPM протокола MSRPC и может быть найдено в / opt / qradar / jars после установки протокола. Действие протокола MSRPC начинается со стороны клиента, в момент когда программа вызывает локальную часть кода вместо полного кода. . Из этой части кода клиент извлекает нужные параметры из адресного пространства другого клиента и доставляет их в клиентскую библиотеку, которая после переводит параметры в стандартный формат предоставления сетевых данных на сервер. Затем часть кода клиента вызывает функции в библиотеке времени выполнения RPC-клиента для отправки запроса и параметров на сервер. Если сервер расположен удаленно, библиотека времени выполнения задает соответствующий транспортный протокол и механизм и передает RPC в сетевой стек для передачи на сервер.[Источник 4]

Ниже перечислены задачи, выполняемые в процессе разработки с использованием Microsoft RPC:

  1. Создание файла на языке определения интерфейсов, который определяет идентификацию интерфейса, типы данных и функциональные прототипы для удаленных процедур.
  2. Создание файла конфигурации приложения.
  3. Компиляция определения интерфейса с использованием MIDL. Компилятор MIDL генерирует файлы на языке C для стабов и заголовочные файла для клиента и сервера.
  4. Включение (include) заголовочных файлов, сгенерированных компилятором MIDL в программы сервера и клиента.
  5. Написание исходного текста программы сервера, которая вызывает функции RPC, чтобы сделать информацию связывания доступной клиенту, затем вызывает RpcServerListen для начала прослушивания клиентских запросов. Обеспечение метода остановки сервера.
  6. Компоновка клиента с файлом клиентского стаба и клиентской RPC-библиотекой времени выполнения.
  7. Компоновка сервера с файлом серверного стаба, удаленными процедурами и серверной RPC-библиотекой времени выполнения.

Компоненты Microsoft RPC

Реализация Microsoft RPC совместима со стандартом DCE консорциума OSF (Open Software Foundation) с небольшими различиями. Клиентские или серверные приложения, написанные с использованием Microsoft RPC, могут эксплуатироваться совместно с любыми DCE / RPC серверами или клиентами, чьи библиотеки времени выполнения работают над поддерживаемым протоколом.

Продукт Microsoft RPC включает следующие главные компоненты:

  • компилятор MIDL;
  • библиотеки времени выполнения и заголовочные файлы;
  • модули транспортного интерфейса;
  • провайдер сервиса имен;
  • сервис подключения (Endpoint supply service).

В модели RPC, можно формально определять интерфейс к удаленным процедурам, используя язык, разработанный для этой цели. Это так называемый язык определения интерфейсов, или IDL (Interface Definition Language). Реализация Microsoft этого языка называется MIDL. После того, как был создан интерфейс, его необходимо пропустить через компилятор MIDL. Компилятор генерирует стабы (stub), которые транслируют локальные вызовы процедуры в удаленные. Стабы являются заместителями функций и в свою очередь производят вызовы функций библиотеки времени выполнения, выполняющих удаленный вызов процедур. Преимущество такого подхода в том, что сеть становится почти полностью прозрачной для распределенного приложения. В таких случаях клиентская программа как будто бы вызывает локальные процедуры; работа по превращению их в удаленные вызовы выполняется автоматически. Весь код, который транслирует данные, обращается к сети, и возвращает результаты, генерируется компилятором MIDL, и невидим для прикладной программы.

Принцип работы MSRPC (Microsoft Remote Procedure Call)

Инструментальные средства RPC позволяют пользователям вызывать процедуру, размещенную в удаленной серверной программе, как если бы она размещалась локально. Клиент и сервер имеют свои собственные адресные пространства; то есть каждый имеет собственный ресурс памяти, выделенный для размещения данных, используемых процедурой. Клиентское приложение вызывает локальную процедуру стаба вместо фактического кода, реализовывающего процедуру. Стабы компилируются и компонуются с клиентской программой.

Вместо фактического кода, реализующего удаленную процедуру, код стаба пользователя:

  • выбирает требуемые параметры из адресного пространства клиента;
  • транслирует параметры в стандартный сетевой формат представления данных (NDR – network data representation), что необходимо для их передачи по сети;
  • вызывает функции клиентской RPC-библиотеки времени выполнения, чтобы послать запрос и параметры серверу.

Сервер выполняет следующие шаги, чтобы вызвать удаленную процедуру:

  • функции серверной RPC-библиотеки времени выполения принимает запрос и вызывает процедуру серверного стаба;
  • стаб сервера выбирает параметры из сетевого буфера и преобразует их из сетевого формата передачи в формат, необходимый серверу;
  • стаб сервера вызывает фактическую серверную процедуру.

Удаленная процедура выполняется, возможно, генерируя выходные параметры и возвращаемое значение. Когда удаленная процедура завершается, подобная *последовательность шагов возвращает данные клиенту:

  • удаленная процедура возвращает данные серверному стабу;
  • стаб сервера преобразует выходные параметры в формат, требуемый для передачи по сети, и возвращает их функциям RPC-библиотеки времени выполнения;
  • функции серверной RPC-библиотеки передают данные по сети на компьютер клиента.

Клиент завершает процесс, принимая данные из сети и возвращая их вызвавшей функции:

  • клиентская RPC-библиотека получает возвращаемые удаленной процедурой значения и возвращает их клиентскому стабу;
  • клиентский стаб преобразует данные из сетевого представления в формат, используемый компьютером клиента, записывает данные в память клиента и возвращает результат вызвавшей программе на клиенте;
  • вызвавшая процедура продолжается, как после локального вызова.

Для Microsoft Windows и Microsoft Windows NT, библиотеки времени выполнения состоят из двух частей: импортируемой библиотеки, компонуемой с прикладной программой; и RPC-библиотеки времени выполнения, которая реализована как динамическая (DLL). Серверное приложение содержит вызовы функций серверной библиотеки времени выполнения, которые регистрируют интерфейс сервера и позволяют серверу принимать удаленные вызовы. Серверное приложение также содержит и сами специфические удаленные процедуры, предназначенные для вызова клиентскими приложениями. [Источник 5]

Источники

  1. MSRPC (Microsoft Remote Procedure Call) // Википедия [2008—2019] URL: https://en.wikipedia.org/wiki/Microsoft_RPC#Use (дата обращения: 04.05.2019)
  2. Microsoft Remote Procedure Call // Anvir [2002—2017] URL:https://www.anvir.com/microsoft-remote-procedure-call.htm (дата обращения: 04.05.2019)
  3. MSRPC (Microsoft Remote Procedure Call) // Itband [2018—2019]. Дата обновления: 20.05.2019 URL:http://itband.ru/2010/06/in-smb-protocol/ (дата обращения: 17.05.2019 )
  4. MSRPC Protocol: Definition & How It Works // ExtraHop [2018—2019]. URL:https://www.extrahop.com/resources/protocols/msrpc/ (дата обращения: 06.05.2019 )
  5. Введение в Microsoft® RPC // CS.VSU [2018—2019]. URL:http://www.cs.vsu.ru/~fvv/DOCs/Distributed/MSRPC_ru.htm (дата обращения: 06.05.2019 )