UPnP

undefined

Universal Plug and Play (англ. Universal Plug and Play) — это набор сетевых протоколов на базе протокола IP, позволяющий различным сетевым устройствам, таким как персональные компьютеры, принтеры, интернет-шлюзы, точки доступа Wi-Fi и мобильные устройства, автоматически обнаруживать друг друга в сети[1] и устанавливать между собой функциональные сервисы. UPnP предназначен прежде всего для домашних сетей[2] и не рассчитан на оборудование и требования корпоративного уровня. Официально используется только сокращённое название UPnP (торговая марка)[3].

Описание

UPnP предполагает, что сеть построена на IP, а поверх IP работает HTTP для описания устройств/сервисов, выполнения действий, передачи данных и уведомлений о событиях. Поиск устройств и их объявления реализуются через HTTP поверх UDP (порт 1900) с использованием мульткаста (HTTPMU). Ответы на поисковые запросы также идут по UDP, но с использованием юникаста (HTTPU).

Концептуально UPnP расширяет идею Plug and Play (технологии динамического подключения устройств к компьютеру) на сферу бесконфигурируемых сетей[1] для домашних и SOHO-сетей. UPnP-устройства работают по принципу plug-and-play: при подключении к сети они автоматически настраивают взаимодействие с другими устройствами, без необходимости ручной настройки или ввода IP-адресов пользователем[4].

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

Обзор

Архитектура UPnP поддерживает обмен данными между потребительской электроникой, мобильными устройствами, персональными компьютерами и сетевыми бытовыми приборами. Она основана на распределённой, открытой архитектуре, использующей такие стандарты, как семейство протоколов TCP/IP, HTTP, XML и SOAP. Контрольные точки UPnP (CP, Control Point) — это устройства, использующие протоколы UPnP для управления управляемыми устройствами (CD, Controlled Device)[5].

UPnP реализует принципы бесконфигурируемых сетей: устройство любого производителя может динамически подключиться к сети, получить IP-адрес, объявить своё имя, сообщить о своих возможностях или получить сведения о возможностях других устройств. DHCP- и DNS-серверы используются по возможности, но не обязательны. Устройства могут автоматически отключаться от сети, не оставляя информации о своём состоянии.

Стандарт стал международным (ISO/IEC 29341) в декабре 2008 года и включает 73 части[6][7][8][9][10][11].

Дополнительные особенности UPnP:

Независимость от среды передачи и устройств
UPnP может работать по любым средам, поддерживающим IP: Ethernet[2], FireWire, инфракрасные каналы (IrDA), домашняя проводка (G.hn), радиочастоты (Bluetooth, Wi-Fi[2]). Не требуется специальных драйверов — используются стандартные сетевые протоколы.
Управление через пользовательский интерфейс
опционально устройства UPnP могут предлагать веб-интерфейс управления.
Независимость от платформы и языка программирования
возможно создание продуктов UPnP для любых ОС и языков. UPnP-стеки существуют как с открытым, так и с закрытым исходным кодом[2].
Программируемое управление
поддерживается управление с помощью обычных прикладных программ.[2]
Расширяемость
любое устройство может реализовывать дополнительные сервисы поверх базовой архитектуры.[2] Возможно определять новые типы устройств и сервисов, расширять стандартные с помощью новых действий, переменных и структур данных.

Протокол

UPnP использует стандартные интернет-технологии. Базовый протокол — IP, поверх которого работают HTTP, SOAP и XML для описания устройств и сервисов, выполнения действий, передачи данных и событий. Обнаружение устройств и рассылка объявлений реализуются через HTTP поверх UDP по схеме мульткаста (HTTPMU). Ответы отправляются по UDP в режиме юникаста (HTTPU). Использование UDP связано с низкими накладными расходами (отсутствует подтверждение доставки и повторная отправка повреждённых пакетов). Спецификации HTTPU и HTTPMU были изначально предложены как интернет-драфт, но срок его действия истёк в 2001 году;[12]. впоследствии они были включены в спецификации UPnP.

