Перейти к содержанию

Wireshark

OpenSource инструмент для анализа сетевых пакетов.

Назначение

  • Диагностика и траблшутинг сетевых проблем, таких как уменьшение пропускной способности и ошибки загрузки
  • Обнаружение сетевых аномалий возможно влияющих на безопасность: неучтенные хосты, непривычное использование портов, подозрительный трафик
  • Исследование и изучение особенностей различных сетевых протоколов, просмотр переданного payload

Интерфейс

Имеется как GUI версия, так и CLI.

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

Имеется возможность цветовой градации пакетов (View -> Coloring Rules), причём вместе с предустановленными цветовыми схемами, можно создавать свои.

Для каждого пакета можно посмостреть дополнительную информацию путём вызова Statistics -> Capture File Propetries или нажатием кнопки с блокнотиком в левой части статусбара.

Исследование пакетов и навигация по ним

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

С помощью Ctrl + G можно перейти к нужному пакету по его номеру.

С помощью Ctrl + F можно найти нужные пакеты в соответствии с заданным запросом.

С помощью Ctrl + M можно помечать конкретные пакеты/группу пакетов

С помощью Ctrl + Alt + C можно задавать комментарии к конкретному пакету.

С помощью File -> Export Objects можно извлекать из пакетов переданную информацию

Раздел Analyze -> Expert Information вызывает окно содержащее обзорные сведения об интересных пакетах

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

Различают два типа фильтрации:

Capture Filter

То, что нужно захватывать. Задаются в формате pcap-filter, поэтому имеют ограниченные возможности для фильтрации. Много хороших примеров, например тут

Область фильтрации: host, net, port and portrange
Направление: src, dst, src or dst, src and dst
Протоколы: ether, wlan, ip, ip6, arp, rarp, tcp, udp
Пример фильтра который захватывает трафик на 80 порт: tcp port 80

Display Filter

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

Display фильтры можно задавать как запросами так и через GUI, имею в виду можно выбрать конкретное поле в конкретном пакете (Analyse -> Apply as Filter или через ПКМ) и назначить фильтр по этому полю.

Также существует возможность фильтрации отдельных взаимодействий, например по TCP сессии, (Conversation Filter). Кроме того, имеется возможность просто обозначить цветом подходящие под условия фильтра пакеты, не скрывая остальные записи с экрана.

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

С помощью Analyse -> Follow TCP/UDP/HTTP Stream можно восстановить поток и в отдельном окне увидеть результаты взаимодействия. Так же, бывает полезно посмотреть TCP поток в сыром виде, для того, чтобы увидеть передаваемые с его помощью файлы. При этом, бинарники, в большинстве случаев, нужно будет привести в читаемый вид с помощью hex редактора.

Синтаксис Display фильтров

English C-Like Описание Пример
Операторы сравнения
eq == Equal ip.src == 10.10.10.100
ne != Not equal ip.src != 10.10.10.100
gt > Greater than ip.ttl > 250
lt < Less Than ip.ttl < 10
ge >= Greater than or equal to ip.ttl >= 0xFA
le <= Less than or equal to ip.ttl <= 0xA
Логические операторы
and && Логическое И (ip.src == 10.10.10.100) И (ip.src == 10.10.10.111)
or || Логическое ИЛИ (ip.src == 10.10.10.100) ИЛИ (ip.src == 10.10.10.111)
not ! Логическое ОТРИЦАНИЕ !(ip.src == 10.10.10.100)

Примеры Display фильтров в разрезе протоколов

Фильтр Описание
IP
ip Показывает все IP пакеты/датаграммы
ip.addr == 10.10.10.1 Показывает IP пакеты содержащие 10.10.10.1
ip.addr == 10.10.10.1/24 Показывает IP пакеты сети 10.10.10.1/24
ip.src == 10.10.10.1 Показывает IP пакеты от 10.10.10.1
ip.dst == 10.10.10.1 Показывает IP пакеты для 10.10.10.1
TCP
tcp.port == 10.10.10.1 Показывает TCP содержащие 10.10.10.1
tcp.srcport == 10.10.10.1 Показывает TCP пакеты от 10.10.10.1
tcp.srcport == 10.10.10.1 Показывает TCP пакеты для 10.10.10.1
UDP
udp.port == 10.10.10.1 Показывает UDP датаграммы содержащие 10.10.10.1
udp.srcport == 10.10.10.1 Показывает UDP датаграммы от 10.10.10.1
udp.dstport == 10.10.10.1 Показывает UDP датаграммы для 10.10.10.1
HTTP
http Показывает все http пакеты
http.response.code == 200 Показывает http пакеты с 200 кодом ответа
http.request.method == "GET" Показывает http GET запросы
http.request.method == "POST" Показывает http POST запросы
DNS
dns Показывает все DNS пакеты
dns.flags.response == 0 Показывает DNS запросы
dns.flags.response == 1 Показывает DNS ответы
dns.qry.type == 1 Показывает DNS запросы к "A" записи

Все возможные выражения и атрибуты Display фильтров можно найти в Analyse -> Display Filter Expressions

Расширенная фильтрация

contains

Тип: Оператор сравнения
Описание: Ищет значение внутри пакетов. Поиск регистрозависимый.
Пример: Найти все серверы Apache
Использование: http.server contains "Apache"
Описание процесса: Отобразить все http пакеты у которых в поле "server" установленно значение "Apache"

matches

Тип: Оператор сравнения
Описание: Ищет значение или регулярное выражение внутри пакетов. Поиск регистронезависимый. У сложных запросов могут быть погрешности. Пример: Найти все .html и .php страницы
Использование: http.host matches "\.(php|html)"
Описание процесса: Отобразить все http пакеты у которых в поле "host" установленно значение совпадающее с ".html" или ".php"

