Анализатор пакетов TCPdump работает под управлением UNIX и позволяет перехватывать сетевой трафик, расшифровывать двоичную информацию и выводить на экран отчет. Смысл выдаваемого отчета становится понятным после непродолжительного изучения данного средства. Например, когда я только начал работать в лаборатории ВМС Далгрина, то провел первую неделю, наблюдая за отчетами анализатора пакетов. Мой начальник, Боб Хотт, заходил ко мне каждые несколько часов, чтобы задать несколько вопросов и спросить, что еще послать по сети. В конце недели мы уже разобрались в правилах работы TCP/IP и свойствах своей локальной сети. Я настоятельно рекомендую не жалеть времени на изучение передающейся по сети информации. Поверьте, этот опыт не раз пригодится любому аналитику сетевого трафика.

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

Где достать TCPdump или нечто подобное

TCPdump доступен для загрузки по адресу ftp: //ftp.ee. lbl .gov/tcpdump. tar. Z.

Кроме того, нужно скачать программу lippcap для создания переносимой оболочки, позволяющей перехватывать низкоуровневый сетевой трафик. Для этого обратитесь по адресу ftp: //ftp. ее . 1Ы .gov/libpcap. tar. Z.

Это так называемая “официальная” версия TCPdump, проверенная лабораторией Беркли. Не так давно совместными усилиями программный код TCPdump был отлажен и дополнен новыми возможностями. Последние, более функциональные версии можно найти по адресу www. tcpdump. org.

Windump - это версия TCPdump для Windows, которая доступна для загрузки по адресу http://netgroup-serv.polito.it/windump. Для его работы нужна программа winpcap, загрузить которую можно с этого же сайта.

Использование TCPdump

После установки TCPdump для запуска этого средства в большинстве операционных систем требуются права корневого пользователя (root). Ведь чтение пакетов требует доступа к сетевым устройствам, который возможен только при наличии привилегий суперпользователя. Запуск TCPdump выполняется с помощью одноименной команды tcpdump. По умолчанию перехватывается весь трафик указанного сетевого интерфейса, а все результаты выводятся на экран монитора. Такой режим работы не всегда удобен, так как при прослушивании загруженной сети новые строки будут появляться непрерывно. Поэтому предусмотрено несколько параметров командной строки, которые позволяют изменить режим работы по умолчанию.

Фильтры

Предположим, что нас интересуют только пакеты TCP. Анализатор TCPdump позволяет выбрать интересующие пакеты из общего трафика и выводить отчет только по этим пакетам. В TCPdump встроен “язык” задания фильтров, с помощью которого можно указать одно или несколько полей, исследуемых в 1Р-дейтаграмме. Если пакет удовлетворяет указанным условиям, то запись о нем будет сохранена. Для составления отчета только по TCP-пакетам применяется команда tcpdump

1 tcp'. В этой команде параметр 1 tcp' обозначает используемый фильтр.

Это самый простой фильтр. Фильтры могут быть значительно сложнее, если исследовать несколько полей пакетов на предмет соответствия различным условиям. Для ограничения собираемой информации можно проверять характеристики любого поля IP-дейтаграммы, в том числе и объем полезных данных. Логично предположить, что в TCPdump пригодилась бы возможность указывать файл, в котором хранятся фильтры. Тогда пользователю не пришлось бы каждый раз вручную указывать этот файл в командной строке. И такая возможность, действительно, существует. Параметр -F имя_файла устанавливает, что фильтр сохранен в указанном файле.

Сбор двоичных данных

TCPdump выводит все полученные данные на экран. Такой режим приемлем при поиске определенной записи. Однако в большинстве случаев TCPdump работает в автоматическом режиме, собирая информацию для последующего анализа. Для последующего анализа пригодятся данные в двоичном формате, т.е. в необработанном (raw) виде. В отчете, который выводится на экран, данные уже обработаны и представлены в удобном для восприятия виде. Но для последующего анализа предпочтительнее сохранять все перехваченные данные в двоичном формате. Для сбора информации в режиме без обработки используется команда tcpdump - w имя_файла, где имя_файла - имя файла для хранения перехваченного трафика в двоичном формате.

Для чтения файла с двоичными данными необходим другой параметр командной строки: -г. Команда tcpdump -г имя файла позволяет выполнить чтение информации из заданного файла, а не из сетевого интерфейса по умолчанию. Прочесть данный файл другим способом невозможно. Если вы применяли утилиту UNIX tar, то знаете, что созданный с ее помощью файл архива можно прочесть, только используя эту же утилиту. Подобный принцип применяется и в TCPdump.

Управление объемом сохраняемой информации

Рассмотрим еще один важный вопрос - определение необходимого количества информации, сохраняемой TCPdump. Этот анализатор не стремится сохранить всю передаваемую по сети дейтаграмму. Причиной тому - сбор лишних сведений. Очень часто интерес представляют только заголовки дейтаграммы, для сохранения которых достаточно установить определенный размер. Фиксируемая длина (snapshot length) - это параметр, который задает точное число сохраняемых TCPdump байтов пакета. Стандартным значением этого параметра является 68 байт.

