Как да използвате филтри на 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 с Peruse

За да добавите себе си към групата „Wireshark“, използвайте тази команда:

sudo usermod -a -G wireshark $USER

За да влезе в сила новото ви членство в групата, можете да излезете и да влезете отново или да използвате тази команда:

newgrp wireshark

За да видите дали сте в новата група, използвайте командата groups:

groups

Трябва да видите „wireshark“ в списъка с групи.

Стартиране на Wireshark

Можете да стартирате Wireshark с командата по-долу. Амперсандът (&) стартира Wireshark като фонова задача, което означава, че можете да продължите да използвате прозореца на терминала. Можете дори да затворите прозореца на терминала и Wireshark ще продължи да работи.

Въведете следното:

Wireshark &

Появява се интерфейсът на Wireshark. Устройствата за мрежов интерфейс, налични във вашия компютър, са изброени, заедно с някои вградени псевдо-устройства.

Вълнообразна линия до интерфейс означава, че е активен и мрежовият трафик преминава през него. Плоска линия означава, че няма активност в интерфейса. Най-горният елемент в този списък е „enp0s3“, кабелната връзка за този компютър и, както се очаква, показва активност.

За да започнем да улавяме пакети, щракваме с десния бутон върху „enp0s3“ и след това избираме „Стартиране на заснемане“ в контекстното меню.

Щракнете върху

Можете да зададете филтри, за да намалите количеството трафик, който Wireshark улавя. Предпочитаме да улавяме всичко и да филтрираме всичко, което не искаме да видим, когато правим анализ. По този начин знаем, че всичко, което се е случило, е в следата. Не искате по невнимание да пропуснете мрежово събитие, което обяснява ситуацията, която разследвате, поради вашия филтър за улавяне.

Разбира се, за мрежи с висок трафик, следите могат бързо да станат много големи, така че филтрирането при улавяне има смисъл в този сценарий. Или може би просто го предпочитате по този начин.

Имайте предвид, че синтаксисът за филтрите за улавяне е малко по-различен отколкото за дисплеите.

Маркираните икони в изображението по-горе показват следното, отляво надясно:

Перка на акула: Ако това е синьо, щракването върху него ще започне улавяне на пакет. Ако Wireshark улавя пакети, тази икона ще бъде сива.
Квадрат: Ако това е червено, щракването върху него ще спре текущото улавяне на пакет. Ако Wireshark не улавя пакети, тази икона ще бъде сива.
Перка на акула с кръгла стрелка: Ако това е зелено, щракването върху него ще спре текущото текущо движение. Това ви дава възможност да запазите или изхвърлите заловените пакети и да рестартирате проследяването. Ако Wireshark не улавя пакети, тази икона ще бъде сива.

Анализиране на следата

Щракването върху иконата на червения квадрат ще спре улавянето на данни, за да можете да анализирате пакетите, заснети в проследяването. Пакетите са представени във времеви ред и цветно кодирани според протокола на пакета. Подробностите за маркирания пакет се показват в двата долни панела в интерфейса на Wireshark.

Един прост начин да улесните четенето на проследяването е Wireshark да предостави смислени имена за IP адресите на източника и местоназначението на пакетите. За да направите това, щракнете върху Изглед > Разделителна способност на името и изберете „Разрешаване на мрежови адреси“.

Wireshark ще се опита да разреши името на устройствата, които са изпратили и получили всеки пакет. Той няма да може да идентифицира всяко устройство, но тези, които може, ще ви помогнат да прочетете следата.

  Как да изтриете потребител в Linux (и да премахнете всяка следа)

Превъртането на дисплея наляво ще разкрие още колони вдясно. Колоната с информация показва всяка информация, която Wireshark може да открие от пакета. В примера по-долу виждаме някои ping заявки и отговори.

По подразбиране 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 пакет.

  Original Sin 2 на 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 (завършващ) пакет. Другият край изпраща 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, не забравяйте да проверите неговата онлайн справка.