Инструментальные средства обеспечения безопасности

Вывод утилиты Tcpdump


В справке man для tcpdump раздел вывода является, вероятно, одним из самых больших разделов. Поскольку tcpdump пробует интерпретировать некоторые протоколы по-разному, то фактический вывод tcpdump изменится также в зависимости от опций, которыми вы ее снабдили и типа пакетов, которые вы фильтруете. Мы не можем рассмотреть здесь все, но рассмотрим некоторый основной вывод утилиты tcpdump и поговорим о том, что он значит.

Ниже приводится вывод утилиты tcpdump, полученный без опций.

20:11:28.527191 eth0 B somehost.netbios-ns > 192.168.1.255.netbios-ns:NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST 20:11:28.531361 eth0 arp who-has 192.168.1.1 tell originix (0:e0:29:38:b4:67) 20:11:28.531939 eth0 arp reply 192.168.1.1 is-at 0:4:5a:e3:44:a3 (0:e0:29:38:b4:67) 20:11:28.531994 eth0 originix.1024 ns01.domain: 49930+ PTR? 255.1.168.192.in-addr.arpa. (44) 20:11:28.630838 eth0 ns01.domain originix.1024: 49930 NXDomain* 0/1/0 (116) (DF) 20:11:28.632600 eth0 originix.1024 ns01.domain: 49931+ PTR? 1.1.168.192.in-addr.arpa. (42) 20:11:28.655958 eth0 ns01.domain originix.1024: 49931 NXDomain 0/1/0 (114) (DF) 20:11:28.657685 eth0 originix.1024 ns01.domain: 49932+ PTR? 150.1.1.10.in-addr.arpa. (41) 20:11:28.668566 eth0 ns01.domain originix.1024: 49932 1/2/2 PTR ns01. (162) (DF) 20:11:29.277025 eth0 B somehost.netbios-ns 192.168.1.255.netbios-ns:NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST

Давайте вначале сосредоточимся на отдельной строке. Первое значение представляет собой временную метку для пакета. Заметьте, что заданный по умолчанию формат не включает дату. Следующая порция информации - это интерфейс, на котором этот пакет был получен. После интерфейса мы видим <, > или B. Это указание, был ли пакет входящим, выходящим или широковещательным. Затем мы видим имена хостов или IP-адреса, за которыми следует точка и имя порта или номер. Знак "больше" (>) указывает, что хост и порт отправителя будут всегда слева, а хост и порт получателя будут всегда справа.

Первый пакет распознан как NetBIOS поверх TCP- (NBT-) пакета.
Поскольку tcpdump может интерпретировать часть информации о пакете, он сообщает вам, что somehost выполнял широковещательный запрос NetBIOS, вероятно пробуя искать имя хоста для сетевого IP-адреса.
Второй пакет оказался запросом протокола определения адресов (ARP). ARP отображает IP-адрес на MAC-адрес Ethernet и наоборот. Originix посылает запрос ARP, прося MAC-адрес, соответствующий адресу 192.168.1.1 (возможно, это его шлюз). На следующей строке шлюз отвечает со своим MAC-адресом. Теперь два адаптера Ethernet могут говорить друг с другом на канальном уровне (Data Link Layer). Этот шаг необходим прежде, чем может осуществиться любая IP-связь.
Четвертая и последующие строки содержат то, что оказалось трафиком DNS. Originix делает запрос к ns01 через порт домена 53. Поскольку утилита tcpdump может также интерпретировать пакеты DNS, то она пытается дать информацию о фактическом содержании пакета, включая тип запроса и адрес, с которого он сделан. Из вывода следует, что сначала она выполняет обратный поиск на "широковещательном" адресе (192.168.1.255), затем она пробует обратный поиск на 192.168.1.1, и, наконец, она пробует разрешать 10.1.1.150. Первые два поиска оканчиваются неудачей и получением сообщений "NXDomain" или "несуществующий домен" с DNS-сервера. Но адрес 10.1.1.150 успешно разрешается к имени ns01, которое является именем самого сервера.
Выше был приведен пример некоторых пакетов, которые утилита tcpdump может естественно интерпретировать.
С другими пакетами, подобными нормальному telnet- или SSH-трафику, будет отображена только информация о пакетах, и ничего больше.
20:28:48.375504 eth0 <somehost.2765 > originix.ssh: P 13024:13068(44) ack 42597 win 64695 (DF) 20:28:48.375574 eth0 >originix.ssh > somehost.2765: P 42597:42877(280) ack 13068 win 32120 (DF) 20:28:48.377010 eth0 < somehost.2765 > originix.ssh: P 13068:13200(132) ack 42877 win 64415 (DF) 20:28:48.377081 eth0 >originix.ssh > somehost.2765: P 42877:43157(280) ack 13200 win 32120 (DF)


