Сначала дейтаграмма заголовка IP.

Я много раз рассказывал уже про 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, если установлен только этот флаг.

Кажется, на этом все, ждите продолжения.

Check Also

Основы цифровой схемотехники. Собираем сумматор с ускоренным переносом из дискретных микросхем

Говорят, древние программисты собирали свои компьютеры самостоятельно, уверенно обращались…

Оставить мнение