UPnP использует UDP-порт 1900, а TCP-порты определяются из сообщений SSDP alive и response[13].

Адресация

Базой UPnP-сети является IP-адресация. Каждое устройство должно реализовывать DHCP-клиент и пытаться найти DHCP-сервер при первом подключении. Если сервер не найден — назначить себе адрес самостоятельно. Если устройство получает доменное имя от DHCP или DNS, оно использует его в дальнейших операциях; иначе — работает с собственным IP-адресом.

Обнаружение

После получения IP-адреса следующий этап — обнаружение устройств. Протокол обнаружения UPnP — SSDP. При добавлении устройства в сеть SSDP позволяет объявлять свои сервисы контрольным точкам. Для этого отправляются сообщения SSDP alive. При появлении контрольной точки она может искать доступные устройства или пассивно слушать сообщения SSDP alive. Базовый обмен — это сообщение с минимальной информацией о сервисе устройства: тип, идентификатор и ссылка (сетевая локация) на подробное описание.

Описание

После обнаружения устройство известно только по минимуму параметров. Для получения информации о возможностях контрольная точка должна получить описание по указанному URL. Описание в формате XML включает сведения о модели, серийном номере, производителе, ссылках на сайты. Также перечисляются все встроенные сервисы, для которых указываются URL-адреса управления, событий и описания. Для сервисов указываются поддерживаемые команды (действия) и параметры для каждого действия, а также переменные для моделирования состояния сервиса во время выполнения (с описанием типа, диапазона и событийности).

Управление

После получения описания контрольная точка может отправлять действия сервису. Для этого она посылает управляющее сообщение на control-URL сервиса (из описания устройства). Управляющие сообщения выражаются в XML на базе SOAP. Как и при вызове функций, сервис возвращает значения параметров в ответ. Результат действия моделируется изменением переменных текущего состояния сервиса.

Уведомление о событиях

UPnP реализует механизм уведомления о событиях — General Event Notification Architecture. Описание сервиса содержит список действий и переменных состояния. Сервис уведомляет о смене переменных посредством событийных сообщений. При первой подписке контрольной точке отправляется специальное сообщение с текущими значениями всех событийных переменных. Система рассчитана на работу с несколькими подписчиками: все подписчики получают все сообщения обо всех изменённых переменных, вне зависимости от причины изменения (по запросу/автоматически).

Презентация

Заключительный этап — презентация. Если устройство имеет URL-презентации, контрольная точка может загрузить соответствующую страницу в браузере, используя её для управления устройством/просмотра состояния (функциональность зависит от возможностей страницы и устройства).

AV-стандарты

Архитектура UPnP AV (англ. UPnP Audio/Video) расширяет UPnP на область аудио- и видеоустройств: телевизоры, видеомагнитофоны, CD/DVD-проигрыватели, проигрыватели, приставки, стереосистемы, MP3-плееры, цифровые камеры, электронные фоторамки, персональные компьютеры. Поддерживаются различные форматы мультимедиа: MPEG2, MPEG4, JPEG, MP3, WMA, BMP, а также стандарты видео NTSC, PAL и ATSC. Возможна работа через IEEE 1394, HTTP, RTP и TCP/IP[14].

12 июля 2006 года UPnP Forum опубликовал вторую версию спецификации UPnP Audio and Video[15], а также версии 2.0 классов MediaServer (MS) и MediaRenderer (MR), что повысило совместимость устройств различных производителей. Одними из первых сертифицированных устройств были продукты Philips под брендом Streamium.

Начиная с 2006 года опубликованы также версии 3 и 4 аудио- и видеопротоколов UPnP[16]. В марте 2013 опубликована новая версия спецификации UPnP AV architecture[14], а версия Device Architecture 2.0 вышла в апреле 2020 года.

Стандарты UPnP AV используются в спецификациях других организаций — например, в рекомендациях Digital Living Network Alliance (DLNA)[17], в стандарте IEC 62481-1[18], и протоколе OpenCable Home Networking[19].

