Adelitusn.ru

ПК и Техника
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Пассивный перехват трафика

Пассивный перехват трафика

Перехват сетевого трафика может использоваться по разным причинам, но цель у него одна – отслеживать всё происходящее на определённом участке в сети. Это может быть как мониторинг сети с целью выявления тех или иных нюансов в штатном режиме работы, так и обнаружение сетевых атак или выявление нежелательного трафика. Я думаю, читатель cталкивался не с одной задачей, где без перехвата трафика не обойтись. Реализация перехвата может быть осуществлена несколькими способами:

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

Рисунок 1. Перехват трафика на базе шлюза под управлением ОС Linux

Рисунок 2. Перехват трафика на базе коммутатора с портом мониторинга

Рисунок 3. Перехват трафика на базе моста под управлением ОС Linux

Рисунок 4. Перехват трафика на базе физического подключения

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

Второй способ, как и третий, легко обнаружить физически. Лишний бесхозный концентратор и/или компьютер быстро найдутся и привлекут к себе внимание, если их не спрятать в отдельной комнате. Возможно, подозрений не возникло бы, если не «активная составляющая» используемого оборудования. Оборудование «посередине» может зависнуть. В случае использования разных по скорости сетевых карт или разных режимов работы может оказаться, что одна карта работает в режиме 100 Мбит/c в полном дуплексе, а составляющая ей пару на другом конце провода умудряется работать со скоростью 10 Мбит/c без дуплекса. Отключив кабель с одной стороны, можно долго удивляться тому, как на другой стороне индикатор «link» почему-то светится и не гаснет, и наоборот. Подозрение сразу перейдёт на кабель, а простое подёргивание его с любой стороны от загадочного места внутри стены рано или поздно приведёт к «секретной комнате» и перехват будет обнаружен. Если всё же исключить ситуации, описанные выше, а вероятность зависания оборудования «посередине» сделать очень низкой, использовав различные схемы контроля и перезапуска, то от задержек при передаче пакетов избавиться не получится. Любое активное оборудование вносит задержки в распространение пакетов [1, стр. 320], задержки малы, но их можно измерить и также заподозрить неладное.

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

Рисунок 5. Сокрытие места подключения в стене

Далее предлагаю на этом пункте не останавливаться, а перейти к технической реализации задуманного.

Для наглядности выполним подключение на макете, использовав небольшой кусочек кабеля. Для всей операции нам понадобятся:

  • кабель, к которому мы будем подключаться;
  • кросскорд (для патчкорда придётся самостоятельно поменять пары местами);
  • кусачки;
  • паяльник;
  • изолирующие материалы.

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

Рисунок 6. Кусок кабеля со снятой общей изоляцией

Далее зачищаем места для подпайки отводов на бело-зелёной и бело-оранжевой парах и облуживаем их.

Рисунок 7. Зачищенные и облуженные места для подпайки

Далее разрезаем кросскорд. Зачищаем у него соответствующие по цвету провода и подпаиваемся к основному кабелю так, чтобы цвета совпали и оранжевая пара пошла на разводку EIA/TIA T568A, а зелёная – на T568B. В результате подпаиваемые концы в обоих случаях должны приходить на 3-й и 6-й контакты разъёмов.

Рисунок 8. Подпаянные отводы для снятия сигнала

Рисунок 9. Подпаянные отводы(место пайки увеличено)

Далее изолируем место пайки. На стенде это сделано с помощью изоленты, но если есть возможность сделать это более основательно (заранее), то можно использовать термоусаживающиеся кембрики. А вместо отвода использовать одну витую пару, сделав её расчленение на два разъёма уже на конце, затем, чтобы место подключения по возможности сильно не утолщалось.

Рисунок 10.Заизолированное место подключения

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

Но если всё же непонятно, то наглядно и подробно это описано в [2].

Система готова к подключению и испытаниям. Но прежде чем это сделать, давайте рассмотрим, как это должно работать в теории.

Если взять техническую спецификацию организации сети, то можно узнать, что для передачи данных используются только две пары, к которым мы подключились, при этом назначение части контактов на разъёмах сетевых карт следующее.

  • 1 – передача +
  • 2 – передача —
  • 3 – приём +
  • 6 – приём —

Рисунок 11. Схема разводки для четырёх розеток и фото одной розетки

То есть по четырём проводам (две пары) идут данные в прямом и обратном направлениях. К этим проводам можно подсоединить отводы. Один отвод будет снимать сигналы, идущие в одном направлении, другой – в обратном. Перевести обратно в «электронную форму» грубо снятый физический сигнал можно с помощью тех же сетевых плат, использовав только схему их приёмной части, подключив к ней отводы. При этом если сетевые карты перевести в режим прослушивания (promiscuous mode), то можно будет перехватывать проходящий сетевой трафик. Так как входы сетевых карт высокоомные, то подключение на передачу данных влиять не должно. Предполагаю, что если подключение сделать аккуратно, то волновых эффектов вроде отражённых и стоячих волн (что частенько встречались в коаксиальном Ethernet без терминаторов) можно избежать. На длинных (около 100 м) кусках кабеля подключаться я не пробовал. Выходы (сетевых карт, осуществляющих прослушивание), работающие на передачу, «висят в воздухе», поэтому влиять на передаваемый сигнал они никак не могут.

Если, например, запустить tcpdump для прослушивания на одном интерфейсе, то он будет перехватывать только данные, передаваемые в одну сторону, если же на другом – в другую. Если запустить две копии tcpdump с разными конфигурациями, то потом создание одного лог-файла из двух потребует усилий. При этом невозможно использовать другие средства, работающие в реальном времени и отслеживающие трафик в обоих направлениях.