Что же именно содержится в этих 68 байт? Рассмотрим структуру пакета (рис. 2.1). Длина полей заголовка может отличаться от длины, указанной на схе ме. Это зависит от используемого протокола и наличия параметров. Первым идет заголовок пакета канального уровня. Для Ethernet заголовок кадра равен 14 байт и содержит поля для хранения МАС-адресов отправителя и получателя. Далее следует заголовок IP-дейтаграммы, минимальная длина которого (при отсутствии IP-параметров) составляет 20 байт, а за ним - заголовок инкапсулированного протокола (TCP, UDP, ICMP и т.д.) размером от 8 и до более чем 20 байт (максимальное значение будет при наличии всех параметров в заголовке TCP-пакета). Из-за установленного размера фиксируемой длины дейтаграммы часть самих данных (полезной нагрузки), сохраняемых анализатором, не может быть очень большой. Для изменения фиксируемой длины используется команда tcpdump -s длина, где длина- заданное число сохраняемых байтов дейтаграммы. Если нужно сохранить полный Ethernet-кадр (не включая 4 байт трейлера), воспользуйтесь командой tcpdump -s 1514. Это позволит сохранить 14-байтовый заголовок кадра Ethernet плюс 1500 байт - максимальный размер единицы информации, передаваемой по сети Ethernet.

Рис. 2.1. Пример структуры пакета

Для TCPdump существует много других параметров командной строки. Команда man tcpdump позволяет вывести их полный список и описание. Приготовьтесь к тому, что информация будет довольно объемной (лучше заменить картридж в принтере и загрузить побольше бумаги для распечатки), но очень полезной для тех, кому это действительно интересно.

Результаты работы TCPdump

В этой книге приведено множество результатов работы (или, как их еще называют, трассировок) TCPdump. Правильная интерпретация выдаваемых TCPdump данных является одной из сложнейших задач для начинающего аналитика сетевого трафика. Несмотря на то что при исследовании пакетов различных протоколов (например, TCP, UDP, ICMP) TCPdump выдает однотипную информацию, существуют и характерные особенности. Первым шагом анализа является определение использованного протокола. Рассмотрим стандартный формат отчета TCPdump на примере записи, создаваемой этим анализатором при прохождении по сети ТСР-пакета:

09:32:43:910000 nmap.edu.1173 > dns.net.21: S 62697789:62697789(0) win 512

■ 09:32:43:910000 - отметка времени, в которой первые три пары цифр используются для указания соответственно часа, минуты и секунды записи информации, а последние шесть - для хранения дробной части секунды.

■ nmap. edu - имя хоста-отправителя. Если невозможно получить имя хоста по IP-адресу или такое преобразование отменено (с помощью параметра -п команды tcpdump), то вместо имени хоста будет выведен его 1Р-адрес.

■ 1113 - номер порта отправителя.

■ dns . net - имя хоста-получателя.

■ 21 - номер порта получателя (например, порт 21 считается портом FTP).

■ S - обозначение флага TCP. S обозначает флаг SYN, используемый при установке ТСР-соединения.

■ 62697789:62697789 (0) - запись в формате начальный порядковый номер ТСР-сегмента:конечный порядковый номер TCP-сегмента. Числа обозначают байты данных. Порядковые номера в TCP используются для сбора полученных данных в правильной последовательности. Начальный порядковый номер (ISN- initial sequence number) устанавливается при каждом ТСР-соединении и обозначает номер первого байта передаваемых данных. Конечный порядковый номер номер определяется сложением начального порядкового номера с числом байтов, отправленных в TCP-сегменте. В данном случае число байтов, переданных в виде запроса на установление соединения, равно 0 (это стандартное значение). Поэтому значения начального и конечного порядковых номеров совпадают. В процессе нормального установления соединения никаких данных не передается.

■ win 512 - размер окна хоста (в байтах), заданное для передающего хоста nmap. edu. Окно - это буфер для хранения отправляемых данных.

Таблица 2.1. Флаги,ТСР в записях TCPdump

Флаг

Обозначение

Описание

SYN

S

Используется для запроса на установление ТСР-соединения

АСК

ack

Используется для подтверждения получения данных. Может использоваться в комбинации с другими флагами

FIN

F

Указывает, что хост-отправитель начинает процедуру стандартного завершения соединения

RESET

R

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

PUSH

P

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

URGENT

urg

Этот флаг указывает на существование “экстренной” информации, которая должна отправляться в первую очередь. Примером такой информации являются сведения о нажатии комбинации клавиш <Ctrl+C> для немедленного прекращения загрузки данных по FTP

Заполнитель

. (точка)

Если для пакета не установлено флагов SYN, FIN, RESET или PUSH, то после порта получателя указывается заполнитель (точка)

Флаги TCP

В пакетах обычного TCP-соединения устанавливается один или несколько флагов. Флаги используются для указания предназначения пакета. В табл. 2.1 приведены флаги TCP, их обозначение в TCPdump и функция каждого флага.

Узнать TCP-пакет в отчете TCPdump можно по наличию порядковых номеров и обозначений флагов. В записях о UDP-пакетах обычно присутствует слово udp. В большинстве случаев этот метод выявления UDP-протокола работает, но все же не всегда. Дело в том, что TCPdump выполняет анализ пакетов некоторых UDP-служб, например пакетов службы DNS и SNMP-пакетов, не только на уровне транспортного протокола, но и на уровне приложений. Как и анализатор пакетов Ethereal, TCPdump способен различать протоколы и дешифровать полезные данные некоторых из них. В первое время выводимые отчеты могут показаться необычными, так как в них не будет присутствовать ни слово udp, ни характерные признаки протокола TCP (флаги и порядковые номера). Как правило, это просто более подробный отчет о UDP-пакетах. Определить ICMP-пакет довольно просто: в строке отчета обязательно должно присутствовать слово icmp.

