Статья расскажет о протоколах в операционной системе Windows и способах взаимодействия с ними. Пройдемся по списку протоколов, опишем их основные задачи и попробуем повзаимодействовать с одним из них при помощи языка программирования Python.

Обзор протоколов

Операционная система Windows является одной из самых популярных. Базовые версии этой операционной системы могут быть использованы и как клиентская операционная система и как серверная. В документации указано, что эта операционная система умеет работать с большим количеством протоколов, львиная доля создана для неё и используются только для нужд ОС или программного беспечения внутри.

Все функции Windows как и протоколы принято делить на подсистемы. Тоесть если в системе есть подсистема .Net это означает, что обязательно для нее найдутся протоколы, которые используются для передачи данных. Они будут иметь свой формат и спецификацию.

Все протоколы, которые поддерживаются Windows и были адаптированы или созданы для ОС, находятся здесь. Документация включает в себя всё, что доступно для изучения, включая, кстати документацию на документацию. Все протоколы в Windows делятся на 4 больших группы:

  • Application server protocols

  • Core services protocols

  • Internet Information Services(IIS) protocols

  • .NET Framework Protocols

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

Application Server Protocols

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

Эти протоколы включают в себя следующие подгруппы:

  • COM, COM+, DCOM — протоколы, которые позволяют работать с приложениями, которые оперируют объектами.

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

  • MSQM - протоколы очередей, используются для масштабирования приложений

Протоколы этой категории могут быть самыми используемыми и интересными, так как их применение довольно широко в приложениях, которые используются в корпоративном сегменте. Такие наборы сервисов как Active Directory очень сильно зависят от этой группы протоколов.

Core Services Protocols

Протоколы этой группы используются для подсистем, которые чаще всего могут использоваться в серверных версиях операционной системы Windows. Среди них:

  • IManagedObject Interface Protocol — по сути это обертка для .Net платформы, позволяет безопасно взаимодействовать с объектами COM

  • OLE Automation Protocol — протокол, который позволяет приложениям создавать расшариваемые объекты. Эти объекты могут интегрироваться из одного приложения в другое и при этом предоставлять алгоритмы обработки.

  • Remote Data Services Transport Protocol — протокол для распределения нагрузки, используется для обратной совместимости со старыми версиями операционной системы. Работает поверх HTTP. Сейчас функционально может быть заменен через DCOM и SOAP.

  • Session Multiplex Protocol — протокол, который может быть использован для создания каналов для передачи данных с поддержкой сессии в рамках одного соединения. Может быть использован поверх любого протокола.

SQL Server Resolution Protocol — протокол, который позволяет клиентам работать с базами данных. Используется для поиска баз данных, поддерживает мультикастовые и бродкастовые запросы.

По сути протоколы просто являются дополнительной прослойкой для тех же ASP протоколов предыдущей секции.

Internet Information Services(IIS) protocols

Набор протоколов, которые возможны из коробки в IIS, либо которые можно установить за счет специальных расширений. Список протоколов следующий:

  • Internet Information services (IIS): Application Host COM Protocol — протокол для администрирования сервера

  • Internet Information Services (IIS): IMSAdminBaseW Remote Protocol — протокол для конфигурации сервера. Все настройки хранит в специальном мета древе.

  • Internet Information Services (IIS): Inetinfo Remote Protocol — протокол для управления HTTP и FTP серверами.

  • Internet Information Services (IIS): ServiceControl Protocol — протокол для управления сервером как отдельной единицей. Можно его удаленно перезапускать, управлять функционалом операционной системы.

.NET Framework Protocols

Огромный пласт протоколов, который был создан для того чтобы софт, который был написан с использованием .Net, мог взаимодейтвовать с любым ПО по сети. Вот несколько протоколов из этой подгруппы:

  • .NET Packet Routing Protocol — дает возможность преобразовывать заголовок SOAP как датаграмму или пакет

  • .NET Binary Format: XML Data Structure — имплементация структуры передаваемого XML формата

  • .NET Context Exchange Protocol — как видно из названия этим протоколом можно передавать контекст между сервером и клиентом

  • NET Message Framing TCP Binding Protocol — протокол, который позволяет работать с SOAP через TCP

Как видно из перечисленных групп и подгрупп протоколов, протоколы для операционной системы Windows являются абстракциями для передачи данных между системами и внутри самой операционоой системы. Возьмем для изучения первую группу протоколов, а именно ASP. Из этой группы сконцентрируемся на подгруппе COM,COM+,DCOM.

Пример взаимодействия