Для объединения трафика «из двух в один» я предлагаю использовать технологию Linux bonding, описанную мной в [3]. После чего нет ничего проще запустить tcpdump, snort или любую другую программу стандартным способом: на интерфейсе bond0 и наслаждаться их работой.

Замечание. В принципе, если не прибегать к Linux bonding, можно попытаться объединить снятые данные с помощью всё того же коммутатора с функцией мониторинга портов. Тогда он будет объединять данные с двух портов. Всё бы хорошо, но для данной реализации придётся поменять разводку А и B местами, так как в коммутаторах она обратная (контакты 1 и 2 работают на приём). Надо найти коммутатор с описанной выше функцией. Обычный не факт, что захочет работать. А самое главное, следует понимать, что сплошной поток в 200 Мбит передать в 100 Мбит никак не получится, поэтому при достаточной нагрузке это дело работать не будет, а использование концентраторов вообще невозможно по причине большой вероятности коллизий. Что и греха таить, больше половины хороших программистов вообще далеки от понимания сути происходящих процессов на физическом уровне. А каждая вторая книжка по безопасности, взять ту же [4], предлагает подключать сенсоры систем обнаружения атак, как показано на рис. 2. Естественно, при возрастании загрузки в сети за 50% часть атак уже принципиально не может быть обнаружена, даже если для всех атак будут записи в сигнатурной базе данных. Данные ведь передаются по обоим парам одновременно, а собирать их пытаются каналом вдвое меньшим. Только недавно стали широко доступны коммутаторы с портами на 1 Гбит. Да, по такому порту можно снимать данные со 100-мегабитной сети без потерь, но где гарантия что сеть тоже не будет работать на такой же скорости и тогда ситуация повторится. Половины пропускной способности в нужный момент не хватит. Вот и получается, что с финансовой точки зрения проще установить вторую простенькую сетевую карту и настроить Linux bonding. Дёшево и сердито.

Читайте так же:
Как управлять подключаемыми модулями в Яндекс Браузере

tcpdump инструкция и примеры

tcpdump инструкция на русском и примеры.

-A задает вывод каждого пакета (без заголовков канального уровня) в формате ASCII. Этот режим удобен для сбора трафика HTTP.

-c <число пакетов> задает завершение работы программы после захвата заданного числа пакетов.

-C <размер файла> задает необходимость проверки размера файла захвата перед записью в него каждого нового пакета. Если размер файла превышает значение параметра file_size, этот файл закрывается
и создается новый файл для записи в него пакетов. Для файлов захвата используется имя, заданное параметром -w и, начиная со второго файла к имени добавляется в качестве
суффикса номер файла. Переменная file_size задает размер файла в миллионах байтов (не в мегабайтах = 1 048 576 байт).

-d задает вывод дампа скомпилированного кода соответствия пакетов (packet-matching code) в понятном человеку формате и завершение работы программы.

-dd выводит дамп кода соответствия в виде фрагмента C-программы.

-ddd выводит дамп кода соответствия в виде строки десятичных значений, перед которой следует строка со значением счетчика.

-D выводит список сетевых интерфейсов системы, с которых tcpdump может собирать пакеты. Для каждого сетевого интерфейса указывается имя и номер, за которыми может следовать
текстовое описание интерфейса. Имя и номер интерфейса могут использоваться с флагом -i для задания сбора пакетов с одного интерфейса.

Эта опция может быть весьма полезна для систем, не дающих информации об имеющихся сетевых интерфейсах3.

Флаг -D не поддерживается, если программа tcpdump была скомпилирована со старой версией libpcap, которая не поддерживает функцию pcap_findalldevs().

-e выводит заголовок канального уровня в каждой строке дампа.

-E задает использование алгоритма и секрета spi@ipaddr для расшифровки пакетов IPsec ESP, направленных по адресу ipaddr и содержащих and в поле Security Parameter Index значение
spi. Комбинация spi и адреса может быть повторена с использованием в качестве разделителя запятой или новой строки. Отметим, что установка секрета для пакетов IPv4 ESP в
настоящее время поддерживается.

В качестве алгоритмов могут использоваться des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc или none. По умолчанию применяется алгоритм des-cbc. Возможность дешифровки
пакетов обеспечивается только в тех случаях, когда при компиляции tcpdump были включены опции поддержки криптографии.

Параметр secret содержит ASCII-текст секретного ключа ESP. Если секрет начинается с символов 0x, будет считываться шестнадцатеричное значение. Опция предполагает использование
ESP в соответствии с RFC 2406, а не RFC 1827. Эта опция поддерживается только для отладки и использовать ее с реальными секретными ключами не следует, поскольку введенный в
командной строке ключ IPsec доступен другим пользователям системы4.

Кроме явного указания параметров в командной строке их можно задать в файле опций, который tcpdump будет читать при получении первого пакета ESP.

-f задает вывод чужих адресов IPv4 в числовом формате. Использование этой опции позволяет избавиться от проблем, возникающих на серверах Sun NIS при попытках трансляции
нелокальных адресов. Проверка чужеродности адреса IPv4 осуществляется с использованием адреса и маски принявшего пакет интерфейса. Если адрес и маска интерфейса недоступны
(например, при использовании unnumbered-интерфейсов или при захвате пакетов со всех адресов в Linux с использованием фиктивного интерфейса any), эта опция будет работать
некорректно.

-F <файл> задает использование фильтров, содержащихся в указанном файле. В этом случае заданные в командной строке фильтры игнорируются.

-i <интерфейс> задает сбор пакетов с указанного интерфейса. Если интерфейс не задан, tcpdump ищет в системе список доступных интерфейсов и выбирает в нем активное устройство с минимальным
номером (исключая loopback).