Абсолютные и относительные порядковые номера

Хотелось бы обойтись без излишних сложностей при обсуждении отчетов TCPdump, но порядковые номера протокола TCP требуют более внимательного изучения. Как уже указывалось, они присутствуют только в строках отчета о TCP-пакетах и предназначены для сбора отправленной информации в исходном порядке на хосте-получателе. Напомним, что TCP, в отличие от UDP, гарантирует сохранение порядка передаваемой информации. Порядковые номера - это десятичное представление 32-разрядного поля, поэтому они могут иметь довольно большие значения, которые трудно воспринимать на глаз. TCPdump облегчает эту задачу с помощью преобразования абсолютных ISN-номеров (начальных порядковых номеров) в относительные порядковые номера. Это преобразование выполняется после обмена двумя хостами своими ISN-номерами. Рассмотрим следующий фрагмент отчета TCPdump (для простоты была опущена метка времени).

client.сот.38060 > telnet.сот.telnet: S 3774957990:3774957990(0) win 8760 4><mss 1460> (DF)

telnet.сот.telnet > client.com.38060: S 2009600000:2009600000 ack ^>3774957991 win 1024 <mss 1460>

client.com.38060 > telnet.com.telnet: .ack 1 win 8760 (DF)

client.com.38 060 > telnet.com.telnet: P 1:28(27) ack 1 win 8760 (DF)

В разделе “Установление TCP-соединения” этот отчет рассматривается с теоретической точки зрения. А сейчас обратим внимание только на числа, выделенные жирным шрифтом. Первые два из них представляют собой ISN-номера в абсолютном формате, которыми обмениваются хосты client .com и telnet .com соответственно. В третьей строке фрагмента содержится выделенный жирным шрифтом относительный порядковый номер - 1. Это означает, что хост client. com подтвердил получение предыдущего SYN-пакета от client. com, ISN-номер которого 2009600000. Единица используется для подтверждения того, что следующим байтом, который будет принят хостом client. com, будет байт с относительным порядковым номером 1.

Следовательно, если бы отображался абсолютный порядковый номер, то он бы составил 2009600001. Если изложенное кажется непонятным, то обратитесь к более подробной информации о порядковых номерах при подтверждении получения сообщения, которая содержится в разделе “Введение в TCP”.

В последней строке выделенные жирным шрифтом числа 1 и 28 обозначают, что хостом client. com хосту telnet. com были отправлены 27 байт с относительными порядковыми номерами, начиная с 1 и по (не включительно) 28 байт по отношению к абсолютному порядковому номеру 3774957990. Значение порядкового номера подтверждения ack 1 не изменится, пока хост telnet. com не подтвердит получение новых данных.

С помощью команды tcpdump -S можно запретить выполняемое по умолчанию преобразование абсолютных порядковых номеров в относительные после обмена хостами ISN-номерами.

Смена интерфейса, исследуемого TCPdump

TCPdump позволяет исследовать трафик, проходящий как через один заданный интерфейс, так и трафик сразу нескольких интерфейсов. При этом в отчете используемый по умолчанию интерфейс будет иметь наименьший номер (не учитывая интерфейса петли обратной связи). Сервер под управлением Linux может иметь два сетевых адаптера, интерфейсы которых будут, например, etho и ethl. Для изменения интерфейса, исследуемого по умолчанию, используется параметр -i команды tcpdump. Следующая команда позволяет назначить для прослушивания интерфейс рррО. tcpdump -i рррО

Вывод данных в шестнадцатеричном формате

В отчетах TCPdump не выводится информация всех полей сохраненных данных. Например, в заголовке IP-дейтаграммы содержится поле, в котором сохраняется информация о размере заголовка. Как узнать его содержимое, если оно не выводится в стандартном отчете TCPdump? С помощью команды tcpdump -х на экран выводится вся сохраненная информация дейтаграммы (согласно заданному параметру фиксируемой длины) в шестнадцатеричном формате. Хотя читать и интерпретировать данные в таком виде значительно сложнее, зато предоставляется возможность изучить всю сохраненную часть дейтаграммы.

Чтобы разобраться в выводимых в шестнадцатеричном формате результатах TCPdump, необходимо обратиться к дополнительному справочному материалу, в котором описан формат заголовков IP-дейтаграмм и указано значение каждого поля (мы рекомендуем книгу Ричарда Стивенса TCP/IP Illustrated, Volume 1). После изучения соответствующего материала нужно преобразовать шестнадцатеричные значения в десятичные для числовых полей и числовые значения - в код ASCII для символьных полей. Судя по всему, лучшим средством для преобразования записей TCPdump, сохраненных в двоичном формате, является анализатор пакетов Ethereal, в котором для этой цели предназначена команда -w tcpdump.

Введение в TCP

TCP - это надежный, ориентированный на установление соединений протокол. Он используется многими приложениями, в том числе telnet и SMTP. При ложения, подобные telnet, не допускают потери дейтаграмм или их доставки в отличном от исходного порядке. Поэтому они нуждаются в протоколе, обеспечивающем упорядоченную и надежную доставку сообщений. Для обеспечения этих функций в TCP используются следующие механизмы.

■ Уникальное TCP-соединение. Организация TCP-сеанса означает создание уникального (одиночного) соединения между двумя .хостами. После установки соединения оба участвующих в сеансе компьютера получают возможность взаимодействовать между собой в процессе обмена данными.