AV-компоненты

Обычная архитектура UPnP AV состоит из:[20]

  • контрольная точка — устройство, находящее серверы и проигрыватели, соединяющее их,
  • медиаcервер — сервер, хранящий контент для проигрывания на проигрывателях,
  • медиапроигрыватель (Media Renderer) — устройство, которое воспроизводит контент, поступающий с сервера.

Медиасервер

UPnP AV медиасервер — сервер, предоставляющий библиотеку медиафайлов и потоковое вещание (аудио, видео, изображения) UPnP-клиентам. Это компьютер или специализированное цифровое устройство, хранящее и рассылающее цифровой контент.

Медиасервер обеспечивает контрольным точкам возможность браузинга коллекции и запроса передачи необходимых файлов.

Медиасерверы UPnP существуют для большинства операционных систем и многих аппаратных платформ. Они бывают программными (запускаются на ПК) либо аппаратными (например, на NAS или DVR). К 2008 году программных медиасерверов было больше, чем аппаратных.

Другие компоненты

  • UPnP MediaServer ControlPoint — UPnP-клиент (slave), автоматически обнаруживает медиасерверы и позволяет просматривать/получать с них медиафайлы;
  • UPnP MediaRenderer DCP — устройство (slave), воспроизводящее получаемый контент;
  • UPnP RenderingControl DCP — компонент для управления настройками MediaRenderer: громкость, яркость, RGB, резкость и прочее;
  • UPnP Remote User Interface (RUI) client/server — отправка/приём команд управления между клиентом и сервером UPnP по сети (запись, планирование, воспроизведение, пауза, стоп и др.);
    • Web4CE (CEA 2014) for UPnP Remote UI[21] — стандарт ассоциации CEA-2014: web-протокол и фреймворк для удалённого пользовательского интерфейса в UPnP/Интернет, позволяющий устройству предоставить веб-интерфейс для управления с любого другого устройства (используется особый вариант HTML — CE-HTML);
  • QoS (качество обслуживания) — важная (но факультативная) функция для UPnP AV. QoS обеспечивает приоритетное обслуживание или гарантированный уровень передачи данных, что критично для потокового воспроизведения аудио/видео.
    • В QoS различают синковое устройство (Sink, клиент) и источник (Source, сервер); выделяют классы трафика (Traffic Class), идентификаторы потока (TID), параметры потока (TSPEC) и собственно потоки (TS);
  • Удалённый доступ — методы подключения устройств UPnP за пределами одной multicast-домена.

Преодоление NAT

Одна из задач преодоления NAT — протокол управления интернет-шлюзами (UPnP IGD), реализованный в UPnP. Многие роутеры и фаерволы открывают себя как Internet Gateway Device, позволяя локальным UPnP-контроллерам выполнять действия типа получения внешнего IP-адреса, просмотра и настройки портов проброса. Это позволяет внутренним клиентам обходить NAT-систему.

Существуют проблемы совместимости из-за разночтений в больших спецификациях IGDv1/IGDv2. Например, встроенный UPnP IGD клиент Windows и Xbox может не работать с некоторыми IGDv2-совместимыми роутерами. Неполная реализация IGDv1/IGDv2 приводит к невозможности настройки проброса портов без специальных обходных путей[22].

Если UPnP используется только для управления пробросом портов, существуют более простые альтернативные протоколы — PCP и NAT-PMP, которые уже стандартизованы IETF, но имеют низкое распространение и небольшую поддержку у производителей роутеров. В частности, PCP поддерживают только некоторые модели AVM GmbH (Fritz!Box), а также проекты OpenWrt, OPNsense и pfSense. Реализации IGDv2/PCP у некоторых производителей отличаются нестабильностью и багами[23].[24][25][26][27]

Проблемы

Аутентификация