В системах Linux, начиная с ядра 2.2 поддерживается фиктивный интерфейс с именем any, обеспечивающий сбор пакетов со всех активных интерфейсов системы. Отметим, что сбор
пакетов с устройства any осуществляется в обычном (не promiscuous) режиме.

Если в системе поддерживается флаг -D, можно в качестве аргумента задавать номер интерфейса, выводимый при использовании этого флага.

-l задает буферизацию строк stdout. Эта опция полезна в тех случаях, когда вы хотите просматривать данные во время сбора пакетов. Например, команды

tcpdump -l | tee dat

tcpdump -l > dat & tail -f dat

обеспечивают запись пакетов в файл dat и одновременный вывод на консоль.

-L задает вывод списка известных типов канального уровня и завершение работы программы.

-m <файл> загружает модуль определений SMI MIB из указанного файла. Эта опция может использоваться неоднократно для загрузки нескольких модулей MIB.

-n отключает преобразование адресов и номеров портов в символьные имена.

-N задает использование только имен хостов, а не полных доменных имен. Например, вместо lhotze.bilim-systems.net при использовании этой опции моя рабочая станция будет
обозначаться как lhotze.

-O отключает оптимизатор кода проверки соответствия пакетов условиям фильтрации. Используйте эту опцию, если вам покажется, что оптимизатор работает с ошибками.

-p указывает программе, что интерфейс не нужно переводить в режим захвата5. Опцию -p нельзя использовать вместе с фильтром ether host or ether broadcast.

-q задает вывод минимального объема информации.

-R при установке этого флага предполагается, что пакеты ESP/AH используют старый вариант спецификации6 и tcpdump не будет выводить поля replay prevention (защита от
воспроизведения). Поскольку спецификация ESP/AH не включает поля с номером версии, tcpdump не может определить версию протокола ESP/AH по заголовкам пакетов.

-r <файл> задает чтение данных из файла, созданного ранее с использованием команды tcpdump -w или с помощью другой программы, поддерживающей формат tcpdump (например, Ethereal). Если в
качестве имени файла задан символ -, используется поток данных от стандартного устройства ввода (stdin).

-S задает вывод абсолютных порядковых номеров TCP взамен относительных.

-s задает захват из каждого пакета snaplen байтов вместо отбираемых по умолчанию 68 байтов7. Значение 68 подходит для протоколов IP, ICMP, TCP и UDP но может приводить к потере
протокольной информации для некоторых пакетов DNS и NFS. Потеря части пакетов по причине малого размера кадра захвата (snapshot) указывается в выходных данных полями вида
[|proto]’, где proto – имя протокольного уровня, на котором произошло отсечение части пакета8. Отметим, что увеличение кадра захвата приведет к дополнительным временным
затратам на обработку пакетов и уменьшению числа буферизуемых пакетов, что может привести к потере части пакетов. Используйте минимальное значение snaplen, которое позволит
обойтись без потери информации об интересующем вас протоколе. Установка snaplen = 0 приведет к захвату полных пакетов.

Читайте так же:
Как можно включить видеокарту в БИОС: простые способы в несколько кликов

-T <тип> задает интерпретацию пакетов, выбранных с помощью фильтра, как пакетов указанного параметром типа. В настоящее время поддерживаются типы aodv9, cnfp10, rpc11, rtp12, rtcp13,
snmp14, tftp15, vat16 и wb17.

-t отключает вывод временных меток в каждой строке дампа.

-tt задает вывод в каждой строке дампа неформатированных временных меток.

-ttt задает вывод временных интервалов (в микросекундах) между захватом предыдущего и данного пакетов в каждой строке дампа.

-tttt задает вывод временных меток в принятом по умолчанию формате для каждой строки дампа.

-u задает вывод манипуляторов (handle) NFS без декодирования.

-U задает режим “буферизации на уровне пакетов” для файлов, сохраняемых с помощью опции -w. В этом режиме каждый пакет записывается в выходной файл как только он будет захвачен
(не дожидаясь заполнения выходного буфера). Флаг -U не будет поддерживаться, если программа tcpdump была скомпилирована со старой опцией libpcap, не поддерживающей функцию
pcap_dump_flush().

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

-vv задает дополнительное увеличение объема выводимой информации (например, полное декодирование пакетов SMB, вывод дополнительных полей откликов NFS и т. п.).

-vvv задает максимальный объем выводимой информации (например, полностью выводятся опции telnet SB … SE). При использовании вместе с ключом -X опции Telnet выводятся также в
шестнадцатеричном представлении.

-w <файл> задает запись необработанных (raw) пакетов. Собранные в файл пакеты можно впоследствии просматривать с использованием флага -r или передавать для анализа другим программам
(например, Ethereal). Если в качестве имени файла указан символ -, запись осуществляется на стандартное устройство вывода (stdout).

-x задает вывод шестнадцатеричного дампа (без заголовка канального уровня) для каждого захваченного пакета. Объем выводимой информации определяется меньшим из двух значений —
размер пакета и значение параметра snaplen. Отметим, что при захвате полных кадров канального уровня дамп может включать также байты заполнения, если пакет сетевого уровня
имеет малый размер.

-xx задает вывод шестнадцатеричного дампа для каждого пакета с включением заголовков канального уровня.

-X задает вывод дампа в шестнадцатеричном и ASCII-формате без заголовков канального уровня. Эта опция может быть очень удобна при анализе новых протоколов.

-XX задает вывод дампа в шестнадцатеричном и ASCII-формате с включением заголовков канального уровня.

-y <тип> задает тип канального уровня, используемого при захвате пакетов. Поддерживаемые значения можно посмотреть с помощью флага -L.

Примеры.

  • Ловим весь исходящий трафик