■ Применение порядковых номеров. С помощью порядковых номеров обеспечивается сохранение порядка отправляемых и получаемых пакетов. Команда telnet позволяет передать все данные, упакованные в несколько TCP-пакетов. Пересылаемым данным присваиваются порядковые номера для указания начала полезных данных в каждом пакете. Пакеты могут приходить в порядке, отличном от порядка их отправления, но порядковые номера позволяют восстановить правильную последовательность данных.

■ Подтверждения. Подтверждения используются для уведомления отправителя о получении данных. В поле подтверждения (АСК) передается значение порядкового номера плюс 1, чтобы обозначить получение конкретных данных. Если отправитель не получает подтверждения о получении конкретных данных за определенный период времени, то данные считаются утерянными, и они отправляются повторно.

Установление ТСР-соединения

Процесс установления ТСР-соединения полностью регламентирован и заключается в выполнении специальной процедуры согласования параметров (handshake). Эта процедура выполняется до пересылки каких-либо данных между хостами. На рис. 2.2 схематически показано, как клиент (хост-отправитель) инициирует установку соединения с сервером (хост-получатель). Термин клиент означает, что данный хост обращается к какой-то службе на другом компьютере. Сервер - это хост, который ожидает запросов к своему порту, выделенному для работы определенной службы. Протокол TCP требует, чтобы в отправляемом пакете был указан порт получателя. Например, стандартными портами сервера являются порты с номерами 23 (telnet), 25 (sendmail) и 80 (HTTP или порт Web-сервера).

Рис. 2.2. Полная процедура согласования параметров соединения

Полная процедура согласования параметров соединения осуществляется следующим образом.

1. Клиент отправляет SYN-пакет в качестве запроса на установку ТСР-соединения.

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

3. Если клиент получает пакет с установленными флагами SYN и АСК и хочет продолжить процедуру установки соединения, то он отправляет серверу АСК-пакет. Таким образом он подтверждает получение запроса на соединение.

После завершения полной процедуры согласования параметров соединение считается установленным. С этого момента два хоста могут обмениваться данными. Если рассмотреть процедуру установки соединения более внимательно, то можно прийти к выводу, что на самом деле устанавливаются два односторонних соединения: первое от клиента к серверу и второе от сервера к клиенту. Так и должно быть, ведь протокол TCP является полнодуплексным, т.е. данные могут передаваться в двух направлениях по независимым каналам.

В следующем примере показан отчет TCPdump при исследовании трафика, передаваемого при выполнении полной процедуры согласования параметров соединения.

cclient.net.39904 > telnet.com.23 : S 733381829:733381829(0) win 8760 4><mss 1460> (DF)

telnet.com.23 > tclient.net.39904: S 1192930639: 1192930639(0) ack 733381830 %win 1024 <mss 1460> (DF)

tclient.net.39904 > telnet.com.23 : . ack 1 win 8760 (DF)

В первой записи клиент tclient. net отправляет запрос на соединение с портом 23 хоста telnet. com. При этом в пакете установлен флаг SYN, за которым указан ISN-номер 733381829 и совпадающий с ним конечный порядковый номер. В скобках указана полезная нагрузка пакета (Обайт). Следующее число - это размер окна (8760) и максимальный размер TCP-сегмента (maximum segment size - mss). Значение размера окна свидетельствует о том, что клиент использует буфер размером в 8760 байт для хранения принимаемых данных. Значение mss информирует получателя о том, что сеть, в которой работает хост, не способна пропускать более 1460 байт полезной нагрузки в одном TCP-сегменте (20-байтовый заголовок IP-дейтаграммы + 20-байтовый заголовок TCP-сегмента + 1460 байт полезных данных ГСР = 1500 байт, что составляет максимальную единицу передачи данных в сети Ethernet). В данном случае, хотя клиент и способен принимать до 8760 байт данных, но сеть, в которой он работает (скорее всего Ethernet), не позволяет доставить бо-:ее 1460 байт полезной нагрузки в одном ТСР-сегменте.

Во второй записи зафиксирована отправка хостом telnet. com пакета с установленными флагами SYN и АСК хосту tclient .net. Этот пакет информирует клиента о доступности сервера и его готовности установить собственное соединение. Кроме того, передается ISN-номер сервера (1192930639), который одновременно является и его конечным порядковым номером, так как никаких данных не передается (стандарт для пакетов с флагами SYN и АСК). Следующим чис лом является номер подтверждения, в данном случае 733381830. Обратите внимание на то, что это значение равно сумме ISN-номера первой записи (733381829) плюс 1. Таким образом, хост telnet. com подтвердил, что он ожидает в качестве следующего порядкового номера передаваемых данных от tclient.net абсолютный порядковый номер 733381830. Установленным размером окна для telnet. com является значение в 1024 байт, а максимальным размером сегмента -1460 байт.

В последней строке содержится запись об отправке клиентом tclient.net АСК-пакета, которая подтверждает получение от сервера пакета с флагами SYN и АСК. Число 1 - это относительный номер подтверждения, указывающий на то, что ожидается получение первого байта информации от telnet. com. Обратите внимание на то, что с этой записи абсолютные порядковые номера меняются на относительные. Непосредственно после двоеточия, отделяющего адрес получателя, установлена точка. Напомним, что точка используется в качестве заполнителя, если в пакете не установлен ни один из флагов PUSH, RESET, SYN или FIN.

Порты клиента и сервера