Протоколы COM,COM+,DCOM группы развивались как протоколы, дающие возможность программистам и пользователям создавать функции и даже целые приложения, в которые можно интегрировать в своих приложениях даже не имея их исходного кода и совсем не важно на каком языке программирования написаны приложения. Для того чтобы это было возможно, протоколы используют абстракции:

  • Предоставляют стандартный интерфейс для обращения

  • Все объекты, которые становятся доступны через протоколы, занесены в общий реестр

  • Каждый объект реестра идентифицируется с помощью уникального UUID.

В качестве практики попробуем реализовать взаимодействие с объектами DCOM через протокол MS-RPCE. Для скорости разработки прототипа будем использовать язык программирования Python и библиотеку impacket. В качестве целевой системы для взаимодействия будем использовать Windows 10.

MS-RPCE это набор расширений протокола MS-RPC. Этот протокол позволяет реализовывать специальные функции, которые могут включать работу с авторизацией, взаимодействия с принтерами и т.д. Так как это RPC, то для работы с его функциями нужно использовать правила и интерфейсы, которые могут быть предложены в спецификации.

Согласно документации MS-RPCE может работать в 2х вариантах:

  1. Connection oriented RPC

  2. Connectionless RPC

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

  • ncacn_np — транспорт SMB

  • ncacn_ip_tcp — транспорт IPv4, IPv6

  • ncadg_ip_udp — транспорт UDP

  • ncacn_spx — транспорт SPX

  • ncadg_ipx — транспорт IPX

  • ncacn_nb_ipx — транспорт NetBIOS over IPX

  • ncacn_nb_tcp — транспорт NetBIOS over TCP

  • ncacn_nb_nb — транспорт NetBIOS over NetBEUI

  • ncacn_at_dsp — транспорт AppleTalk

  • ncacn_http — транспорт RPC over HTTP

В нашем примере взаимодействия будут строиться на основании модели TCP/IP, поэтому в качестве транспорта будем использовать ncacn_ip_tcp.

Для того чтобы выполнить операцию с помощью MS-RPCE, нужно понять, как работает процедура настройки соединения и выполнения различных операций. Алгоритм простого заимодействия следующий:

  1. Инициализировать строку для транспорта

  2. Установить вариант авторизации — требуется для большинства объектов протокола, так как большая часть операций может быть использована злоумышленниками

  3. Для проведения процедуры идентификации и аутентификации используется обертка DCE, поэтому придется создать объект для взаимодействия с этим протоколом. Именно он будет автоматически настраивать соединение. Нам только останется активировать объект из ОС или воспользоваться стандартными классами для проверки соединения или отправить данные для приложений ОС.

from impacket.dcerpc.v5 import transport
from impacket.dcerpc.v5.rpcrt import RPC_C_AUTHN_LEVEL_NONE
from impacket.dcerpc.v5.dcomrt import IObjectExporter


hostIp = "192.168.57.3"
authLevel = RPC_C_AUTHN_LEVEL_NONE

stringBinding = r'ncacn_ip_tcp:%s' % target_ip
rpctransport = transport.DCERPCTransportFactory(stringBinding)

dce = rpctransport.get_dce_rpc()
dce.set_auth_level(authLevel)
dce.connect()

#Только этот механизм не требует аутентификации
objExp = IObjectExporter(dce)
bindings = objExp.ServerAlive2()

for binding in bindings:
    addr = binding['aNetworkAddr']
    print ("Found Address: " + addr)

Результат выполнения команд в интерактивном шелле:

Оценить масштаб проделанной в сети работы можно через WireShark:

Таким образом можно получить данные о всех активных интерфейсах на целевой системе. При этом не нужно предоставлять никаких данных пользователя. Если требуется выяснить намного больше информации, можно заглянуть в директорию examples, среди скриптов есть rpcmap, rpcinfо, которые могут рассказать об открытых интерфейсах, которые доступны по протоколу MS-RPCE.


Статья подготовлена Александром Колесниковым в рамках курса «Network Engineer».

Всех желающих приглашаем на бесплатное demo-занятие «Редистрибуция — костыль или энтерпрайз решение». На занятии:

1. Рассмотрим переход префиксов из одного протокола динамической маршрутизации в другой на примере OSPF и BGP.
2. Обсудим редистрибуцию статических маршрутов и моменты, когда без этого никак. Или все-таки есть способы не использовать костыли?

Если интересно, записывайтесь.

Комментарии (1)


  1. mSnus
    25.01.2022 06:54
    +1

    <разлогинивающая картинка>