tcpdump -i re0 -n -nn -ttt dst host 192.168.1.2

  • Ловим весь исходящий трафик кроме нашей ssh сессии ибо очень большой поток данных получается.

tcpdump -i re0 -n -nn -ttt ‘dst host 192.168.1.110 and not ( src host 192.168.1.2 and dst port 22 )’

  • Просмотр общения dns

tcpdump -i re0 -n -nn -ttt ‘host 192.168.1.110 and port 53’

  • Просмотр icmp пакетов

tcpdump -i re0 -n -nn -ttt ‘ip proto icmp’

  • Трафик переходящий из сети 10.7.20 с назначением на сети 10.7.0. или 10.7.24.:

tcpdump -nvX src net 10.7.20.0.0/16 and dst net 10.7.0.0/8 or 10.7.24.0/16

  • Трафик идущий с сети 10.7.0.0 на порты назначения 22 или 4589:

tcpdump ’src 10.7.0.0 and (dst port 22 or 4589)’

  • Посмотреть трафик на интерфейсе:
  • посмотреть трафик одного хоста:

tcpdump host 192.168.1.1

  • Посмотреть трафик на порте:

tcpdump src port 80

  • Посмотреть IP трафик на хост:

tcpdump ip host 192.168.1.2

  • Посмотреть ARP трафик на хост:

tcpdump arp host 192.168.1.2

  • Смотрим RARP трафик на хост:

tcpdump rarp host 192.168.1.2

  • Смотрим трафик, кроме хоста pav253

tcpdump not host pav253

  • Смотрим трафик на pav253 и pav210

tcpdump host pav253 or host pav210

  • Смотрим содержимое пакетов на интерфейсе re0 на хост likeunix.ru

tcpdump -X -i re0 host likeunix.ru

  • icq трафик

tcpdump -X -i re0 port aol

  • Смотрим содержимое пакетов на интерфейсе tun0 на хост ya.ru, при этом прочитать из каждого пакета по 1500 байт и не преобразовывать IP в имя хоста

tcpdump -X -s 1500 -n -i re0 host likeunix.ru

  • Top активных взимодействий
  • Смотрим все TCP пакеты с флагом SYN (начало сессии).

tcpdump -i eth0 -nn tcp[13] == 2 and src net 192.168.1.0/24

  • Просмотр syn и fin пакетов из вне

tcpdump ‘tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net 192.168.1.0’

  • Просмотр все ipv4 http пакеты с порта 80, кроме syn / fin / ack данных
  • Просмотр только syn пакеты

tcpdump -i re0 tcp[13] == 2

One Response to “tcpdump инструкция и примеры”

Top активных взимодействий
tcpdump -tn -c 10000 -i re0 tcp or udp | awk -F «.» ‘’ | sort | uniq -c | sort -nr | awk ‘$1 > 100’
Выдаёт:
bash: sort: команда не найдена
awk: ‘
awk: ^ invalid char ‘▒’ in expression
awk: ‘ awk: ^ invalid char ‘▒’ in expression
tcpdump: re0: No such device exists
(SIOCGIFHWADDR: No such device)

Конечно, в рамках одной статьи надо-бы использовать одно название интерфейса, а не зоопарк. Ну и с кавычками да… Беда…

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

Исследование TCP/IP с помощью TCPdump и Tethereal
Автор: (C) Vinayak Hegde
Перевод: (C) Иван Песин

Кратчайший обзор TCP/IP

На сегодняшний день TCP/IP является стандартом де факто среди сетевых протоколов. IP (Internet Protocol) обеспечивает функциональность сетевого уровня* (адресация и маршрутизация), тогда как TCP (Transmission Control Protocol) организовывает (виртуальную) сквозную связность. Стек TCP/IP включает в себя множество других полезных протоколов, таких как ICMP (Internet Control Message Protocol), IGMP (Internet Group Management Protocol) и UDP (User Datagram Protocol). Подавляющее большинство современных сетей используют TCP/IP. В наши дни практически все приложения включают в себя некую сетевую функциональность. Следовательно, для каждого программиста становится необходимым наличие хотя бы базовых знаний о TCP/IP.

Процесс передачи информации между компьютерами на основе протокола TCP/IP реализуется через обмен пакетами. На уровне IP блок данных протокола (PDU, Protocol Data Unit) называется пакетом (строго говоря, PDU сетевого уровня, называется "дейтаграмма", хотя иногда, если это не вызывает разночтений, используется и название "пакет". См. также * — Прим.пер.), на уровне TCP — сегментом, а на уровне сетевого интерфейса (например, ethernet) — кадром. Тем не менее, термин "пакет" используется как для описания блока данных проходящего сквозь уровни модели TCP/IP, так и для блока данных пересылаемого между компьютерами.

Вот как выглядит кадр Ethernet:

TCPdump и Tethereal

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

Читайте так же:
Увеличиваем громкость разговорного динамика на Android

Обычно, верхним уровням стека TCP/IP передаются только те пакеты, которые адресованы конкретному сетевому интерфейсу. Все прочие пакеты попросту игнорируются. Если же интерфейс находится в режиме Promiscuous, то верхним уровням передаются абсолютно все пакеты. TCPdump для своей работы переводит интерфейс именно в такой режим.

TCPdump использует библиотеку libpcap (библиотека захвата пакетов — packet capture library), которая свободно доступна. Библиотека libpcap универсальна и работает с пакетным фильтром BSD, SVR4 Data-link Provider Interface (DLPI) и интерфейсом Linux SOCK_PACKET. Tethereal, который представляет собой версию популярного анализатора трафика ethereal для работы в командной строке, тоже использует библиотеку захвата пакетов pcap. Tethereal — это мощная утилита для анализа сетевого трафика, обладающая большими возможностями по декодированию пакетов в сравнении с TCPdump. Ethereal — графическая утилита анализа пакетов, позволяющая просматривать различные флаги и опции в иерархическом виде. Одной из лучших функций утилиты ethereal является возможность соединения фрагментов сообщений двух компьютеров и последующее отображение содержания обмена в виде ASCII-текста.