Ранее было принято, чтобы для работы служб сервера выделялись порты, номера которых находятся в диапазоне от 1 до 1023. В UNIX-системах доступ к этим портам возможен только для процессов, запущенных с привилегиями суперпользователя. Эти порты закрепляются за определенными службами. Другими словами, если однажды на хосте для службы telnet был выделен порт 23, то эта служба и далее будет использовать этот порт по умолчанию. На привилегированных портах работают многие старые, хорошо известные службы. Новые службы отошли от этой традиции, и стандартным портом для AOL Instant Messenger, например, является ТСР-порт 5190. Во многом это объясняется тем, что уже существует больше служб, чем номеров в данном диапазоне.

Порты клиента, которые часто называют временными портами (ephemeral ports), выделяются только для конкретного соединения и доступны для использования сразу после завершения этого соединения. Их номера, как правило, больше числа 1023. При организации клиентом доступа к серверу выбирается один из временных портов. Для большинства служб порты, используемые клиентом и сервером, не меняются до завершения сеанса. Порты двух хостов, между которыми установлено соединение, называются парой сокетов (socket pair). Такое соединение является уникальным - в сети Internet не существует аналогичной комбинации IP-адреса и порта отправителя и IP-адреса и порта получателя.

С одного компьютера к определенной службе на удаленном компьютере могут подключиться несколько пользователей. Но при этом для соединений, организованных различными пользователями, будут выделены разные временные порты. Пусть, например, два пользователя обращаются к информации одного Web-сервера. Хотя при этих двух соединениях используются одинаковые IP-адреса получателя и отправителя и тот же порт Web-сервера (порт 80), но Web-сервер отправляет каждому из получателей ответ именно на его запрос, основываясь на различных номерах временных портов.

Еще раз вернемся к процедуре согласования параметров соединения, но в этот раз обратим основное внимание на порты клиента и сервера.

tclient.net.39904 > telnet.com.23: S 733381829:733381829(0) win 8760 Ъстзв 1460> (DF)

telnet.com.23 > tclient.net.39904: S 1192930639: 1192930639(0) ack 733381830 4>win 1024 <mss 1460> (DF)

tclient.net.39904 > telnet.com.23: . ack 1 win 8760 (DF)

Хост tclient.net для подключения к порту 23 (telnet.com) сервера использует временный порт 39904. После установки соединения все операции обмена данными выполняются посредством этих двух портов. Спустя определенный промежуток времени после завершения соединения хост освобождает порт 39904 и тот становится доступным для использования при другом соединении. Порт 23 сервера telnet. com остается в состоянии ожидания новых запросов к службе telnet.

Завершение соединения

Любой сеанс может быть завершен либо по стандартной процедуре (постепенный метод), либо внезапно, без выполнения этой процедуры. Постепенный метод завершения соединения можно сравнить с разговором по телефону с дилером, когда клиент отвечает продавцу: “Нет, спасибо. Нас это не интересует”, после чего клиент вешает трубку. Таким образом, продавца уведомили о том, что разговор закончен, что ему следует повесить трубку и надоедать звонками другим потенциальным покупателям. Внезапное прекращение соединения выглядит аналогично неучтивому бросанию телефонной трубки без каких-либо лишних разговоров.

Постепенный метод

При использовании стандартного (постепенного) метода завершения ТСР-соединения один из взаимодействующих хостов уведомляет другой хост о желании завершить соединение с помощью FIN-пакета. Второй хост отвечает пакетом с установленным флагом АСК (для подтверждения получения запроса). Этим закрывается первый канал двухстороннего соединения. Затем второй хост также отправляет FIN-пакет и ждет подтверждения (АСК) от первого хоста. Такая процедура необходима, так как TCP является полнодуплексным протоколом. И клиент, и сервер ведут асинхронный обмен данными, поэтому и требуется завершение соединения на обеих сторонах. С помощью TCPdump рассмотрим две операции обмена данными.

1. Клиент инициирует завершение соединения с помощью FIN-пакета, а сервер подтверждает его получение АСК-пакетом.

tclient.net.39904 > telnet.com.23: F 14:14(0) ack 186 win 8760 (DF)

telnet.com.23 > tclient.net.39904: . ack 15 win 1024 (DF)

2. С помощью FIN-пакета сервер инициирует завершение соединения со своей стороны, а клиент отвечает АСК-пакетом подтверждения.

telnet.com.23 > tclient.net.39904: F 186:186(0) ack 15 win 1024 (DF)

tclient.net.39904 > telnet.com.23: . ack 187 win 8760 (DF)

С этого момента можно считать, что был выполнен разрыв соединения между хостами tclient. net и telnet. com.

*

Метод внезапного разрыва

Другим методом завершения соединения является его внезапный разрыв. Для этого один хост отправляет другому пакет с установленным флагом RESET, сообщая этим о необходимости немедленного разрыва соединения, tclient.net.39904 > telnet.com.23: R 28:28(0) ack 1 win 8760 (DF)

В отчете TCPdump показано, как хост tclient .net обрывает соединение с telnet. com с помощью отправки ему пакета с флагом RESET. Дальнейший обмен информацией между хостами в рамках установленного сеанса невозможен.

Обмен данными

После изучения правил установки и завершения TCP-соединений пришло время обсудить, что же происходит в промежутке между двумя этими событиями. Основной причиной организации сеанса связи является необходимость обмена какими-то данными. Рассмотрим отчет об обмене данными между клиентом и сервером после выполнения полной процедуры согласования параметров соединения.

