PDA

Просмотр полной версии : TCPdump - дополнение к фаерволу



SDA
24.11.2005, 22:41
Я много раз рассказывал уже про firewall’ы. Их главной проблемой является то, что они внушают пользователю чувство уверенности, что он защищен (а после того, как у меня на компьютере Outpost стал занимать 4 Гигабайта оперативной памяти из-за поразившего его червя, использовавшего уязвимость в outpost, я уже полностью перестал так думать). Я предполагаю, что одного firewall'а мало, необходимо иметь еще и обычный анализатор пакетов и голову на плечах. Зачем нужен анализатор пакетов? Например, он может помочь определить, взломали ваш компьютер или просто сканировали, в то время как Kaspersky Anti-hacker даже не даст журнала событий нормального.

Итак, сегодня я начну повесть о TCPdump (или Windump в windows). Для его установки понадобится WinPCap. Что делает это программа? Она анализирует пакеты, которые предназначены вашему компьютеру и показывает дату соединения, IP-адреса отправителя и получателя, тип пакета, а так же адрес данных в стеке Tcp/ip. Если windump запускается с параметром –vv, то он показывает так же и сам пакет в виде шестнадцатеричного кода.

Вот пример его отчета:

12:00:00.000000 Makarov.homenet.4000 > user.homenet.23 : S 100000000:100000000(0) win 8760 (DF)
12:00:00.000001 user.homenet.23 > makarov.homenet.4000 : S 200000000:200000000(0) ack 100000001 win 1024 (DF)
12:00:00.000002 makarov.homenet.4000 > user.homenet.23: . ack 10 win 8760 (DF)

Теперь просмотрим эти записи. Сначала лучше подумайте сами, а потом прочитайте пояснения. Makarov.homenet отсылает с порта 4000 пакет компьютеру user.homenet на порт 23 на соединение (SYN, обозначение буквой S), так что тот занесется в стек с по адресу 100000000, в скобках указан размер полезного содержимого пакета (0 байт), 8760 обозначает размер окна (это размер буфера, который имеет отсылающий в своем распоряжении для обмена данными, а 1460 – максимальный размер TCP-сегмента (максимальный размер(1500) для сетей Ethernet – 40 байт заголовков).

Далее user.homenet отсылает обратный запрос на makarov.homenet. Он по принципу построения отличается только тем, что в нем есть ack 100000001, что обозначает, что это ответный пакет на соединение (ack), который был занесен в стек по адресу 100000001. Теперь уже makarov.homenet отправляет последний ack пакет, связанный с подключением, в котором говорит user.homenet, что получил его пакет с ответом и ждет первых 10 байт данных. Причем здесь уже цифра написана не 100000001: 100000011, а 10, потому что мы согласовали место, с которого вниз по стеку будут «расти» данные еще при подключении и теперь нам достаточно указывать только размер, а не адрес.

Если бы был включен параметр –vv, то какой-нибудь пакет выглядел бы так (выбран случайный пакет):

12:00:00.000000 127.127.127.127 > 127.127.127.128: icmp: echo reply


Первые 4 биты указывает на используемую версию протокола IP. В данном случае это есть версия 4 (4500 из 16 в двоичную, берем старшие 4 бита, получаем 4, а не потому что первая цифра - 4). Можно узнать версию протокола (который идет со смещением в 9 байт). В данном случае это 11 (четыре части по четыре символа + одна по две итого смещение девять байт, а за ними идет 11). Такое значение подходит для протокола UDP. Можно посчитать заголовок, и соответственно найти полезную часть пакета (данные в нем). Всего надо отсчитать 40 байт, то есть полезная нагрузка здесь - 4F45 4645 4C46.

Помимо SYN и ACK флагов могут употребляться и другие, которые располагаются в одном байте:

7 6 5 4 3 2 1 0
Резерв. Резерв. URG ACK PSH RST SYN FIN

7 и 6 биты должны быть равны нулю, они зарезервированы, но часто их используют для определению ОС, т.к. стеки в разных ОС по разному реагируют на эти флаги.

URG – экстренная информация, ее надо передать раньше другой (обозначается буквой U)
PSH – передача данных проходит быстрее (обозначается буквой P)
RST – reset, срочное завершение (обозначается буквой R)
FIN – медленное завершение (обозначается буквой F)

Иногда встречаются неправильные пакеты. Так, в них могут быть установлены флаги Syn и Rst, что позволит узнать реакцию на такой пакет и определить, например, ОС жертвы.

Хочется рассмотреть еще один случай. В нем в отчет добавится еще один параметр – номер пакета. Это происходит из-за фрагментации, которая существует чтобы большие пакеты могли проходить в сети, в которой существует предел размера пакета.

makarov.homenet > user.homenet: icmp: echo request (frag 10000:120@0+)
makarov.homenet > user.homenet: icmp: (frag 10000:120@120+)
makarov.homenet > user.homenet: icmp: echo request (frag 10000:120@240+)

Здесь с 10000 – номер (ID) пакета, 120 – его длина, frag – обозначение фрагментации, @0 – смещение фрагмента пакета относительно начала пакета, а + - обозначение включенной фрагментации (флаг MR), а так же то, что есть еще фрагменты этого пакета.

В Windump можно так же делать фильтры. Так ip[x]=y обозначает, что для x – смещение:длина значение должно быть y. После чего можно ввести команду tcpdump ‘ip[x] = y’ или сохранить в файле строку ip[x] = y, а потом запустить tcpdump –F /somefile. Как, например, опередить, что данный пакет пришел на завершение? Tcp[13] & 0xff = 1, где 13 – начало байта с флагами, 0xff – длина, а 1 значение. И поскольку Fin – самый младший бит байта, то значение байта должно быть равно 1, если установлен только этот флаг.

Автор - makt_liCh

Первоисточник - www.xakep.ru