Форматы пакетов TCP и IP

Представление в формате ASCII из RFC 791

Представление в формате ASCII из RFC 793

Примеры захвата пакетов с помощью TCPdump и Tethereal

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

За ней последует список сетевых интерфейсов вашей системы, включая "петлевой" [loopback]. Если вы подключены к сети по телефонной линии, то для отладки и экспериментов можно использовать и интерфейс ppp0.

Пример #1
Это фрагмент (из файла tcpdumpppp) записи пакетов, захваченных на интерфейсе ppp0. Флаг -vvv означает выводить много-много информации (very very verbose). Другие ключи управления информативностью: -v и -vv.

Захват пакетов завершается по нажатию CTRL-C.

Вот информация, которую можно получить из приведенной записи

  • Используется протокол http (порт 80 декодировался как http) (Автор несколько вольно интерпретирует запись. Точнее было бы "Порт источника — 80", поскольку протокол обмена может быть и не http. — Прим.пер.).
  • Локальный IP адрес, назначенный мне моим провайдером после дозвона 203.94.236.47 (можно проверить посмотрев в /var/log/messages).
  • Адрес http-сервера — 207.219.33.101 (Адрес изменен в целях безопасности).
  • Время жизни равно 38 переходам.
  • Установлен флаг "Не фрагментировать", который запрещает фрагментацию дейтаграммы промежуточным маршрутизаторам.
  • Установлен флаг ACK (номер подтверждения — 736).
  • Размер окна 31856.
  • Порт получателя 33003

Пример #2
Этот пакет был захвачен с сетевой карты (интерфейса, обозначенного eth0)

Мы разрешили утилите TCPdump отображать IP адреса в символьном виде, если это возможно (-a) (Это сильно замедляет работу утилиты. — Прим.пер.) и явно указали интерфейс, на котором производить захват пакетов. Если мы не укажем опцию (-i), то TCPdump будет захватывать пакеты на всех доступных интерфейсах. Информация, которую мы можем получить из вышеприведенной записи:

  • На серверной стороне используется порт ssh (22). В этом можно убедится, просмотрев файл /etc/services.
  • Один из битов "Тип Сервиса" (TOS) установлен, потому сети с поддержкой QoS предоставят необходимый пакету тип сервиса.
  • Размер окна объявлен равным 62780.
  • Длина пакета 48 байт.

Следующий фрагмент представляет собой SYN-пакет (запрос соединения). Пакет захвачен с интерфейса Ethernet.

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

  • Контрольная сумма заголовка верная ([tcp sum ok])
  • Установлен флаг SYN (отметка S).
  • Количество данных, инкапсулированых в tcp-сегмент, равно 0.
  • Опция масштабирования окна установлена в null.
  • Максимальный размер сегмента (MSS, Maximum Segment) равен 1460. В среде Ethernet MSS = 1500 — 40 = 1460.
  • Длина пакета равна 60 байтам (20 + 40) (обратитесь к вышеприведенной диаграмме)

Пример #4
Вот пример захвата пакетов при помощи tethereal

Как можно видеть из фрагмента, вывод утилиты tethereal не сильно отличается от вывода TCPdump. В данном пакете установлены биты FIN и ACK (означает запрос на закрытие соединения). Tethereal может быть очень удобен для обнаружения сетевых аномалий при иcпользовании его в режиме с включённым внешним интерфейсом (front-end).

Заключение

Применение TCPdump в основном ориентировано на протокол TCP/IP. В этом ему нет равных. Ethereal намного более разносторонняя программа и понимает множество протоколов. Кроме того, пользовательский интерфейс ethereal очень хорошо проработан, так что даже новичок может понять что за пакет захвачен и какая информация содержится в нем. Хороший интерфейс делает процесс обучения похожим на развлечение.

Ресурсы

На протяжении текста автор постоянно обращается к понятию "уровень" и различным названиям протокольного блока данных (PDU) на каждом из уровней. Для облегчения чтения привожу таблицу, в которой показан каждый уровень модели TCP/IP (или DoD) с указанием названия PDU для этого уровня и примером некоторых протоколов, работающих на данном уровне.

Vinayak Hegde

Моя жизнь изменилась с момента открытия для себя Linux. Внезапно компьютеры стали для меня интересны, поскольку на моем Linux я мог пробовать массу вещей. Связано это с легко доступным исходным кодом программ. Мои интересы сосредоточены в области сетей, встроенных систем и языков программирования. Сейчас я работаю в компании Aparna Web services, где мы занимаемся настройкой для учебных заведений/корпораций удаленно-загружаемых рабочих станций под управлением Linux (тонкие клиенты).

Wireshark: краткое руководство

Программа Wireshark предназначена для захвата, записи и анализа сетевого трафика, то есть является сниффером (sniffer) и анализатором. Wireshark позволяет:

  • захватывать сетевой трафик на машине и обмениваться захваченными пакетами;
  • просматривать содержимое пакетов в структурированном виде и «как есть»;
  • отбирать сетевые пакеты по гибким критериям;
  • анализировать отдельные пакеты, сеансы и статистику на множестве пакетов;
  • восстанавливать потоки данных, содержащиеся в наборах пакетов.

Ядром Wireshark служит библиотека libpcap или её версия для ОС Windows — WinPCap . Эти библиотеки, Wireshark и сопутствующие программы разрабатываются в плотном взаимодействии. Все они бесплатны и кроссплатформенны, код открыт.