tclient.net.39904 > telnet.com.23: P 1:28(27) ack 1 win 8760 (DF) telnet.com.23 > tclient.net.39904: P 1: 14(13) ack 1 win 1024 telnet.com.23 > tclient.net.39904: P 14: 23(9) ack 28 win 1024

Первая строка информирует о том, что хост tclient.net отправил 27байт данных (число в круглых скобках) хосту telnet. com. Здесь мы впервые встречаемся с использованием символа Р, которым обозначается флаг PUSH. Telnet является интерактивным приложением, для работы которого требуется максимальная скорость обратного ответа. Поэтому использование флага PUSH позволяет немедленно передавать данные приложению после их поступления в буфер получателя. В этой строке также подтверждается, что следующим байтом данных, который ожидается от telnet. com, является байт с относительным порядковым номером 1.

Во второй строке содержится запись об отправке хостом telnet. com 13 байт данных хосту tclient .net и подтверждение получения 1 байт данных от этого хоста. Позднее он должен будет еще подтвердить получение 27 новых байтов, только ч*о отправленных клиентом tclient. net.

В последней строке зафиксирована информация об отправке сервером еще 9 байт данных. Обратите внимание на то, что относительные номера байтов начинаются с 14 (14:2 3), так как предыдущие 13 байт (1:14) были отправлены в прошлом пакете. В этой строке также подтверждается получение 27 байт данных от клиента. Подтверждение (АСК) имеет номер 2 8 и называется ожидаемым подтверждением (expectational acknowledgement). Этот номер- номер следующего ожидаемого к получению байта данных. Флаг АСК используется во всех операциях обмена данными по протоколу TCP, а также в качестве подтверждения организации сеанса.

Практические результаты

Представим, что вам нужно проанализировать сетевой трафик на предмет несанкционированных действий. Действительно ли изложенные теоретические сведения помогут сделать выводы о корректности или вредоносном содержании передаваемого трафика? Элементарный анализ можно выполнить без исследования отдельных битов. Ниже указано несколько ключевых моментов, на основании которых можно сделать предварительное заключение.

■ Проведена ли полная процедура согласования параметров соединения?

Если это так, то сервер ожидал запросов к запрошенному клиентом порту и готов установить соединение. Всё нормально, если на сервере запущена служба, которая и должна была ожидать запросов на этот порт. Но что, если указан порт, который не должен был использоваться? Это может означать, что работает какая-то служба, о которой знает только системный администратор. Кроме того, есть вероятность, что кто-то без вашего ведома установил приложение и создал потайной ход, который и используется в данном случае.

■ Передаются ли данйые? В отчетах TCPdump после порядковых номеров в скобках указывается количество переданных байтов данных. Изучение количества переданных байтов данных может пригодиться при ретроспективном анализе необычной активности во время взаимодействия двух хостов и для оценки масштабов происшествия. Иногда нельзя просмотреть сами байты данных, но объем переданной информации фиксируется всегда. Чрезмерно длительный сеанс или большое количество отдельных операций обмена данными могут свидетельствовать об опасности вероятной атаки злоумышленника.

я Кто инициировал и кто завершил соединение? Определив, какой хост инициировал и завершил сеанс связи, можно сделать вывод о том, кто управляет соединением. Как правило, клиент организует запрос, на который отвечает сервер. Каждый из этих двух хостов может разорвать соединение с помощью пакетов с флагами FIN или RESET, поэтому следует выяснить, какой хост был инициатором завершения сеанса.

Оценка нанесенного ущерба

Использование TCPdump для оценки нанесенного злоумышленником ущерба напоминает изучение обстоятельств и оценку убытков при реальной краже. Вначале следует определить, удалось ли нарушителю действительно проникнуть в компьютерную систему. Отчет о получении повторяющихся SYN-пакетов, на которые не последовало ответа, можно сравнить с безуспешными попытками взлома входной двери. Завершение полной процедуры согласования параметров соединения аналогично входу грабителя в чужой дом (возможно, преступнику придется взламывать еще одни двери, но все же вторжение уже произошло). Если обнаруживается, что злоумышленником была проведена полная процедура согласования параметров соединения, то это эквивалентно обнаружению открытой входной двери, которая была заперта.

По указанному в полученном пакете номеру порта сервера можно определить предмет интереса нарушителя. Если используется порт стандартной службы, например telnet, то, вероятно, атака будет серьезной и нацеленной на серьезный ущерб (получение файлов паролей, информации о доверительных отношениях с другими хостами и т.д.), что равнозначно интересу грабителя к ювелирным украшениям. А что если для взлома были использованы порты, которые не закреплены за стандартными службами? Это признак того, что нарушитель просто проник в вашу систему, доказав возможность взлома. Представьте себе, что, вернувшись домой, вы обнаружили, что кто-то взял ваше молоко из холодильника, выпил его и бросил пустой пакет на пол. Где гарантия, что он больше ничего не взял или не сделал?

Ущерб от квартирной кражи можно оценить по отсутствию хорошо известных ценных вещей. Но что делать, если произошел взлом большого склада, битком набитого разными товарами, которые хранились без надлежащего учета? Как узнать, что именно было украдено? С помощью изучения отчетов TCPdump о количестве переданных байтов данных можно определить средства, с помощью которых нарушитель извлекал украденную информацию. Найденные незначительные улики позволяют добиться серьезных успехов в расследовании преступления.

Вредоносное использование TCP

