Як користуватись Wireshark? Аналіз трафіку. Фільтри Wireshark Фільтри для Wi-Fi кадрів

Головна / Захист

Wireshark - це потужний мережевий аналізатор, який може використовуватися для аналізу трафіку, що проходить через інтерфейс мережі вашого комп'ютера. Це може знадобитися для виявлення та вирішення проблем із мережею, налагодження ваших веб-додатків, мережевих програм або сайтів. Wireshark дозволяє повністю переглядати вміст пакета на всіх рівнях, тому ви зможете краще зрозуміти як працює мережа на низькому рівні.

Всі пакети перехоплюються в реальному часі та надаються у зручному для читання форматі. Програма підтримує дуже потужну систему фільтрації, підсвічування кольором та інші особливості, які допоможуть знайти потрібні пакети. У цій інструкції ми розглянемо, як користуватися Wireshark для аналізу трафіку. Нещодавно розробники перейшли до роботи над другою гілкою програми Wireshark 2.0, в ній було внесено безліч змін та покращень, особливо для інтерфейсу. Саме її ми використовуватимемо у цій статті.

Основні можливості Wireshark

Перед тим як переходити до розгляду методів аналізу трафіку необхідно розглянути які можливості підтримує програма докладніше, з якими протоколами вона може працювати і що робити. Ось основні можливості програми:

  • Захоплення пакетів у реальному часі з дротового чи іншого типу мережевих інтерфейсів, і навіть читання з файла;
  • Підтримуються такі інтерфейси захоплення: Ethernet, IEEE 802.11, PPP та локальні віртуальні інтерфейси;
  • Пакети можна відсівати за безліччю параметрів за допомогою фільтрів;
  • Всі відомі протоколи підсвічуються у списку різними кольорами, наприклад, TCP, HTTP, FTP, DNS, ICMP і так далі;
  • Підтримка захвату трафіку VoIP дзвінків;
  • Підтримується розшифровка трафіку HTTPS за наявності сертифіката;
  • Розшифровка WEP, WPA трафіку бездротових мереж за наявності ключа та handshake;
  • відображення статистики навантаження на мережу;
  • Перегляд вмісту пакетів для всіх рівнів мережі;
  • Відображення часу надсилання та отримання пакетів.

Програма має безліч інших функцій, але це були основні, які можуть вас зацікавити.

Як користуватися Wireshark

Я припускаю, що програма у вас уже встановлена, але якщо ні, ви можете її встановити з офіційних репозиторіїв. Для цього наберіть команду в Ubuntu:

$ sudo apt install wireshark

Після встановлення ви зможете знайти програму у головному меню дистрибутива. Запускати Wireshark потрібно з правами суперкористувача, тому що інакше програма не зможе аналізувати мережеві пакети. Це можна зробити з головного меню або через термінал за допомогою команди для KDE:

$ kdesu wireshark

А для Gnome/Unity:

$ gksu wireshark

Головне вікно програми розділено на три частини, перша колонка містить список доступних для аналізу мережевих інтерфейсів, друга опції для відкриття файлів, а третя - допомога.

Аналіз мережевого трафіку

Для початку аналізу виберіть мережевий інтерфейс, наприклад, eth0 та натисніть кнопку Start.

Після цього відкриється наступне вікно вже з потоком пакетів, які проходять через інтерфейс. Це вікно також поділено на кілька частин:

  • Верхня частина- це меню та панелі з різними кнопками;
  • Список пакетів- далі відображається потік мережних пакетів, які ви аналізуватимете;
  • Вміст пакету- трохи нижче розташований вміст вибраного пакета, він розбитий за категоріями залежно від транспортного рівня;
  • Реальне уявлення- у самому низу відображається вміст пакета у реальному вигляді, а також у вигляді HEX.

Ви можете натиснути на будь-який пакет, щоб проаналізувати його вміст:

Тут ми бачимо пакет запиту до DNS, щоб отримати ip адресу сайту, в самому запиті надсилається домен, а в пакеті відповіді ми отримуємо наше запитання, а також відповідь.

Для більш зручного перегляду можна відкрити пакет у новому вікні, виконавши подвійний клік по запису:

Фільтри Wireshark

Перебирати пакети вручну, щоб знайти потрібні дуже незручно, особливо при активному потоці. Тому для такого завдання краще використовувати фільтри. Для введення фільтрів під меню є спеціальний рядок. Ви можете натиснути Expression, щоб відкрити конструктор фільтрів, але там їх дуже багато, тому ми розглянемо найголовніші:

  • ip.dst- цільова ip адреса;
  • ip.src- IP адреса відправника;
  • ip.addr- ip відправника чи одержувача;
  • ip.proto- Протокол;
  • tcp.dstport- порт призначення;
  • tcp.srcport- порт відправника;
  • ip.ttl- фільтр по ttl, визначає мережну відстань;
  • http.request_uri- Запитувана адреса сайту.

Для вказівки відносин між полем і значенням у фільтрі можна використовувати такі оператори:

  • == - одно;
  • != - не дорівнює;
  • < - менше;
  • > - Більше;
  • <= - менше або дорівнює;
  • >= - більше або дорівнює;
  • matches- регулярне вираження;
  • contains- Містить.

Для поєднання кількох виразів можна застосовувати:

  • && - обидва висловлювання мають бути вірними для пакета;
  • || - може бути вірним один із виразів.

Тепер розглянемо на прикладах кілька фільтрів і спробуємо розглянути всі знаки відносин.

Спочатку відфільтруємо всі пакети, надіслані на 194.67.215.125 (losst.ru). Наберіть рядок у полі фільтра та натисніть Apply. Для зручності фільтри wireshark можна зберігати за допомогою кнопки Save:

ip.dst == 194.67.215.125

А щоб отримати не лише відправлені пакети, а й отримані у відповідь від цього вузла можна поєднати дві умови:

ip.dst == 194.67.215.125 || ip.src == 194.67.215.125

Також ми можемо відібрати надіслані великі файли:

http.content_length > 5000

Відфільтрувавши Content-Type, ми можемо вибрати всі картинки, які були завантажені, виконаємо аналіз трафіку wireshark, пакети якого містять слово image:

http.content_type contains image

Щоб очистити фільтр, ви можете натиснути кнопку Clear. Буває не завжди ви знаєте всю потрібну для фільтрації інформацію, а просто хочете вивчити мережу. Ви можете додати будь-яке поле пакета як колонку і переглянути його вміст у загальному вікні для кожного пакета.

Наприклад, хочу вивести у вигляді колонки ttl (час життя) пакета. Для цього відкрийте інформацію про пакет, знайдіть це поле у ​​розділі IP. Потім викличте контекстне меню та виберіть опцію Apply As Column:

Також можна створити фільтр на основі будь-якого потрібного поля. Виберіть поле та викличте контекстне меню, потім натисніть Apply as filterабо Prepare as filter, потім вибрати Selectedщоб вивести лише вибрані значення або Not selected, щоб їх прибрати:

Вказане поле та його значення буде застосовано або в другому випадку підставлено у полі фільтра:

У такий спосіб ви можете додати у фільтр поле будь-якого пакета чи колонку. Там також є ця опція в контекстному меню. Для фільтрації протоколів можна використовувати і простіші умови. Наприклад, виконаємо аналіз трафіку Wireshark для протоколів HTTP та DNS:

Ще одна цікава можливість програми – використання Wireshark для відстеження певного сеансу між комп'ютером користувача та сервером. Для цього відкрийте контекстне меню для пакета та виберіть Follow TCP stream.

Потім відкриється вікно, в якому ви знайдете всі дані, передані між сервером і клієнтом:

Діагностика проблем Wireshark

Можливо, вам цікаво, як користуватися Wireshark 2 для виявлення проблем у мережі. Для цього в лівому нижньому кутку вікна є кругла кнопка, при натисканні на неї відкривається вікно Expet Tools. У ньому Wireshark збирає всі повідомлення про помилки та неполадки в мережі:

Вікно поділено на такі вкладки, як Errors, Warnings, Notices, Chats. Програма вміє фільтрувати та знаходити безліч проблем із мережею і тут ви можете їх дуже швидко побачити. Тут також підтримуються фільтри wireshark.

Аналіз трафіку Wireshark

Ви можете просто зрозуміти що саме завантажували користувачі і які файли вони дивилися, якщо з'єднання не було зашифровано. Програма дуже добре справляється із вилученням контенту.

Для цього спочатку необхідно зупинити захоплення трафіку за допомогою червоного квадрата на панелі. Потім відкрийте меню File -> Export Objects -> HTTP:

Це дуже потужна утиліта, яка має багато функцій. Всю її функціональність неможливо помістити в одній статті, але наведеної базової інформації буде цілком достатньо, щоб ви могли самі освоїти все необхідне.

Для дослідження поведінки мережних додатків та вузлів, а також щоб виявити неполадки в роботі мережі, часто вдаються до аналізаторів мережних пакетів. Ключові особливості подібного ПЗ - це, по-перше, можливості різнобічної аналітики, а по-друге, багатофункціональна фільтрація пакетів, що дозволяє вивудити крихти цікавої інформації в безмежному потоці мережного трафіку. Саме останньому аспекту і присвячено цю статтю.

Вступ

З усіх методів вивчення комп'ютерних мереж аналіз трафіку, мабуть, найбільш кропіткий та трудомісткий. Інтенсивні потоки сучасних мереж породжують дуже багато «сирого» матеріалу, знайти в якому крихти корисної інформації далеко не просто. За час свого існування стек TCP/IP обріс численними додатками та доповненнями, рахунок яких йде на сотні та тисячі. Це прикладні та службові протоколи, протоколи аутентифікації, тунелювання, доступу до мережі тощо. Крім знання азів мережевих взаємодій, досліднику трафіку (тобто тобі) потрібно вільно орієнтуватися у всьому цьому протокольному різноманітті та вміти працювати зі специфічними програмними інструментами – сніфферами, або, по-науковому, аналізаторами трафіку (протоколів).

Функціональність сніфера - це не тільки можливість використання «нерозбірливого» (promiscuos) режиму роботи картки для перехоплення. Подібний софт повинен уміти ефективно фільтрувати трафік як на етапі збору, так і під час вивчення окремих одиниць передачі (фреймів, пакетів, сегментів, датаграм, повідомлень). Причому що більше протоколів сніффер «знає», то краще.

Сучасні аналізатори протоколів багато чого вміють: рахувати статистику трафіку, малювати графіки ходу мережевих взаємодій, отримувати дані прикладних протоколів, експортувати результати роботи у різні формати... Тому підбір інструментарію для аналізу мережевого трафіку – це тема для окремої розмови. Якщо ти не знаєш, що вибрати, або не хочеш витрачати гроші на платне ПЗ, то скористайся простою порадою: встанови Wireshark.

Знайомимося із фільтрами

Wireshark підтримує два види фільтрів:

  • перехоплення трафіку (capture filters);
  • відображення (display filters).

Перша підсистема дісталася Wireshark у спадок від бібліотеки Pcap, що забезпечує низькорівневий API для роботи з мережевими інтерфейсами. Вибір трафіку на льоту під час перехоплення дозволяє заощаджувати оперативну пам'ять і місце на жорсткому диску. Фільтр є виразом, що складається з групи примітивів, при необхідності об'єднаних логічними функціями (and, or, not). Записується цей вираз у полі Capture Filter діалогового вікна Capture options. Найбільш уживані фільтри можна зберігати у профілі для повторного використання (рис. 1).

Рис. 1. Профіль фільтрів перехоплення

Мова фільтрів перехоплення стандартна для світу Open Source і використовується багатьма Pcap-заснованими продуктами (наприклад, утилітою tcpdump або системою виявлення/запобігання вторгненням Snort). Тому описувати синтаксис тут немає особливого сенсу, оскільки він тобі, швидше за все, знайомий. А деталі можна подивитися в документації, наприклад, у Linux на сторінці довідкового керівництва pcap-filter(7).

Фільтри відображення працюють із вже перехопленим трафіком і є «рідними» для Wireshark. Відмінності від Pcap - у форматі запису (зокрема, як роздільник полів використовується точка); також додані англійська нотація в операціях порівняння та підтримка підрядків.

Вписати фільтр відображення можна прямо у відповідне поле (увага, працює список-підказка, що випадає) головного вікна програми після кнопки «Filter» (до речі, під цією кнопкою ховається профіль для часто використовуваних виразів). А якщо натиснути розташовану неподалік кнопку «Expression…», то відкриється багатофункціональний конструктор виразів (рис. 2).


Ліворуч (Field Name) представлено впорядковане по алфавіту дерево полів повідомлень протоколів, які відомі Wireshark. Для цього поля можна вказати логічний оператор (Relation), вписати значення (Value), вказати діапазон (Range) або вибрати значення зі списку (Predefined Value). Загалом, повна мережева енциклопедія в одному вікні.

Ось логічні оператори, які використовуються у фільтрах відображення:

  • and (&&) - "І";
  • or (||) - «АБО»;
  • xor (^^) - що виключає «АБО»;
  • not(!) - заперечення;
  • [...] - вибірка підрядка. # Фільтруючи за MAC-адресою свого мережевого адаптера, виключаємо весь локальний трафік not (eth.addr eq aa:bb:cc:22:33:44) # Відмітаємо весь «службовий шум», щоб сконцентруватися на трафіку, що нас цікавить!(arp or icmp або dns)

Що ж до вибірки підрядка, це не зовсім логічна операція, але дуже корисна опція. Вона дозволяє отримати певну частину послідовності. Наприклад, так можна використовувати у виразі перші (перше число у квадратних дужках - усунення) три байти (число після двокрапки - довжина підпослідовності) поля MAC-адреси джерела:

Eth.src == 00:19:5b

У вибірках із двокрапкою один із параметрів можна опускати. Якщо пропустити усунення, то відлік вибірки розпочнеться з нульового байта. Якщо довжину – то отримаємо всі байти від усунення до кінця поля.

До речі, вибірку підрядки зручно використовувати для виявлення малварі у випадку, якщо відома послідовність байт, що йде після заголовка (наприклад, "0x90, 0x90, 0x90, 0x04" в UDP-пакеті):

Udp == 90:90:90:04

Операції порівняння, що використовуються в логічних виразах:

  • eq (==) - одно;
  • ne (!=) - не одно;
  • gt (>) – більше;
  • lt (<) - меньше;
  • ge (>=) - більше чи одно;
  • le (<=) - меньше или равно.tcp.dstport ne 8080 && tcp.len gt 0 && data eq A0

