Wireshark для всех. Лайфхаки на каждый день

dscpatopimz_ntv9lr1wcvh_gwu.png
Пакет с сертификатами от Хабра

Wireshark — очень известная программа для захвата и анализа сетевого трафика, незаменимый инструмент хакера, сетевого инженера, программиста, специалиста по безопасности. Да вообще любого любознательного человека, который хочет детально изучить трафик со своего или чужого мобильного телефона, фитнес-браслета, телевизора.
Wireshark в реальном времени перехватывает сетевые пакеты и сохраняет, например, в файлах pcap (Packet Capture). Их потом используют для изучения трафика, восстановления информации, анализа работы сети, обнаружения атак. Это альтернатива и дополнение к стандартной утилите tcpdump, с графическим интерфейсом, фильтрами и более широкими возможностями.


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

Расшифровка трафика SSL/TLS


Chrome и Firefox могут записывать логи сессионных ключей, которые используются для шифрования трафика SSL/TLS. Наша задача — включить запись этих логов, а потом загрузить их в Wireshark для анализа. Предполагается, что у нас есть физический доступ к компьютеру пользователя, трафик которого мы хотим расшифровать. Или к серверу, который устанавливает зашифрованное соединение с пользователем.

Сначала включаем запись ключей.

Старые билды Windows 10


В старых билдах Windows 10 работает старый метод. Заходим в Панель управления → Система и безопасность → Система. На вкладке «Дополнительные параметры системы» нажимаем кнопку «Переменные среды».

pxzzbtjrgpucltffbbquyxk4sus.png

Добавляем для пользователя новую переменную SSLKEYLOGFILE и указываем путь до файла.

hlxao-qregs3dpwgvykeiuiwg8y.png

В результате получаем логи с ключами, начало файла:

# SSL/TLS secrets log file, generated by NSS
CLIENT_HANDSHAKE_TRAFFIC_SECRET 2f80c7dfd9f1bd5f4cf0084b9c814006178a06b820c5cab264f3727fac1abb23 dcfc82758fbb587e526daaab9fdc0bcaaab68e5706ba0512292dc55a627b8627
SERVER_HANDSHAKE_TRAFFIC_SECRET 2f80c7dfd9f1bd5f4cf0084b9c814006178a06b820c5cab264f3727fac1abb23 d807f4757db1f9ba8df434d8b0005d07e4987459c1d14c7ea793e4c4f5b240dc
CLIENT_TRAFFIC_SECRET_0 2f80c7dfd9f1bd5f4cf0084b9c814006178a06b820c5cab264f3727fac1abb23 40186c6b1c925c63cd57e8fa235ba9d0bf14eb29c21cbb6494ef944e1e7a4cc3
SERVER_TRAFFIC_SECRET_0 2f80c7dfd9f1bd5f4cf0084b9c814006178a06b820c5cab264f3727fac1abb23 a0a377f26a0962eceae55bec94fcd7549d9b1d5d1e9b70c45627299ca2b9b129
EXPORTER_SECRET 2f80c7dfd9f1bd5f4cf0084b9c814006178a06b820c5cab264f3727fac1abb23 
...

Новые билды Windows 10


В более новых версиях после установки Windows 10 старый способ добавления переменных окружения может больше не работать. Тогда есть альтернативный вариант с помощью команды в оболочке PowerShell.

Установить переменную:

[Environment]::SetEnvironmentVariable("PATH", "C:\TestPath", "User")

Первый параметр — это имя переменной, второй — значение, третий — для какого уровня переменная (пользовательский или системный).

В нашем случае:

[Environment]::SetEnvironmentVariable("SSLKEYLOGFILE", "D:\wireshark", "User")

Linux и Mac OS X


Под Linux и Mac OS X можно использовать такую команду для изменения переменной окружения и ведения логов — с запуском браузера из того же терминального окна, поскольку переменные окружения всегда работают в пределах одной сессии.
# export SSLKEYLOGFILE=/Users/username/sslkeylogs/output.log
# open -a firefox
# wireshark

После накопления лога запускаем Wireshark.

awklnv511w5qd-az0nxbqbfbeqk.png

Заходим в «Параметры», там на вкладке «Протоколы» (Protocols) находим раздел TLS (раньше он назывался SSL) — и указываем путь к файлу с логами и ключом, который использовался в сессии симметричного шифрования: (Pre)-Master-Secret log filename.

hgcb8plxjv4efbsneszltnuf0qe.png

Например, при заходе пользователя на сервер Gmail в окне инспектирования пакетов QUIC мы видим обычные пакеты QUIC, зашифрованные ключом TLS.