По умолчанию протокол UPnP не реализует аутентификацию. Для защиты рекомендуется Service Device Protection[28] или Device Security Service[29]. Предлагается также неформальный стандарт UPnP-UP (User Profile)[30][31], расширяющий аутентификацию и авторизацию пользователей UPnP-устройств и приложений. Многие реализации UPnP не реализуют аутентификацию, предполагая полное доверие локальным устройствам и пользователям[32][33].

При отсутствии механизмов аутентификации роутеры и фаерволы с поддержкой UPnP IGD подвержены атакам. Например, уязвимости Adobe Flash могли позволить злоумышленникам манипулировать настройками UPnP-роутера через особый HTTP-запрос при посещении заражённого сайта[34]. Это относится исключительно к функциям "проброса портов" по UPnP; не все роутеры позволяют менять параметры DNS и LAN через UPnP[9]. Некоторые производители по умолчанию отключают UPnP для повышения безопасности.

Доступ из Интернета

В 2011 году Даниэль Гарсия разработал инструмент для эксплуатации уязвимости в некоторых стэках UPnP IGD, который позволяет принимать UPnP-запросы из Интернета[35][36]. Проблема актуальна для миллионов устройств по всему миру[37].

В январе 2013 компания Rapid7 (Бостон) опубликовала итоги сканирования UPnP-устройств: 6900 продуктов 1500 производителей на 81 миллионе IP-адресов откликнулись на UPnP-запросы, большинство — домашние роутеры, но также встречались принтеры, веб-камеры и камеры видеонаблюдения[38].

В феврале 2013 UPnP Forum в официальном заявлении[39] рекомендовал использовать свежие версии UPnP-стэков и ужесточил программу сертификации.

IGMP snooping и надёжность

UPnP зачастую — единственное мультимедийное приложение, использующее мульткаст в домашних сетях, поэтому любые проблемы с мульткаст-настройками (например, IGMP snooping на не настроенном свиче/роутере без активного querier-а или IGMP proxy) могут проявляться как "ненадёжность UPnP". Обычные проблемы — исчезновение сервера или клиента через несколько минут после включения устройства (обычно ~30 минут — время истечения IGMP-подписок).

Уязвимость callback (CallStranger)

8 июня 2020 была обнаружена новая критическая уязвимость протокола, получившая название "CallStranger" (CVE-2020-12695)[40][41] — она позволяет атакующему использовать механизм событийных подписок для различных атак (DDoS, сканирование, утечка данных).

OCF опубликовала исправления в апреле 2020[42], но из-за сложности обновления прошивки многих устройств опасность сохранится надолго[43]. Эта уязвимость вновь подняла вопросы о безопасности и привела к рекомендациям отключать UPnP на домашних роутерах[44].

История

Протоколы UPnP продвигались UPnP Forum (основан в октябре 1999 года)[45] — инициативой компьютерной индустрии по обеспечению простой совместной работы устройств. В Форум входило более 800 компаний — от производителей бытовой электроники до сетевых решений. С 2016 года развитием UPnP занимается Open Connectivity Foundation (OCF).

Осенью 2008 года UPnP Forum утвердил версию UPnP 1.1 вместо альтернативного стандарта Devices Profile for Web Services[46]. Стандарт Internet Gateway Device (IGD)[9] реализует сервис WANIPConnection, аналогичный по функционалу стандарту Port Control Protocol. О недостатках IGDP говорится в спецификации NAT Port Mapping Protocol[47].

Дополнительные стандарты Device Architecture:

  • Wi-Fi Alliance определяет класс "WFA device" (urn:schemas-wifialliance-org:device:WFADevice) для сетевого оборудования;
    • WFAWLANConfig — компонент для опроса параметров и подключения к Wi-Fi-точкам по WPS[48]. Используется в AP-ER и UPnP-C типах Wi-Fi Protected Setup[49].

Примечания

Литература

  • Golden G. Richard. Service and Device Discovery: Protocols and Programming. McGraw-Hill Professional, ISBN 0-07-137959-2
  • Michael Jeronimo, Jack Weast. UPnP Design by Example: A Software Developer's Guide to Universal Plug and Play. Intel Press, ISBN 0-9717861-1-9