Wireshark перехватывает входящие пакеты, которые драйвер передает ОС, и исходящие пакеты, которые ОС передает драйверу. Следовательно, если сетевая карта преобразует или отбрасывает некоторые пакеты, это не отражается в Wireshark.

Добыча пакетов

Захват трафика (live capture)

Перед захватом трафика необходимо выбрать сетевые интерфейсы, пакеты с которых будут захвачены:

В дальнейшем можно выбрать другие интерфейсы, нажав кнопку List the available capture interfaces .

Захват начинается по нажатию кнопки Start и прекращается нажатием кнопки Stop .

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

Работа с записями трафика

По окончании захвата трафика пакеты можно сохранить в файл. Стандартным форматом является pcap (packet capture); в профессиональном арго такие файлы называются «пикапами». Новый формат pcapng (next generation) сохраняет время точнее и предназначен для быстрых потоков данных.

Сохраненные файлы можно открыть в Wireshark и полноценно анализировать пакеты. На сайте Wireshark доступна коллекция образцов трафика.

Захват трафика без Wireshark

Не всегда можно запустить Wireshark на машине, где требуется захватить трафик. Программа tcpdump позволяет сделать это из терминала, например, по SSH:

Ключ -i позволяет выбрать сетевой интерфейс, ключ -w — файл, в который будет записан трафик для последующего анализа. Если не указывать -w , сведения о перехваченных пакетах будут печататься на экране. Захват трафика доступен только привилегированному пользователю.

Читайте так же:
5 лучших программ для быстрых скриншотов

Работа со списком пакетов

Навигация по списку

Перемещаться между пакетами удобнее всего с клавиатуры (см. меню Go).

Можно переходить к следующему ( Ctrl + . ) или к предыдущему ( Ctrl + , ) пакету в сеансе (conversation), что удобно, если перехвачено несколько одновременных сеансов TCP, и анализируется лишь один из них.

Управление столбцами и их содержимым

По умолчанию Wireshark разрешает числовые адреса в символьные имена. Например, вместо порта 80 отображается HTTP, вместо адресов — имена машин. Зачастую это неудобно и отключается флажками в подменю View > Name Resolution.

Диалог Column Preferences… в контекстном меню заголовка любого столбца позволяет настроить перечень отображаемых столбцов. Быстро скрывать столбцы можно из меню View > Displayed Columns.

Упорядочение пакетов

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

Выгрузка данных

Помимо сохранения пакетов, Wireshark позволяет также экспортировать:

Сводку (содержимое списка) как текст: File > Export Specified Packets… Можно выгрузить не все пакеты, а только выделенный (selected), отмеченные (marked) или только отфильтрованные ( видимые, displayed).

Результаты разбора пакета (область под списком) как текст: File > Export Packet Dissections… > As «Plain Text» file…

Данные, передаваемые по некоторым протоколам, например, файлы, загруженные по FTP или HTTP: File > Export Objects > [протокол].

Фильтрация пакетов

Wireshark позволяет отбирать интересующие пакеты по условиям — фильтрам. Фильтры захвата (capture filters) отбирают пакеты, которые будут захвачены, а фильтры отображения (display filters) позволяют скрывать пакеты, не прошедшие фильтр. Здесь и далее обсуждаются фильтры отображения. В строке состояния внизу окна показывается общее и отображаемое число пакетов.

вводится на панели фильтрации. Оно похоже на условие в языке, например:

  • ip.addr == — пакеты с заданным адресом отправителя или получателя;
  • eth.dst == ff:ff:ff:ff:ff:ff — широковещательные кадры;
  • tcp.dstport == 80 — сегменты TCP на порт 80.

Условия могут группироваться скобками и объединяться логически:

  • (ip.srcaddr == ) && (udp.srcport == 1234) — дейтаграммы UDP от , порт отправителя — 1234;
  • !(ip.addr == ) — пакеты от любого узла, кроме заданного.

Во время ввода работает автодополнение: если ввести ip. , в выпадающем списке появится перечень свойств протокола IP, по которым можно отобрать пакеты. По нажатию на кнопку Expressions… открывается диалог, где компоненты фильтра можно выбрать из перечня с пояснениями. Если выражение корректно, оно подсвечивается зеленым, если некорректно — красным.

Фильтр применяется по нажатию Enter или кнопки Apply.

Предупреждение. Есть ряд неочевидных особенностей фильтрации. Выражение tcp.port == 80 означает «протокол TCP и порт отправителя или получателя равен 80», то есть эквивалентно (tcp.dstport == 80) || (tcp.srcport == 80) . Выражение tcp.port != 80 не означает «сегменты TCP через любые порты, кроме 80», а эквивалентен (tcp.dstport != 80) || (tcp.srcport != 80) , то есть отбирает пакеты, у которых хотя бы один порт не 80. Правильным отрицанием исходного фильтра является !(tcp.port == 80) .

Полное и подробное руководство по составлению фильтров с примерам и объяснениями доступно на сайте Wireshark.

Анализ пакетов

Результаты разбора (dissection) выбранного пакета отображаются под их списком и сгруппированы по протоколам разных уровней. На каждом уровне отображаются поля заголовков PDU, а также дополнительная полезная информация. Например, для TCP отображается номер последовательности (поле sequence number) и длина данных в сегменте, которая не записана в заголовке, а вычисляется.

Примечание. Можно значительно ускорить работу Wireshark, отключив разбор и анализ протоколов, которые заведомо не интересуют, в диалоге Analyze > Enabled Protocols…

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

Через контекстное меню выбранного поля или целого PDU (уровня) можно копировать соответствующую часть PDU как шестнадцатеричное представление байт ( 14ef88 , Copy > Bytes > Hex Stream) или печатный текст, содержащийся в ней (Copy > Bytes > Printable Text Only).