В следующих главах приведено множество примеров атак с использованием протокола TCP. В приложениях А, “Программы атаки и методы сканирования”, и Приложение В , “Выявление разведывательных действий”, рассматриваются методы сканирования, при которых применяются различные и иногда совершенно неожиданные комбинации TCP-флагов для исследования сетей в обход средств обнаружения и фильтрации. Здесь же мы остановимся на других методах вредоносного использования TCP, например, сканировании с помощью АСК-пакетов, сканировании telnet и перехвате ТСР-сеансов.

Сканирование с помощью АСК-пакетов

Сканирование портов выполняется с различными целями, но в большинстве случаев предназначено для выявления хоста (или хостов), на котором запущена определенная служба. Если на удаленном хосте будет обнаружена потенциально уязвимая служба, то хакер, используя ее уязвимые места, может попытаться проникнуть в систему. Часто попытки сканирования являются прямолинейными и очевидными, когда нарушитель не пытается скрыть своих намерений (иногда скрывается только действительный адрес хоста, с которого выполняется сканирование). Хакер предполагает, что сканирование пройдет незамеченным или (при использовании скомпрометированного чужого хоста), что его не удастся выследить.

Однако иногда нарушители стараются скрыть попытки сканирования и выполнить их максимально незаметно. Рассмотрим приведенный ниже фрагмент отчета TCPdump о нескольких попытках установки соединения. Зондируя сеть, нарушитель пытается найти компьютер, который бы ответил на его АСК-пакет. Для упрощения листинга были удалены отметки времени.

ack.сот.23 > 192.168.2.112.23: . ack 778483003 win 1028 ack.сот.23 > 192.168.31.4.23: . ack 778483003 win 1028 ack.com.143 > 192.168.2.112.143: . ack 778483003 win 1028 ack.com.143 > 192.168.31.4.143: . ack 778483003 win 1028

ack.com.110 > 192.168.2.112.110: . ack 778483003 win 1028 ack.com.110 > 192.168.31.4.110: . ack 778483003 win 1028 ack.com.23 > 192.168 .14 .19 .23 : . ack 778483003 win 1028 ack.com.143 > 192.168.14.19.143: . ack 778483003 win 1028 ack.com.110 > 192.168.14.19.110: . ack 778483003 win 1028 ack.com.23 > 192.168.33.53.23: . ack 778483003 win 1028 ack.com.23 > 192.168.37.3.23: . ack 778483003 win 1028 ack.com.23 > 192.168.14.49.23: . ack 778483003 win 1028

В данном случае с помощью АСК-пакетов выполняется зондирование сети 192 .168. Источником зондирования является хост ack.com. Пакет, в котором установлен только один флаг АСК, отправляется на последнем этапе полной процедуры согласования параметров соединения при подтверждении получения данных FIN-пакета или при передаче данных, когда не отправляются все данные из буфера. Все это не соответствует данному случаю, так как больше никаких данных (которые бы указывали на нормальную реакцию в ответ на полученные пакеты) от ack. com не поступает.

Такая попытка найти подключенные компьютеры напоминает ping-зондирование с помощью эхо-запросов. Если работающий компьютер получает

АСК-пакет, отправленный или на закрытый, или на открытый порт, то он обязан ответить пакетом с флагом RESET. Кроме того, фильтрующие маршрутизаторы, которые разрешают обмен данными по сети только для “полностью установленных” соединений (т.е. только пакетами с установленным флагом АСК), пропустят этот вид зондирования. По мере того как на узлах Internet повышаются требования безопасности и добавляются фильтры для блокирования потенциально опасного трафика, нарушителям приходится придумывать все более хитроумные и незаметные способы сканирования, подобные тому, что использовался в данном примере.

Обратите внимание на то, что в полученных пакетах порты отправителя совпадают с портами получателя. Для клиента необычно выбирать для отправки данных временный порт, номер которого больше 1023. Это еще один признак выполняемого зондирования. При наличии в пакете только одного установленного флага АСК и одинаковых номеров портов отправителя и получателя можно предположить, что такие пакеты созданы специально. Кто-то написал программу для выполнения такого зондирования - данные пакеты не являются стандартным ТСР-трафиком.

Частные сети

В тексте нашей книги для использования в примерах было решено использовать 1Р-адреса, которые относятся к классам 192.168.х.у или 172.16.х.у. Сети таких классов запрещены для использования в Internet (согласно документу RFC 1918) и зарезервированы для локальных сетей. Поэтому все IP-адреса примеров книги будут недействительными для Internet. Это сделано с цельК) скрыть настоящие IP-адреса компьютеров, которые подвергались зондированию % или сканированию, и не допустить использования наших примеров для настоящих атак.

Сканирование Telnet

Внимательно рассмотрим следующий листинг, в котором представлен еще один пример сканирования. Вы видите что-то необычное?

scanner.se.45820 > 192.168.209.5.23: S 4195942931:4195942935(4) win 4096 scanner.se.45820 > 192.168.216.5.23: S 4195944723:4195944727(4) win 4096 scanner.se.5252 6 > 172.16.68.5.23: S 357331986:357331990(4) win 4096 scanner.se.45820 > 192.168.183.5.23: S 4196001810:4196001814(4) win 4096 scanner.se.52526 > 172.16.248.5.23: S 357312531:357312535(4) win 4096 scanner.se.45820 > 192.168.205.5.23: S 4196007442:4196007446(4) win 4096 scanner.se.52526 > 172.16.250.5.23: S 357313043: 357313047(4) win 4096 scanner.se.52526 > 172.16.198.5.23: S 357365266: 357365270(4) win 4096 scanner.se.52526 > 172.16.161.5.23: S 357355794: 357355798(4) win 4096

