Запрос отклика ICMP (ICMP Echo Request) уникален тем, что практически у всех операционных систем имеется такая функциональная возможность. Благодаря этому приложения на основе ICMP столь популярны среди взломщиков. Обычно для создания запроса отклика ICMP используется утилита ping. Можно четко разделить использование ping в системах UNIX и подобных ей системах и применение ping в ОС фирмы Microsoft. Проведем сравнение двух запросов отклика ICMP: один из операционной системы Microsoft, а другой - из Linux.
Запрос отклика ICMP, созданный в Microsoft Windows NT, SP6a:
• ICMP Echo Request datagram size (Размер дейтаграммы запроса от
клика ICMP): для операционных систем на базе Microsoft Windows раз
мер запроса отклика ICMP, созданного при помощи ping, будет равен
60 байт. Для систем UNIX и подобных ей запрос отклика ICMP, создан
ного при помощи ping, будет равен 84 байт;
• ICMP Echo Request data payload content (Полезная нагрузка данных
запроса отклика ICMP): данные в запросе отклика ICMP, посланного
при помощи утилиты ping из системы на базе Microsoft Windows, бу
дут составлены из букв, в то время как ping в системах UNIX и подоб
ных ей будет использовать числа и символы;
• ICMP Echo Request timestamp (Время отклика на запрос ICMP): при
работе с ping время исчисляется в системе периода кругового обра
щения (round-trip time - RTT), то есть указывается, сколько времени
понадобилось дейтаграмме, чтобы дойти от первоначального хоста
к конечному и обратно. При работе ping в системах UNIX и подобных
ей первые 8 байт полезной нагрузки данных представляют собой вре
менную метку, что помогает нам вычислить RTT. Если пристально рас
смотреть полезную нагрузку данных ping в системе на базе Microsoft
Windows, можно обнаружить, что там нет такой временной метки. Со
держимое начинается с букв. Тогда где же хранится метка времени
при работе с машинами на базе ОС Windows? Вероятно, в памяти;
• ICMP identification number (Идентификационный номер ICMP): опе
рационные системы на базе Microsoft Windows используют для этого
поля постоянные значения. Значение будет неизменно. Это 256, 512
и 786. В системах UNIX и подобных ей, ICMP ID будет равен ID про
цесса, который был присвоен утилите ping при запуске. Это означает,
что для UNIX значение будет постоянно меняться;
• ICMP sequence numbers (Номера последовательности ICMP): систе
мы UNIX и Windows неуклонно увеличивают номера последователь
ности (Seq) на 256. Однако системы UNIX всегда начинают отсчиты
вать последовательность с 0, в то время как системы Windows -
с номера последовательности, использованного при последней итера
ции ping, плюс 256. Например, в предыдущем примере версия ping при работе с Microsoft Windows установила первоначальный номер последовательности 5120, значит, ранее последний номер последовательности был равен 4864. Он будет сброшен до 0 только при перезагрузке системы.
Отдельные взломщики, для того чтобы создать сообщения запроса ICMP или изменить их форму, используют различные виды инструментов ICMP. Мы также можем воспользоваться этой информацией, чтобы определить некоторые из этих инструментов. Например, определить запрос отклика ICMP, созданный не операционной системой, а приложением Hping2. Hping2 - это сетевой инструмент, способный посылать настроенные пользователем IP-пакеты и показывать ответы точно так же, как ping поступает с ответами ICMP. Программа Hping2 использует фрагментацию, произвольный выбор основной части пакета, и его можно применять для передачи файлов через поддерживаемые протоколы.
В данном примере мы создаем запрос отклика ICMP. Однако вместо того, чтобы воспользоваться операционной системой, как в предыдущих случаях с Linux и Windows, мы применим Hping2.
ids #hping2 -1 -с 2 192.168.1.10
echO default routing interface selected (according to /proc)
HPING 192.168.1.100 (echo 192.168.1.100): icpm mode set, 28 headers +
0 data bytes
46 bytes from 192.168.1.100: icmp_seq=0 ttl=128 id=54728 rtt=0.2 ms
46 bytes from 192.168.1.100: icmp_seq=1 ttl=128 id=55496 rtt=0.2 ms
- - - 192.168.1.100 hping statistics - - -
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms
Теперь посмотрим, как Snort записала пакеты запроса отклика ICMP, созданные при помощи Hping2. Обратите внимание на то, что пакет запроса отклика ICMP, созданный этим приложением, отличается от пакетов, созданных другими операционными системами.
02/25-15:42:07.805620 192.168.1.9 -> 192.168.1.10 ICMP TTL:64 T0S:0x0 ID:2256 IpLen:20 Dgml_en:28 Type:8 Code:0 ID:18954 Seq:O ECHO
02/25-15:42:08.802171 192.168.1.9 -> 192.168.1.10 ICMP TTL:64 T0S:0x0 ID:45213 IpLen:20 DgmLen:28 Type:8 Code:0 ID:18954 Seq:256 ECHO
Один примечательный момент заключается в том, что данные, отправленные в запросе отклика ICMP, не были заданы по умолчанию в настройках Hping2. По умолчанию общий размер Echo-generated ICMP дейтаграмм Hping2 всегда будет равен 28 байт. Однако номер ID основывается на ID процесса, аналогично пакетам запроса отклика ICMP, созданным в системах UNIX. Более подробную информацию о декодировании пакетов ICMP можно найти в статье участника нашего проекта Офира Аркина «Identifying ICMP Hackery Tools», размещенной по адресу: http://www.sys-security.com. В приложении G содержится полный список характеристик ICMP.
Имейте в виду, что пассивная дактилоскопия, как и активное выяснение типа системы, имеет свои ограничения. Во-первых, приложения, создающие свои собственные пакеты, такие как Nmap, hunt и teardrop, не будут пользоваться теми же сигнатурами, что и операционная система. Однако эти инструменты зачастую имеют собственные сигнатуры, которые также можно определить (см. пример с Hping2). Во-вторых, взломщик может изменить некоторые настройки системного поведения, тем самым затруднив процесс пассивного анализа. Например, он может изменить значение TTL по умолчанию:
Пассивная дактилоскопия - это еще один пример того, как можно получить информацию о противнике, не ставя его об этом в известность. Несмотря на то что ни один тип данных в отдельности не может точно определить тип операционной системы, при сочетании нескольких сигнатур можно примерно установить тип удаленной операционной системы.