Wireshark – це інструмент з відкритим кодом, який широко вважається золотим стандартом аналізу мережевих пакетів. Він дозволяє нам записувати мережевий трафік у реальному часі або перевіряти попередньо записані файли захоплення, розбиваючи дані на окремі пакети для детального вивчення.
Можемо використовувати Wireshark у таких сценаріях, як усунення несправностей продуктивності мережі (наприклад, повільне з’єднання або втрачені пакети), розслідування підозрілої активності (наприклад, виявлення шкідливого програмного забезпечення або несанкціонованого доступу) або вивчення того, як функціонують такі протоколи, як HTTP, TCP або DNS, у реальних середовищах.
Для початківців уявіть собі його як вікно у невидимий світ мережевого зв’язку, яке показує, що відбувається за лаштунками, коли ми переглядаємо веб-сторінки, надсилаємо електронні листи або переглядаємо відео. Його потужність полягає в здатності надавати детальну аналітику, що робить його незамінним інструментом для мережевих адміністраторів, ентузіастів кібербезпеки та всіх, хто цікавиться тим, як працюють мережі.
Далі дізнаємося, як використовувати фільтри відображення Wireshark для аналізу мережевого трафіку та виявлення потенційних загроз безпеці. Wireshark ‒ це потужний аналізатор мережевих протоколів, який може захоплювати та аналізувати мережеві пакети, що є надзвичайно важливим для фахівців з кібербезпеки.
Як запустити Wireshark та проаналізувати мережевий трафік
На цьому кроці почнемо використовувати Wireshark. Спочатку дізнаємося, як його запустити. Потім або захопимо мережевий трафік, або використаємо наданий файл-зразок для аналізу. Розуміння інтерфейсу Wireshark є критично важливим, оскільки він допомагає нам переглядати та аналізувати пакетні дані.
Встановлення Wireshark на Ubuntu 22.04
Перш ніж зможемо почати використовувати Wireshark, нам потрібно його встановити. Відкриємо вікно терміналу та виконаємо такі команди:
sudo apt update
sudo apt install wireshark -y
Запуск Wireshark
Щоб запустити Wireshark, потрібно відкрити вікно терміналу. Можемо зробити це, натиснувши на значок терміналу на панелі завдань або натиснувши Ctrl+Alt+T. Після відкриття терміналу скористаємося командою для запуску Wireshark. Введемо у терміналі таку команду та натиснемо Enter:
wireshark
Ця команда повідомляє нашій системі про запуск програми Wireshark. Через кілька секунд Wireshark відкриється. Ми повинні побачити вікно, подібне до показаного нижче:
Як працювати з файлами мережевого захоплення
Тут у нас є два варіанти:
Варіант 1: Використати наданий файл-зразок
# Завантажте зразок файлу захоплення пакетів зі змішаним трафіком
wget -q https://s3.amazonaws.com/tcpreplay-pcap-files/smallFlows.pcap -O /home/labex/project/sample.pcapng
Переконайтеся, що користувач має доступ до файлу
chmod 644 /home/labex/project/sample.pcapng
Є підготовлений зразок файлу захоплення за адресою /home/labex/project/sample.pcapng.
Цей файл містить різноманітний мережевий трафік, який можемо проаналізувати.
Щоб відкрити цей файл:
- У Wireshark перейти до File > Open
- Перейти до /home/labex/project/sample.pcapng
- Натиснути Open
Файл завантажиться у Wireshark, показуючи різні пакети, які були захоплені раніше.
Варіант 2: Захоплення власного трафіку
Якщо бажаємо захоплювати власний трафік:
- У головному вікні Wireshark знайдемо список доступних мережевих інтерфейсів.
- Знайдемо інтерфейс eth1. У цьому лабораторному середовищі eth1 є основним мережевим інтерфейсом, який будемо використовувати для захоплення пакетів.
- Двічі клацнемо на eth1. Ця дія негайно розпочне процес захоплення пакетів.
- Згенеруємо мережевий трафік, відкривши новий термінал і виконавши команду:
curl www.google.com
- Після того, як ми захопили достатню кількість пакетів (намагаємося отримати щонайменше 20-30 пакетів), натиснемо червону квадратну кнопку Stop на панелі інструментів Wireshark.
Розуміння інтерфейсу Wireshark
Інтерфейс Wireshark розділений на три основні панелі, кожна з яких має певне призначення:
- Список пакетів (верхня панель): Ця панель показує всі пакети, які були захоплені в порядку їх отримання. Вона дає нам швидкий огляд захопленого трафіку.
- Деталі пакета (середня панель): Коли ми вибираємо пакет на верхній панелі, ця середня панель відображає деталі цього пакета в ієрархічному форматі. Вона розбиває структуру пакета, показуючи таку інформацію, як IP-адреси джерела та призначення, типи протоколів тощо.
- Байти пакета (нижня панель): Ця панель відображає необроблені байти вибраного пакета в шістнадцятковому форматі. Це корисно для поглибленого аналізу, особливо коли потрібно переглянути точні дані, що передаються.
Щоб побачити, як ці панелі працюють разом, клацнемо на різних пакетах у верхній панелі. Ми побачимо відповідні деталі та оновлення необроблених байтів у середній та нижній панелях.
Розуміння та застосування основних фільтрів відображення
На цьому кроці ми розглянемо фільтри відображення у Wireshark. Фільтри відображення є важливими інструментами, коли йдеться про аналіз мережевого трафіку. Вони допомагають нам зосередитися на певних типах пакетів, а не просіювати всі захоплені дані.
Що таке фільтри відображення?
Під час аналізу мережевого трафіку перегляд кожного захопленого пакета може бути складним завданням. Зазвичай ми хочемо зосередитися на певних типах пакетів. Саме тут і допоможуть фільтри відображення Wireshark. Вони дозволяють показувати лише ті пакети, які відповідають певним критеріям. Це робить процес аналізу набагато ефективнішим, оскільки ми не витрачаємо час на нерелевантні дані.
Фільтри відображення у Wireshark використовують спеціальний синтаксис. Цей синтаксис дозволяє фільтрувати пакети на основі різних атрибутів, таких як протоколи, IP-адреси, порти та навіть вміст пакетів. Розуміння цього синтаксису є ключем до ефективного використання фільтрів відображення.
Панель інструментів фільтра
Поглянемо на верхню частину вікна Wireshark. Ми побачите текстове поле. Воно може бути позначено як Apply a display filter… або просто відображати Expression… Це місце, де ми введемо свої фільтри відображення. Після введення фільтра та натискання Enter Wireshark використовуватиме цей фільтр, щоб відображати лише відповідні пакети.
Базові фільтри протоколів
Почнемо з простого прикладу. Припустимо, ми хочемо переглядати лише HTTP-трафік. HTTP – це протокол, який використовується для перегляду веб-сторінок. Для цього потрібно ввести фільтр на панелі інструментів фільтра. Введемо наступний фільтр і натиснемо Enter:
http
Після застосування цього фільтра Wireshark відображатиме лише HTTP-пакети. Усі інші пакети будуть тимчасово приховані. Помітимо, що панель фільтра стане зеленою, коли ми застосуємо дійсний фільтр. Це візуальна ознака того, що наш фільтр працює правильно.
Вивід тепер має відображати лише пакети, пов’язані з HTTP-трафіком. Зазвичай це включає веб-запити (коли запитуємо інформацію у веб-сайту) та відповіді (коли веб-сайт надсилає інформацію нам). Якщо ми не бачимо HTTP-трафіку у файлі зразка, то можемо спробувати різні протоколи, які можуть бути присутніми, такі як TCP, UDP або DNS:
tcp
Або спробуємо згенерувати більше HTTP-трафіку, виконавши команду curl у терміналі:
curl www.google.com
Фільтри IP-адрес
Далі давайте фільтрувати трафік на основі IP-адрес. IP-адреса – це як унікальний ідентифікатор пристрою в мережі. Спочатку переглянемо список пакетів. Побачимо стовпці з позначками Source та Destination. Ці стовпці показують IP-адреси пристроїв, які надсилають та отримують пакети.
Після того, як ми визначили IP-адресу, яка часто з’являється у нашому захопленні (наприклад, скажімо, ми бачимо 192.168.1.1), можемо використати її для створення фільтра. Введемо наступний фільтр на панелі інструментів фільтра, щоб бачити лише пакети з цього джерела:
ip.src == 192.168.3.131
Можемо замінити 192.168.3.131 IP-адресою, яку фактично бачимо у нашому захопленні. Після застосування цього фільтра будуть відображатися лише пакети з цією вихідною IP-адресою.
Якщо хочемо знову побачити всі пакети, то можемо очистити поточний фільтр. Просто натиснути кнопку «Clear» (X) у правій частині панелі фільтрів.
Фільтри портів
Багато мережевих служб працюють на певних портах. Порт подібний до дверей на пристрої, які дозволяють певним типам мережевого трафіку входити або виходити. Наприклад, HTTP зазвичай використовує порт 80.
Щоб фільтрувати пакети за номером порту, можемо використовувати наступний фільтр:
tcp.port == 80
Цей фільтр показуватиме як вхідні, так і вихідні пакети, які використовують TCP-порт 80. Також можемо спробувати інші поширені порти, такі як 443 (HTTPS) або 53 (DNS), залежно від того, що доступно у нашому захопленні.
Поєднання фільтрів
Можемо зробити свої фільтри потужнішими, поєднуючи їх за допомогою логічних операторів, таких як «and» та «or». Наприклад, якщо хочемо відобразити лише HTTP-трафік, який використовує порт 80, то можемо скористатися таким фільтром:
http and tcp.port == 80
Спробуємо застосувати різні комбінації фільтрів і спостерігати, як змінюються відображені пакети. Пам’ятаємо, що перед використанням нового фільтра можемо або очистити попередній, натиснувши кнопку «Clear», або змінити існуючий фільтр безпосередньо на панелі фільтрів, щоб використовувати його.
Розширені методи фільтрації
У цій частині розглянемо, як створювати складніші фільтри для детального аналізу мережевого трафіку. Як новачок, можемо задати питання, навіщо нам потрібна розширена фільтрація. Що ж, у реальних сценаріях файли захоплення мережі можуть бути надзвичайно великими, заповненими всіляким трафіком. Розширені методи фільтрації схожі на потужну лупу для фахівців з безпеки. Вони допомагають нам швидко виділити підозрілий або важливий трафік з моря даних у цих великих файлах захоплення.
Складні фільтри з кількома умовами
Wireshark надає нам можливість створювати складні фільтри, комбінуючи кілька умов. Це дуже корисно, коли хочемо бути точнішими в аналізі трафіку. Почнемо зі створення фільтра для пошуку HTTP GET-запитів:
http.request.method == “GET”
Цей фільтр призначений для відображення лише HTTP-пакетів, які містять GET-запити. Коли застосуємо цей фільтр, то побачимо пакети, які є запитами, надісланими на веб-сервери. Причина, чому ми використовуємо цей фільтр, полягає в тому, що GET-запити є поширеним типом HTTP-запитів, що використовуються для отримання даних із сервера. Виділяючи ці запити, ми можемо зосередитися на діяльності з отримання даних у мережі.
Якщо наш файл-зразок не містить HTTP GET-запитів, спробуємо цей альтернативний фільтр, щоб знайти TCP SYN-пакети, які вказують на спроби підключення:
tcp.flags.syn == 1
Тепер давайте зробимо наш фільтр більш конкретним. Ми додамо умову порту:
tcp.port == 80 and http.request.method == “GET”
Цей новий фільтр показує лише HTTP GET-запити, які відбуваються на стандартному HTTP-порту (80). Стандартний HTTP-порт широко використовується для незашифрованого веб-трафіку. Додаючи цю умову порту, ми звужуємо наш пошук лише до тих GET-запитів, які використовують типовий HTTP-канал зв’язку.
Фільтрація на основі розміру пакета
Мережеві атаки часто включають пакети незвичайних розмірів. Зловмисники можуть використовувати великі або малі пакети, щоб приховати шкідливі дані або порушити нормальне функціонування мережі. Для фільтрації на основі розміру пакета використовуємо певний синтаксис:
tcp.len >= 100 and tcp.len <= 500
Цей фільтр відображає TCP-пакети з довжиною корисного навантаження від 100 до 500 байт. Можемо налаштувати ці значення відповідно до наших потреб. Наприклад, якщо підозрюємо, що атака включає більші пакети, то можемо збільшити верхню межу. Фільтруючи на основі розміру пакета, можемо виявити аномальні моделі трафіку, які можуть свідчити про атаку.
Фільтрація на основі певного вмісту
Ми також можемо фільтрувати трафік на основі певного вмісту в пакетах. Це дуже корисно, коли шукаємо трафік, пов’язаний з певним веб-сайтом або послугою. Наприклад, давайте знайдемо HTTP-трафік, пов’язаний з певним веб-сайтом.
http.host contains “google”
Цей фільтр показує лише HTTP-трафік, де заголовок хоста містить “google”. Можемо замінити “google” будь-яким доменом, який нас цікавить для аналізу. Заголовок хоста в HTTP-запиті повідомляє серверу, до якого веб-сайту намагається отримати доступ клієнт. Фільтруючи на основі заголовка хоста, можемо зосередитися на трафіку, пов’язаному з певним доменом.
Якщо наш файл-зразок не містить HTTP-трафіку із заголовками хоста, спробуємо цей більш загальний фільтр вмісту:
frame contains “http”
Використання оператора “contains” для пошуку тексту
Оператор contains – це зручний інструмент для пошуку певних текстових рядків у пакетах. Він дозволяє нам шукати певні ключові слова в даних пакета.
frame contains “password”
Цей фільтр показує пакети, що містять слово “password” будь-де в даних пакета. Це може бути дуже корисним для виявлення можливих проблем безпеки. Наприклад, якщо паролі надсилаються у відкритому тексті (що є великим ризиком для безпеки), цей фільтр може допомогти нам виявити ці пакети.
Або спробуємо цей фільтр:
frame contains “login”
Фільтри заперечення
Іноді може знадобитися побачити весь трафік, крім певних типів. Саме тут і знадобиться оператор not:
not arp
Цей фільтр приховує всі ARP-пакети. ARP (протокол розв’язання адрес) використовується для зіставлення IP-адрес з MAC-адресами в локальній мережі. Іноді ARP-трафік може бути дуже поширеним і захаращувати наш аналіз. Використовуючи оператор not, можемо виключити цей тип трафіку та зосередитися на інших, більш релевантних пакетах.
Збереження та застосування закладок фільтрів
Якщо ми часто використовуємо певні фільтри, нам не потрібно вводити їх щоразу. Можемо зберегти їх як закладки. Ось як це зробити:
- Введемо фільтр на панелі фільтрів. Тут ми вводимо вирази фільтрів, які вивчали.
- Натиснемо кнопку “+” праворуч на панелі фільтрів. Ця кнопка використовується для збереження поточного фільтра як закладки.
- Даємо назву своєму фільтру та натиснемо “OK”. Назвемо фільтр, щоб його було легше ідентифікувати пізніше.
Після збереження фільтра можемо застосувати його, натиснувши на його назву у спадному меню фільтрів. Це заощадить наш час і зусилля, особливо під час повторного аналізу.
Експорт відфільтрованих пакетів
Після того, як ми відфільтрували трафік, щоб відображати лише ті пакети, які нас цікавлять, можемо зберегти лише ці пакети в новому файлі. Це корисно для обміну певними висновками з колегами або для подальшого аналізу. Ось як це зробити:
- Застосуємо потрібний фільтр. Переконаємося, що налаштували фільтр так, щоб відображати лише ті пакети, які хочемо зберегти.
- Натиснемо File > Export Specified Packets. Ця опція дозволяє експортувати певний набір пакетів.
- Переконаємося, що в розділі «Packet Range» вибрано «Displayed». Це гарантує, що експортуються лише ті пакети, які наразі видимі (тобто ті, що відповідають нашому фільтру).
- Виберемо ім’я файлу та розташування. Тут ми вирішуємо, де зберегти новий файл захоплення та як його назвати.
- Натиснемо «Save». Це створить новий файл захоплення, який містить лише пакети, що відповідають нашому фільтру.
Аналіз трафіку, пов’язаного з безпекою
На цьому кроці зосередимося на використанні фільтрів Wireshark для аналізу безпеки. Аналіз безпеки має вирішальне значення у світі кібербезпеки, оскільки він допомагає нам виявляти потенційно шкідливі дії в мережевому трафіку. До кінця цього розділу зможемо ідентифікувати різні типи загроз безпеці за допомогою спеціальних фільтрів Wireshark.
Виявлення дій сканування портів
Сканування портів – це поширений метод, який використовується зловмисниками для збору інформації про цільову систему. Зловмисники використовують його для пошуку відкритих портів у мережі, які вони потім можуть використовувати.
Щоб виявити потенційне сканування портів, ми шукаємо велику кількість спроб підключення з одного джерела до кількох портів.
Давайте використаємо спеціальний фільтр для виявлення таких дій. Спробуйте цей фільтр у Wireshark:
tcp.flags.syn == 1 and tcp.flags.ack == 0
Цей фільтр показує SYN-пакети без прапорця ACK. У TCP-з’єднанні SYN-пакет є першим, який надсилається для ініціювання з’єднання, а ACK-пакет використовується для підтвердження з’єднання. Коли бачимо багато SYN-пакетів без підтвердження (ACK) від одного джерела до різних портів призначення, це є вагомою ознакою сканування портів.
Виявлення підозрілого DNS-трафіку
Тунелювання DNS та інші атаки на основі DNS стають все більш поширеними. Ці атаки використовують протокол DNS для приховування шкідливої діяльності, такої як витік даних або зв’язок команд та управління. Щоб виявити такі атаки, нам потрібно шукати незвичайний DNS-трафік.
Використовуємо цей фільтр для перевірки DNS-запитів:
dns
Після застосування цього фільтра шукаємо незвично довгі доменні імена або велику кількість DNS-запитів до одного й того ж домену. Це можуть бути ознаки витоку даних або зв’язку команд та управління.
Виявлення спроб перебору пароля
Атаки методом перебору пароля є поширеним способом для зловмисників отримати несанкціонований доступ до таких служб, як SSH або FTP. Під час атаки методом перебору зловмисник пробує кілька комбінацій паролів, доки не знайде правильну.
Щоб виявити потенційні спроби введення пароля методом перебору, можемо фільтрувати невдалі спроби входу. Використовуємо цей фільтр:
ftp contains “530” or ssh contains “Failed”
Цей фільтр показує пакети FTP та SSH, які містять поширені повідомлення про невдачу. Якщо бачимо кілька збоїв з одного джерела, то це може свідчити про спробу грубої сили.
Аналіз відповідей HTTP на помилки
Атаки веб-застосунків часто генерують відповіді HTTP на помилки. Зловмисники можуть спробувати використати вразливості у веб-застосунках, і ці спроби можуть призвести до відповідей сервера на помилки.
Фільтруємо ці відповіді на помилки за допомогою:
http.response.code >= 400
Цей фільтр показує пакети відповідей HTTP зі статусними кодами 400 або вище. Усі ці статусні коди представляють відповіді на помилки. Перевіряючи ці пакети, можемо виявити спроби веб-експлойтів.
Пошук облікових даних у відкритому тексті
Передача облікових даних у відкритому тексті є серйозною загрозою безпеці. Якщо зловмисник перехоплює ці облікові дані, він може отримати несанкціонований доступ до системи.
Щоб виявити облікові дані у відкритому тексті, використовуємо цей фільтр:
http contains “user” or http contains “pass” or http contains “login”
Цей фільтр допомагає нам знаходити HTTP-трафік, який може містити інформацію для входу. Уважно перевіримо пакети, що відповідають цьому фільтру, щоб виявити потенційні ризики безпеці.
Аналіз зразка трафіку та генерація нового трафіку
Тепер, коли ми вивчили різні фільтри, орієнтовані на безпеку, настав час застосувати свої знання на практиці. Ми можемо або проаналізувати наданий файл зразка, або згенерувати та проаналізувати новий трафік.
Аналіз файлу зразка
Якщо ми використовуєте наданий файл зразка (/home/labex/project/sample.pcapng), спробуємо застосувати деякі з фільтрів безпеки, які обговорювали, щоб виявити будь-які цікаві шаблони:
tcp.flags.syn == 1 and tcp.flags.ack == 0
Шукаємо шаблони, які можуть свідчити про сканування, підозрілі з’єднання або інші проблеми безпеки.
Генерація та аналіз нового трафіку
Або відкриємо нове вікно терміналу. У цьому вікні згенеруємо HTTP-трафік з кількома запитами. Виконаємо такі команди:
for i in {1..5}; do
curl -I www.google.com
sleep 1
done
Ці команди надсилають п’ять HTTP-запитів HEAD до www.google.com з інтервалом в одну секунду між кожним запитом.
Далі перейдемо до Wireshark та застосуємо цей фільтр, щоб знайти всі HTTP-запити:
http.request
Цей фільтр покаже всі HTTP-запити в захопленому трафіку.
Переглянемо ці пакети, щоб визначити шаблони звичайного HTTP-трафіку. Звернемо увагу на заголовки, частоту запитів та інші деталі.
Нарешті, спробуємо створити фільтр, який може відрізнити звичайний перегляд HTTP від автоматизованих інструментів сканування. Наприклад:
http.request and !(http.user_agent contains “Mozilla”)
Цей фільтр показує HTTP-запити, які не мають користувацьких агентів браузера. Оскільки більшість звичайного перегляду веб-сторінок виконується за допомогою браузерів з Mozilla в користувацькому агенті, запити без нього можуть свідчити про використання автоматизованих інструментів, а не про звичайний перегляд.
Практикуючи ці методи фільтрації, орієнтовані на безпеку, ми розвиваємо навички, необхідні для швидкого виявлення підозрілого трафіку в реальних мережевих захопленнях.
Висновок
Ми навчилися використовувати фільтри відображення Wireshark для аналізу мережевого трафіку та виявлення потенційних загроз безпеці.
Ми почали з наданого зразка файлу захоплення або захоплення мережевого трафіку в реальному часі та ознайомлення з інтерфейсом Wireshark. Потім опанували основні фільтри відображення для ізоляції певних типів трафіку відповідно до протоколів, IP-адрес та портів. Ми також удосконалили свої навички роботи зі складними методами фільтрації, поєднуючи кілька умов та шукаючи певний контент. Нарешті, застосували ці навички в сценаріях аналізу безпеки для виявлення підозрілої діяльності, такої як сканування портів, розкриття облікових даних та потенційні атаки.
Ці навички фільтрації Wireshark є вирішальними для ефективного усунення несправностей мережі та аналізу безпеки. Швидко ізолюючи відповідні пакети від великих захоплень, ми можемо значно скоротити час, необхідний для виявлення та реагування на мережеві проблеми та інциденти безпеки.
Постійно практикуючись у Wireshark, ми отримаємо інтуїтивне розуміння мережевих протоколів та моделей трафіку, що покращить наші загальні можливості кібербезпеки.
За матеріалами freecodecamp.org
