IGMP

IGMP ( англ. Internet Group Management Protocol - Протокол управління групами Інтернету) - протокол управління груповий (multicast) передачею даних в мережах, заснованих на протоколі IP. IGMP використовується маршрутизаторами і IP-вузлами для організації мережевих пристроїв в групи.

Цей протокол є частиною специфікації груповий передачі пакетів в IP-мережах. IGMP розташований на мережевому рівні. [1] Він багато в чому аналогічний ICMP для односторонньої передачі. IGMP може використовуватися для підтримки потокового відео і онлайн-ігор, для цих типів додатків він дозволяє використовувати мережні ресурси більш ефективно. IGMP вразливий до деяких атакам [2] [3] [4] [5], і брандмауери зазвичай дозволяють користувачеві відключити цей протокол, якщо в ньому немає необхідності.

IGMP використовується тільки в мережах IPv4, так як в IPv6 групова передача пакетів реалізована через протокол Multicast Listener Discovery.


1. Архітектура

Мережа, що надає послуги груповий передачі даних (наприклад, відео) з використанням IGMP, може мати наступну базову архітектуру:

Приклад архітектури IGMP

IGMP використовується клієнтським комп'ютером і сусідніми комутаторами для з'єднання клієнта і локального маршрутизатора, що здійснює групову передачу. Далі між локальним і віддаленим маршрутизаторами використовується протокол Protocol Independent Multicast (PIM), з його допомогою групової трафік прямує від відеосервера до численним клієнтам групової передачі.


2. Стандарти

Згідно Request for Comments (RFC), документом спільноти Internet Engineering Task Force (IETF), існує три версії IGMP. IGMPv1 визначений в RFC 1112, IGMPv2 - в RFC 2236 і IGMPv3 - в RFC 3376.

Основним поліпшенням в IGMPv3 щодо IGMPv2 є підтримка фільтрації IP-адрес. За допомогою цього механізму вузол може повідомити, з яких адрес він хоче отримувати пакети, а з яких ні.


3. Реалізація

Протокол IGMP реалізований у вигляді серверної та клієнтської частин, перша з яких виконується на маршрутизаторі, друга - у вузлі мережі, отримує груповий трафік. Клієнт надсилає повідомлення про належність до якої-небудь групи локального маршрутизатора, в цей час маршрутизатор знаходиться в очікуванні повідомлень і періодично розсилає клієнтам запити.

Операційні системи FreeBSD, Linux і Windows підтримують клієнтську частину протоколу. В системі Linux IGMPv3 був доданий у версії ядра 2.5. Для FreeBSD IGMPv3 був доданий у версії 8.0.

Для реалізації серверної частини IGMP в Linux використовуються демони, наприклад, mrouted може діяти як IGMP маршрутизатор. Існують також цілі програмні комплекси (такі, як XORP), що дозволяють перетворити звичайний комп'ютер в повнофункціональний маршрутизатор групової передачі.


4. Структура пакетів IGMPv3

Визначена стандартом RFC 3376.

4.1. Запит приналежності (Membership Query Message)

Запити приналежності розсилаються маршрутизаторами для того, щоб для кожного вузла визначити його приналежність до яких-небудь групам (group membership state) і список джерел інформації, від яких даний вузол хоче отримувати повідомлення (reception state). Існує три типи таких запитів:

  • Загальні запити (General Queries) - дозволяють отримати повну інформацію для кожного з вузлів. Маршрутизатор періодично розсилає ці запити всім системам, підключеним до його мережі.
  • Запити із зазначенням групи (Group-Specific Queries) - використовуються для визначення стану підписки для заданої групи вузлів. Такі запити розсилаються по відповідному груповій адресі.
  • Запити із зазначенням групи та джерела (Group-and-Source-Specific Queries) - дозволяє для кожного вузла заданої групи визначити, які повідомлення з усіх, що посилаються заданими джерелами, цей вузол хоче отримувати.