Анализ сеансов и TCP

В контекстном меню пакета в их списке пункт Colorize Conversation позволяет подсветить сеанс, к которому относится пакет. Это работает не только для TCP, но и для IP и других протоколов, где сеанс можно выделить условно. Пункт Conversation Filter позволяет отфильтровать только пакеты данного сеанса.

Пункт Follow TCP Stream восстанавливает потоки, «диалог» участников сеанса TCP в виде текста.

Через диалог Statistics > Conversations можно быстро просмотреть список сеансов и перейти к любому из них.

При анализе TCP важны номера последовательности и подтверждения (sequence number и acknowledgement number), а также флаги (flags) сегмента. Поскольку разности между номерами важнее их абсолютных значений, Wireshark отображает относительные номера, то есть за вычетом начальных значений. В результате видно, как будто в каждом сеансе номера начинают расти с нуля, а не с произвольного значения. Можно отключить этот режим, сняв флажок Protocols > TCP > Relative sequence numbers в диалоге Edit > Preferences.

Дополнительно

Библиотека libpcap и WinPCap

Библиотеку libpcap (в ОС семейства *nix) или WinPCap (в ОС Windows) можно использовать в своих программах, чтобы перехватывать пакеты без Wireshark или tcpdump. При этом доступна фильтрация захватываемых пакетов, запись и считывание файлов *.pcap. , но недоступен продвинутый анализ протоколов.

Инструменты на основе libpcap и их альтернативы

Упомянутая tcpdump доступна в большинстве ОС семейства *nix. Возможности по обработке трафика в ней ограничены, её задача — захват пакетов.

Программа tshark является текстовой версий Wireshark. Её использование подобно tcpdump , но пакеты анализируются с использованием всех интеллектуальных алгоритмов, заложенных в Wireshark.

Утилита tcpreplay позволяет проигрывать файлы *.pcap , то есть посылать в сеть содержащиеся в них пакеты.

Инструмент Microsoft Message Analyzer является аналогом Wireshark для ОС Windows, созданным относительно недавно. Его возможности по захвату и анализу сетевого трафика ограничены по сравнению с WinPCap , однако есть возможность захватывать и анализировать сообщения, передаваемые по служебным каналам Windows.

Большой список инструментов имеется на сайте Wireshark.

Расширенные возможности Wireshark

За рамки дисциплины выходит ряд мощных возможностей Wireshark:

  • Создание модулей разбора (dissectors) для libpcap , которые могут обрабатывать PDU протоколов, не встроенных в библиотеку.
  • Написание сценариев обработки пакетов для Wireshark на языке Lua.
  • Восстановление и анализ при помощи Wireshark защищенных соединений SSL (преимущественно HTTPS) и аудиопотоков (преимущественно VoIP).
  • Подсчет Wireshark разнообразной статистики по захваченным пакетам.
  • Захват кадров IEEE 802.11 (), которые не должны обрабатываться данной машиной (monitor mode).

Захват пакетов в Windows

Ядро Wireshark, библиотека libpcap , в ОС Windows не способна перехватывать пакеты, передаваемые между интерфейсами одной машины. Простейшее решение — вынудить ОС прокладывать маршрут для таких пакетов через другую машину; подходит шлюз по умолчанию. В ОС семейства *nix проблема отсутствует.

Внешний адрес машины ( ) и адрес шлюза можно узнать командой ipconfig или в диалоге свойств сетевого подключения.

Читайте так же:
Как сделать разрыв страницы в ворде

Проложить маршрут, действующий до перезагрузки, можно следующей командой:

Например, если локальный адрес , и шлюз — :

Изменение таблицы маршрутизации разрешено только администратору. В Windows 7 и более поздних версиях запуск командной строки администратора доступен из GUI.

По окончании экспериментов следует удалить этот неоптимальный, вредный маршрут:

Полезные ссылки

    (англ.), похожее на этот документ.
  • Статья «Wireshark — приручение акулы» проекта LinkMeUp.

Козлюк Д. А. для кафедры Управления и информатики НИУ «МЭИ», 2016 г.

Исследование TCP/IP с помощью TCPdump и Tethereal

На сегодняшний день TCP/IP является стандартом де факто среди сетевых протоколов. IP (Internet Protocol) обеспечивает функциональность сетевого уровня* (адресация и маршрутизация), тогда как TCP (Transmission Control Protocol) организовывает (виртуальную) сквозную связность. Стек TCP/IP включает в себя множество других полезных протоколов, таких как ICMP (Internet Control Message Protocol), IGMP (Internet Group Management Protocol) и UDP (User Datagram Protocol). Подавляющее большинство современных сетей используют TCP/IP. В наши дни практически все приложения включают в себя некую сетевую функциональность. Следовательно, для каждого программиста становится необходимым наличие хотя бы базовых знаний о TCP/IP.

Процесс передачи информации между компьютерами на основе протокола TCP/IP реализуется через обмен пакетами. На уровне IP блок данных протокола (PDU, Protocol Data Unit) называется пакетом (строго говоря, PDU сетевого уровня, называется «дейтаграмма», хотя иногда, если это не вызывает разночтений, используется и название «пакет». См. также * — Прим.пер.), на уровне TCP — сегментом, а на уровне сетевого интерфейса (например, ethernet) — кадром. Тем не менее, термин «пакет» используется как для описания блока данных проходящего сквозь уровни модели TCP/IP, так и для блока данных пересылаемого между компьютерами.

Вот как выглядит кадр Ethernet:

TCPdump и Tethereal

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

Обычно, верхним уровням стека TCP/IP передаются только те пакеты, которые адресованы конкретному сетевому интерфейсу. Все прочие пакеты попросту игнорируются. Если же интерфейс находится в режиме Promiscuous, то верхним уровням передаются абсолютно все пакеты. TCPdump для своей работы переводит интерфейс именно в такой режим.

TCPdump использует библиотеку libpcap (библиотека захвата пакетов — packet capture library), которая свободно доступна. Библиотека libpcap универсальна и работает с пакетным фильтром BSD, SVR4 Data-link Provider Interface (DLPI) и интерфейсом Linux SOCK_PACKET. Tethereal, который представляет собой версию популярного анализатора трафика ethereal для работы в командной строке, тоже использует библиотеку захвата пакетов pcap. Tethereal — это мощная утилита для анализа сетевого трафика, обладающая большими возможностями по декодированию пакетов в сравнении с TCPdump. Ethereal — графическая утилита анализа пакетов, позволяющая просматривать различные флаги и опции в иерархическом виде. Одной из лучших функций утилиты ethereal является возможность соединения фрагментов сообщений двух компьютеров и последующее отображение содержания обмена в виде ASCII-текста.

Форматы пакетов TCP и IP

Представление в формате ASCII из RFC 791

Представление в формате ASCII из RFC 793

Примеры захвата пакетов с помощью TCPdump и Tethereal

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

За ней последует список сетевых интерфейсов вашей системы, включая «петлевой» [loopback]. Если вы подключены к сети по телефонной линии, то для отладки и экспериментов можно использовать и интерфейс ppp0.

Пример #1
Это фрагмент (из файла tcpdumpppp) записи пакетов, захваченных на интерфейсе ppp0. Флаг -vvv означает выводить много-много информации (very very verbose). Другие ключи управления информативностью: -v и -vv.

Захват пакетов завершается по нажатию CTRL-C.

Вот информация, которую можно получить из приведенной записи

  • Используется протокол http (порт 80 декодировался как http) (Автор несколько вольно интерпретирует запись. Точнее было бы «Порт источника — 80», поскольку протокол обмена может быть и не http. — Прим.пер.).
  • Локальный IP адрес, назначенный мне моим провайдером после дозвона 203.94.236.47 (можно проверить посмотрев в /var/log/messages).
  • Адрес http-сервера — 207.219.33.101 (Адрес изменен в целях безопасности).
  • Время жизни равно 38 переходам.
  • Установлен флаг «Не фрагментировать», который запрещает фрагментацию дейтаграммы промежуточным маршрутизаторам.
  • Установлен флаг ACK (номер подтверждения — 736).
  • Размер окна 31856.
  • Порт получателя 33003

Пример #2
Этот пакет был захвачен с сетевой карты (интерфейса, обозначенного eth0)

Мы разрешили утилите TCPdump отображать IP адреса в символьном виде, если это возможно (-a) (Это сильно замедляет работу утилиты. — Прим.пер.) и явно указали интерфейс, на котором производить захват пакетов. Если мы не укажем опцию (-i), то TCPdump будет захватывать пакеты на всех доступных интерфейсах. Информация, которую мы можем получить из вышеприведенной записи:

  • На серверной стороне используется порт ssh (22). В этом можно убедится, просмотрев файл /etc/services.
  • Один из битов «Тип Сервиса» (TOS) установлен, потому сети с поддержкой QoS предоставят необходимый пакету тип сервиса.
  • Размер окна объявлен равным 62780.
  • Длина пакета 48 байт.

Следующий фрагмент представляет собой SYN-пакет (запрос соединения). Пакет захвачен с интерфейса Ethernet.

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

  • Контрольная сумма заголовка верная ([tcp sum ok])
  • Установлен флаг SYN (отметка S).
  • Количество данных, инкапсулированых в tcp-сегмент, равно 0.
  • Опция масштабирования окна установлена в null.
  • Максимальный размер сегмента (MSS, Maximum Segment) равен 1460. В среде Ethernet MSS = 1500 — 40 = 1460.
  • Длина пакета равна 60 байтам (20 + 40) (обратитесь к вышеприведенной диаграмме)

Пример #4
Вот пример захвата пакетов при помощи tethereal

Как можно видеть из фрагмента, вывод утилиты tethereal не сильно отличается от вывода TCPdump. В данном пакете установлены биты FIN и ACK (означает запрос на закрытие соединения). Tethereal может быть очень удобен для обнаружения сетевых аномалий при иcпользовании его в режиме с включённым внешним интерфейсом (front-end).

Заключение

Применение TCPdump в основном ориентировано на протокол TCP/IP. В этом ему нет равных. Ethereal намного более разносторонняя программа и понимает множество протоколов. Кроме того, пользовательский интерфейс ethereal очень хорошо проработан, так что даже новичок может понять что за пакет захвачен и какая информация содержится в нем. Хороший интерфейс делает процесс обучения похожим на развлечение.

Ресурсы

* На протяжении текста автор постоянно обращается к понятию «уровень» и различным названиям протокольного блока данных (PDU) на каждом из уровней. Для облегчения чтения привожу таблицу, в которой показан каждый уровень модели TCP/IP (или DoD) с указанием названия PDU для этого уровня и примером некоторых протоколов, работающих на данном уровне.

Vinayak Hegde

Моя жизнь изменилась с момента открытия для себя Linux. Внезапно компьютеры стали для меня интересны, поскольку на моем Linux я мог пробовать массу вещей. Связано это с легко доступным исходным кодом программ. Мои интересы сосредоточены в области сетей, встроенных систем и языков программирования. Сейчас я работаю в компании Aparna Web services, где мы занимаемся настройкой для учебных заведений/корпораций удаленно-загружаемых рабочих станций под управлением Linux (тонкие клиенты).

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector