Як використовувати фільтри Wireshark в Linux

Wireshark — це аналізатор пакетів світового класу, доступний для Linux, Windows і macOS. Його фільтри гнучкі та складні, але іноді суперечливі. Ми пояснимо, на що вам потрібно звертати увагу.

Аналіз пакетів із Real Bite

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

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

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

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

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

Встановлення Wireshark

Коли ви встановлюєте Wireshark, вас запитають, чи може будь-хто, хто використовує обліковий запис без права root, мати можливість захоплювати мережеві сліди. Сказати цьому «ні» може бути привабливою ідеєю. Можливо, ви не хочете, щоб усі бачили, що відбувається в мережі. Однак встановлення Wireshark так, щоб його могли використовувати лише ті, хто має права root, означає, що всі його компоненти працюватимуть з підвищеними дозволами.

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

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

Щоб почати інсталяцію в Ubuntu, введіть:

sudo apt-get install wireshark

На Fedora введіть:

sudo dnf install wireshark

На Manjaro використовуйте цю команду:

sudo pacman -Syu wireshark-qt

Під час встановлення ви побачите екран нижче, який рекомендує не запускати Wireshark як root. Натисніть Tab, щоб перемістити червоне виділення на «” і натисніть пробіл.

На наступному екрані натисніть Tab, щоб перемістити червоне виділення на «” і натисніть пробіл.

Екран параметрів, що дозволяє користувачам, які не мають права root, запускати Wireshark, за допомогою

Щоб запустити Wireshark, ви повинні бути членом групи «wireshark», яка створюється під час встановлення. Це дозволяє вам контролювати, хто може запускати Wireshark. Кожен, хто не входить до групи «wireshark», не може запустити Wireshark.

  Як слухати радіо на робочому столі Linux за допомогою Gradio

Щоб додати себе до групи Wireshark, скористайтеся цією командою:

sudo usermod -a -G wireshark $USER

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

newgrp wireshark

Щоб перевірити, чи ви входите в нову групу, скористайтеся командою groups:

groups

Ви повинні побачити «wireshark» у списку груп.

Запуск Wireshark

Ви можете запустити Wireshark за допомогою наведеної нижче команди. Амперсанд (&) запускає Wireshark як фонове завдання, що означає, що ви можете продовжувати використовувати вікно терміналу. Ви навіть можете закрити вікно терміналу, і Wireshark продовжить працювати.

Введіть наступне:

Wireshark &

З’явиться інтерфейс Wireshark. Перелічено пристрої мережевого інтерфейсу, наявні у вашому комп’ютері, а також деякі вбудовані псевдопристрої.

Хвиляста лінія біля інтерфейсу означає, що він працює, і мережевий трафік проходить через нього. Рівна лінія означає, що в інтерфейсі немає активності. Найвищим пунктом у цьому списку є «enp0s3», дротове з’єднання для цього комп’ютера, і, як і очікувалося, він показує активність.

Щоб почати захоплення пакетів, ми клацаємо правою кнопкою миші «enp0s3», а потім вибираємо «Почати захоплення» в контекстному меню.

Натисніть

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

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

Зауважте, що синтаксис for фільтри захоплення дещо відрізняються ніж для дисплеїв.

Виділені значки на зображенні вище вказують на наступне зліва направо:

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

Аналізуючи слід

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

Простим способом полегшити читання трасування є надання Wireshark значущих імен для IP-адрес джерела та призначення пакетів. Для цього клацніть «Перегляд» > «Роздільна здатність імен» і виберіть «Вирішувати мережеві адреси».

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

Прокрутка дисплея ліворуч відкриє більше стовпців праворуч. У стовпці інформації показано будь-яку інформацію, яку Wireshark може виявити з пакета. У наведеному нижче прикладі ми бачимо деякі запити та відповіді ping.

  Як використовувати та встановити FlatPak на Linux

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

Щоб перевірити одну розмову, ви можете ізолювати її за протоколом. Протокол для кожного пакета показаний у стовпці протоколу. Більшість протоколів, які ви побачите, належать до сімейства TCP/IP. Ви можете вказати точний протокол або використовувати Ethernet як своєрідну ланцюжок.

Клацніть правою кнопкою миші будь-який з пакетів у послідовності, яку потрібно перевірити, а потім виберіть «Фільтр бесіди» > «Ethernet». У наведеному нижче прикладі ми вибрали пакет запиту ping.

Ізольований пінг

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

Щоб очистити фільтр, натисніть «X» на панелі фільтрів.

Створення власних фільтрів

Давайте помістимо простий фільтр на панелі фільтрів:

ip.addr == 192.168.4.20

Це вибирає всі пакети, які були відправлені або отримані пристроєм з IP-адресою 192.168.4.20. Зверніть увагу, що подвійний знак рівності (==) без пробілу між ними.

Щоб побачити пакети, надіслані пристроєм (джерелом), можна використовувати ip.src; щоб побачити пакети, які надійшли на пристрій (пункт призначення), ви можете використовувати ip.dst, як показано нижче:

ip.dst == 192.168.4.20 && ip.src == 192.168.4.28

Зверніть увагу на використання подвійного амперсанда (&&) для позначення логічного «і». Цей фільтр шукає пакети, які надійшли на 192.168.4.20 з 192.168.4.28.

