Полное руководство по tcpdump с примерами

Полное руководство по tcpdump с примерами

Инструмент tcpdump представляет собой основное средство сетевого анализа, используемое специалистами в сфере информационной безопасности. То есть, все желающие разобраться в особенностях TCP / IP протоколов должны также освоить основы работы с этим инструментом. Немало специалистов применяют в своей работе более высокоуровневые средства вроде Wireshark. С другой стороны, мы считаем такой выбор не совсем верным.

Если приложение визуализирует данные о сетевом трафике в максимально простой естественной форме, анализ этих данных в полной мере выполняется за счет навыков и знания человека. Подобный подход позволяет сформировать более глубокое понимание принципов использования протоколов TCP / IP. Потому стоит с самого начала использовать именно tcpdump, а не другие средства.

Содержание:

  1. Базовые особенности работы с tcpdump
    1. Доступные функции
    2. Фильтрующие выражения в tcpdump
  2. Несколько примеров
  3. Расширенное отображение в tcpdump
  4. Спецсимволы и комплексное группирование
    1. Отображение конкретных TCP-флагов
    2. Вывод пакетов ACKNOWLEDGE (ACK)
    3. Вывод пакетов PUSH (PSH)
    4. Вывод пакетов RESET (RST).
    5. Вывод пакетов SYNCHRONIZE (SYN)
    6. Вывод пакетов FINISH (FIN)
    7. Вывод пакетов SYNCHRONIZE / ACKNOWLEDGE (SYNACK)
    8. Снятие флагов RST за счет tcpflags
    9. Снятие флагов FIN за счет tcpflags
  5. Выявление трафика, заслуживающего особого внимания
    1. Поиск пакетов с нормальными комплектами RST и SYN
    2. Открытый текст HTTP и запрос
    3. SSH-соединения на конкретный порт (через баннер)
    4. Пакеты С TTL < 10 (проблема или TRACEROUTE)
    5. Пакеты с установкой EVIL BIT
  6. Выводы

Базовые особенности работы

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

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

  • -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 — для фильтрации по значению соответствующего идентификатора (host, net или port);
  • dir — для фильтрации по конкретному направлению передачи к и / или от идентификатора (src и dst);
  • proto — для фильтрации по заданному сетевому протоколу (tcp, udp, icmp, ah и т.п.).

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

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

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

Например, просмотреть все пакеты можно с помощью опции -i и аргумента any:

 

Просмотреть данные по конкретному интерфейсу поможет команда с опцией -i и названием этого интерфейса (например, eth0):

 

Для просмотра исходящего и входящего трафика по IP-адресу (для примера возьмем 192.168.0.100) — введите в командную строку команду с выражением host и соответствующим аргументом:

 

Настроить подробное отображение данных без номеров портов или имен хостов, абсолютных порядковых номеров и временных меток поможет комбинация опций -ttttnnvvS:

 

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

Этот способ часто применяется для изолированного просмотра нескольких пакетов и их более глубокого изучения.

Также можно отсеять для отображения трафик по источнику или назначению за счет выражений src и dst. Просто введите в командную строку команду с выражением src и IP-адрес, чтобы увидеть исходящий трафик из данного источника:

 

Или команду с выражением dst и IP-адрес, чтобы увидеть входящий трафик:

 

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

 

Стоит отметить, что выражение net полезно комбинировать с выражениями src и dst.

Кроме того, существует возможность вывести на экран трафик определенного порта. Для этого введите команду с выражением port и номером соответствующего порта в качестве аргумента:

 

Или:

 

Если вы ищете конкретный тип трафика — попробуйте выражения tcp, udp, icmp. Например, для выражение icmp поможет вывести на экран весь трафик по протоколу ICMP (англ. Internet Control Message Protocol):

 

Также несложно вывести весь трафик по протоколу IP6 — с помощью команды и выражения ip6:

 

Кроме того, Вы можете использовать выражение portrange и диапазон портов в качестве аргумента команды:

 

Если Вас интересуют все пакеты определенного размера — воспользуйтесь выражениями less или greater (либо соответствующими математическими символами сравнения).

Меньше 32 байт:

 

Больше 64 байт:

 

Меньше или равно 128 байтам:

 

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

Для сохранения данных в файл введите в командную строку команду tcpdump с опцией -w и имя файла (вместо capture_file):

 

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

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

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

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

  • and либо && — логическое «И» для последовательного объединения нескольких условий (выводится результат, соответствующий всем критериям);
  • or либо || — логическое «ИЛИ» для параллельного объединения нескольких условий (выводится результат, соответствующий хотя бы одному критерию);
  • not либо ! — логическое «НЕ» для исключения указанного условия (выводится результат, не соответствующий заданному критерию).

Попробуем рассмотреть несколько полезных примеров.

Предположим, что нам нужно вывести трафик, исходящий из источника с IP-адресом 192.168.0.1 до любого хоста с портом 8000. В таком случае комбинация фильтрующих регулярных выражений будет иметь следующий вид:

 

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

 

Теперь попробуем вывести входящий и исходящий трафик по IP-адресу 192.168.0.2, не передающийся по протоколу ICMP. Тогда команда будет выглядеть так:

 

Теперь выведем на экран весь трафик за исключением направленного на 22 порт (SSH). В этом случае команда будет выглядеть так:

 

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

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

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

Допустим, что Вы использовали скобки, чтобы сгруппировать несколько условий вместе, как это показано в следующем примере:

 

Однако наличие скобок приведет к тому, что команда вернет ошибку. Решить эту проблему можно двумя способами:

  •  поставив перед каждой из скобок обратную косую черту — \;
  • заключив все выражение в одинарные кавычки — '.

Тогда Ваша команда будет иметь такой вид:

 

Или такой:

 

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

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

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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

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

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

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

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

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

Выводы

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

Спасибо за время, потраченное на чтение статьи! Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира информационных технологий!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Больше похожих постов

1 комментарий. Оставить новый

  • Спасибо большое за статью. Есть вопрос как можно определить сетевых приложений по характеристикам сетевтго трафика? По номеру порта это только работает если приложения использует статичечкий порт. Жду вашего ответа. Заранее спасибо!

    Ответить

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Поиск по сайту
Лучшее
Популярное
Рубрики
Меню