in

Тип: Установление отношений
Описание: Ищет значение или поле внутри определенного списка или диапазона значений. Пример: Найти все пакеты которые используют порты 80, 443, 8080-8090 Использование: tcp.port in {80 443 8080..8090}
Описание процесса: Отобразить все пакеты у которых в поле "port" установленно значение совпадающее со одним из значений из списка.

upper

Тип: Функция Описание: Конвертирует все символы строки в верхний регистр Пример: Найти все серверы "APACHE"
Использование: upper(http.server) contains "APACHE"
Описание процесса: Преобразовать значение поля "server" http пакетов в верхний регистр, а затем отобразить пакеты у которых в этом поле установлено значение "APACHE"

lower

Тип: Функция Описание: Конвертирует строку в нижний регистр Пример: Найти все серверы "apache"
Использование: lower(http.server) contains "apache"
Описание процесса: Преобразовать значение поля "server" http пакетов в нижний регистр, а затем отобразить пакеты у которых в этом поле установлено значение "apache"

string

Тип: Функция Описание: Приводит нестроковые значения в строку Пример: Найти все кадры с нечётными номерами Использование: string(frame.number) mathces "[13579]$"
Описание процесса: Преобразовать значение поля frame.number в строку, а затем отобразить все кадры которые заканчиваются на одно из чисел в последовательности 1,3,5,7,9

Все возможные выражения и атрибуты Display фильтров можно найти в Analyse -> Display Filter Expressions

Введённые фильтры можно сохранять для дальнейшего использования (иконка "Закладка" в строке ввода фильтров), или добавлять в виде кнопки на главный экран (иконка "+" в строке ввода фильтров)

Примеры фильтров для поиска аномалий

Сканирование с nmap

nmap -sT | TCP сканирование
tcp.flags.syn==1 and tcp.flags.ack==0 and tcp.window_size > 1024
nmap -sS | SYN сканирование
tcp.flags.syn==1 and tcp.flags.ack==0 and tcp.window_size <= 1024
nmap -sU | UDP сканирование
icmp.type==3 and icmp.code==3

ARP spoofing

Описание Фильтры
Весь ARP трафик arp
ARP запросы arp.opcode == 1
ARP ответы arp.opcode == 2
ARP сканирование arp.dst.hw_mac==00:00:00:00:00:00
Возможный ARP poisoning arp.duplicate-address-detected or arp.duplicate-address-frame
Возможный ARP flooding ((arp) && (arp.opcode == 1)) && (arp.src.hw_mac == target-mac-address)

Анализ DHCP

Описание Фильтры
Весь DHCP трафик dhcp or bootp
DHCP запросы dhcp.option.dhcp == 3
DHCP ACK (принятый запрос) dhcp.option.dhcp == 5
DHCP NAK (отклоненный запрос) dhcp.option.dhcp == 6
Полезные опции DHCP запросов: dhcp.option.*
Option 12: Hostname
Option 50: Запрошенный IP адрес
Option 51: Запрошенное время аренды
Option 61: MAC адрес клиента
Полезные опции DHCP ACK:
Option 15: Домен
Option 51: Запрошенное время аренды
Полезные опции DHCP NAK:
Option 56: Message (причина отказа)

Анализ NetBIOS

Описание Фильтры
Весь NetBIOS трафик nbns

Анализ Kerberos

Описание Фильтры
Весь kerberos трафик kerberos
Поиск пользователя kerberos.CNameString and !(kerberos.CNameString contains "$" )
Поиск хостов kerberos.CNameString contains "$"
Версия протокола kerberos.pvno == ##
Доменное имя для сгенерированного билета kerberos.realm contains ".local"
Наименование сервиса для сгенерированного билета kerberos.SNameString contains "krbtg"

ICMP и DNS туннелирование

Описание Фильтры
Весь ICMP трафик icmp
Весь DNS трафик dns
Возможный ICMP туннель data.len > 64 and icmp
Возможный DNS туннель dns.qry.name.len > 15 and !mdns
Возможный DNS туннель через dnscat dns contains "dnscat"

Прочее

Возможный reverse|bind|web shell

tcp.flags.syn eq 1 and !(tcp.port eq 443) and !(tcp.port eq 80) and !(ip.dst eq LAN/24)

Статистика и итоги

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

Раздел статистики Описание
Resolved Addresses Предоставляет информацию о разрешённых адресах
Protocol Hierarchy Статистика переданных данных в разрезе протоколов
Conversations Статистика переданных данных в разрезе сессий (Ethernet, IPv4, IPv6, TCP, UDP). Полезно для получения сведений об интенсивности взаимодействия с различными хостами по различными портам
Endpoints Статистика переданных данных в разрезе интерфейсов
IPv[4|6] Statistics Расширенная статистика переданных данных в разрезе IP протокола
DNS Статистика переданных данных в разрезе DNS протокола
HTTP Статистика переданных данных в разрезе протоколов

Прочее

Для дампа трафика с хостов, можно использовать dumpcap

По умолчанию отключен резолвинг адресов. Для включения: Edit -> Preferences -> Name Resolution. А при наличии скаченной БД от MindMap, в статистике по Endpoint'ам будут отображаться сведения о географической принадлежности IP адресов.

Для просмотра TLS трафика нужно загрузить дамп сессионных ключей (Edit -> Preferences -> Protocols -> TLS -> (Pre)-Master-Secret log filename), их могут отдавать Firefox и Chrome если перед запуском будет определена переменная SSLKEYLOGFILE. Подробнее можно почитать, например тут

Во вкладке Tools имеются инструменты для извлечения крэдов из не шифрованных протоколов и https (в случае наличия сессионниого ключа)