Поиск по сайту:

Как использовать фильтры Wireshark в Linux


Wireshark — это анализатор пакетов мирового класса, доступный для Linux, Windows и macOS. Его фильтры гибки и сложны, но иногда нелогичны. Мы объясним «подводные камни», на которые вам нужно обратить внимание.

Пакетный анализ с помощью Real Bite

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

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

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

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

Если вы не понимаете, как работают фильтры в Wireshark, вы никогда не сойдете с первой передачи и не ограничите возможности программного обеспечения.

Установка Wireshark

Когда вы устанавливаете Wireshark, вас спрашивают, должен ли кто-либо, использующий учетную запись без полномочий root, иметь возможность захватывать сетевые трассировки. Отказ от этого может быть привлекательной идеей. Возможно, вы не хотите, чтобы все могли видеть, что происходит в сети. Однако установка Wireshark так, чтобы ее могли использовать только те, у кого есть привилегии root, означает, что все ее компоненты будут работать с повышенными разрешениями.

Wireshark содержит более 2 миллионов строк сложного кода и взаимодействует с вашим компьютером на самом низком уровне. Лучшие практики безопасности советуют запускать как можно меньше кода с повышенными привилегиями, особенно когда он работает на таком низком уровне.

Гораздо безопаснее запускать Wireshark с учетной записью обычного пользователя. Мы по-прежнему можем ограничить, кто может запускать Wireshark. Это требует нескольких дополнительных шагов настройки, но это самый безопасный способ продолжить. Элементы сбора данных Wireshark по-прежнему будут работать с повышенными привилегиями, но остальная часть Wireshark работает как обычный процесс.

Чтобы начать установку в Ubuntu, введите:

sudo apt-get install wireshark

В Fedora введите:

sudo dnf install wireshark

В Manjaro используйте эту команду:

sudo pacman -Syu wireshark-qt

Во время установки вы увидите показанный ниже экран с рекомендацией не запускать Wireshark от имени пользователя root. Нажмите Tab, чтобы переместить красную подсветку на «», и нажмите клавишу пробела.

На следующем экране нажмите Tab, чтобы переместить красную подсветку на «», и нажмите клавишу пробела.

Чтобы запустить Wireshark, вы должны быть членом группы wireshark, которая создается во время установки. Это позволяет вам контролировать, кто может запускать Wireshark. Любой, кто не входит в группу wireshark, не может запускать Wireshark.

Чтобы добавить себя в группу «Wireshark», используйте эту команду:

sudo usermod -a -G wireshark $USER

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

newgrp wireshark

Чтобы узнать, находитесь ли вы в новой группе, используйте команду groups:

groups

Вы должны увидеть «wireshark» в списке групп.

Запуск Wireshark

Вы можете запустить Wireshark с помощью команды ниже. Амперсанд (&) запускает Wireshark в качестве фоновой задачи, что означает, что вы можете продолжать использовать окно терминала. Вы даже можете закрыть окно терминала, и Wireshark продолжит работу.

Введите следующее:

Wireshark &

Появится интерфейс Wireshark. Устройства сетевого интерфейса, присутствующие на вашем компьютере, перечислены вместе с некоторыми встроенными псевдоустройствами.

Волнистая линия рядом с интерфейсом означает, что он активен и через него проходит сетевой трафик. Плоская линия означает отсутствие активности на интерфейсе. Верхним элементом в этом списке является «enp0s3», проводное соединение для этого компьютера, и, как и ожидалось, оно показывает активность.

Чтобы начать захват пакетов, щелкните правой кнопкой мыши «enp0s3», а затем выберите «Начать захват» в контекстном меню.

Вы можете установить фильтры, чтобы уменьшить количество трафика, перехватываемого Wireshark. Мы предпочитаем фиксировать все и отфильтровывать все, что не хотим видеть при анализе. Таким образом, мы знаем, что все, что произошло, находится в трассировке. Вы не хотите непреднамеренно пропустить сетевое событие, объясняющее ситуацию, которую вы расследуете, из-за вашего фильтра захвата.

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

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

Выделенные значки на изображении выше обозначают следующее слева направо:

  • Акулий плавник: если он синий, при нажатии на него начнется захват пакета. Если Wireshark перехватывает пакеты, этот значок будет серым.
  • Квадрат: если он красный, щелчок по нему остановит текущий захват пакетов. Если Wireshark не перехватывает пакеты, этот значок будет серым.
  • Акулий плавник с круговой стрелкой: если он зеленый, щелчок по нему остановит текущую трассировку. Это дает вам возможность сохранить или отбросить захваченные пакеты и перезапустить трассировку. Если Wireshark не перехватывает пакеты, этот значок будет серым.

Анализ трассировки

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

Простой способ упростить чтение трассировки — предоставить Wireshark осмысленные имена для исходного и целевого IP-адресов пакетов. Для этого нажмите «Вид» > «Разрешение имен» и выберите «Разрешить сетевые адреса».

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

Прокрутка дисплея влево покажет больше столбцов справа. Столбец информации показывает любую информацию, которую Wireshark может обнаружить в пакете. В приведенном ниже примере мы видим несколько запросов и ответов ping.

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

Чтобы изучить отдельный разговор, вы можете изолировать его по протоколу. Протокол для каждого пакета показан в столбце протокола. Большинство протоколов, которые вы увидите, относятся к семейству TCP/IP. Вы можете указать точный протокол или использовать Ethernet как своего рода ловушку.

Щелкните правой кнопкой мыши любой из пакетов в последовательности, которую вы хотите изучить, и выберите Фильтр диалогов > Ethernet. В приведенном ниже примере мы выбрали пакет запроса ping.

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