Октет 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0-3 Type = 0x11 Max Resp Code Checksum
4-7 Group Address
8-11 Resv S QRV QQIC Number of Sources (N)
12-15 Source Address [1]
... ...
Source Address [N]
  • Код макс. відповіді (Max Resp Code) - максимальний час (в 1/10 секунди) очікування відповіді, відповідного даному запиту. Якщо значенням є число, менше 128, воно використовується безпосередньо. Якщо ж значення більше або дорівнює 128, воно інтерпретується як експонента з мантиси.
  • Контрольна сума (Checksum) - 16-бітова контрольна сума для всього IGMP-повідомлення.
  • Груповий адреса (Group Address) - груповий адресу, використовуваний в запитах із зазначенням групи. При загальному запиті це поле встановлюється рівним нулю.
  • Resv - поле зарезервовано, його слід обнуляти при посилці і ігнорувати при отриманні.
  • Прапор S (Припинити серверну обробку, Suppress Router-side Processing) - установка цього прапора вказує всім маршрутизаторам, що отримали це повідомлення, припинити оновлення за таймером.
  • QRV (Змінна надійності запитувача, Querier's Robustness Variable) - містить змінну надійності (Robustness Variable), значення якої використовується посилає пристроєм. Маршрутизатори повинні оновлювати їх змінні надійності відповідно до останнього отриманим запитом, поки це поле ненульове.
  • QQIC (Код інтервалу запиту, Querier's Query Interval Code) - значення поля вказує інтервал між запитами (Query Interval), використовуваний запитуючою. Якщо значенням є число, менше 128, воно використовується безпосередньо. Якщо ж значення більше або дорівнює 128, воно інтерпретується як експонента з мантиси.
  • Кількість джерел (Number of Sources, N) - визначає число адрес джерел, присутніх в цьому запиті. Для загальних запитів і запитів із зазначенням групи це значення дорівнює нулю. Для запитів із зазначенням групи та джерела це поле ненульове, воно обмежене значенням MTU мережі.
  • Адреса джерела [i] (Source Address) - масив індивідуальних (не групових) IP-адрес джерел даних.

4.2. Звіт про приналежність (Membership Report Message)

Октет 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0-3 Type = 0x22 Reserved Checksum
4-7 Reserved Number of Group Record (M)
8-11 Group Record [1]
... ...
Group Record [M]
  • Reserved - повинно встановлюватися в нуль при передачі і ігноруватися при прийомі;
  • Number of Group Record - кількість полів Group Record в повідомленні;
  • Group Record - блок полів, що містить інформацію про членство відправника в групі:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Record Type Aux Data Len Number of Sources (N)
Multicast Address
Source Address [1]
...
Source Address [N]
Auxilary Data
  • Record Type - тип запису:
    • Поточний стан - надсилається у відповідь на запит, повідомляє про поточний режим фільтрації, щодо зазначеного групового адреси, приймає значення MODE_IS_INCLUDE і MODE_IS_EXCLUDE;
    • Зміна режиму - надсилається при зміні режиму фільтрації, приймає значення CHANGE_TO_INCLUDE_MODE і CHANGE_TO_EXCLUDE_MODE;
    • Зміна списку джерел - надсилається при зміні списку джерел без зміни режиму фільтрації:
      • ALLOW_NEW_SOURCES - в режимі INCLUDE адреси додаються до списку, в режимі EXCLUDE - видаляються зі списку;
      • BLOCK_OLD_ SOURCES - в режимі EXCLUDE адреси додаються до списку, в режимі INCLUDE - видаляються зі списку.
  • Aux Data Len - довжина додаткових даних в 32-бітових словах.
  • Number of Sources - кількість адрес джерел даних;
  • Multicast Address - груповий адресу, до якого відноситься інформація в запису;
  • Source Address - масив індивідуальних IP-адрес джерел даних;
  • Auxilary Data - додаткова інформація, не повинна використовуватися в поточній версії протоколу.

4.3. Інші типи пакетів

Тип Найменування Опис
0x12 Version 1 Membership report Повинні підтримуватися для сумісності з попередніми версіями
0x16 Version 2 Membership report
0x17 Version 2 Leave Group
0x13 Distance Vector Multicast Routing Protocol Експериментальний протокол

Примітки

  1. Network Sorcery - IGMP - www.networksorcery.com / enp / protocol / igmp.htm
  2. Spoofed IGMP Report Denial Of Service - www.securityfocus.com/bid/5020/info vulnerability.
  3. Fragmented IGMP packet - support.microsoft.com / default.aspx? scid = kb; en-us; 238329 & sd = tech may promote "Denial of Service" attack.
  4. IGMP Security Problem Statement and Requirements - www.securemulticast.org/GSEC/gsec3_ietf53_SecureIGMP1.pdf # search = "igmp attacks".
  5. Microsoft Security Bulletin MS06-007: Vulnerability in TCP / IP Could Allow Denial of Service (913446) - www.microsoft.com/technet/security/Bulletin/MS06-007.mspx.