ICMP: Протокол межсетевых управляющих сообщений
ICMP предназначен для отправки контрольных и тестовых сообщений по IP-сетям.
В отличие от протоколов транспортного уровня TCP (Протокол управления передачей) и UDP (User Datagram Protocol), которые работают поверх IP, ICMP существует рядом с IP.
Возможность понимать ICMP является требованием для любого IP-совместимого сетевого устройства. Однако многие устройства безопасности, такие как брандмауэры, блокируют или отключают все или часть функций ICMP для целей безопасности.
Типы сообщений ICMP
ICMP работает, отправляя и получая ограниченное количество типов сообщений. Типы сообщений ICMP определены в IAMA ICMP Type Numbers.
Наиболее распространенными типами сообщений ICMP являются:
| Type | Name |
|---|---|
| 0 | Эхо-ответ |
| 3 | Адресат недоступен |
| 4 | Сдерживание источника |
| 5 | Перенаправление |
| 6 | Альтернативный адрес узла |
| 8 | Эхо-запрос |
| 9 | Объявление маршрутизатора |
| 10 | Запрос маршрутизатора |
| 11 | Время жизни дейтаграммы истекло |
| 12 | Неверный параметр |
| 13 | Запрос метки времени |
| 14 | Ответ с меткой времени |
| 15 | Информационный запрос |
| 16 | Информационный ответ |
| 17 | Запрос адресной маски |
| 18 | Отклик на запрос адресной маски |
| 30 | Трассировка маршрута |
ICMP Echo Request и Echo Reply
Двумя наиболее важными сообщениями ICMP являются Echo Request (8) и Echo Reply (0).
Echo Request и Echo Reply используются командой `ping` для проверки сетевого подключения.
Здесь мы используем команду `ping` для отправки трех 64-байтных сообщений ICMP Echo Request на www.freebsd.org и получения в ответ трех сообщений ответа Echo:
Этот вывод говорит о том, что сетевое подключение к www.freebsd.org работает. Он также сообщает нам время, которое каждый пакет принял для возврата.
`ping` — чрезвычайно полезный инструмент для устранения неполадок в сети.
Icmp протокол что это порт
Internet Control Message Protocol
ICMP (англ. Internet Control Message Protocol — протокол межсетевых управляющих сообщений [1] ) — сетевой протокол, входящий в стек протоколов TCP/IP. В основном ICMP используется для передачи сообщений об ошибках и других исключительных ситуациях, возникших при передаче данных, например, запрашиваемая услуга недоступна, или хост, или маршрутизатор не отвечают. Также на ICMP возлагаются некоторые сервисные функции.
Содержание
Технические подробности
Протокол ICMP описан в RFC 792 (с дополнениями в RFC 950) и является стандартом Интернета (входит в стандарт STD 5 вместе с IP). Хотя формально ICMP использует IP (ICMP-пакеты инкапсулируются в IP пакеты), он является неотъемлемой частью IP и обязателен при реализации стека TCP/IP. Текущая версия ICMP для IPv4 называется ICMPv4. В IPv6 существует аналогичный протокол ICMPv6.
ICMP-сообщение строится из IP-пакетов, сгенерировавших ICMP-ответ. IP инкапсулирует соответствующее ICMP-сообщение с новым заголовком IP (чтобы отправить ICMP-сообщение обратно отправителю) и передает полученные пакеты дальше.
Например, каждая машина (такая, как маршрутизатор), которая перенаправляет IP-пакеты, уменьшает Time to live (TTL) поля заголовка IP на единицу, если TTL достигает 0, ICMP-сообщение о превышении TTL отправляется на источник пакета.
Каждое ICMP-сообщение инкапсулируется непосредственно в пределах одного IP-пакета, и, таким образом, как и UDP, ICMP является ненадежным (надежным является TCP).
ICMP основан на протоколе IP. Его цели отличны от целей транспортных протоколов, таких как TCP и UDP: он, как правило, не используется для передачи и приема данных между конечными системами. ICMP не используется непосредственно в приложениях пользователей сети (исключение составляют инструменты Ping и Traceroute).
Использование ICMP-сообщений
ICMP-сообщения (тип 12) генерируются при нахождении ошибок в заголовке IP-пакета (за исключением самих ICMP-пакетов, дабы не привести к бесконечно растущему потоку ICMP-сообщений об ICMP-сообщениях).
ICMP-сообщения (тип 3) генерируются маршрутизатором при отсутствии маршрута к адресату.
Утилита Ping, служащая для проверки возможности доставки IP-пакетов использует ICMP-сообщения с типом 8 (эхо-запрос) и 0 (эхо-ответ).
Утилита Traceroute, отображающая путь следования IP-пакетов, использует ICMP-сообщения с типом 11.
ICMP-сообщения с типом 5 используются маршрутизаторами для обновления записей в таблице маршрутизации отправителя.
ICMP-сообщения с типом 4 используются получателем (или маршрутизатором) для управления скоростью отправки сообщений отправителем.
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
ICMP, который расшифровывается как Internet Control Message Protocol это протокол третьего уровня модели OSI, который используется для диагностики проблем со связностью в сети. Говоря простым языком, ICMP помогает определить может ли достичь пакет адреса назначения в установленные временные рамки. Обычно, ICMP “юзают» маршрутизаторы и устройства третьего уровня.
Онлайн курс по Кибербезопасности
Изучи хакерский майндсет и научись защищать свою инфраструктуру! Самые важные и актуальные знания, которые помогут не только войти в ИБ, но и понять реальное положение дел в индустрии
Для чего используется ICMP?
Про трассировку
Так и с “трассировкой». Когда говорят “сделайте трассировку маршрута» это означает, что мы хотим увидеть полный маршрут между хостом, на котором выполняется трассировка до хоста назначения. Трассировка покажет каждый из маршрутизаторов на пути до цели и время обработки и прохождения каждого из участков маршрута. Кстати, такой маршрут называется “хопом». Часто говорят: если от узла отправления до узла назначения на пути встретиться 7 маршрутизаторов, то говорят на пути будет 7 хопов. А если на 6 маршрутизаторе пакет обрабатывается дольше обычного, то в среде инженеров говорят “на 6 хопе повышенная задержка». Это один из базовых инструментов того, как можно понять, какой из сетевых узлов на маршруте пакет “сбоит». Именно в этом нам помогает протокол ICMP.
Про пинг
Теперь про ping. Можно сказать, это самый базовый инструмент инженера, который позволяет понять “»А жив ли хост?»
Помимо прочего, пинг поможет понять как долго пакет доходит до адреса назначения и, соответственно, поможет измерить задержку.
Работает ping предельно просто:
Темная сторона ICMP
Так же, раньше была популярна атака Ping of Death. Если кратко, ее суть заключалась в следующем: злоумышленник намеренно отправляет пакет больше максимального размера. Такой пакет фрагментируется на сети на несколько частей, прилетает в буфер устройства и попадает в очередь на сборка пакета “воедино». Переполнение этой очереди приводило к подвисанию хоста и полному отказу в работе.
Что же, теперь вы знаете, что такое ICMP, почему и как он используется в утилитах ping и трассировке, а так же, какие виды атак можно выполнить с помощью ICMP.
Keep calm and Merion!
Онлайн курс по Кибербезопасности
Изучи хакерский майндсет и научись защищать свою инфраструктуру! Самые важные и актуальные знания, которые помогут не только войти в ИБ, но и понять реальное положение дел в индустрии
Интернет технологии (архив ИПМ 2001-2010, Богомолов)
Вы их получаете постоянно, а иногда и отправляете, например:
Если адрес не доступен, вы получаете сообщение ICMP.
Если порт не доступен, вы получаете сообщение ICMP.
Если вы пользуетесь командой ping, вы получаете сообщение ICMP.
Сообщение ICMP инкапсулируется прямо в IP пакет (поле данных), т.е. протоколы транспортного уровня не используются.
Поле protocol = 1 (в заголовке IP).
Первый стандарт ICMP определен в RFC0777 (Internet Control Message Protocol J. Postel Apr-01-1981)
Сообщения делятся на два типа:
Непарные (например: посылаете запрос к HTTP-серверу, но сервер не доступен, и последний маршрутизатор (или сервер) отправляет ICMP-сообщение (Destination Unreachable) вам)
11.1.1 Заголовок сообщения ICMP.
Структура заголовка сообщения ICMP. Слова по 32 бита.
Типы сообщений протокола ICMP
11.1.2 Сообщение Destination Unreachable
Непарное сообщение, формируется, если цель недостижима.
«Заголовок и первые 64 бита исходной дейтограммы» отправляются для диагностики причины ошибки.
Диагностические коды сообщений Destination Unreachable
| Код | Тип кода | Значение |
| 0 | Network Unreachable | Сеть назначения недостижима |
| 1 | Host Unreachable | Хост назначения не достижим |
| 2 | Protocol Unreachable | Протокол недостижим |
| 3 | Port Unreachable | Порт недостижим |
| 4 | Fragmentation Need & DF set | Необходима фрагментация, однако она запрещена |
| 5 | Source Route Failed | Исходный маршрут вышел из строя |
| 6 | Destination Network Unknown | Сеть назначения неизвестна |
| 7 | Destination Host Unknown | Хост назначения неизвестен |
| 8 | Source Host Isolated | Источник изолирован |
| 9 | Communication with destination Network Administratively Prohibited | Взаимодействие с сетью назначения запрещено |
| 10 | Communication with destination Host Administratively Prohibited | Взаимодействие с узлом назначения запрещено |
| 11 | Network Unreachable for type of service | Сеть назначения недоступна для запрошенного типа сервиса |
| 12 | Host Unreachable for type of service | Хост назначения недоступен для запрошенного типа сервиса |
| 13 | Связь административно запрещена с помощью фильтра | |
| 14 | Нарушение старшинства ЭВМ | |
| 15 | Дискриминация по старшинству |
Из таблицы видно, что коды 2 и 3 формируются сервером назначения.
11.1.3 Сообщение Time Exceeded
Непарное сообщение, формируется, если время жизни истекло.
Диагностические коды сообщений Time Exceeded
| Код | Значение |
| 0 | Время жизни = 0 |
| 1 | Таймер дефрагментации установился в 0 до полной сборки принятого сообщения |
11.1.4 Сообщение Parameter Problem
Непарное сообщение, формируется, если заголовок IP-дейтограммы содержит неверный параметр.
Диагностические коды сообщений Parameter Problem
| Код | Значение |
| 0 | Если возникла проблема с интерпретацией какого то поля (используется поле «номер байта с ошибкой в исходном сообщении») |
| 1 | Если возникла проблема с несоответствием какого то запрашиваемого параметра, с установленными требованиями |
11.1.5 Сообщение Source Quench
Непарное сообщение, формируется, если возникла перегрузка маршрутизатора, пакет не может быть помещен в буфер, т.к. он переполнен.
11.1.6 Сообщение Redirect
Непарное сообщение, формируется, если изменен маршрут для пакета.
Случай, когда маршрутизатор перенаправляет пакеты по другому маршруту (маршрут 2).
И предлагает в сообщении ICMP изменить шлюз по умолчанию
Диагностические коды сообщений Redirect
| Код | Тип кода | Значение |
| 0 | Redirect Datagram for networks | Изменение маршрута для сети |
| 1 | Redirect Datagram for host | Изменение маршрута для хоста |
| 2 | Redirect Datagram for the Type of service and networks | Изменение маршрута для типа сервиса или сети |
| 3 | Redirect Datagram for the Type of service and host | Изменение маршрута для типа сервиса или хоста |
11.1.7 Сообщение Echo Request/Echo Reply
Парное сообщение. Любой узел, получивший Echo Request, должен ответить Echo Reply отправителю.
Echo Request сообщения формирует программа ping.
Идентификатор и последовательный номер используются для определения, какой ответ принадлежит какому запросу.
11.1.8 Атаки с помощью Echo Request/Echo Reply
Цель: загрузить сервер так, чтобы он не мог отвечать.
Нужно послать как можно больше ответов Echo Reply на жертву.
Для этого можно задействовать чужие сети.
Посылаем сообщение Echo Request.
253 машины посылают ответ на жертву (194.85.241.1)
Все повторяем много раз, а лучше задействовать побольше таких сетей.
Жертва будет перегружена.
Атаки с помощью Echo Request/Echo Reply
Меры предотвращения таких атак:
Запретить прием и распространение сообщений типа Directed Broadcast.
Уничтожать сфальсифицированные пакеты, сопоставляя IP источника с маршрутной таблицей и номером интерфейса, с которого получен пакет.
Запретить трафик ICMP (ping, traceroute и т.д., работать не будут).
11.1.9 Принцип работы traceroute
Номер используемого порта по умолчанию 33434.
Посылаются дейтограммы с TTL=1 (время жизни пакета)
Первый же маршрутизатор уменьшает TTL на 1, т.е. TTL=0 и пакет уничтожается, а отправителю посылается ICMP сообщение Time Exceeded.
Посылаются дейтограммы с TTL=2 (время жизни пакета)
Первый же маршрутизатор уменьшает TTL на 1, т.е. TTL=1 и пакет проходит дальше.
Второй маршрутизатор уменьшает TTL на 1, т.е. TTL=1 и пакет уничтожается, а отправителю посылается ICMP сообщение Time Exceeded.
Попадая на получателя, пакет уничтожается, т.к. получатель не знает, что с ним делать (порт не существует), и отправителю посылается ICMP сообщение Destination Unreachable.
Пример работы traceroute
Создана для стандартизации управления оборудованием разных производителей.
Например, в сети установлены разные маршрутизаторы (cisco, motorola, linux и т.д.), все настраиваются поразному. Нужно изменить настройки на всех маршрутизаторах. Обычным методом придется каждый настраивать индивидуально (интерфейсы у всех разные). С помощью SNMP можно настроить используя один интерфейс.
SNMP служит примером системы управления, в которой для достижения нужного результата не выдается команда, а осуществляется обмен информацией, решение принимается «на месте» в соответствии с полученными данными.
Первый стандарт SNMP определен в RFC1067 (Simple Network Management Protocol J.D. Case, M. Fedor, M.L. Schoffstall, J. Davin Aug-01-1988)
Последняя версия RFC1157 (STD0015 Simple Network Management Protocol (SNMP) J.D. Case, M. Fedor, M.L. Schoffstall, J. Davin May-01-1990)
RFC1592 (Simple Network Management Protocol Distributed Protocol Interface Version 2.0 B. Wijnen, G. Carpenter, K. Curran, A. Sehgal, G. Waters March 1994)
Протокол прикладного уровня работает по умолчанию поверх UDP, но может работать по TCP.
Клиент и сервер обмениваются сообщениями.
Взаимодействие клиент-сервера SNMP. Приведены все пять типов сообщений.
Типы PDU сообщений SNMP
| Тип PDU | Имя | Значение |
| 0 | get-request | Получить значение переменных |
| 1 | get-next-request | Получить следующие переменные после этой |
| 2 | set-request | Установить значение переменных |
| 3 | get-response | Выдать значение переменных (Посылает агент в ответ на get-request, get-next-request, set-request) |
| 4 | trap | Уведомить менеджера, когда что-либо произошло с агентом |
Формат SNMP-сообщений. Trap приведен отдельно.
Значения статуса ошибки SNMP.
| Статус ошибки | Имя | Значение |
| 0 | noError | Все в порядке |
| 1 | noError | Клиент не может поместить отклик в одно SNMP сообщение |
| 2 | noSuchName | Оператор указывает на несуществующую переменную |
| 3 | badValue | В команде set использовано недопустимое значение или неправильный синтаксис |
| 4 | readOnly | Менеджер попытался изменить переменную, которая помечена как «только для чтения» |
| 5 | genErr | неопознанная ошибка |
| Тип trap | Имя trap | Значение |
| 0 | coldStart | Установление начального состояния объекта |
| 1 | wannStart | Восстановление начального состояния объекта |
| 2 | linkDown | Интерфейс выключился. Первая переменная в сообщении идентифицирует интерфейс |
| 3 | linkUp | Интерфейс включился. Первая переменная в сообщении идентифицирует интерфейс |
| 4 | authenticationFailure | От менеджера получено SNMP-сообщение с неверным паролем |
| 5 | egpNeighborLoss | EGP-партнер отключился. Первая переменная в сообщении определяет IP-адрес партнера |
| 6 | entrpriseSpeclfic | Информация о trap содержится в поле «Специальный код» |
Поле «Специальный код» для типов trap 0…4 поле должно быть равно нулю.
11.2.2 Структура информации управления (SMI)
Первый стандарт SMI определен в RFC1155 (Structure and identification of management information for TCP/IP-based internets M.T. Rose, K. McCloghrie May-01-1990)
Последний стандарт для версии SMIv1 RFC1155 (Structure and identification of management information for TCP/IP-based internets M.T. Rose, K. McCloghrie May-01-1990)
Последний стандарт для версии SMIv2 RFC2578 (Structure of Management Information Version 2 (SMIv2) K. McCloghrie, D. Perkins, J. Schoenwaelder April 1999)
Некоторые типы данных:
TimeTicks (тики времени). Счетчик, который считает время в сотых долях секунды с какой-либо исходной точки.
11.2.2.1 Дерево идентификаторов объектов
Все управляемые объекты глобальной сети расположены в дереве.
Идентификатор объекта (OID) это последовательность целых десятичных чисел, разделенных точками (1.4.2.1.6). Эти целые числа представляют собой древовидную структуру, напоминающую DNS
Дерево идентификаторов объектов в информационной базе управления
Например, ветвь 1.3.6.1.2.1.4 (iso.org.dod.internet.mgmt.mib-2.ip) дает информацию необходимую для управления компьютерами и маршрутизаторами.
11.2.3 Информационная база управления (MIB)
Первый стандарт MIB определен в RFC1066 (Management Information Base for network management of TCP/IP-based internets K. McCloghrie, M.T. Rose Aug-01-1988 )
Последний стандарт для версии MIB-I RFC1156 (Management Information Base for network management of TCP/IP-based internets K. McCloghrie, M.T. Rose May-01-1990)
Последний стандарт для версии MIB-II RFC1213 (STD0017 Management Information Base for Network Management of TCP/IP-based internets:MIB-II K. McCloghrie, M.T. Rose Mar-01-1991)
Ветвь 1.3.6.1.2.1.4 (iso.org.dod.internet.mgmt.mib-2).
Расмотрим подробнее ветвь UDP (рис. выше).
Группа UDP содержит четыре переменные, и одну таблицу (udpTable) из двух переменных.
Переменные группы udp
| Имя | Тип данных | Чтение/Запись | Описание |
| udpInDatagrams | Counter | Только чтение | Количество UDP датаграмм, доставленных пользовательским процессам. |
| udpNoPorts | Counter | Только чтение | Количество доставленных UDP датаграмм, для которых не оказалось порта назначения. |
| udpInErrors | Counter | Только чтение | Количество недоставленных UDP датаграмм по другим причине (например, ошибка контрольной суммы UDP). |
| udpOutDatagrams | Counter | Только чтение | Количество отправленных UDP датаграмм. |
Как видно из таблицы эти переменные обеспечивают полный сбор статистики для UDP-протокола.
Переменные в udpTable.
| Имя | Тип данных | Чтение/Запись | Описание |
| udpLocalAddress | IpAddress | Только чтение | Локальный IP адрес слушающего процесса. |
| udpLocalPort | INTEGER [0..65535] | Только чтение | Локальный номер порта слушающего процесса. |
11.2.3.1 Примеры идентификации
Каждая переменная в MIB должна быть идентифицирована.
Обращение осуществляется только к тупиковым (в дереве) узлам.
11.2.3.1.1 Простые переменные
Обращения к этой переменной чаше делаются в сокращенном виде, udpInErrors.0, т.к. реально идет обращение к идентификатору объекта 1.3.6.1.2.1.7.1.0.
Рассмотрим идентификацию пунктов таблицы udpTable более подробно.
Пример таблицы udpTable.
Из таблицы видно, что система готова принимать UDP датаграммы с любого интерфейса (0.0.0.0) для портов 53 (DNS), 67 (BOOTP) и 161 (SNMP).
11.2.3.1.3 Абстрактная форма записи
Все поля в MIB и SNMP сообщениях описываются с использованием ASN.1.
Например, ASN.1 определение переменной udpNoPorts выглядит так:
udpNoPorts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
«The total number of received UDP datagrams for which there
was no application at the destination port.»
::= < udp 2 >
Новое в этой версии:
Определены два новых MIB: MIB SNMPv2 и MIB SNMPv2-M2M (менеджер-менеджер).
11.2.5 Программы для работы с SNMP

















