Что такое ICMP?
ICMP (Internet Control Message Protocol) – это протокол, который сетевые устройства (например, маршрутизаторы) используют для генерации сообщений об ошибках, когда сетевые проблемы препятствуют прохождению IP-пакетов..
Протокол управляющих сообщений Интернета является одной из фундаментальных систем, обеспечивающих работу Интернета. Хотя вы, возможно, не слышали о ICMP, вы, вероятно, слышали об одной из его функций: Ping. В этом руководстве вы узнаете больше об этом важном протоколе..
История ICMP
ICMP является частью Стек протоколов TCP / IP. Он находится на Интернет-слой и это стандарт сообщений об ошибках, который поддерживает основной интернет-протокол. Первоначальное определение ICMP было написано Джон Постел, один из основателей интернета. Первый стандарт был опубликован в апреле 1981 года в RFC 777. С тех пор он несколько раз обновлялся. Стабильное определение протокола содержится в RFC 792, который также был написан Постелом и опубликован Инженерно-техническая группа в сентябре 1981 года.
Цель ICMP
Хотя Интернет-уровень более низкого уровня не должен быть связан с обеспечением соединения, ICMP дает небольшой отзыв о связи, когда что-то идет не так. Таким образом, даже если вы используете UDP, который имеет установления соединения В модели связи все еще можно выяснить, почему произошла ошибка передачи. Все подключенные к сети устройства могут обрабатывать сообщения ICMP, включая маршрутизаторы и конечные устройства. ICMP был адаптирован для работы с IPv6 так же тщательно, как он служил IPv4.
Поскольку этот протокол находится на интернет-уровне, его сообщения передаются по IP-пакетам и поэтому существуют на более высоком уровне, чем рабочие структуры коммутаторов. Хотя ICMP переносится внутри IP-пакета, он не существует внутри пакетов, переносящих данные. Пакет ICMP генерируется только в ответ на входящий пакет данных, когда передача этого входящего сообщения завершается неудачно. Состояния ошибки, которые провоцируют пакет ICMP, часто являются результатом данных, содержащихся в заголовке IP ошибочного пакета..
Структура пакета ICMP
Когда маршрутизатор рикошет возвращает пакет ICMP для сообщения об ошибке, он воссоздает все поля в исходном заголовке IP пакета, о котором он сообщает. Таким образом, программа сбора ошибок на исходном компьютере-отправителе может анализировать заголовок и точно определять, какой из отправленных им IP-пакетов не выполнен.
После заголовка IP приходит заголовок ICMP из трех полей. Они содержат код, который классифицирует ошибку, поле подкода, которое уточняет описание кода ошибки, а затем контрольную сумму. После поля ICMP идут первые восемь байтов полезной нагрузки, которые на самом деле заголовок транспортного уровня (TCP или UDP).
Коды сообщений ICMP
Первое поле кода в блоке ICMP содержит некоторую очень полезную информацию. Код числовой, и вот некоторые из наиболее интересных значений, которые поле может иметь:
0: эхо-ответ – используется для пинга
3: пункт назначения недоступен
4: источник гашения – маршрутизатор перегружен
5: перенаправление – используйте другой маршрутизатор
8: эхо-запрос – используется для пинга
9: рекламный ответ маршрутизатора
10: запрос маршрутизатора
11: превышено время – используется для трассировки
Время жить
Одно из полей заголовка IP, которое наиболее известно для провоцирования ICMP-генерирующей ошибки, является Время жить поле (TTL). Это поле содержит число, которое выражает максимальное количество маршрутизаторов, через которые может пройти пакет. Это число уменьшается на единицу каждым маршрутизатором, который обрабатывает пакет. Если маршрутизатор получает пакет с нулевым TTL, он отбрасывает этот пакет и отправляет сообщение ICMP обратно отправителю этой неудачной передачи.
В случае исчерпания TTL причина, по которой пакет не может достичь своего назначения, не имеет ничего общего с проблемами маршрутизатора или искаженными данными в заголовке пакета. TTL – это конструкция, созданная для предотвращения мошеннических пакетов в интернете. когда ошибки таблицы маршрутизатора привели к круговым путям. Тем не менее, побочный продукт этого поля является очень полезным инструментом сетевого администрирования: Трассировка.
Смотрите также: Обзор инструментов SolarWinds Traceroute
Трассировка с ICMP
Traceroute – это хорошо известный инструмент сетевого администратора, который показывает типичный путь от запускающего компьютера до заданного IP-адреса назначения. Утилита отправляет серию пустых IP-пакетов. Важной особенностью каждой из этих передач является значение TTL в заголовке IP..
Программа Traceroute начинает отправку пакета с TTL 0. Это будет отброшено первым маршрутизатором, который его получит, который обычно является сетевым шлюзом. Этот маршрутизатор отправляет обратно пакет ICMP. Единственная информация, которую Traceroute хочет получить от этого ответа, время, которое требуется, чтобы вернуться и адрес источника пакета. Это говорит Traceroute адрес первого маршрутизатора на пути к месту назначения. Затем программа отправляет пакет с TTL 1. Это проходит через шлюз, который уменьшает TTL на 1. Маршрутизатор, который получает пакет, затем видит, что TTL равен нулю, отбрасывает пакет и отправляет обратно пакет ICMP. Таким образом, обнаруживается второй маршрутизатор в пути, и Traceroute отмечает время, необходимое для получения этого ответа. Увеличивая TTL на 1 с каждой передачей, Traceroute в конечном итоге создает карту всех ссылок через Интернет на указанный адрес.
Проблемы с трассировкой
Traceroute – очень простой инструмент, который использует преимущества уже существующей административной функции и делает эффективная и информативная утилита из этого. Есть несколько слабых мест с Traceroute.
Администратор сети, вероятно, воспользуется утилитой, чтобы увидеть, почему недавнее подключение прошло так плохо – либо медленно, либо не удалось. тем не мение, Traceroute не может сказать вам, что произошло в прошлом. Это может только дать вам обратную связь о продвижении текущего маршрута.
Каждый маршрутизатор самостоятельно принимает решение о том, какой из их соседей предлагает кратчайший путь к IP-адресу назначения в пакете. Однако это решение может не всегда быть одинаковым каждый раз. Если маршрутизатор перегружен или выключен, соседние маршрутизаторы скоро узнают о проблеме и настроить их таблицы маршрутизации, чтобы обойти проблему. Эта измененная информация о маршрутизации распространяется на все маршрутизаторы в Интернете, но проблема может быть решена до того, как об этом узнают все маршрутизаторы. Тогда перестроенный маршрут распространится по всему миру.
Опция с командой «-J”Позволяет вам указывать адреса маршрутизаторов, по которым вы хотите, чтобы Traceroute следовал в качестве пути. Однако, чтобы использовать это средство, вам необходимо уже знают путь, по которому пошла неисправная передача и вы можете получить эту информацию только при выполнении Traceroute по тому же пути.
Итак, если вы испытываете медленное соединение, команда Traceroute, которую вы впоследствии выполните, может не показать, что произошло потому что к тому времени. Возможно, проблема, вызвавшая задержку, была устранена, и ваш путь Traceroute может отличаться от того, который использовался медленным.
Другая проблема, связанная с Traceroute, заключается в том, что он дает интересное отображение пути, который ваша передача, вероятно, приведет к заданному месту назначения. тем не мение, он не дает вам никаких инструментов, чтобы делать что-либо с информацией, которую вы получаете. Невозможно указать путь, и поэтому, если вы видите, что один из маршрутизаторов в Интернете дает медленное время отклика, все, что вы можете сделать, это узнать, какой маршрутизатор замедляет ваши соединения. Поскольку этот маршрутизатор не принадлежит вашей компании, и вы не можете ускорить его, вы приобрели знания через Traceroute, но не можете на них воздействовать.
Смотрите также: Лучшие инструменты для Traceroute
ICMP Ping
Пинг использует два кода ICMP: 8 (эхо-запрос) и 0 (эхо-ответ). Когда вы вводите команду Ping в командной строке, программа Ping отправляет ICMP-пакет, содержащий код 8 в Тип поле. Ответ будет иметь Тип 0. Программа учитывает промежуток между отправкой пакета эхо-запроса и получением ответа. Таким образом, вы можете получитьвремя поездки туда и обратно”Пакета до данного пункта назначения и обратно.
Пакет эхо-запроса необычен тем, что это единственный ICMP-пакет, который отправляется без провоцирования ошибки. Таким образом, Ping не должен эмулировать состояние ошибки, чтобы получить обратно сообщение ICMP. У Ping есть две опции, которые позволяют вам указать список адресов для пути, по которому должна идти передача. Эти “-J«, Который предлагает маршрут и«-К«, Который диктует маршрут.
ICMP Ping порт
Вы можете задаться вопросом какой порт Ping использует. Ответ: никто. Если утилита позволяет вам «пинговать» порт, это не буквально команда Ping. Вместо этого эта утилита использует пакет TCP или UDP для проверки порта. По правде говоря, этот тип функции называется «сканер портов» или «проверка порта.»
Ping не может использовать порты, потому что это протокол, который существует на более низком уровне, чем Транспортный уровень, где порты являются основной функцией.
Самый близкий метод к доступному отчету о порте ICMP – отправить пакет UDP на определенный порт. Если этот порт не активен, передача вызовет сообщение ICMP от хоста типа 3 (пункт назначения недоступен) подтип 3 (порт назначения недоступен). Таким образом, хотя можно вызвать сообщение ICMP о порте, невозможно использовать механизм Ping для отправки пакета ICMP на этот порт, в первую очередь, в качестве эхо-запроса. Если вы прикрепите номер порта к IP-адресу в команде Ping (т.е. ping :), команда не запустится, а вместо этого вернет синтаксическую ошибку.
Pathping
Pathping это утилита, которая встроенный в операционную систему Windows и это доступно во всех версиях начиная с Windows NT. Эта программа представляет собой комбинацию пинг и Трассировка, так что эксплуатирует три типа сообщений ICMP. Это тип эхо-запроса и эхо-сообщения (8 и 0), а также тип сообщения, превышающий время (11).
Как с Traceroute и Ping, в качестве параметра команды можно указать список адресов для предложенного пути. и утилита попытается отправить пакет адресату по этим адресам.
Pathping создает отформатированный отчет о результатах, который показывает маршрут и время поездки туда и обратно каждому роутеру. Он будет отправлять повторные запросы ping каждому маршрутизатору в пути, а не просто повторно связываться с пунктом назначения. Это то, что делает Ping, или просто регистрирует каждый маршрутизатор на пути один раз, что делает Traceroute.
Pathping не так устойчив, как Ping или Traceroute. Хотя каждое устройство в Интернете способно отправлять сообщения ICMP, не на каждом устройстве активированы функции ICMP. Некоторые владельцы маршрутизаторов и серверов намеренно отключают функции ICMP для защиты от хакерских атак.
Если промежуточный маршрутизатор не будет использовать ICMP, Ping все еще проходит через этот маршрутизатор, чтобы проверить пункт назначения. Если Traceroute обнаруживает маршрутизатор, который не будет отправлять ICMP-пакеты, он просто переходит к следующему маршрутизатору, представляя строку звездочек для необщительного маршрутизатора. В той же ситуации, Pathping завершает свои запросы на маршрутизаторе, у которого отключен ICMP.
Смарф атака
Основная причина того, что некоторые владельцы оборудования отключают возможности ICMP своих устройств, заключается в том, что система может использоваться хакерами в качестве канала для атак. Атака Smurf является одним из таких случаев.
Атака Smurf использует стратегию отражателя. Он не атакует цель напрямую, но вызывает другие компьютеры и маршрутизаторы для отправки сообщений жертве. Злоумышленник определяет широковещательный адрес, используемый в сети жертвы, а затем отправляет эхо-запрос ICMP (пинг). Каждое устройство в сети отправит эхо-ответ обратно маршрутизатору, на котором размещен широковещательный IP-адрес.
Эта атака работает только в больших сетях. Он эффективно провоцирует атаку распределенного отказа в обслуживании (DDoS) изнутри сети, в то время как большинство атак запускаются через удаленные компьютеры через Интернет. Тип атаки можно предотвратить, отключив возможности ICMP на маршрутизаторе шлюза. или путем фильтрации приема запросов, передающих широковещательный IP-адрес сети, на пакеты, поступающие в сеть из удаленного местоположения.
Пинг флуд
Пинг-флуд – это стратегия DDoS, которая перегружает целевой компьютер ICMP эхо-запросы. Некоторые реализации Ping работают лучше, чем другие. Например, атака более эффективна, если команда Ping запускается снаводнениеВариант. Однако эта опция доступна не во всех версиях Ping – это недопустимый параметр в версии, встроенной в Windows, например. Тот факт, что параметр потока не является универсальным, создает проблемы для хакеров, которые хотят направить удаленные компьютеры, зараженные ботнет управляющая программа для отправки запросов Ping. Поскольку вариант затопления редок, вероятно, что большинство устройств в ботнете не смогут запустить атаку.
Эта стратегия атаки имела бы больший успех, если бы хакер гарантировал, что все зараженные компьютеры использовали попытку запуска атаки, чтобы в их реализациях Ping была доступна опция потока. Один из способов обеспечить это – проверить компьютеры перед любой атакой и классифицировать группа, которая имеет правильную форму пинга, или установить Ping с включенным флудом на все компьютеры, зараженные вирусом ботнета.
Простейшей защитой от пинг-потопа является отключить возможности ICMP на роутере. Если вы используете веб-сервер, то брандмауэр веб-приложений должен защитить вас от Ping-флудов..
Пинг Смерти
Ping of Death включает в себя отправку слишком длинных пакетов запроса ping. У запроса будет большое количество заполнителя на конце его в полезной нагрузке. Поскольку датаграмма слишком длинна для передачи, процессор Интернет-протокола будет разбивать строку на куски, размер которых равен максимальному блоку передачи (MTU) отправителя. Получатель заметит, что это очень длинный пакет, который был разбит, и попытается собрать оригинальный длинный пакет перед отправкой его в приложение назначения. Если длина пакета больше байтов, чем размер доступной памяти на принимающем компьютере, попытка повторной сборки пакета приведет к зависанию компьютера.
Ping of Death теперь является общеизвестным типом атаки и поэтому брандмауэры с отслеживанием состояния и системы обнаружения вторжений могут обнаружить его и заблокировать. Как и в случае с любым известным хакерским трюком, его эффективность больше не угрожает. Таким образом, хакеры в значительной степени отказались от стратегии Ping of Death в пользу Пинг флуд.
ICMP туннель
Маршрутизаторы смотрят только на заголовки пакета ICMP, включая заголовок TCP / UDP, который может находиться за данными ICMP. Так нормальный пакет с большим количеством данных будет проходить так же долго, как и с разделом ICMP. Это потенциально черный ход для посетителей, чтобы обойти процедуры аутентификации и тарификации общественных сетей. Это называется ICMP-туннелем или Ping-туннелем..
Невозможно проложить туннель через шлюзы и брандмауэры только с помощью стандартной сетевой утилиты Ping, которую большинство людей имеют на своих компьютерах.. ICMP-туннель должен быть запрограммирован. Это также возможный маршрут в сеть для хакера. К сожалению, для сетевых администраторов, Есть ряд бесплатных туннельных пакетов ICMP, доступных для скачивания из Интернета..
Как и в предыдущих двух типах атак ICMP, Ping-туннели могут быть заблокированы брандмауэрами веб-приложений, системами обнаружения вторжений или просто заблокировав все действия ICMP на сетевом шлюзе.
Твинг-атака
Twinge – программа хакерской атаки. Запускает наводнение ICMP перегружать целевой компьютер. Хотя все запросы Ping, которые получает целевой объект, похоже, поступили из разных источников, все они на самом деле из одного и того же источника., каждый с поддельным IP-адресом источника в заголовке. Twinge, возможно, является просто переименованной утилитой Ping с включенной опцией «флуда». Это было бы очень полезным инструментом для ботнет владельцы загрузить на свои компьютеры зомби, чтобы запустить Пинг-наводнения.
по существу, Twinge-потоп такой же, как Ping-потоп и решения для защиты сети от нее такие же, как и для основной категории DDoS-атак через ICMP: отключите ICMP, установите брандмауэр веб-приложения или брандмауэр с отслеживанием состояния или установите систему обнаружения вторжений.
Обнаружение пути MTU
Максимальная единица передачи (MTU) – это настройка на совместимых с сетью устройствах, которая определяет самая длинная длина IP-пакетов, которые устройство должно обрабатывать. Это выражается в октета, который является восьмибитным байтом. Первоначальная рекомендация MTU для интернет-протокола составляла 576 октетов. Тем не менее, стандарт Ethernet рекомендует 1500 октетов и это стало стандартом для всех сетевых и интернет-устройств.
Можно настроить параметры MTU на любом маршрутизаторе. Так, если ваши пакеты проходят через маршрутизатор с более низким MTU, каждый будет разделен на два IP-пакета. Это замедляет доставку ваших переводов, потому что исходный пакет должен быть повторно собран получателем, прежде чем он сможет прогрессировать к транспортному уровню обработки а затем передать в приложение назначения.
Также можно указать в заголовке IP то разделение, которое называется «фрагментация»Не должно выполняться на пакете. В этом случае маршрутизатор с MTU, меньшим, чем длина пакета, отбросит пакет, а затем сообщит об этом с уведомлением об ошибке ICMP. Это сообщение об ошибке будет иметь тип ICMP 3 (пункт назначения недоступен) подтип 4 (требуется фрагментация, но установлен флаг «не фрагментировать»).
Попытка обнаружения Path MTU позволяет обойти проблему фрагментированных или отброшенных пакетов. Если вы можете определить наименьший MTU на пути, по которому будет проходить ваша передача, вам просто нужно установить собственный MTU на этот размер.
Механизм обнаружения реализуется процедурами отказа, описанными выше. Пакет IP отправляется к месту назначения с полезной нагрузкой, дополненной размером MTU отправителя ине фрагментируйтеФлаг установлен. Если это произойдет, у вас не должно возникнуть проблем с подключением к месту назначения, которому вы отправили тестовый пакет. Если передача вызывает ошибку ICMP, то вы просто должны повторить тест, уменьшая длину пакета каждый раз. При этом вы в конечном итоге отправите проходящий пакет, а длина этого пакета сообщит вам наименьший MTU на пути к пункту назначения..
Пинг имеет возможность установить «не фрагментируйтеФлаг. Однако это будет эффективно только в том случае, если пакет Ping длиннее, чем MTU маршрутизаторов на его пути.. Пинг не дополняет ваш размер MTU, так что сомнительно, что короткий пакет Ping когда-либо будет отброшен.
Linux на основе Пакет IPutils содержит tracepath, который будет выполнять поиск MTU пути для вас. На Windows компьютеры, вы можете проверить бесплатную утилиту mturoute.
ICMP мир
Система ICMP является очень простым механизмом для сообщения о сбое передачи. Тем не менее, это также один из самых мощных инструментов, доступных сетевым администраторам. Хорошая новость в том, что ICMP бесплатный и автоматически доступен на любом подключенном к сети устройстве. Плохая новость в том, что ICMP может использоваться хакерами создавать атаки или даже скрывать соединения через брандмауэры.
Тот факт, что ICMP может использоваться злонамеренно, побуждает многих администраторов сети, не склонных к риску, отключать систему обмена сообщениями. Это позор, потому что он отключает много очень полезных утилит, которые описаны в этом руководстве.
Если вы работаете в сети, и особенно если у вас есть маршрутизатор, который пропускает интернет-трафик, рассмотрите возможность использования брандмауэров с отслеживанием состояния и систем обнаружения вторжений для блокирования неправомерного использования ICMP вместо того, чтобы полностью отключить протокол обмена сообщениями. Изучите настройки и функции встроенного ПО вашего маршрутизатора, чтобы выяснить, есть ли на нем процедуры разрешения злоупотреблений ICMP, которые позволят вам продолжить работу ICMP на устройстве..
Используете ли вы методы ICMP для проверки ваших соединений? У вас есть утилита с графическим интерфейсом на основе ICMP, которую вы регулярно используете и можете рекомендовать другим? Вы выключили ICMP на своем маршрутизаторе, чтобы защитить свою сеть? Оставьте сообщение в Комментарии раздел ниже и поделитесь своим опытом.