Wireshark – потужний інструмент для перехоплення та аналізу мережевого трафіку, що є незамінним помічником для спеціалістів із кібербезпеки, системних адміністраторів та розробників. У цій статті ви знайдете корисні лайфхаки, які допоможуть розшифровувати трафік SSL/TLS, аналізувати пакети на сервері за допомогою tcpdump, а також налаштовувати змінні оточення для запису сесійних ключів у Windows, Linux та Mac OS X.
Wireshark – це відома програма, яку часто використовують для захоплення та аналізу мережевого трафіку. Вона стане в пригоді не лише хакерам чи мережевим інженерам, а й кожному, хто цікавиться тим, як працюють різні пристрої, – від смартфона до фітнес-браслета чи навіть телевізора.
Програма дозволяє в реальному часі «знімати» пакети даних із мережі та зберігати їх у файлах pcap, які згодом можна переглянути та проаналізувати. Це корисно для відновлення інформації, вивчення роботи мережі чи пошуку можливих загроз. Wireshark часто використовують разом із tcpdump, але завдяки зручному інтерфейсу, фільтрам та додатковим функціям її можливості значно ширші й підходять навіть новачкам.

Wireshark має безліч функцій, проте навіть новачок із базовими знаннями може отримати від нього користь. Далі наведено кілька прикладів, як цю програму можна застосовувати для вирішення основних мережевих завдань.
Chrome і Firefox дозволяють записувати логи сесійних ключів, які використовуються для шифрування трафіку за допомогою SSL/TLS. Наше завдання – увімкнути функцію запису цих логів, а потім завантажити їх у Wireshark, щоб детально проаналізувати зашифрований трафік. Це можливо лише за умови, що ми маємо фізичний доступ до комп’ютера користувача, чий трафік необхідно розшифрувати, або до сервера, який встановлює зашифровані з’єднання з клієнтами.
Спочатку вмикаємо запис ключів.
У старих білдах Windows 10 працює старий метод. Заходимо в Панель управління → Система та безпека → Система . На вкладці «Додаткові параметри системи» натискаємо кнопку «Змінні середовища».
Додаємо для користувача нову змінну SSLKEYLOGFILEта вказуємо шлях до файлу.
В результаті отримуємо логи з ключами, початок файлу:
# SSL/TLS secrets log file, створений 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 старий спосіб додавання змінних оточення може більше не працювати. Тоді є альтернативний варіант за допомогою команди в оболонці PowerShell.
Встановити змінну:
[Environment]::SetEnvironmentVariable("PATH", "C:\TestPath", "User")
Перший параметр – це ім’я змінної, другий – значення, третій – для якого рівня змінна (користувацький чи системний).
У нашому випадку:
[Environment]::SetEnvironmentVariable("SSLKEYLOGFILE", "D:\wireshark", "User")
# export SSLKEYLOGFILE=/Users/username/sslkeylogs/output.log # open -a firefox # wireshark
Після накопичення лога запускаємо Wireshark.
Заходимо в “Параметри”, там на вкладці “Протоколи” (Protocols) знаходимо розділ TLS (раніше він називався SSL) – і вказуємо шлях до файлу з логами та ключем, який використовувався в сесії симетричного шифрування: (Pre)-Master-Secret log filename.
Наприклад, під час заходу користувача на сервер Gmail у вікні інспектування пакетів QUIC ми бачимо звичайні пакети QUIC, зашифровані ключем TLS.
Але в нижній частині екрана з’являється нова вкладка Decrypted QUIC , яка показує розшифрований вміст цих пакетів.
Такий спосіб розшифровки клієнтського трафіку не потребує встановлення Wireshark на пристрій користувача — достатньо отримати дамп із ключами, а потім використати його разом із дампом трафіку для аналізу.
Згідно із чинним законодавством, провайдери мають зберігати користувацький трафік, включно із зашифрованим TLS/SSL. Завдяки цьому зрозуміло, як може відбуватися його розшифровка: потрібні лише сесійні ключі для симетричного шифрування.
Примітка. Цей спосіб не обмежений лише HTTP. Так само можна перехоплювати і розшифровувати трафік SSL/TLS в інших потоках. Наприклад, зашифрований трафік від сервера MySQL.
Якщо потрібно розібратися із сервером у продакшні, то зручно скопіювати звідти файли 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-з’єднання, потрібно знайти потрібний пакет, клацнути на нього правою кнопкою миші та застосувати фільтр через діалогове меню.
Тепер із всього записаного трафіку залишилися лише пакети, що належать саме цьому з’єднанню.
На скріншоті показано пакети з моменту початку встановлення TLS-з’єднання: клієнтське привітання, відповідь сервера з привітанням, сертифікат, список доступних шифрів тощо. Вміст кожного пакета можна детально переглянути окремо, що дуже зручно для аналізу.
Зазвичай Wireshark використовують для діагностики конкретних проблем. Наприклад, якщо відбувся розрив TLS-з’єднання, можна перевірити, хто ініціював його завершення (клієнт або сервер), на якому етапі це сталося і яка могла бути причина.
Побайтовий аналіз пакетів у Wireshark – це справжня знахідка для виявлення критичних помилок. Завдяки цій можливості вдалося розкрити серйозний баг у гігабітних Ethernet-контролерах Intel 82574L. Виявилося, що ці контролери можуть повністю відключитися у відповідь на спеціально сформований «пакет смерті» – пакет із певною послідовністю байтів.
Завдяки Wireshark вдалося визначити, що мережевий інтерфейс відключається, коли за адресою 0x47f знаходиться значення 2 або 3 (32 або 33 у шістнадцятковому форматі). Якщо там стоїть значення 4, все працює нормально.
Для детального вивчення можна завантажити файли pod-http-post.pcap і pod-icmp-ping.pcap відкрити їх у Wireshark і подивитися вміст пакетів власноруч. Це чудовий приклад того, як Wireshark допомагає знаходити та усувати найнепомітніші проблеми в мережевих протоколах та обладнанні.
Для такої атаки підходив практично будь-який тип пакета: це міг бути як 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:

Власне, передавати файли PCAP на комп’ютер необов’язково — їх можна аналізувати прямо на мобільному пристрої. Деякі мобільні сніфери вже мають базові функції для аналізу пакетів. Наприклад, програми Packet Capture та Termux дозволяють не лише записувати трафік, а й переглядати його структуру безпосередньо на смартфоні. Це зручно для швидкої діагностики та аналізу мережевих з’єднань у польових умовах.

Wireshark має і прямий інтерфейс Androiddump, щоб знімати дані з телефону безпосередньо через Android SDK.
Для аналізу трафіку з телевізора, смартфона дружини чи інших пристроїв у домашній мережі, підключених через Ethernet або Wi-Fi, потрібно записати файли PCAP безпосередньо на маршрутизаторі. У багатьох випадках цього можна досягти за допомогою вбудованих інструментів маршрутизатора. Одним із найпоширеніших інструментів для цього є tcpdump – утиліта, що дозволяє захоплювати мережеві пакети безпосередньо на маршрутизаторі.
ssh [email protected] -c "tcpdump -v -w - -i eth2" > mypackets.pcap
Для прошивки OpenWrt є варіант дзеркалювати трафік за допомогою iptables-mod-tee.
Можна віддзеркалювати та записувати трафік за допомогою додаткового фізичного хаба або врізання в мережу. Детальніше див. у документації.
Інший підхід – перехоплення бездротового трафіку Wi-Fi за допомогою утиліти Airodump-ng, що дозволяє працювати без доступу до маршрутизатора. Такий метод краще підходить для аналізу трафіку на сторонніх хотспотах.
Далі все просто: завантажуємо отримані файли у Wireshark, налаштовуємо необхідні фільтри й проводимо аналіз.
До речі, Wireshark підтримує не лише мережевий трафік, а й аналіз трафіку USB. Для цього можна скористатися вбудованим сніфером USBPcap або імпортувати пакети з інших утиліт, наприклад Npcap чи RawCap. Це відкриває додаткові можливості для вивчення взаємодії різних пристроїв із комп’ютером.
Якщо ви працюєте з великими логами на віддаленому сервері та не хочете переносити всі дані на свій комп’ютер, вам стане у пригоді Termshark — це консольний інтерфейс для TShark, який за зовнішнім виглядом нагадує Wireshark. Termshark дозволяє виконувати аналіз пакетів прямо на сервері, зберігаючи ресурси та час. Завдяки зручному інтерфейсу в консолі ви можете швидко переглядати пакети, застосовувати фільтри та проводити детальний аналіз без необхідності графічного середовища.
Читання файлів pcap та прослуховування трафіку з активних інтерфейсів у реальному часі (де дозволений tshark)
Фільтрування pcap або активних інтерфейсів за допомогою фільтрів відображення Wireshark
Повторне складання та інспектування потоків TCP та UDP
Перегляд мережевих сеансів за кожним протоколом
Копіювання виділених пакетів з консолі в буфер обміну
Інструмент написаний мовою Go, на кожній платформі компілюється в єдиний файл, що виконується: є вже зібрані версії для Linux, macOS, варіантів BSD, Android (termux) і Windows.

Ось як виглядає версія під Android:
Якщо з якихось причин ви не можете запустити Wireshark на своєму комп’ютері, варто спробувати хмарний сервіс CloudShark, який приємно дивує якістю. Його головна перевага — можливість спільної роботи та публікації розборів пакетів через URL. Наприклад, доступні публічні розбори за посиланням cloudshark.org/captures/05aae7c1b941. Файли завантажуються в хмару та аналізуються безпосередньо у браузері.
Такий підхід стане у пригоді, якщо вам потрібно попросити поради на форумі, поділитися аналізом із колегами або опублікувати розбір трафіку для загального доступу. Особливо це зручно для мобільних пристроїв, адже для Android є інструменти для перехоплення пакетів, але відсутні повноцінні аналізатори. CloudShark працює за підпискою, однак пропонує 30-денний пробний період.
Загалом Wireshark — це неймовірний інструмент для будь-яких задач, пов’язаних із мережею. Окрім величезної практичної користі, він дає чудове розуміння того, як влаштовані системи фільтрації DPI у провайдерів, оскільки принципи їхньої роботи багато в чому схожі.