С хоста scanner. se выполняется сканирование компьютеров сетей 192 .168 и 172 .16. При этом запрос отправляется на порт 23 (служба telnet). Можно сделать вывод, что осуществляется попытка выявить все хосты этих сетей, на которых запущена служба telnet. Но незначительная деталь дает основание подозревать нечто более хитрое. SYN-запросы обычно не содержат данных, а в данном случае передается по 4 байт данных (число в скобках).

Может показаться, что 4 байт данных, полученных до завершения полной процедуры согласования параметров соединения, будут просто отброшены. Но это не так. Эти четыре байта будут добавлены к информации, переданной после установки соединения. Согласно спецификации RFC 793 любые байты данных, которые были переданы во время процедуры согласования параметров соединения, добавляются к данным, передаваемым по завершению этой процедуры. Та ким образом хакер может обойти системы обнаружения вторжений (intrusion detection system - IDS), которые проверяют данные, получаемые только уже после завершения процедуры установки соединения.

Если в первом SYN-пакете, предназначенном для DNS-порта 53 вашего DNS-сервера, содержится 64 байт данных, то это не обязательно означает попытку атаки. Существует программное средство под названием 3DNS, которое предназначено для получения максимально быстрых ответов на запросы к Web-серверам. Одним из методов достижения этой цели является попытка измерить время ответа вашего DNS-сервера на запросы одного или нескольких Web-серверов, которые в свою очередь могут использоваться для ответа на запрос пользователя. При этом используется типичный размер запроса к Web-cepBepy - 64 байт. При обнаружении передачи таких пакетов не следует сразу подозревать проведение атаки, эти пакеты могут показаться надоедливыми или даже бесполезными, поскольку на многих узлах блокируются запросы к ТСР-порту 53, но они не являются вредоносными.

Перехват ТСР-сеанса

Хотя TCP производит впечатление достаточно защищенного протокола (ведь при организации сеанса должна быть выполнена полная процедура согласования параметров соединения, а обмен данными должен осуществляться по строгим правилам), но все же обольщаться не стоит. С помощью анализаторов пакетов злоумышленник может перехватывать данные TCP-сеансов или сеансов, организованных с помощью других протоколов. Анализаторы протоколов, установленные на некоммутируемых сетях, способны перехватывать любую информацию, которая передается в незашифрованном текстовом формате, например идентификаторы пользователей и пароли.

В программном обеспечении для перехвата сеансов, например Hunt, используется другой принцип несанкционированного получения данных ТСР-сеансов. Такие средства пытаются вмешаться в установленный TCP-сеанс и организовать передачу данных этого сеанса через хост злоумышленника. Дело в том, что при обмене данными по протоколу TCP не выполняется никакой аутентификации или проверки подлинности взаимодействующих хостов. Все эти проверки выполняются на этапе установления соединения. После этого для доставки данных конкретному хосту используется только следующая информация.

■ IP-адрес. Использованные при установлении соединения IP-адреса не могут меняться в ходе сеанса.

■ Номера портов. Большинство протоколов не позволяют изменять номера портов отправителя и получателя в ходе сеанса.

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

■ Номера подтверждения. Изменение номеров подтверждения должно осуществляться в соответствии с полученными порядковыми номерами и общим количеством байтов данных, переданных с одного хоста на другой.

Если злоумышленник способен наблюдать за передающимися данными и вмешается в установленное соединение, учитывая все параметры подтверждения, которые используется при обмене пакетами, то он осуществит перехват сеанса. Вообразите весь возможный ущерб, если будет перехвачен сеанс, обладающий привилегиями суперпользователя (root). Задача перехвата сеанса довольно трудна и требует особых навыков, но применение Hunt и других подобных средств позволяет ее упростить.

Резюме

Существует огромное и постоянно увеличивающееся количество средств обеспечения безопасности, которые можно применить для контроля за работой сети. При выборе конкретного средства лучше остановится на том, которое обеспечивает объем выдаваемой информации, не меньший, чем у TCPdump. Безусловно, отчеты TCPdump не отличаются особенной красотой, но предоставляют достаточный объем сведений для квалифицированной оценки передающегося трафика. Если выбрать более удобное, но менее информативное средство, можно пропустить что-то важное.

Протокол TCP используется для приложений, в которых необходима надежная доставка данных. Операции обмена данными по TCP выполняются по стандартной процедуре организации сеанса, возможной передачи данных и завершения соединения с использование^ механизмов для подтверждения доставки и получения данных. Анализируя TCP-трафик с помощью TCPdump, при желании или необходимости можно ознакомится с более подробной информацией, что позволит подтвердить или опровергнуть предварительные выводы о характере осуществляющихся операций.

TCP чрезвычайно сложный и одновременно надежный протокол, и для его вредоносного использования тоже применяются не менее сложные методы. Поэтому при анализе TCP-трафика требуется тщательная проверка всех выполняемых операций, которые кажутся хоть немного необычными. Одновременно с усовершенствованием систем обнаружения вторжений (IDS) и брандмауэров хакеры совершенствуют свои методы незаметного проникновения в чужие системы. Для контроля за несанкционированным доступом очень важно хорошо разбираться в протоколе TCP, a TCPdump - прекрасное средство для изучения работы этого протокола.

Tcpdump и tcp | Обнаружение нарушений безопасности в сетях | Фрагментация пакетов


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



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

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