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
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 (в случае наличия сессионниого ключа)