Чтобы очистить фильтр, нажмите «X» на панели фильтров.

Создание собственных фильтров

Давайте поместим простой фильтр в панель фильтров:

ip.addr == 192.168.4.20

Это выбирает все пакеты, которые были отправлены или получены устройством с IP-адресом 192.168.4.20. Обратите внимание на двойные знаки равенства (==) без пробела между ними.

Чтобы увидеть пакеты, отправленные устройством (источником), вы можете использовать ip.src; чтобы увидеть пакеты, прибывшие на устройство (пункт назначения), вы можете использовать ip.dst, как показано ниже:

ip.dst == 192.168.4.20 && ip.src == 192.168.4.28

Обратите внимание на использование двойного амперсанда (&&) для обозначения логического «и». Этот фильтр ищет пакеты, пришедшие на адрес 192.168.4.20 с адреса 192.168.4.28.

Люди, плохо знакомые с фильтрами Wireshark, часто думают, что такой фильтр будет захватывать все пакеты между двумя IP-адресами, но это не так.

Что он на самом деле делает, так это фильтрует все пакеты на IP-адрес 192.168.4.20 или с него, независимо от того, откуда они пришли или куда были отправлены. То же самое происходит со всеми пакетами с IP-адреса 192.168.4.28. Проще говоря, он фильтрует весь трафик на любой IP-адрес или с него.

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

http.request

Чтобы исключить пакеты, которые пришли с устройства или были отправлены на устройство, используйте восклицательный знак (!) и заключите фильтр в круглые скобки [()]:

!(ip.addr == 192.168.4.14)

Этот фильтр исключает все пакеты, отправляемые на адрес 192.168.4.14 или с него.

Это противоречит здравому смыслу, поскольку фильтр содержит оператор равенства (==). Возможно, вы ожидали, что введете этот фильтр так:

ip.addr !=192.168.4.14

Однако это не сработает.

Вы также можете искать строки в пакетах по протоколу. Этот фильтр ищет пакеты протокола управления передачей (TCP), которые содержат строку «youtube»:

tcp contains youtube

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

Введите следующее:

tcp.analysis.retransmission

Рождение, жизнь, смерть и шифрование

Сетевое соединение между двумя устройствами инициируется всякий раз, когда одно связывается с другим и отправляет пакет SYN (синхронизация). Затем принимающее устройство отправляет пакет ACK (подтверждение). Он указывает, примет ли он соединение, отправив пакет SYN.

SYN и ACK фактически являются двумя флагами в одном пакете. Исходное устройство подтверждает SYN, отправляя ACK, после чего устройства устанавливают сетевое соединение.

Это называется трехсторонним рукопожатием:

A -> SYN -> B

A <- SYN, ACK <- B

A -> ACK -> B

На приведенном ниже снимке экрана кто-то на компьютере «nostromo.local» устанавливает соединение Secure Shell (SSH) с компьютером «ubuntu20-04.local». Трехстороннее рукопожатие — это первая часть связи между двумя компьютерами. Обратите внимание, что две строки, содержащие пакеты SYN, выделены темно-серым цветом.

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

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

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

Одна сторона отправляет пакет FIN (finish). Другой конец отправляет ACK для подтверждения FIN, а затем также отправляет FIN, чтобы указать, что он согласен с разрывом соединения. Первая сторона отправляет ACK для только что полученного FIN, после чего сетевое соединение разрывается.

Вот как выглядит четырехстороннее рукопожатие:

A -> FIN -> B

A <- FIN, ACK <- B

A -> ACK -> B

Иногда исходный FIN подсоединяется к пакету ACK, который должен был быть отправлен в любом случае, как показано ниже:

A -> FIN, ACK -> B

A <- FIN, ACK <- B

A -> ACK -> B

Это то, что происходит в этом примере.

Если мы хотим видеть только SSH-трафик для этого диалога, мы можем использовать фильтр, указывающий этот протокол. Мы вводим следующее, чтобы увидеть весь трафик с использованием протокола SSH на удаленный компьютер и с него:

ip.addr == 192.168.4.25 && ssh

Это отфильтровывает все, кроме SSH-трафика на 192.168.4.25 и обратно.

Другие полезные шаблоны фильтров

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

Если вы вводите протокол, такой как tcp, ip, udp или shh, за которым следует точка ( .), появится меню. В нем будут перечислены последние фильтры, содержащие этот протокол, и все поля, которые можно использовать в фильтрах для этого имени протокола.

Например, с ip вы можете использовать  ip.addr, ip.checksum, ip.src, ip.dst, ip.id, ip.host и десятки других.

Используйте следующие шаблоны фильтров в качестве основы для ваших фильтров:

  • Чтобы показать только пакеты протокола HTTP: http
  • Чтобы показать только пакеты протокола DNS: dns
  • Чтобы отображать только TCP-пакеты с 4000 в качестве исходного или целевого порта: tcp.port==4000
  • Чтобы отобразить все пакеты сброса TCP: http.request
  • Чтобы отфильтровать пакеты ARP, ICMP и DNS: !(arp или icmp или dns)
  • Чтобы отобразить все повторные передачи в трассировке: tcp.analysis.retransmission
  • Чтобы отфильтровать флаги (например, SYN или FIN): необходимо установить для них значение сравнения: 1 означает, что флаг установлен, а 0 – нет. Итак, пример: tcp.flags.syn == 1.

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

Чтобы оценить все возможности и возможности фильтров Wireshark, обязательно ознакомьтесь с их онлайн-справочником.