А. Н. Андрончик, В. В. Богданов, Н. А. Домуховский, А. С. Коллеров, Н. И. Синадский, Д. А. Хорьков
Скачать 9.2 Mb.
|
1. ОСНОВЫ ЗАХВАТА И АНАЛИЗА СЕТЕВОГО ТРАФИКА Мониторинг и анализ сетевого трафика являются неотъемлемой частью процесса управления компьютерной сетью и используются для диагностики, тестирования и поиска неисправностей, для оптимизации структуры инфор- мационных потоков, а также выявления и решения проблем в обеспечении безопасности узлов компьютерной сети и информации, циркулирующей меж- ду ними. Целью данного занятия является приобретение навыков захвата сетево- го трафика в сегменте локальной сети и анализа собранной информации с по- мощью программного анализатора протоколов Ethereal. Для успешного дос- тижения целей занятия слушателям необходимо повторить теоретический ма- териал, касающийся назначения и функционирования протоколов стека TCP/IP. Для изучения материала данной главы в учебном классе должен быть развернут сегмент локальной вычислительной сети на концентраторе или коммутаторе, включающий в себя рабочие станции c операционной системой Windows 2000/XP по количеству слушателей. При выполнении некоторых уп- ражнений понадобится наличие сервера HTTP или подключение к сети Ин- тернет. Для установки необходимого программного обеспечения на рабочих станциях должны быть доступны инсталляционные пакеты библиотеки WinPCap (версия не ниже 2.3) и анализатора Ethereal (версия не ниже 0.10.11). 1.1. Общие сведения о программе Существует множество инструментальных средств, предоставляющих необходимые возможности для выполнения мониторинга сети и анализа сете- вого трафика. Одним из таких средств является пакет Ethereal, представляю- щий собой программный анализатор протоколов. Анализатор протоколов пе- реводит сетевой адаптер в режим «беспорядочного» приема кадров, записыва- ет в свой буфер отфильтрованные кадры сетевого трафика, по запросам поль- зователя выводит на экран те или иные кадры из буфера и посредством деко- дера протоколов предоставляет пользователю информацию о значениях полей заголовка протокола и содержимое его блока данных. Как и большинство программ такого класса, Ethereal содержит следую- щие основные компоненты: фильтр захвата, буфер кадров, декодер протоко- лов, фильтр отображения захваченных кадров и модуль статистики с элемен- тами экспертной системы. К несомненным достоинствам Ethereal относятся: − наличие реализаций для Unix и Windows; − наличие исходного кода программы; − возможность захвата трафика в сетевых сегментах различных базовых технологий; 13 − возможность анализа огромного числа протоколов (более 700); − возможность экспорта/импорта файлов данных в формат распространен- ных анализаторов (несколько десятков форматов); − мощная и удобная система поиска и фильтрации информации в буфере пакетов; − наличие элементов экспертной системы; − возможность сохранения на диск выделенного фрагмента пакета; − наличие полезных утилит командной строки для осуществления захвата трафика и обработки сохраненных файлов. 1.2. Установка программы и подготовка к захвату ВЫПОЛНИТЬ! 1. Установите библиотеку WinPCap и анализатор Ethereal, для чего последо- вательно запустите соответствующие файлы установки. Некоторые дистрибутивы Ethereal содержат в себе инсталлятор требуемой версии библиотеки WinPCap. 2. Запустите Ethereal и разверните главное окно приложения на весь экран (для удобства работы). Перед выполнением захвата сетевого трафика необходимо настроить параметры захвата или проконтролировать установленные значения некото- рых из них так, чтобы собранная информация адекватно соответствовала ре- шаемой задаче анализа трафика. ВЫПОЛНИТЬ! 3. Выполните команду меню Capture ⇒ Options. В открывшемся диалоговом окне устанавливаются следующие парамет- ры захвата кадров (рис. 1.1): − Interface — сетевой адаптер; Очень важно выбрать соответствующий сетевой адаптер, иначе за- пись кадров будет производиться из другого сегмента сети! В компь- ютере, имеющем всего один сетевой адаптер, среди возможных се- тевых интерфейсов часто присутствует контроллер удаленного доступа! − Buffer size — размер буфера захвата (по умолчанию 1 Мб); При малом размере буфера существует опасность того, что при его заполнении запись новых кадров будет производиться поверх записан- ных ранее! 14 − Capture packets in promiscuous mode — использование режима беспоря- дочного захвата. Рис. 1.1. Окно настройки параметров захвата − Limit each packet to — запись только нескольких первых байт (определя- ется установленным значением параметра) каждого кадра; − Capture Filter — фильтр захвата; Фильтр захвата экономит объем буфера, отбрасывая «лишний му- сор», однако увеличивает нагрузку на процессор, вследствие чего не- которые кадры могут быть потеряны. Поэтому в некоторых случаях вместо фильтра записи предпочтительнее использовать фильтр отображения кадров в буфере, а запись производить без фильтрации! − Capture File(s) — файл захвата; Опция полезна при осуществлении захвата трафика в течение дли- тельного периода времени. − Stop Capture — условия автоматического завершения захвата; 15 − Display Options — отображение пакетов в реальном времени и автомати- ческий скроллинг окна информации; Опции увеличивают нагрузку на процессор, вследствие чего некото- рые кадры могут быть потеряны. − Name Resolution — разрешение имен на физическом, сетевом и транс- портном уровнях. ВЫПОЛНИТЬ! 4. Уберите маркер напротив опции «Capture packets in promiscuous mode» для захвата только «своих» кадров (кадры с широковещательным адресом так- же будут захватываться). В таком режиме работы число захваченных паке- тов будет существенно меньше, что облегчит выполнение заданий. 1.3. Пользовательский интерфейс программы ВЫПОЛНИТЬ! 5. В командной строке сеанса MS-DOS для очистки кэша протокола ARP вы- полните команду arp -d. В Ethereal для запуска процесса захвата нажми- те кнопку «Capture». В командной строке выполните команду ping <имя_сервера> (в качестве параметра команды можно использо- вать IP-адрес сервера). По завершении команды Ping остановите захват, нажав кнопку «Stop». На экране монитора в программе Ethereal вы увидите несколько панелей с отображением сетевых пакетов, только что записанных в буфер. Общий вид окна приложения представлен на рис. 1.2. Пользовательский интерфейс про- граммы содержит следующие компоненты: − меню команд и панель инструментов; − фильтр отображения пакетов; − список пакетов в буфере; − панель отображения декодера протоколов; − панель отображения пакета в шестнадцатеричном коде и символах ASCII. Панель со списком пакетов построчно отображает характеристики того или иного пакета (номер по порядку в буфере, время захвата, адреса источни- ка и получателя, тип протокола и общая информация о нем). Перемещение по списку осуществляется с помощью мыши или клавиатуры, причем информа- ция на двух других панелях обновляется автоматически. На панели декодера протоколов, нажимая указателем мыши на символы «+» или «–», можно ото- бражать информацию о полях заголовков протоколов с требуемым уровнем детализации. При выборе того или иного служебного поля в заголовке оно ав- томатически выделяется на нижней панели, где отображается текущий пакет в шестнадцатеричном виде. 16 Рис. 1.2. Общий вид приложения Ethereal 1.4. Фильтр отображения пакетов С помощью фильтра отображения можно быстро убрать «мусор». Вы- ражение фильтрации может представлять собой просто название протокола, который присутствует в пакете на том или ином уровне вложенности. Напри- мер: arp — для отображения пакетов протокола ARP, tcp — для отображения пакетов, в которых присутствует заголовок протокола TCP. ВЫПОЛНИТЬ! 6. Для отображения только ICMP-сообщений в строке ввода «Filter» (рис. 1.2) наберите «icmp» и нажмите кнопку «Apply». Более сложные выражения фильтрации строятся с помощью зарезерви- рованных слов, обычно представляющих собой названия полей заголовков то- го или иного протокола, знака операции сравнения и конкретного значения в шестнадцатеричном или десятичном виде. Наиболее часто используемые вы- ражения фильтрации и их значения приведены в табл. 1.1. 17 Таблица 1.1 Выражения фильтрации и их значения Выражение Значение выражения и пример записи frame.marked Маркированный кадр frame.marked == true frame.number Номер кадра frame.number == 150 frame.time Время захвата кадра frame.time == "Feb 1, 2006 09:00:00" frame.pkt_len Длина кадра frame.pkt_len == 48 eth.dst Заголовок Ethernet: MAC-адрес назначения eth.dst == 01:00:5e:00:00:02 eth.src Заголовок Ethernet: MAC-адрес источника eth.src == 00:a0:cc:30:c8:db eth.type Заголовок Ethernet: тип вложенного протокола eth.type == 0x0800 arp.hw.type Заголовок протокола ARP: тип протокола канального уровня arp.hw.type == 0x0001 arp.proto.type Заголовок протокола ARP: тип протокола сетевого уровня arp.proto.type == 0x0800 arp.opcode Заголовок протокола ARP: код операции arp.opcode == 0x0001 arp.src.hw_mac Заголовок протокола ARP: MAC-адрес источника arp.src.hw_mac == 00:10:4b:30:c4:4a arp.src.proto_ipv 4 Заголовок протокола ARP: IP-адрес источника arp.src.proto_ipv4 == 10.1.0.1 arp.dst.hw_mac Заголовок протокола ARP: MAC-адрес назначения arp.dst.hw_mac == 00:00:00:00:00:00 arp.dst.proto_ipv 4 Заголовок протокола ARP: IP-адрес назначения arp.dst.proto_ipv4 == 10.1.0.2 ip.version Заголовок протокола IP: версия протокола IP ip.version == 4 ip.hdr_len Заголовок протокола IP: длина заголовка ip.hdr_len == 24 ip.flags.df Заголовок протокола IP: флаг фрагментации ip.flags.df == 0 ip.flags.mf Заголовок протокола IP: флаг не последнего фрагмента ip.flags.mf == 0 18 Выражение Значение выражения и пример записи ip.frag_offset Заголовок протокола IP: смещение фрагмента ip.frag_offset == 0 ip.ttl Заголовок протокола IP: время жизни пакета ip.ttl == 1 ip.proto Заголовок протокола IP: протокол вышестоящего уровня ip.proto == 0x01 ip.src Заголовок протокола IP: IP-адрес источника ip.src == 10.0.0.99 ip.dst Заголовок протокола IP: IP-адрес назначения ip.dst == 224.0.0.2 ip.addr Заголовок протокола IP: IP-адрес ip.addr == 10.2.0.0/16 tcp.srcport Заголовок протокола IP: порт источника tcp.srcport == 1054 tcp.dstport Заголовок протокола IP: порт назначения tcp.dstport == 21 tcp.seq Заголовок протокола IP: последовательный номер tcp.seq == 4856133 tcp.ack Заголовок протокола IP: номер подтверждения tcp.ack == 4856134 tcp.flags.urg Заголовок протокола IP: бит присутствия срочных данных tcp.flags.urg == 0 tcp.flags.ack Заголовок протокола IP: бит присутствия подтверждения tcp.flags.ack == 1 tcp.flags.push Заголовок протокола IP: бит выталкивания данных tcp.flags.push == 0 tcp.flags.reset Заголовок протокола IP: бит сброса соединения tcp.flags.reset == 0 tcp.flags.syn Заголовок протокола IP: бит синхронизации сессии tcp.flags.syn == 1 tcp.flags.fin Заголовок протокола IP: бит завершения сессии tcp.flags.fin == 0 tcp.window_size Заголовок протокола IP: размер приемного окна tcp.window_size == 8760 udp.srcport Заголовок протокола UDP: порт источника udp.srcport == 2364 udp.dstport Заголовок протокола UDP: порт назначения udp.dstport == 53 19 Выражение Значение выражения и пример записи icmp.type Заголовок протокола ICMP: тип сообщения icmp.type == 8 icmp.code Заголовок протокола ICMP: уточняющий код сообщения icmp.code == 0x00 В примерах записи выражений табл. 1.1 приведены выражения с опера- цией сравнения «Равно», которая записывается с помощью двойного знака ра- венства «==» (допустимо использование «eq»). Другие операции сравнения записываются с помощью следующих операторов: a. != (ne) — не равно, пример: eth.type != 0x0800 ; b. > (gt) — больше, пример: tcp.srcport > 1023 ; c. < (lt) — меньше, пример: frame.pkt_len lt 60 ; d. >= (ge) — больше или равно, пример: frame.pkt_len ge 60 ; e. <= (le) — меньше или равно, пример: tcp.dstport <=1023 ВЫПОЛНИТЬ! 7. Выясните, что будет отображено в буфере захвата в случае использования фильтра, описанного с помощью выражений, приведенных в качестве вы- шеописанных примеров. Значение любого выражения фильтрации возвращает переменную бу- левского типа. Таким образом, выражение udp означает присутствие в кадре заголовка протокола UDP, по аналогии с этим выражение tcp.flags.syn означает присутствие в заголовке протокола TCP бита синхронизации сессии в установленном состоянии (значение 1). К любому из выражений можно применить операцию логического отрицания, заключив его в скобки и поста- вив перед ним знак отрицания «NOT» или «!». Например, выражение !(ip.addr == 10.0.0.1) означает, что из буфера отображения необхо- димо убрать все пакеты, в которых встречается IP-адрес 10.0.0.1. ВЫПОЛНИТЬ! 8. Объясните разницу между результатами использования выражений фильт- рации !(ip.addr == X.X.X.X) и ip.addr !== X.X.X.X. Для вы- полнения упражнения в выражениях фильтрации используйте вместо адре- са X.X.X.X реальный IP-адрес вашего узла. В качестве выражений фильтрации можно использовать и составные выражения, которые образуются с помощью следующих логических операто- ров: a. && (AND) — логическое И, пример: (ip.dst==10.0.0.1) AND tcp.flags.syn ; 20 b. || (OR) — логическое ИЛИ, пример: (ip.addr==10.0.0.1) OR (ip.addr==10.0.0.2) Другой удобный способ ввода выражения фильтрации состоит в сле- дующем. На панели декодера протоколов отображается требуемое поле, в контекстном меню выбирается пункт «Apply as Filter» и далее исполняется либо команда «Selected», либо «Not Selected» в зависимости от задачи фильт- рации (рис. 1.3). ВЫПОЛНИТЬ! 9. Отобразите только ICMP-запросы (используйте поле «тип» в заголовке ICMP). Укажите результирующее выражение фильтрации с необходимыми пояснениями. После просмотра результата для отображения пакетов без фильтрации нажмите кнопку «Clear» в строке фильтра. При необходимости создания сложного выражения фильтрации в меню «Apply as Filter» (рис. 1.3) выбирайте команды, начинающиеся с многоточия, при этом новое выражение будет добавлено к результирующему выражению фильтрации. 10. Отобразите все кадры, переданные вашим узлом, исключая сообщения ICMP. При создании выражения фильтрации имейте в виду, что в буфере могут находиться кадры других узлов. Укажите результирующее выражение фильтрации с необходимыми пояс- нениями. После просмотра результата для отображения пакетов без фильт- рации нажмите кнопку «Clear» в строке фильтра. В выражениях фильтрации первый операнд операции сравнения допус- кает использование указателя диапазона, если второй операнд представляет собой массив байт или строку символов. Указатель диапазона определяется с помощью квадратных скобок и может быть использован как применительно к кадру в целом (frame), так и с любым полем заголовка. Указатель диапазона допускает следующий синтаксис: a. [i:j] начальное смещение i, длина j; b. [i-j] начальное смещение i, конечное смещение j, включительно; c. [i] начальное смещение i, длина 1; d. [:j] начальное смещение 0, длина j; e. [i:] начальное смещение i, до конца поля. Например, записи frame[6:3] и eth.src[:3] идентичны и могут быть использованы для указания на код фирмы-производителя сетевого адап- тера, передавшего кадр. Начальное смещение может иметь отрицательное значение, в этом случае оно отсчитывается от конца поля, причем последний байт поля имеет смещение, равное –1, предпоследний –2 и так далее. Напри- 21 мер, выражение frame[-5:] == "hello" определяет кадр, оканчиваю- щийся строкой «hello». Рис. 1.3. Контекстное меню создания фильтра Строка, как видно из предыдущего примера, записывается в кавычках. Запись массива байт осуществляется побайтно в шестнадцатеричном виде с разделителем «.» или «:», например 00.45.f5.2d. Используя символ «,» в указателе диапазона, можно перечислить не- сколько непересекающихся диапазонов, объединив их в одном операнде. На- пример, выражение tcp[2,10,13-16] == 00.01.c0.f8.01.66 сравни- вает в заголовке протокола TCP поле «Тип обслуживания» с «0x00», поле «Протокол» с «0x01» и поле «IP-адрес источника» с «0xc0f80166». ВЫПОЛНИТЬ! 11. Отобразите ICMP-ответы, используя в выражении фильтрации операнд «frame» с указателем диапазона. 22 При создании выражения фильтрации имейте в виду, что в буфере могут находиться кадры других узлов. Укажите результирующее выражение фильтрации с необходимыми пояс- нениями. После просмотра результата для отображения пакетов без фильт- рации нажмите кнопку «Clear» в строке фильтра. Быстро вернуться к тому или иному ранее вводимому выражению фильтрации можно с помощью списка истории ввода, доступ к которому осуществляется нажатием на кнопку с символом «▼», расположенную в стро- ке фильтра (не забывайте нажимать кнопку «Apply» для применения того или иного фильтра к буферу кадров). 1.5. Поиск кадров Поиск кадров в буфере, удовлетворяющих тем или иным критериям, осуществляется с помощью команды меню Edit ⇒ Find Packet. Диалоговое окно определения критериев поиска пакетов изображено на рис. 1.4. Рис. 1.4. Диалоговое окно определения критериев поиска кадров Критерии поиска можно определять в виде выражения фильтрации (Display filter), шаблона в шестнадцатеричном виде (Hex value) и текстовой строки (String) в кодировке ASCII и (или) Unicode. В первом случае можно использовать все допустимые выражения фильтрации (табл. 1.1) и их логиче- ские комбинации. Во втором случае указывается шаблон для поиска в шест- надцатеричном коде. Поиск в строке может осуществляться в области общей информации о пакете (Packet list), в панели декодера протоколов (Packet de- tails) и непосредственно в самом пакете (Packet bytes). Поиск может произво- диться вверх или вниз по списку пакетов (Direction). Команды меню |