iiaznct5xyxwsca_elvnxuslbna.png

Но в нижней части экрана появляется новая вкладка Decrypted QUIC, которая показывает расшифрованное содержимое этих пакетов.

rgxdi8a5bqeom8z_kdnb86ykmxg.png

Такой метод расшифровки трафика клиента не требует установки Wireshark на его компьютер, достаточно только скачать дамп с ключами, а потом использовать его вместе с дампом трафика.

По современному российскому законодательству провайдеры обязаны некоторое время хранить трафик пользователей, в том числе зашифрованный трафик TLS/SSL. Теперь понятно, какой примерно механизм может использоваться для его расшифровки и анализа. Злоумышленник должен иметь сессионные ключи для симметричного шифрования. Крупнейшие российские интернет-компании типа «Яндекс» и Mail.ru послушно выполняют требования российского законодательства — и предоставляют эти ключи (см. приказ ФСБ № 432 от 12.08.2016 г. о порядке получения ключей шифрования).

Примечание. Этот способ не ограничен только HTTP. Точно так же можно перехватывать и расшифровывать трафик SSL/TLS в других потоках. Например, зашифрованный трафик от сервера MySQL.

srlag8q6o8cu-h4ejtj2zqza6nm.png

Анализируем трафик с другого компьютера


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

Записываем пакеты на сервере с помощью сниффера пакетов tcpdump, который входит в стандартный комплект *nix:

tcpdump port 443 -w output.pcap

Затем копируем файлы к себе на компьютер:
scp host:~/output.pcap

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

Есть вариант отслеживать серверный трафик в реальном времени со своего домашнего/рабочего компьютера. Например, весь трафик, кроме портов 22 и 53:

ssh root@host tcpdump -U -s0 'not port 22 and not port 53' -w - | wireshark -k -I -

Примерно то же самое с компьютера под Windows:
plink.exe -ssh -pw password root@host "tcpdump -ni eth0 -s 0 -w - not port 22" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -

Ищем проблемы


Чтобы выделить конкретное TCP-соединение, находим любой интересующий пакет, щёлкаем по нему правой кнопкой мыши — и применяем фильтр диалога.

7a33etgihrinyr75r14jb44w2g4.png

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

bitk3hnwkkzezdwns_23s8xd334.png

На скриншоте мы видим пакеты с начала установки соединения TLS: пакет с приветствием клиента, ответный пакет с приветствием сервера, предъявленный сертификат, список шифров и так далее. Содержимое каждого пакета можно изучить отдельно. Очень удобно.

Типичный паттерн — использовать Wireshark для диагностики конкретных проблем. Например, в случае разрыва TLS-соединения мы можем зайти и посмотреть, кто его разорвал (клиент или сервер), на каком этапе это произошло и по какой причине.

Содержимое пакетов


Побайтовое содержимое каждого пакета — это настоящая магия. Конкретно эта функциональность Wireshark позволяет выявить самые серьёзные баги. Например, несколько лет назад выяснилось, что гигабитные Ethernet-контроллеры Intel 82574L отключаются, если отправить на них специально сконструированный пакет с определённой последовательностью байтов — так называемый «пакет смерти». Именно благодаря Wireshark выяснилось, какие конкретно байты в пакете приводят к гарантированному отключению сетевой карты.

Вот запись конкретных пакетов: pod-http-post.pcap и pod-icmp-ping.pcap. Можем их скачать, открыть в Wireshark и посмотреть своими глазами.

Отключение сетевого интерфейса Intel происходит, если по адресу 0×47f находится значение 2 или 3, то есть 32 HEX или 33 HEX. Если там 4, то всё нормально.

fvezfiotueqqqc09v6b21cu3u6q.png

Для атаки подходил любой пакет: HTTP POST, ICMP echo-request и проч. Например, на веб-сервере можно сконфигурировать ответ 200 таким образом, что «убивает» сетевые интерфейсы на клиентских машинах. Довольно любопытная ситуация.

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


Выше мы применили фильтр диалога, чтобы выдать все пакеты для конкретного TCP-соединения. Однако фильтры можно писать и вручную. Вот некоторые примеры запросов:
  • frame contains "google" — поиск всех пакетов со словом «google» в любом месте пакета
  • tcp.port == 443 — порт 443
  • dns.resp.len > 0 — все DNS-ответы
  • ip.addr == 95.47.236.28 — конкретный IP-адрес для получателя или отправителя

… и так далее. Фильтры гораздо богаче, чем у tcpdump, так что именно анализ трафика лучше делать в Wireshark.

