ICMP представляет собой тоже относительно простой протокол, который не гарантирует доставки сообщений. Рассмотрим стандартные и необычные значения полей заголовка ICMP-пакета.

Тип и код

В ІСМР-сообщениях не указываются порты. Поэтому для указания типа ІСМР-сообщения используются его первые два байта, хранящие значения типа и кода соответственно. Код ICMP-сообщения используется для дальнейшего подразделения ICMP-сообщений определенного типа.

Например, существуют два вероятных кода ICMP-сообщения типа 11, который указывает на категорию превышения лимита времени. Если код сообщения равен О, то это сообщение “time exceeded in-transit” (“превышение лимита времени на доставку сообщения”), а если код равен 1, то это сообщение “reassembly time exceeded” (“превышение лимита времени повторной сборки пакета”). Доступные значения типов и кодов ICMP-сообщений можно узнать по адресу www.iana.org/assignments/icmp-parameters.

Идентификаторы и порядковые номера

Если рассмотреть некоторые ICMP-запросы, например эхо-запрос, то в ICMP-заголовке можно обнаружить дополнительные поля. Это идентификатор, хранящийся в 4-м и 5-м байтах ICMP-заголовка, и порядковый номер, хранящийся в 6-м и 7-м байтах ICMP-заголовка.

Значения этих полей используются для установки соответствий между парами эхо-запрос/эхо-ответ. Для хостов под управлением UNIX значение идентификатора ICMP-заголовка обычно соответствует идентификатору процесса, который послужил причиной отправки ping-пакета. Одновременно могут быть выполнены несколько команд ping, а идентификатор эхо-ответа позволяет узнать, какому эхо-запросу соответствует этот ответ. Каждая команда ping может являться причиной отправки нескольких эхо-запросов, а порядковые номера позволяют выявить утерянные пакеты. Рассмотрим результат выполнения ping-запроса, в котором продемонстрировано изменение порядковых номеров ICMP-заголовка.

PING sparky (1.1.1.100) from 1.1.1.5 : 56(84) bytes of data.

64 byteg from 1.1.1.100: icmp_seq=0 ttl=255 time=0.8 ms

64 bytes from 1.1.1.100: icmp_seq=l ttl=255 time=0.9 ms

64 bytes from 1.1.1.100: icmp_seq=2 ttl=255 time=7.3 ms

16:33:07.400700 verbo > sparky: icmp: echo request

4500 0054 038d 0000 4001 bedl 0101 0105

0101 0164 0800 9el2 С402 0000 0391 8439

1010 0600 0809 OaOb OcOd OeOf 1011 1213

1415 1617 1819

Давайте рассмотрим на этом примере значения полей идентификатора и порядкового номера ICMP-сообщения. Здесь хостом verbo отправляются ping-запросы на хост sparky. Значения порядковых номеров запросов начинаются с О и увеличиваются для каждого нового запроса. В данном случае процесс отправки ping-запросов был прерван после третьего эхо-запроса.

Если посмотреть на отчет в шестнадцатеричном формате, можно увидеть, что шестнадцатеричным значением идентификатора является с4 02, что соответствует десятичному значению 50178. Так как запрашивающий хост является Linux-хостом, то можно предположить, что данный идентификатор является идентификатором процесса, вызванного командой ping. Это значение остается постоянным для всех эхо-запросов и эхо-ответов, связанных с этой командой. С другой стороны, порядковый номер будет увеличиваться на 1 для каждого нового эхо-запроса и указываться в соответствующем эхо-ответе. Если бы были отображены все эхо-запросы и эхо-ответы, связанные с данным ping-процессом, мы бы увидели еще 4 записи - 2 эхо-запроса и 2 эхо-ответа. Для них идентификатор оставался бы прежним, а порядковые номера были бы равны 1 для второй пары запрос-ответ и 2 - для третьей пары.

Некорректное использование полей идентификатора и порядкового номера

Раньше значения полей идентификатора и порядкового - номера ICMP-сообщения тщательно не проверялись, поэтому они были выбраны хакерами в качестве сигнального трафика для передачи команд на хост-получатель. Например, в распределенной атаке отказа в обслуживании под названием Stacheldraht значение поля идентификатора 667 эхо-ответа ICMP используется для организации соединения между главным и подчиненными хостами. Значение 666 другого эхо-ответа использовалось для ответа подчиненного хоста (агента) в этой атаке. Б атаке TFN значение идентификатора 456 ICMP-сообщения позволяет организовать соединение между клиентом и демоном, а значение 123 используется для ответа клиента (тоже в эхо-ответах). И, наконец, в программе атаки Loki много лет назад было задано статическое шестнадцатеричное значение порядкового номера ICMP-сообщения OxfOOl или 0x0lfO.

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

Резюме

В этой главе были рассмотрены поля заголовков вложенных пакетов IP-дейтаграммы. Безусловно, самым сложным является заголовок TCP-сегмента, так как поля этого заголовка должны обеспечивать надежность, порядок данных, г также управление потоком. Нетрудно догадаться, что начальные значения, задаваемые для некоторых из этих полей, представляют собой ценную информацию при определении типа и версии операционной системы удаленного хоста с помощью программы nmap. Кроме того, часть полей может использоваться для атак со вставкой или скрытых атак, как было показано в примере с контрольной суммой TCP в предыдущей гдаве.

Понять предназначение полей UPD- и ICMP-заголовков значительно проще. Для сканирования UDP-портов с помощью программы nmap используется ответное ICMP-сообщение о недостижимости порта. Исходящие ICMP-сообщения могут использоваться в разведывательных целях, а по значениям полей ICMP-заголовка можно определить операционные системы удаленных хостов. Наконец, значения полей идентификатора и порядкового номера ICMP-заголовка используются для скрытого проведения распределенных атак отказа в обслуживании или обмена данными.

Udp | Обнаружение нарушений безопасности в сетях | Практический анализ


Обнаружение нарушений безопасности в сетях



Новости за месяц

  • Октябрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс