> tcpdump

10 mins read

Доступные функции

  • -D — вывести исчерпывающий перечень доступных интерфейсов;
  • -i eth0 — проверить определенный интерфейс (eth0);
  • -i any — проверить интерфейсы на предмет наличия любого трафика;
  • -n — выводить IP- адреса, а не имена хостов;
  • -nn — выводить IP-адреса вместе с номерами портов, а не имена хостов с названиями протоколов;
  • -q — отображать минимальный объем данных о пакете;
  • -t — отключить вывод метки времени для всех строк;
  • -tttt —включает для каждой из строк отображение временных меток в формате по умолчанию;
  • -X — отображать данные пакета одновременно в шестнадцатеричной и в ASCII кодировках;
  • -XX — аналог -X, который также выводит ethernet header;
  • -v, -vv, -vvv — увеличить объем возвращаемых данных о пакетах;
  • -c — вывести указанное число пакетов, после чего стоп;
  • -s — вычислить длину snaplength захвата в байтах (-s0, чтобы вычислить все, если вы намеренно не захватили меньше);
  • -S — вывести абсолютные порядковые номера;
  • -e — продемонстрировать ethernet header;
  • -q — вывести минимум данных о пакете;
  • -E — произвести расшифровку трафика IPSEC, отдав ключ шифрования.

Стоит обратить внимание, что стандартное значение snaplength в tcpdump 4.0 увеличилось — с 68 до 96 байтов. То есть, о каждом пакете вы увидите больше данных, однако все равно не все. Попробуйте -s 1514 или -s 0 для получения полного охвата.

Фильтрующие выражения

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

Всего выражений в программе предусмотрено три вида: type, dir и proto.

Основные возможности: хост, сеть или порт.

Директории дают возможность выполнить src, dst в любых комбинациях комбинации.

Кроме того, протокол дает возможность выявлять tcp, udp, icmp, ah и прочее.

Несколько примеров

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

Просмотреть все пакеты можно взглянув на все имеющиеся интерфейсы.

# tcpdump -i any

Просмотреть данные по конкретному интерфейсу поможет следующая комбинация.

# tcpdump -i eth0

Для просмотра трафика по 192.168.0.100 (исходящего и входящего) введите такой набор команд.

# tcpdump host 192.168.0.10

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

# tcpdump -ttttnnvvS

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

# tcpdump -nnvXSs 0 -c1 icmp

tcpdump: listening on eth0, link-type EN10MB (Ethernet), 23:11:10.370321 IP (tos 0x20, ttl 48, id 34859, offset 0, flags [none], length: 84) 69.254.213.43 > 72.21.34.42: icmp 64: echo request seq 0 0x0000: 4520 0054 882b 0000 3001 7cf5 45fe d52b E..T.+..0.|.E..+ 0x0010: 4815 222a 0800 3530 272a 0000 25ff d744 H."..50'..%..D 0x0020: ae5e 0500 0809 0a0b 0c0d 0e0f 1011 1213 .^………….. 0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 ………….!"# 0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123 0x0050: 3435 3637 4567 1 packets captured 1 packets received by filter 0 packets dropped by kernel

Также можно отсеять для отображения трафик по источнику или назначению за счет src и dst.

# tcpdump src 192.168.0.100
tcpdump dst 192.168.0.100

С целью выявления пакетов, следующих из определенной сети либо в нее, примените net (можно и нужно комбинировать с src и dst).

# tcpdump net 192.168.0.100/24

Кроме того, существует возможность вывести трафик определенного порта, применив опцию port + нужный номер порта.

# tcpdump port 8000
tcpdump src port 8080

В том случае, если вы разыскиваете конкретный тип трафика, попробуйте опции tcp, udp, icmp.

# tcpdump icmp

Помимо всего прочего, несложно вывести весь трафик IP6 с помощью опции протокола.

# tcpdump ip6

Найти трафик поможет даже фильтр по диапазону портов.

# tcpdump portrange 8000-9000

В том случае, если вас интересуют все пакеты определенного размера, вы можете использовать следующие запросы.

# tcpdump less 32
tcpdump greater 64
tcpdump <= 128

Бывает необходимо сохранить результаты поиска пакетов в отдельный файл для дальнейшего изучения и анализа. Такие файлы называют PCAP (PEE-cap), и они имеют машиночитаемый формат. То есть, считывать данные из таких файлов способны самые разные приложения, включая разные сетевые анализаторы, инструменты выявления атак и вторжений и, безусловно, tcpdump. Для сохранения данных нужно указать файл с именем capture_file + опцию -w.

# tcpdump port 8000 -w capture_file

Открывать для чтения PCAP можно за счет использования опции -r. Стоит отметить, что при чтении файла доступны для применения все регулярные выражения tcpdump. Только нужно помнить, что при их введении обрабатывается только содержимое PCAP.

# tcpdump -r capture_file

Расширенное отображение

Базовые примеры применения выражений и опций мы рассмотрели. Теперь настало время перейти к более сложным примерам.

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

AND
Оператор and — также можно &&.

OR
Оператор or — также можно||.

EXCEPT
Оператор not — также можно !.

Попробуем привести несколько примеров с удачными комбинациями.

Предположим, что нам нужно вывести трафик из 192.168.0.1 до любого хоста на порте 8000.

tcpdump -nnvvS src 192.168.0.1 and dst port 8000

Или же нам может понадобится найти весь трафик из 192.168.x.x, направляющийся в сети 10.x или 172.16.x.x. Кроме того, попробуем указать шестнадцатеричный формат вывода и не указывать имена хостов. И добавим уровень дополнительной детализации.

tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

Следующий пример позволит вывести весь трафик из 192.168.0.2, не являющийся ICMP.

tcpdump dst 192.168.0.2 and src net and not icmp

А такая комбинация позволит отобразить трафик, кроме SSH (22 порта).

tcpdump -vv src mars and not dst port 22

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

Спецсимволы и комплексное группирование 

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

tcpdump src 10.0.2.4 and (dst port 3389 or 22)

Однако наличие скобок приведет к тому, что выполнение команды вернет ошибку. Решить проблему можно, поставив перед каждой из скобок \ или заключив команду в одинарные кавычки:

tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

Отображение конкретных TCP-флагов

Трафик можно захватывать на основании конкретных TCP-флагов.

# tcpdump 'tcp[13] & 32!=0'

Вывод пакетов ACKNOWLEDGE (ACK)

# tcpdump 'tcp[13] & 16!=0'

Вывод пакетов PUSH (PSH)

# tcpdump 'tcp[13] & 8!=0'

Вывод пакетов RESET (RST)

# tcpdump 'tcp[13] & 4!=0'

Вывод пакетов SYNCHRONIZE (SYN)

# tcpdump 'tcp[13] & 2!=0'

Вывод пакетов FINISH (FIN)

# tcpdump 'tcp[13] & 1!=0'

Вывод пакетов SYNCHRONIZE / ACKNOWLEDGE (SYNACK)

# tcpdump 'tcp[13]=18'

Примечание: лишь флаги PSH, RST, SYN и FIN присутствуют в соответствующем поле tcpdump. Безусловно, URG и ACK тоже отображаются, но не в поле flags.

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

# tcpdump 'tcp[tcpflags] == tcp-syn'

Снятие флагов RST за счет tcpflags

# tcpdump 'tcp[tcpflags] == tcp-rst'

Снятие флагов FIN за счет tcpflags

# tcpdump 'tcp[tcpflags] == tcp-fin'

Примечание: данный метод подходит и для других флагов.

Выявление трафика, заслуживающего особого внимания

Обычно есть несколько видов трафика, способы выявления которых обязательно нужно запомнить. Например, это могут быть неправильные либо предположительно вредоносные пакеты данных.

Поиск пакетов с нормальными комплектами RST и SYN

# tcpdump 'tcp[13] = 6'

Открытый текст HTTP и запрос

# tcpdump 'tcp[32:4] = 0x47455420'

SSH-соединения на конкретный порт (через баннер)

# tcpdump 'tcp[(tcp[12] >>2):4] = 0x5353482D'

Пакеты С TTL < 10 (проблема или TRACEROUTE)

# tcpdump 'ip[8] < 10'

Пакеты с установкой EVIL BIT

# tcpdump 'ip[6] & 128 != 0'

Выводы

Tcpdump — мощный инструмент, полезный для всех желающих освоить принципы сетевой и информационной безопасности.
Особый принцип взаимодействия с трафиком вместе с точностью анализа пакетов превращают приложение в лучший инструмент изучения TCP / IP.
Безусловно, анализаторы протоколов вроде Wireshark очень удобны. Однако если вы желаете разобраться в пакетах, лучше начать с tcp dump.

Добавить комментарий

Previous Story

dd

Latest from Blog

dd

dd (dataset definition) — программа UNIX, предназначенная как для копирования, так и для конвертации файлов. Название унаследовано от оператора DD

0 £0.00