Власне, теорії спершу достатньо. Далі використовуй здоровий глузд і дужки за потребою і без неї. Також не забувай, що фільтр по суті – логічний вираз: якщо воно істинне, то пакет відобразиться на екрані, якщо хибно – ні.

Pcap-фільтр для виявлення сканування Netbios-портів

dst port 135 або dst port 445 або dst port 1433 and tcp & (tcp-syn) != 0 and tcp & (tcp-ack) = 0 and src net 192.168.56.0/24

Шукаємо викрадача IP-адреси

У сегменті локальної мережі трапляються (з тих чи інших причин) збіги IP-адрес у двох і більше вузлів. Методика «вилову» (визначення MAC-адрес) конфліктуючих систем загальновідома: запускаємо на третьому комп'ютері сніффер, чистимо ARP-кеш та стимулюємо запит на дозвіл MAC'а шуканого IP, наприклад пропінговавши його:

# arp -d 192.168.56.5 # ping -n -c 1 192.168.56.5

А потім шукаємо у перехопленому трафіку, з яких MAC'ів прийшли відповіді. Якщо Wireshark наловив багато пакетів, створюємо фільтр відображення за допомогою конструктора. У першій частині виразу вибираємо ARP-відповіді, у другій - ті повідомлення, в яких вихідна IP-адреса дорівнює шуканому. Примітиви об'єднуємо оператором &&, тому що потрібно, щоб обидві умови виконувались одночасно:

(arp.opcode == reply) && (arp.src.proto_ipv4 == 192.168.56.5)

До речі, під час виконання цього сценарію жодна комп'ютерна мережа не постраждала, тому що було використано дві віртуальні машини Oracle VirtualBox та мережеве підключення типу «Віртуальний адаптер хоста».

Інспектуємо мережевий та транспортний рівні

До цього часу досить ефективним засобом діагностики мережевого стека залишається протокол ICMP. З повідомлень цього протоколу можна отримати цінну інформацію про проблеми мережі.

Як ти вже здогадався, відфільтрувати ICMP у Wireshark дуже просто. Достатньо у рядку фільтрації в головному вікні програми написати: icmp. Крім icmp, працюють і багато інших ключових слів, що є іменами протоколів, наприклад arp, ip, tcp, udp, snmp, smb, http, ftp, ssh та інші.

Якщо ICMP-трафіку багато, відображення можна деталізувати, виключивши, наприклад, ехо-запити (тип 0) і ехо-відповіді (тип 8):

Icmp and ((icmp.type ne 0) and (icmp.type ne 8))

На рис. 4 показаний приклад невеликої вибірки ICMP-повідомлень, створених тестовим Linux-маршрутизатором. Повідомлення "Port Unreachable" зазвичай використовується за замовчуванням. Воно ж генерується мережним стеком при отриманні UDP-датаграми на порт, що не використовується. Щоб віртуальний роутер на основі Debian почав віддавати повідомлення Host unreachable і Communication administratively filtered, довелося з ним повозитися. Cisco ж інформує про адміністративну фільтрацію зазвичай за умовчанням. Повідомлення "Time-to-live exceeded" говорить про наявність петлі на якійсь ділянці мережі (ну і при трасуванні маршруту такі пакети також можуть з'являтися).

До речі, про міжмережні екрани. Створювати правила для популярних фаєрів можна прямо у Wireshark, використовуючи пункт Firewall ACL Rules меню Tools. Попередньо потрібно вибрати пакет, інформація якого буде використана. Доступні стандартні та розширені ACL Cisco, правила UNIX-like продуктів IP Filter, IPFirewall (ipfw), Netfilter (iptables), Packet Filter (pf), а також Windows Firewall (netsh).

І тепер коротко про азах фільтрації на мережному рівні, основу якої становлять поля заголовка IP-пакета - адреса відправника (ip.src) та адреса одержувача (ip.dst):

(ip.src == 192.168.56.6) | (ip.dst == 192.168.56.6)

Так ми побачимо всі пакети, які отримали або надіслали цю IP-адресу. Фільтрувати цілі підмережі можна, використовуючи CIDR-нотацію запису маски. Наприклад виявимо інфікований хост, який здійснює спам-розсилку (тут 192.168.56.251 - це IP-адреса нашого SMTP-сервера):

Ip.src == 192.168.56.0/24 and tcp.dstport == 25 and !(ip.dst == 192.168.56.251)

До речі, для вибірки за MAC-адресами слід використовувати примітиви eth.src, eth.dst та eth.addr. Іноді проблеми мережного рівня куди вже пов'язані з Ethernet-рівнем, ніж розповідає теорія. Зокрема, при налаштуванні маршрутизації дуже корисно подивитися, на MAC-адресу якого роутера впертий вузол відправляє пакети. Втім, для такого простого завдання за очі вистачить утиліти tcpdump, практично штатної для UNIX-подібних систем.

З фільтрацією портів Wireshark теж ніяких питань немає. Для TCP до твоїх послуг ключові слова tcp.srcport, tcp.dstport та tcp.port, для UDP – udp.srcport, udp.dstport та udp.port. Правда, у вбудованої мови фільтрів Wireshark не знайшлося аналога примітиву port в Pcap, що позначає порт UDP, так і TCP. Але це легко виправити за допомогою логічного виразу, наприклад:

Tcp.port == 53 || udp.port == 53

Імпровізуємо з HTTP-трафіком

Прикладні протоколи, зокрема HTTP, – це «вічна» тема в розрізі сніфінгу. Задля справедливості треба сказати, що для дослідження веб-трафіку створено чимало спеціалізованих програмних засобів. Але і такий універсальний інструмент, як Wireshark, з його гнучкою системою фільтрації на цій ниві виявляється зовсім не зайвим.

Для початку зберемо трохи веб-трафіку, сходивши на перший прийшов на думку сайт. Тепер пошукаємо в повідомленнях протоколу TCP, що є транспортом для HTTP, згадки улюбленого інтернет-ресурсу:

Tcp contains "сайт"

Оператор contains перевіряє наявність підрядки в даному полі. Є ще оператор matches, в ньому можна використовувати Perl-сумісні регулярні вирази.


Віконце "Filter Expressions", звичайно, хороший помічник, але часом перегортати довгий список у пошуках потрібного поля дуже втомлює. Є більш простий спосіб створення/модифікації фільтрів: за допомогою контекстного меню при перегляді пакетів. Для цього потрібно просто клікнути правою клавішею миші по полю, що цікавить, і вибрати один з підпунктів пункту «Apply As Filter» або пункту «Prepare a Filter». У першому випадку зміни відразу набудуть чинності, а в другому - можна буде підкоригувати вираз. "Selected" означає, що значення поля стане новим фільтром, "Not Selected" - те саме, тільки з запереченням. Пункти, що починаються з «...», додають значення поля до існуючого виразу з урахуванням логічних операторів.

Комбінуючи різні засоби графічного інтерфейсу Wireshark та знання особливостей протоколу HTTP, можна легко деталізувати до необхідного рівня відображення трафіку у головному вікні програми.

Наприклад, щоб подивитися, які зображення браузер запитував у веб-сервера при формуванні сторінки, пригодиться фільтр, що аналізує вміст сервера URI, що передається:

(http.host eq "www..request.uri contains ".jpg#26759185") or (http.request.uri contains ".png#26759185"))

Те ж саме, але з використанням matches:

(http.host eq "www..request.uri matches ".jpg|.png#26759185")

Зрозуміло, що поля повідомлень протоколів різних рівнів можна сміливо змішувати в одному виразі. Наприклад, щоб дізнатися, які картинки даний сервер передав клієнту, використовуємо вихідну адресу з IP-пакету та поле «Content-Type» HTTP-відповіді:

(ip.src eq 178.248.232.27) and (http.content_type contains "image")

А за допомогою поля HTTP-запиту «Referer» ти зможеш дізнатися, з яких серверів браузер бере контент при формуванні сторінки улюбленого сайту:

(http.referer eq "http://www..dst eq 178.248.232.27))

Розглянемо ще кілька фільтрів-корисників. Для вибірки з трафіку HTTP-запитів, зроблених методом GET, можна скористатися таким виразом:

Http.request.method == GET

Саме на прикладному рівні фільтри відображення проявляють себе у всій красі та простоті. Для порівняння: щоб, наприклад, вирішити це завдання за допомогою Pcap, довелося б застосувати таку триповерхову конструкцію:

Port 80 and tcp[((tcp & 0xf0) >> 2):4] = 0x47455420

Щоб з'ясувати, які www-підключення здійснював користувач хоста 192.168.56.8 у певний інтервал часу (скажімо, в обідню перерву), задіямо примітив frame.time:

Tcp.dstport == 80 && frame.time >= "Yan 9, 2013 13:00:00" && frame.time< "Yan 9, 2013 14:00:00" && ip.src == 192.168.56.8

Ну і відображення URI запитів, що містять слова "login" та "user", плюс "нагадування" паролів:

Http.request.uri matches "login.*=user" (http contains "password") || (pop contains "PASS")

Перехоплення SSL-контенту

Справжній бич дослідника мережевого трафіку – шифрування. Але якщо у тебе є заповітний файл із сертифікатом (до речі, берегти його потрібно як зіницю ока), то ти легко зможеш дізнатися, що ховають користувачі цього ресурсу в SSL-сесіях. Для цього потрібно вказати параметри сервера та файл сертифіката в налаштуваннях протоколу SSL (пункт Preferences меню Edit, ліворуч у списку протоколів вибрати SSL). Підтримуються формати PKCS12 та PEM. В останньому випадку потрібно прибрати пароль із файлу командами:

Openssl pkcs12 -export -in server.pem -out aa.pfx openssl pkcs12 -in aa.pfx -out serverNoPass.pem –nodes

INFO

Вилучення трафіку для моніторингу та налагодження з мережевого трафіку здійснюється пакетним фільтром. Пакетний фільтр входить до складу ядра операційної системи та отримує мережні пакети від драйвера мережевої карти.

Прикладами пакетних фільтрів для UNIX-like ОС є BPF (Berkeley Packet Filter) та LSF (Linux Socket Filter). В BPF фільтрація реалізована на основі регістро-орієнтованої примітивної машинної мови, інтерпретатором якої є BPF.


Аналізуємо трафік із віддалених хостів

Користувачі Windows можуть працювати не тільки з інтерфейсами комп'ютера, на якому запущений Wireshark, але і знімати трафік з віддалених машин. Для цього існує спеціальна служба (Remote Packet Capture Protocol) у постачанні бібліотеки WinPcap. Її потрібно попередньо увімкнути в оснастці управління службами (services.msc). Тепер, запустивши Wireshark на віддаленому комп'ютері, можна підключитися до того вузла, на якому працює сервіс віддаленого перехоплення трафіку (за замовчуванням використовує порт 2002), і дані протоколу RPCAP потечуть до тебе річкою.

Також наведу варіанти підключення до домашнього *nix-роутера «ззовні» для віддаленого аналізу трафіку:

$ssh [email protected]"tshark -f "port !22" -i any -w -" | wireshark -k -i - $ssh [email protected] tcpdump -U -s0 -w - "not port 22" | wireshark -k -i -

Інструмент із розряду must have

Wireshark - широко відомий інструмент перехоплення та інтерактивного аналізу мережного трафіку, фактично стандарт для промисловості та освіти. Розповсюджується під ліцензією GNU GPLv2. Wireshark працює з більшістю відомих протоколів, має графічний інтерфейс користувача на основі GTK+, потужну систему фільтрів трафіку та вбудований інтерпретатор мови програмування Lua для створення декодерів та обробників подій.

Витягти корисний вантаж

У певних колах широко відомі спеціалізовані інструменти, що дозволяють «витягувати» з трафіку кінцеві інформаційні об'єкти: файли, зображення, відео- та аудіоконтент та інше. Завдяки потужній аналітичній підсистемі, Wireshark цю функціональність з лишком покриває, тому шукай у відповідних вікнах аналізу кнопку Save Payload….

Висновок

На тлі загального захоплення комп'ютерного андеграунду питаннями безпеки мережевих програм монументальні проблеми нижчих рівнів поступово йдуть на другий план. Зрозуміло, що мережевий та транспортний рівні вивчені та досліджені вздовж та поперек. Але біда в тому, що фахівці, які виросли на SQL-ін'єкціях, міжсайтовому скриптингу та інклунах, не підозрюють про величезний шар, прихований під вершиною айсберга, і часто пасують перед, здавалося б, елементарними проблемами.

Сніффер ж, подібно до відладчика і дизассемблера, показує деталі функціонування системи в найдрібніших подробицях. Встановивши Wireshark і проявивши деяку вправність, ти зможеш побачити мережеві взаємодії, як вони є - у безневинному, оголеному вигляді. І фільтри тобі на допомогу!

Просто безліч різноманітних фільтрів. І щодо цих фільтрів є величезна документація, в якій не так просто розібратися. Я зібрав найцікавіші для мене і найчастіше використовувані фільтри Wireshark. Для користувачів-початківців це може стати чимось на зразок довідника з фільтрів Wireshark, відправною точкою для вивчення. Також тут у коментарях пропоную вам ділитися ходовими фільтрами, які ви часто використовуєте, а також цікавими знахідками – я додам їх до цього списку.

Пам'ятайте, що Wireshark є фільтри відображення і фільтри захоплення. Тут я розглядаю фільтри відображення, які вводяться у головному вікні програми у верхньому полі одразу під меню та іконками основних функцій.

Щоб повною мірою розуміти значення фільтрів і що він показує, необхідно розуміння роботи мережі. Для ознайомлення з принципами роботи мережі та протоколів, рекомендується вивчити цикл роботи комп'ютерних мереж, перша стаття циклу « » (інші частини у процесі підготовки).

Деякі фільтри тут написані у загальній формі, а деякі виконані як конкретні приклади. Пам'ятайте, що ви в будь-якому випадку можете підставити свої дані, наприклад, змінити номер порту на будь-який, хто вас цікавить, а також зробити те ж саме з IP адресою, MAC-адресою, значенням часу та ін.

Оператори фільтрів Wireshark

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

Якщо шукається неточне входження (краще підходить для нечислових значень), то використовується contains. Наприклад, щоб показати TCP пакети, що містять рядок hackware, потрібен наступний фільтр:

Tcp contains hackware

Для пошуку точних значень використовують оператори. Розглянемо їх:

Як можна бачити, є два варіанти написання, наприклад, якщо ми хочемо вказати, що значення фільтра дорівнює чомусь, то ми можемо використовувати == або eq.

З фільтрів із застосуванням логічних операндів можна будувати досить складні конструкції, але, мабуть, якщо той самий фільтр використовувати двічі з операторами порівняння, наприклад, як тут у спробі зробити фільтрацію не по одному порту, а по діапазону портів:

Tcp.port>=8000 && tcp.port<=8180

то значення фільтра (в даному випадку tcp.port) перезаписується останнім значенням, тому в результаті замість очікуваної поведінки ми отримуємо результат роботи тільки останньої частини, в даному випадку це

Tcp.port<=8180

Пам'ятайте про цей баг!

При використанні з == (Рівно) цей баг відсутній.

Логічні оператори фільтрів Wireshark

Логічні оператори дозволяють створювати детальні фільтри з використанням кількох умов. Рекомендується додатково використовувати дужки, оскільки в іншому випадку ви можете отримати не те значення, яке очікуєте.

Оператор Опис
and/&& Логічне І дані виводяться якщо вони відповідають обом частинам фільтра. Наприклад, фільтр ip.src==192.168.1.1 and tcpпокаже лише пакети, що походять від 192.168.1.1 і які асоційовані з протоколом TCP. Буде показано лише дані, що збігаються з обома умовами.
or/|| Логічне АБО, достатньо, щоб тільки одна умова була істинною; якщо обидва є істинними, це теж підходить. Наприклад фільтр tcp.port==80 or tcp.port==8080покаже TCP пакети, які пов'язані (є джерелом або пунктом призначення) з портом 80 або 8080.
not/! Логічне НЕ використовується, коли хочемо виключити деякі пакети. Тобто будуть показані всі пакети, крім задовольняють умові, що настає після НЕ. Наприклад фільтр !dnsпокаже всі пакети, окрім DNS.

Приклади комбінування:

Показати HTTP або DNS трафік:

Http or dns

Показати будь-який трафік, крім ARP, ICMP та DNS:

!(arp або icmp або dns)

Фільтр інтерфейсів

Показати пакети тільки надіслані або отримані на інтерфейсі wlan0:

Frame.interface_name == "wlan0"

Трафік протоколів канального рівня

Для показу ARP трафіку:

Показати кадри ARP протоколу, відправлені з пристрою, що має MAC-адресу 00:c0:ca:96:cf:cb:

Arp.src.hw_mac == 00:c0:ca:96:cf:cb

Показати кадри ARP протоколу, відправлені з пристрою, що має IP адресу 192.168.50.90:

Arp.src.proto_ipv4 == 192.168.50.90

Показати кадри ARP протоколу, відправлені на пристрій, що має MAC-адресу 00:00:00:00:00:00 (ця адреса використовується коли протокол намагається дізнатися цільова MAC-адреса. Ще одна популярна адреса, яка може вас збентежити, це ff: ff:ff:ff:ff:ff, ця адреса є широкомовною, тобто повідомлення з цією адресою призначені для всіх пристроїв локальної мережі):

Arp.dst.hw_mac == 00:00:00:00:00:00

Показати кадри ARP протоколу, відправлені на пристрій, що має IP адресу 192.168.50.1:

Arp.dst.proto_ipv4 == 192.168.50.1

Показати Ethernet трафік:

Показати кадри (взагалі всі кадри, а не тільки ARP, як це було в попередніх прикладах), надіслані з пристрою, що має MAC-адресу 00:c0:ca:96:cf:cb:

Eth.src == 00:c0:ca:96:cf:cb

Показати кадри, надіслані на пристрій, що має MAC-адресу 78:cd:8e:a6:73:be:

Eth.dst == 78:cd:8e:a6:73:be

Трафік протоколів міжмережевого рівня

Фільтрування IPv4 протоколу

Показати IP трафік (сюди відносяться TCP, UDP, а також протоколи рівня додатків DNS, HTTP - тобто практично все, крім протоколів канального рівня, які не використовують IP адреси для передачі даних (у локальних мережах Ethernet як адреси доставки вони використовують MAC- адреси)):

Якщо бути точнішим, мається на увазі трафік протоколу IPv4, який зазвичай називають просто IP (Internet Protocol).

Показати трафік, пов'язаний з певною адресою IP (впишіть його замість x.x.x.x). Будуть показані пакети, в яких ця IP-адреса є джерелом даних АБО одержувачем:

Ip.addr == x.x.x.x

Показати трафік, пов'язаний з двома IP адресами. За єдиною можливою логікою, одна з цих адрес буде джерелом, а друга — адресою доставки.

Ip.addr == x.x.x.x && ip.addr == y.y.y.y

Показати трафік, джерелом якого є хост з IP адресою 138.201.81.199:

Ip.src == 138.201.81.199

Показати трафік, адресатом якого є хост з IP-адресою 138.201.81.199:

Ip.dst == 138.201.81.199

Зверніть увагу, IP протокол оперує IP адресами, але не оперує портами. Порти є частиною протоколів TCP та UDP. IP протокол відповідає лише за маршрутизацію трафіку між хостами.

Фільтрування підмереж та діапазонів IP у Wireshark

Ви можете замість однієї IP адреси вказати підмережу:

Ip.addr == 192.168.1.0/24

Фільтрування трафіку, надісланого з певного діапазону IP. Якщо потрібно відфільтрувати трафік, джерелом якого є підмережа, використовуйте фільтр виду:

Ip.src == 192.168.1.0/24

Фільтрування трафіку, призначеного для надсилання на певний діапазон IP. Якщо потрібно відфільтрувати трафік, пунктом призначення якого є підмережа, використовуйте фільтр виду:

Ip.dst == 192.168.1.0/24

Фільтрування IPv6 протоколу

Показати трафік IPv6 (Internet Protocol шостої версії):

Фільтрування за адресою IPv6. Для фільтрації за адресою IPv6 використовуйте фільтр:

Ipv6.addr == 2604:a880:800:c1::2ae:d001

Фільтрування підмереж та діапазонів IPv6 у Wireshark

Ви можете замість однієї IPv6 адреси вказати підсітку для фільтрації:

Ipv6.addr == 2604:a880:800:c1::2ae:d000/64

Якщо потрібно відфільтрувати трафік, джерелом якого є певна IPv6 адреса:

Ipv6.src == 2604:a880:800:c1::2ae:d001

Якщо потрібно відфільтрувати трафік, надісланий на певну IPv6 адресу:

Ipv6.dst == 2604:a880:800:c1::2ae:d001

Фільтрування трафіку, надісланого з певного діапазону IPv6. Якщо потрібно відфільтрувати трафік, джерелом якого є підмережа, використовуйте фільтр виду:

Ipv6.src == 2604:a880:800:c1::2ae:d000/64

Фільтрування трафіку, призначеного для надсилання на певний діапазон IPv6. Якщо потрібно відфільтрувати трафік, пунктом призначення якого є підмережа, використовуйте фільтр виду:

Ipv6.dst == 2604:a880:800:c1::2ae:d000/64

Фільтрування ICMPv6 (Internet Control Message Protocol – протокол міжмережевих керуючих повідомлень шостої версії) у Wireshark робиться фільтром:

Для того, щоб побачити пакети, які виконують роль ARP для IPv6, використовуйте фільтр:

Icmpv6.type == 133 or icmpv6.type == 134 or icmpv6.type == 135 or icmpv6.type == 136 or icmpv6.type == 137

Інші фільтри з IP-адресою аналогічні для IPv6 та IPv4.

Трафік протоколів транспортного рівня

Щоб побачити лише трафік TCP:

Показати трафік, джерелом або портом призначення якого є певний порт, наприклад 8080:

Tcp.port==8080

Показати трафік, джерелом якого є порт 80:

Tcp.srcport == 80

Показати трафік, який відправляється службі, яка прослуховує порт 80:

Tcp.dstport == 80

Показати TCP пакети з увімкненим прапором SYN:

Tcp.flags.syn==1

Показати TCP пакети з увімкненим прапором SYN та вимкненим прапором ACK:

Tcp.flags.syn==1 && tcp.flags.ack==0

Аналогічно для інших прапорів:

tcp.flags.syn==1 tcp.flags.ack==1 tcp.flags.reset==1 tcp.flags.fin==1 tcp.flags.cwr tcp.flags.ecn tcp.flags.urg==1 tcp.flags.push==1

Також можна використовувати синтаксис виду tcp.flags == 0x0XX, наприклад:

  • FIN це tcp.flags == 0x001
  • SYN це tcp.flags == 0x002
  • RST це tcp.flags == 0x004
  • ACK це tcp.flags == 0x010
  • Встановлені одночасно ACK та FIN це tcp.flags == 0x011
  • Встановлені одночасно ACK та SYN це tcp.flags == 0x012
  • Встановлені одночасно ACK та RST це tcp.flags == 0x014

Щоб показати пакети, які містять будь-який рядок, наприклад, рядок hackware:

Tcp contains hackware

Слідувати потоку TCP з номером X:

Tcp.stream eq X

Фільтрувати за номером потоку:

Tcp.seq == x

Показати повторні надсилання пакетів. Допомагає простежувати уповільнення продуктивності додатків та втрати пакетів:

Цей фільтр виведено проблемні пакети (втрачені сегменти, повторне відправлення та інші. Цей фільтр проходять пакети TCP Keep-Alive, але вони є показником проблем.

Tcp.analysis.flags

Фільтри для оцінки якості підключення до мережі.

Наступні характеристики відносяться до TCP кадрів. Причому вони не ґрунтуються на заголовках фрейму — характеристики, що розглядаються (пропуск даних, дублі) присвоєні програмою Wireshark виходячи з аналізу.

Фільтр виводить інформацію про кадри з прапором ACK, які є дублями. Велика кількість таких кадрів може говорити про проблеми зв'язку:

Tcp.analysis.duplicate_ack_num == 1

Фільтр показу кадрів для яких не захоплений попередній сегмент:

Tcp.analysis.ack_lost_segment

Це нормально на початку захоплення даних, оскільки інформація перехоплюється не з самого початку сесії.

Для показу кадрів, які є ретрансмісією (відправляються повторно):

Tcp.analysis.retransmission

Виведення фреймів, які отримані неправильно:

Tcp.analysis.out_of_order

Щоб побачити лише трафік UDP:

У UDP не використовуються прапори. Для цього протоколу можна лише вказати порт.

Показати трафік, джерелом якого є порт 53:

Udp.srcport == 53

Показати трафік, який відправляється службі, яка прослуховує порт 53:

Udp.dstport == 53

UDP-пакет, в якому зустрічається певний рядок, наприклад, рядок hackware:

Udp contains hackware

Щоб побачити лише трафік ICMP:

Щоб побачити лише трафік ICMP v6 (шостої версії)

Показати всі відповіді на пінг:

Icmp.type==0

Показати всі пінг запити:

Icmp.type==8

Показати всі помилки недоступності/заборони хостів та портів

Icmp.type==3

Показати всі спроби перенаправити маршрутизацію за допомогою ICMP:

Icmp.type==8

Приклад використання CODE, наступний фільтр покаже повідомлення про недоступність порту:

Icmp.type==3 && icmp.code==3

Трафік протоколів прикладного рівня

Для протоколів проклятого рівня HTTP, DNS, SSH, FTP, SMTP, RDP, SNMP, RTSP, GQUIC, CDP, LLMNR, SSDP є фільтри, які називаються як і самі протоколи, але пишуться невеликими літерами.

Наприклад, щоб побачити HTTP трафік:

Щоб побачити трафік нового протоколу HTTP/2:

Пам'ятайте, що при прийнятті рішення, до якого протоколу відносяться дані, програма виходить з номера порту, що використовується. Якщо використовується нестандартний порт, програма не зможе знайти потрібні дані. Наприклад, якщо було виконано підключення до SSH порту 1234, то фільтр sshне знайде SSH трафік.

Фільтр, який показує лише дані, передані методом POST:

Http.request.method == "POST"

Фільтр, який показує лише дані, передані методом GET:

Http.request.method == "GET"

Пошук запитів до певного сайту (хосту):

Http.host == " "

Пошук запитів до певного сайту в частині імені:

Http.host contains "тут.часткове.ім'я"

Фільтр для виводу HTTP запитів, у яких передавалися кукіз:

Http.cookie

Запити, у яких сервер встановив кукіз у браузер користувача.

Http.set_cookie

Для пошуку будь-яких переданих зображень:

Http.content_type contains "image"

Для пошуку певних видів зображень:

Http.content_type contains "gif" http.content_type contains "jpeg" http.content_type contains "png"

Для пошуку файлів певного типу:

Http.content_type contains "text" http.content_type contains "xml" http.content_type contains "html" http.content_type contains "json" http.content_type contains "javascript" http.content_type contains "x-www-form-urlencode" http. content_type contains "compressed" http.content_type contains "application"

Пошук у Wireshark запитів на отримання файлів певного типу. Наприклад, для пошуку переданих ZIP архівів:

Http.request.uri contains "zip"

Замість http.request.uri для більшої точності можна використовувати фільтри http.request.uri.pathабо http.request.uri.query, наприклад, для пошуку запитів на завантаження файлів JPG (посилання на картинки):

Http.request.uri.path contains "jpg"

Також можна відфільтрувати запити, що містять певне значення HTTP заголовка REFERER (реферер). Наприклад, для пошуку запитів, в яких реферер є ru-board.com:

Http.referer contains "ru-board.com"

Http.authorization

Пошук файлів у HTTP потоці:

Http.file_data

Щоб побачити, які HTTP дані отримані із затримкою, використовується така конструкція:

Http.time>1

Вона покаже трафік, отриманий пізніше як за 1 секунду.

Для дослідження проблем можна аналізувати статус HTTP кодів відповіді. Наприклад, наступний фільтр покаже трафік, при якому отримано помилку 404 Not Found (сторінку не знайдено):

Http.response.code==404

Наступний фільтр дуже цікавий. По-перше, він показує, які складні конструкції можна будувати з окремих фільтрів. По-друге, він дозволяє досліджувати HTTP запити і в цілому веб-активність, виключаючи зайві дані. За допомогою цього фільтра можна переглядати веб-активність високого рівня. Правила всередині дужок виключають зображення, файли Javascript та таблиці стилів - все, що сторінка запитує в собі. Якщо досліджувані сторінки містять інші вбудовані об'єкти, виключіть їх таким чином:

Http.request && !(http.request.uri contains ".ico" or http.request.uri contains ".css" or http.request.uri contains ".js" or http.request.uri contains ".gif" or http.request.uri contains ".jpg")

Щоб побачити всі DNS запити та відповіді:

Щоб побачити, які DNS запити зайняли багато часу:

Dns.time>1

Буде показано відповіді, що надійдуть більш ніж через секунду після надсилання запиту.

Цей фільтр показує, які запити dns не можуть бути правильно дозволені:

Dns.flags.rcode != 0

Показати тільки DNS запити:

Dns.flags.response == 0

Показати тільки DNS відповіді:

Dns.flags.response == 1

Показати запити та відповіді на них, в якому шукається IP для google.com:

Dns.qry.name == "google.com"

Показати DNS запити та відповіді щодо запису A:

Dns.qry.type == 1

Показати DNS запити та відповіді щодо запису AAAA:

Dns.qry.type == 28

Показати відповіді, в яких для запису A як IP надіслано 216.58.196.3:

Dns.a == 216.58.196.3

Показати відповіді, в яких для запису AAAA як IP відправлено 2a01:4f8:172:1d86::1:

Dns.aaaa == 2a01:4f8:172:1d86::1

Показати записи з CNAME apollo.archlinux.org:

Dns.cname == "apollo.archlinux.org"

Показати відповіді завдовжки більше 30:

Dns.resp.len > 30

Показати запити з довжиною більше 25:

Dns.qry.name.len >25

Показати відповіді DNS серверів, на яких доступна рекурсія:

Dns.flags.recavail == 1

Показати відповіді DNS серверів, на яких не доступна рекурсія:

Dns.flags.recavail == 0

Чи бажана рекурсія (якщо запитаний DNS сервер не має інформації про ім'я хоста, чи він повинен опитувати інші DNS сервери в пошуках цієї інформації):

Dns.flags.recdesired == 1

Якщо у запиті стоїть 1 , отже рекурсія потрібна, якщо 0 — отже, вона не бажана.

Чи приймати неавтентифіковані дані ( 0 означає не приймати, 1 означає приймати):

Dns.flags.checkdisable == 0

Щоб побачити, як призначаються IP-адреси за протоколом DHCP:

Udp.dstport==67

Bootp.option.dhcp

Щоб показати DHCP запити:

Bootp.option.dhcp == 3

Щоб показати DHCP Discover:

Bootp.option.dhcp == 1

SMB фільтр. Цей фільтр у колонці Info показує все дерево (кулі) з'єднань, відкритих директорій та відкритих файлів у трасуванні.

Smb2.cmd==3 або smb2.cmd==5

Фільтри для Wi-Fi кадрів

Показати елементи чотириетапних рукостискань (тобто кадри протоколу EAPOL):

Показати фрейми Beacon (маяки):

Wlan.fc.type_subtype == 0x08

Показати кадри Probe Response:

Wlan.fc.type_subtype == 0x05

Показати все відразу: EAPOL, маяки, Probe Response:

Wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol

Показати бездротові кадри для певного пристрою з MAC-адресою BSSID:

Wlan.addr==BSSID

Показати EAPOL, маяки, Probe Response для певного пристрою з MAC-адресою 28:28:5D:6C:16:24:

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol) && wlan.addr==28:28:5D:6C:16:24

Показ усіх PMKID:

Eapol && wlan.rsn.ie.pmkid

Показати PMKID, маяки, Probe Response:

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || (eapol && wlan.rsn.ie.pmkid))

Показати PMKID, маяки, Probe Response для точки доступу з MAC-адресою 40:3D:EC:C2:72:B8:

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || (eapol && wlan.rsn.ie.pmkid)) && wlan.addr==40:3D:EC:C2:72:B8

Показати тільки перше повідомлення рукостискання:

Wlan_rsna_eapol.keydes.msgnr == 1

Показати лише друге повідомлення рукостискання (можна використовувати для повідомлення рукостискання з будь-яким номером):

Wlan_rsna_eapol.keydes.msgnr == 2

Показати кадри для точок доступу зі швидкістю (Data Rate) 1 Мb/s:

Wlan_radio.data_rate == 1

Показати фрейми для точок доступу зі швидкістю понад 10 Мб/с:

Wlan_radio.data_rate > 10

Показувати точки доступу на певній частоті:

Radiotap.channel.freq == 2412

Показувати точки доступу з певним рівнем сигналу:

Wlan_radio.signal_dbm > -50

Фільтри, пов'язані з наявністю пристрою антени:

Radiotap.present.antenna == 1

Radiotap.antenna == 1

Якщо ви знаєте інші цікаві фільтри Wireshark, то поділіться ними в коментарях.

Вступ

У роботі комп'ютерної мережі та мережевого стека вузлів іноді виникають проблеми, причини яких важко виявити загальновідомими утилітами збору статистики (наприклад, netstat) і стандартними додатками на основі протоколу ICMP (ping, traceroute/tracert тощо). У подібних випадках для діагностики неполадок часто доводиться використовувати більш специфічні засоби, які дозволяють відобразити (прослухати) мережевий трафік та проаналізувати його на рівні одиниць передачі окремих протоколів. «сніффінг», sniffing).

Аналізатори мережевих протоколівабо «сніфери»є виключно корисними інструментами для дослідження поведінки мережних вузлів та виявлення несправностей у роботі мережі. Зрозуміло, як і будь-який засіб, наприклад, гострий ніж, сніффер може бути як благом у руках системного адміністратора або інженера з інформаційної безпеки, так і знаряддям злочину в руках комп'ютерного зловмисника.

Подібне спеціалізоване програмне забезпечення зазвичай використовує "безладний" (promiscuos) режим роботи мережевого адаптеракомп'ютера-монітора (зокрема, для перехоплення трафіку мережного сегмента, порту комутатора чи маршрутизатора). Як відомо, суть цього режиму зводиться до обробки всіх кадрів, що приходять на інтерфейс., а не тільки призначених MAC-адресу мережевої карти та широкомовних, як це відбувається у звичайному режимі.

Розглянутий у цій статті продукт Wiresharkє широко відомим інструментом перехоплення та інтерактивного аналізу мережевого трафіку, фактично, стандартом у промисловості та освіті. До ключовими особливостями Wiresharkможна віднести: багатоплатформність (Windows, Linux, Mac OS, FreeBSD, Solaris та ін); можливості аналізу сотень різних протоколів; підтримку як графічного режиму роботи, і інтерфейсу командного рядка (утиліта tshark); потужну систему фільтрів трафіку; експорт результатів роботи у формати XML, PostScript, CSV тощо.

Важливим фактом є також те, що Wireshark це програмне забезпечення з відкритим вихідним кодом, розповсюджується під ліцензією GNU GPLv2, тобто Ви можете вільно використовувати цей продукт на свій розсуд.

Установка Wireshark

Остання версія Wireshark для операційних систем Windows і OS X, а також вихідний код можна скачати з сайту проекту. Для дистрибутивів Linux і BSD-систем цей продукт зазвичай доступний у стандартних або додаткових репозиторіях. Опубліковані в цій статті фотографії зроблені з версії 1.6.2 Wireshark для Windows. Більш ранні версії програми, які можна знайти в репозиторіях Unix-подібних операційних систем, також можна успішно використовувати, оскільки Wireshark давно вже стабільний та функціональний продукт.

Робота Wireshark базується на бібліотеці Pcap (Packet Capture), Що представляє собою прикладний інтерфейс програмування для реалізації низькорівневих функцій взаємодії з мережевими інтерфейсами (зокрема перехоплення та генерації довільних одиниць передачі мережевих протоколів та протоколів локальних мереж) . Бібліотека Pcap є також основою таких відомих мережевих засобів, як tcpdump, snort, nmap, kismet і т. д. Для Unix-подібних систем Pcap зазвичай є у стандартних репозиторіях програмного забезпечення. Для сімейства ОС Windows існує версія Pcap, яка називається Winpcap. Її можна скачати з сайту проекту. Втім, звичайно в цьому немає потреби, оскільки бібліотека Winpcap включена в пакет установки Wireshark для Windows.

Процес установки програми не складний будь-якої операційної системи, з поправкою, зрозуміло, на специфіку використовуваної Вами платформи. Наприклад, Wireshark в Debian/Ubuntu встановлюється так, що непривілейовані користувачі за замовчуванням не мають права перехоплювати пакети, тому програму потрібно запускати з використанням механізму зміни ідентифікатора користувача sudo (або зробити необхідні маніпуляції відповідно до документації стандартного DEB-пакета).

Ази роботи з Wireshark

Інтерфейс користувача Wireshark побудований на основі бібліотеки GTK+(GIMP Toolkit). Головне вікно програми включає наступні елементи: меню, панелі інструментів та фільтрів перегляду, список пакетів, детальний опис вибраного пакета, відображення байтів пакета (у шістнадцятковій формі та у вигляді тексту) та рядок стану:

Слід зазначити, що інтерфейс програми добре опрацьований, досить ергономічний і цілком інтуїтивний, що дозволяє користувачеві сконцентруватися на вивченні мережевих процесів, не відволікаючись по дрібницях. Крім того, всі можливості та подробиці використання Wireshark детально описані в посібнику користувача. Тому в цій статті основна увага приділена функціональним можливостям продукту, що розглядається, його особливостям у порівнянні іншими сніфферами, наприклад, з відомою консольною утилітою tcpdump.

Отже, ергономіка Wireshark відбиває багаторівневий підхід до забезпечення мережевих взаємодій. Все зроблено таким чином, що, обравши мережевий пакет зі списку, користувач отримує можливість переглянути всі заголовки (шари), а також значення полів кожного шару мережного пакета, починаючи від обгортки - кадру Ethernet, безпосередньо IP-заголовка, заголовка транспортного рівня та даних прикладного протоколу, які у пакеті.

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

Проблема пошуку необхідних пакетів у великих обсягах перехопленого трафіку вирішується двома типами фільтрів: збору трафіку (capture filters)і його відображення (display filters). Фільтри збору Wireshark засновані мовою фільтрів бібліотеки Pcap, тобто. синтаксис у разі аналогічний синтаксису утиліти tcpdump . Фільтр є серією примітивів, об'єднаних, якщо це необхідно, логічними функціями (and, or, not). Часто використовувані фільтри можна зберігати в профілі для повторного використання.

На малюнку показано профіль фільтрів збору Wireshark:

Аналізатор мережних пакетів Wireshark також має свій простий, але багатофункціональний мова фільтрів відображення. Значення кожного поля в заголовку пакета може бути використане як критерій фільтрації(наприклад, ip.src - IP-адреса джерела в мережевому пакеті, frame.len - довжина Ethernet-фрейму тощо). За допомогою операцій порівняння значення полів можна зіставляти заданим величинам(наприклад, frame.len а кілька виразів поєднувати логічними операторами (наприклад: ip.src==10.0.0.5 and tcp.flags.fin). Хорошим помічником у процесі конструювання виразів є вікно налаштування правил відображення (Filter Expression):

Засоби аналізу мережних пакетів

Якщо протоколи без встановлення з'єднання можна досліджувати простим переглядом окремих пакетів і розрахунком статистики, вивчення роботи орієнтованих з'єднання протоколів значно спрощується за наявності додаткових можливостей аналізу ходу мережевих взаємодій.

Однією з корисних функцій Wireshark є пункт "Follow TCP Stream"(буквально, "Слідувати за TCP-потоком") підменю аналізу "Analyze", що дозволяє витягти дані прикладного протоколу з TCP-сегментів потоку, якому належить вибраний пакет:

Ще один цікавий пункт підменю аналізу - "Expert Info Composite", що викликає вікно вбудованої експертної системи Wireshark, яка спробує виявити помилки та зауваження в пакетах, автоматично виділити з дампи окремі з'єднання та охарактеризувати їх. Цей модуль перебуває у процесі розробки та вдосконалюється від версії до версії програми.

У підміню статистики «Statistics»зібрані опції, що дозволяють розрахувати всілякі статистичні характеристики трафіку, що вивчається, побудувати графіки інтенсивності мережевих потоків, проаналізувати час відгуку сервісів і т.д. Так, пункт «Protocol Hierarchy»відображає статистику у вигляді ієрархічного списку протоколів із зазначенням відсоткового відношення до загального трафіку, кількості пакетів та байт, переданих цим протоколом.

Функція "Endpoint"дає багаторівневу статистику по вхідному/вихідному трафіку кожного вузла. Пункт «Conversations»(буквально, «розмови») дозволяє визначити обсяги трафіку різних протоколів (канального, мережевого та транспортного рівня моделі взаємодії відкритих систем), переданого між вузлами, що взаємодіяли один з одним. Функція "Packet Lengths"відображає розподіл пакетів за їх довжиною.

Пункт "Flow Graph..."представляє потоки пакетів у графічному вигляді. При цьому, при виборі елемента на графіку стає активним пакет у списку в головному вікні програми:

Окреме підменю в останніх версіях Wireshark відведено IP-телефонії. У підменю "Tools" є пункт "Firewall ACL Rules", для вибраного пакета спробує створити правило міжмережевого екрана (у версії 1.6.х підтримуються формати Cisco IOS, IP Filter, IPFirewall, Netfilter, Packet Filter та Windows Firewall).

Програма також має вбудований інтерпретатор легковажного мови програмування Lua. Використовуючи Lua, Ви можете створювати власні «декодери» протоколів та обробники подій у Wireshark.

Замість ув'язнення

Аналізатор мережевих пакетів Wireshark є прикладом Opensource-продукту, успішного як у рамках платформи Unix/Linux, так популярного серед користувачів Windows і Mac OS X. Звичайно, крім Wireshark, існують важкі комплексні інтелектуальні рішення в галузі дослідження мережевого трафіку, функціонал яких набагато ширший. Але вони, по-перше, коштують великих грошей, по-друге, складні в освоєнні та експлуатації; по-третє, треба розуміти, що не все можна автоматизувати і жодна експертна система не замінить хорошого спеціаліста. Отже, якщо перед Вами стоять завдання, що потребують аналізу мережевого трафіку, Wireshark — це інструмент для Вас. А шанувальники командного рядка можуть користуватися утилітою tshark - консольною версією Wireshark.

© 2022 androidas.ru - Все про Android