Люди, які незнайомі з фільтрами Wireshark, часто думають, що такий фільтр захоплюватиме всі пакети між двома IP-адресами, але це не так.

Насправді він фільтрує всі пакети на або з IP-адреси 192.168.4.20, незалежно від того, звідки вони прийшли або куди були надіслані. Те ж саме робиться з усіма пакетами з IP-адреси 192.168.4.28. Простіше кажучи, він фільтрує весь трафік на або з IP-адреси.

Ви також можете шукати активність на інших протоколах. Наприклад, ви можете ввести цей фільтр для пошуку HTTP-запитів:

http.request

Щоб виключити пакети, які надійшли з пристрою або були надіслані на нього, використовуйте знак оклику (!) і помістіть фільтр у дужки [()]:

!(ip.addr == 192.168.4.14)

Цей фільтр виключає всі пакети, надіслані на або з 192.168.4.14.

Це нерозумно, оскільки фільтр містить оператор рівності (==). Ви могли очікувати, що введете цей фільтр так:

ip.addr !=192.168.4.14

Однак це не спрацює.

Ви також можете шукати рядки в пакетах за протоколом. Цей фільтр шукає Протокол управління передачею (TCP) пакети, які містять рядок «youtube»:

tcp contains youtube

Фільтр, який шукає повторну передачу, корисний як спосіб перевірити, чи є проблеми з підключенням. Повторні передачі — це пакети, які повторно надсилаються, оскільки вони були пошкоджені або втрачені під час первинної передачі. Занадто багато повторних передач вказує на повільне з’єднання або пристрій, який повільно відповідає.

Введіть наступне:

tcp.analysis.retransmission

Народження, життя, смерть і шифрування

Мережне з’єднання між двома пристроями ініціюється щоразу, коли один контактує з іншим і надсилає пакет SYN (синхронізація). Потім пристрій-отримувач надсилає пакет ACK (підтвердження). Він вказує, чи прийме з’єднання, надіславши пакет SYN.

  Як встановити тему значків Captiva на Linux

SYN і ACK насправді є двома прапорами в одному пакеті. Оригінальний пристрій підтверджує SYN, надсилаючи ACK, а потім пристрої встановлюють мережеве з’єднання.

Це називається тристороннім рукостисканням:

A -> SYN -> B

A  ACK -> B

На скріншоті нижче хтось на комп’ютері «nostromo.local» робить a Безпечна оболонка (SSH) підключення до комп’ютера «ubuntu20-04.local». Тристороннє рукостискання є першою частиною зв’язку між двома комп’ютерами. Зверніть увагу, що два рядки, що містять пакети SYN, мають темно-сірий колір.

Прокручування дисплея, щоб показати стовпці праворуч, показує пакети рукостискання SYN , SYN/ACK та ACK.

Ви помітите, що пакетний обмін між двома комп’ютерами відбувається по черзі між протоколами TCP і SSH. Пакети даних передаються через зашифроване з’єднання SSH, але пакети повідомлень (наприклад, ACK) надсилаються через TCP. Незабаром ми відфільтруємо TCP-пакети.

Коли мережеве підключення більше не потрібне, воно відкидається. Послідовність пакетів для розриву мережевого з’єднання є чотиристороннім рукостисканням.

Одна сторона надсилає пакет FIN (finish). Інший кінець надсилає ACK, щоб підтвердити FIN, а потім також надсилає FIN, щоб вказати, що погоджується, що з’єднання має бути розірвано. Перша сторона надсилає ACK для щойно отриманого FIN, після чого мережеве з’єднання роз’єднується.

Ось як виглядає чотиристороннє рукостискання:

A -> FIN -> B

A  ACK -> B

Іноді оригінальний FIN підключається до пакету ACK, який все одно мав бути відправлений, як показано нижче:

A -> FIN, ACK -> B

A  ACK -> B

Ось що відбувається в цьому прикладі.

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

ip.addr == 192.168.4.25 && ssh

Це відфільтровує все, крім трафіку SSH до та з 192.168.4.25.

Інші корисні шаблони фільтрів

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

Якщо ви введете протокол, наприклад tcp, ip, udp або shh, за яким слідує крапка (.), з’явиться меню. У ньому буде перераховано останні фільтри, які містили цей протокол, і всі поля, які можна використовувати у фільтрах для назви цього протоколу.

Наприклад, з ip можна використовувати ip.addr, ip.checksum, ip.src, ip.dst, ip.id, ip.host та десятки інших.

Використовуйте такі шаблони фільтрів як основу своїх фільтрів:

Щоб показати лише пакети протоколу HTTP: http
Щоб показати лише пакети протоколу DNS: dns
Щоб показати лише пакети TCP з 4000 як порт джерела або призначення: tcp.port==4000
Щоб відобразити всі пакети скидання TCP: http.request
Щоб відфільтрувати пакети ARP, ICMP і DNS: !(arp або icmp або dns)
Щоб відобразити всі повторні передачі в трасі: tcp.analysis.retransmission
Щоб відфільтрувати прапори (наприклад, SYN або FIN): Ви повинні встановити значення порівняння для них: 1 означає, що прапор встановлено, а 0 означає, що ні. Отже, прикладом може бути: tcp.flags.syn == 1.

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

Щоб оцінити повний обсяг і потужність фільтрів Wireshark, не забудьте перевірити його онлайн-довідник.