Здесь мы поймали середину SSH-сеанса между Originix и somehost. Мы можем видеть, что установлен флаг P (push). Мы можем также видеть размер пакетов, поскольку утилита отображает относительный порядковый номер TCP-пакета, за которым следует ожидаемый номер и размер пакета (13024:13068 (44)). Заметьте, что вторая строка дает ack 13068. Это оказывается подтверждением получения предыдущего пакета, и того, что 13068 является следующим номером пакета, который он ожидает. Размер TCP-окна (наибольшее количество данных, которые он может обрабатывать) сообщается хостом в каждом пакете, и в этом примере установлен бит "не фрагментировать", чтобы препятствовать разделению пакета на части. Наблюдение TCP-трафика таким способом может быть чрезвычайно полезным при изучении работы протокола.
Вы можете многое узнать о внутренней работе TCP, выполняя tcpdump и наблюдать, что происходит, когда вы запускаете сеанс telnet. Проверьте следующее.
20:30:58.635657 eth0 < somehost.2910 > originix.telnet: S 213111209:213111209(0) win 65535 <mss 1460,nop,nop,sackOK> (DF) 20:30:58.636019 eth0 > originix.telnet > somehost.2910: S 1513461939:1513461939(0) ack 213111210 win 32120 <mss 1460,nop,nop,sackOK> (DF) 20:30:58.636659 eth0 < somehost.2910 > originix.telnet: . 1:1(0) ack 1 win 65535 (DF) 20:30:58.639213 eth0 < somehost.2910 > originix.telnet: P 1:4(3) ack 1 win 65535 (DF)
Выше приведен вывод, который дает tcpdump, встречая подключение telnet. В двух первых строчках обратите внимание на отличия от тех пакетов, которые мы рассматривали в сеансе SSH. Этот пакет начинает подключение. Мы можем это утверждать, потому что установлен флаг S (SYN). Мы также видим, что порядковые номера пакетов в двух первых строках намного больше. Дело в том, что tcpdump использует фактические порядковые номера TCP-пакетов (32-х битные значения из диапазона от 0 до 4294967295) в начале TCP-подключения. Для остальной части подключения по умолчанию используются значения относительных порядковых номеров так, чтобы пользователям было легче видеть изменения во время передвижения пакетов туда-сюда.


Мы также видим некоторые опции TCP, по которым ведутся переговоры во время трехэтапного "квитирования" (mss1460, nop, nop, sackOK). После того, как связь установлена, somehost начинает посылать данные (3 байта заслуживающих внимания данных).
Используя программу BUTTSniffer, мы наблюдали процесс входа в систему из сеанса telnet. Мы можем делать это и с помощью утилиты tcpdump, используя опцию -X, чтобы отобразить содержание пакета в ASCII-коде. Однако поскольку эта опция отображает и заголовки пакета, и данные, то трудно локализовать то, что мы ищем. Сеанс telnet особенно труден для прослушивания с помощью tcpdump, потому что пакет посылается для каждого символа, который печатается. Соединить это в одно целое вручную может быть трудно. Но таким путем все-таки можно подслушать любого клиента, который держит в памяти информацию о пользователе и о пароле, а затем посылает ее одновременно в одном пакете (подобно Web-транзакции по HTTP, или входу в систему по FTP).
Давайте попробуем подслушать сеанс FTP с помощью команды tcpdump -X dst port 21. Поскольку FTP использует команды USER и PASS для пересылки имени пользователя и пароля, мы должны искать вывод, содержащий эти команды.
20:51:06.697724 somehost.2937 originix.ftp: P 0:10(10) ack 84 win 65452 (DF) 0x0000 4500 0032 5bd4 4000 8006 1ad8 c0a8 0165 E..2[.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 3325 a621 9a45 ...d.y....3%.!.E 0x0020 5018 ffac 68a7 0000 5553 4552 2062 6f62 P...h...USER.bob 0x0030 0d0a ..
20:51:06.893543 somehost.2937 originix.ftp: . ack 116 win 65420 (DF) 0x0000 4500 0028 5fd4 4000 8006 16e2 c0a8 0165 E..(_.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...d.y....3/.!.e 0x0020 5010 ff8c a023 0000 0000 0000 0000 P....#........
20:51:10.828077 somehost.2937 originix.ftp: P 10:23(13) ack 116 win 65420 (DF) 0x0000 4500 0035 64d4 4000 8006 11d5 c0a8 0165 E..5d.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...d.y....3/.!.e 0x0020 5018 ff8c fe75 0000 5041 5353 2062 6f62 P....u..PASS.bob 0x0030 3132 330d 0a 123 ..
Фильтруя только трафик, предназначенный для порта 21, и используя опцию -X, мы можем легко обнаруживать информацию FTP, предназначенную для входа в систему. В этом примере снова появился пользователь bob, регистрирующий вход на FTP-сервер на хосте originix с паролем bob123.

Содержание раздела