Трафик с мобильного телефона


Аналогичным образом можно проанализировать трафик с фитнес-часов по Bluetooth или трафик любого мобильного приложения под Android. Для этого нужно записать пакеты PCAP на мобильном устройстве — и передать их для анализа в Wireshark на рабочем ПК.

Есть несколько мобильных программ для записи PCAP. Например, приложение
PCAPdroid для Android:

-mqbbkbg71qthohr9_ki7goulx4.png
PCAPdroid

В принципе, можно не передавать записанные файлы PCAP, а анализировать их прямо на мобильном устройстве. В некоторых мобильных снифферах есть и зачаточные функции анализатора пакетов, см. Packet Capture и Termux (о нём ниже).

suwe8wwynqmfebocomhwxhwhxw8.png
Packet Capture

Wireshark имеет и прямой интерфейс Androiddump, чтобы снимать данные с телефона напрямую через Android SDK.

Трафик с телевизора и других бытовых приборов


Чтобы изучить трафик с телевизора, смартфона жены или других бытовых приборов, которые подключены в домашнюю сеть по Ethernet и WiFi, придётся записывать PCAP на маршрутизаторе. Иногда достаточно встроенных инструментов. Если у вас маршрутизатор с прошивкой DD-WRT, то можно прямо на устройстве запустить tcpdump:
ssh root@192.168.1.1 -c "tcpdump -v -w - -i eth2" > mypackets.pcap

Для прошивки OpenWrt есть вариант зеркалировать трафик с помощью iptables-mod-tee.

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

sxu-eimp49ubzmfjpksuxigraic.png

nln13mxktz4ltzdge1vxw1b2xpa.png

Другой способ — перехватить беспроводной трафик WiFi с помощью утилиты Airodump-ng без подключения к маршрутизатору. Но это больше подходит для анализа трафика на чужих хотспотах.

Далее всё по накатанной — загружаем файлы в Wireshark, запускаем фильтры.

Кстати, Wireshark поддерживает также анализ трафика USB: встроенный сниффер USBPcap и импорт пакетов из сторонних снифферов, таких как Npcap и RawCap.


Если вы анализируете объёмные логи на удалённом сервере, но не хотите копировать всё на свою машину, может пригодиться Termshark — удобный пользовательский интерфейс в консоли для анализатора TShark, по внешнему виду напоминающий Wireshark.

Функции


  • Чтение файлов pcap и прослушивание трафика с активных интерфейсов в реальном времени (где разрешён tshark)
  • Фильтрация pcap или активных интерфейсов с помощью фильтров отображения Wireshark
  • Повторная сборка и инспектирование потоков TCP и UDP
  • Просмотр сетевых сеансов по каждому протоколу
  • Копирование выделенных пакетов из консоли в буфер обмена
  • Инструмент написан на языке Go, на каждой платформе компилируется в единый исполняемый файл: есть уже собранные версии для Linux, macOS, вариантов BSD, Android (termux) и Windows

y0awvpo97t_ifaxyawh6aeyou9g.gif

Вот как выглядит версия под Android:

ipjfmjpauhpn_ddqxb7xxqnnaq8.png


Если по каким-то причинам вы не можете запустить Wireshark на локальной машине, можно воспользоваться облачным сервисом CloudShark, который сделан на удивление качественно.

-irxitmatqdbha03iyu4ueyao2w.png

Основная функция — совместная работа и публикация разборов пакетов по URL. Например, cloudshark.org/captures/05aae7c1b941. Файлы загружаются в облако и анализируются в браузере. Это нужно, если вы хотите спросить совета на форуме, поделиться информацией с коллегами или опубликовать разбор пакетов для широкой аудитории. Кстати, удобно использовать с мобильного телефона, ведь под Android есть приложения для захвата пакетов, а вот хорошего анализатора нет.

Сервис платный, есть 30-дневный пробный период.

В общем, Wireshark — просто фантастическая программа на все случаи жизни.

Кроме реальной практической пользы, анализатор даёт примерное представление о том, как работает фильтрация DPI у российских провайдеров. Там всё устроено примерно так же. Система в реальном времени сканирует трафик, фильтрует конкретно пакеты от Twitter — и замедляет их доставку пользователям на территории России. В частности, этим непотребством занимается Роскомнадзор с 10 марта 2021 года.


На правах рекламы


Если для работы необходим сервер в аренду на Linux или Windows, то вам однозначно к нам — активация услуги через минуту после оплаты!

Присоединяйтесь к нашему чату в Telegram.

8p3vz47nluspfyc0axlkx88gdua.png

© Habrahabr.ru