Πώς να χρησιμοποιήσετε τα φίλτρα Wireshark στο Linux

Το Wireshark είναι ένας αναλυτής πακέτων παγκόσμιας κλάσης που διατίθεται σε Linux, Windows και macOS. Τα φίλτρα του είναι ευέλικτα και εξελιγμένα, αλλά μερικές φορές, αντίθετα. Θα εξηγήσουμε τα “gotchas” που πρέπει να προσέχετε.

Ανάλυση πακέτων με 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 για χρήστες Windows

Για να προσθέσετε τον εαυτό σας στην ομάδα “Wireshark” χρησιμοποιήστε αυτήν την εντολή:

sudo usermod -a -G wireshark $USER

Για να τεθεί σε ισχύ η νέα σας ιδιότητα μέλους ομάδας, μπορείτε να αποσυνδεθείτε και να συνδεθείτε ξανά ή να χρησιμοποιήσετε αυτήν την εντολή:

newgrp wireshark

Για να δείτε αν βρίσκεστε στη νέα ομάδα, χρησιμοποιήστε την εντολή ομάδες:

groups

Θα πρέπει να δείτε το “wireshark” στη λίστα των ομάδων.

Εκκίνηση του Wireshark

Μπορείτε να εκκινήσετε το Wireshark με την παρακάτω εντολή. Το συμπλεκτικό σύμβολο (&) εκκινεί το Wireshark ως εργασία παρασκηνίου, που σημαίνει ότι μπορείτε να συνεχίσετε να χρησιμοποιείτε το παράθυρο του τερματικού. Μπορείτε ακόμη να κλείσετε το παράθυρο του τερματικού και το Wireshark θα συνεχίσει να εκτελείται.

Πληκτρολογήστε τα εξής:

Wireshark &

Εμφανίζεται η διεπαφή Wireshark. Παρατίθενται οι συσκευές διεπαφής δικτύου που υπάρχουν στον υπολογιστή σας, μαζί με ορισμένες ενσωματωμένες ψευδο-συσκευές.

Μια κυματιστή γραμμή δίπλα σε μια διεπαφή σημαίνει ότι είναι ζωντανή και η κυκλοφορία δικτύου διέρχεται από αυτήν. Μια επίπεδη γραμμή σημαίνει ότι δεν υπάρχει δραστηριότητα στη διεπαφή. Το κορυφαίο στοιχείο σε αυτήν τη λίστα είναι το “enp0s3”, η ενσύρματη σύνδεση για αυτόν τον υπολογιστή και, όπως αναμενόταν, εμφανίζει δραστηριότητα.

Για να ξεκινήσετε τη λήψη πακέτων, κάνουμε δεξί κλικ στο “enp0s3” και, στη συνέχεια, επιλέγουμε “Έναρξη λήψης” στο μενού περιβάλλοντος.

Κάντε κλικ

Μπορείτε να ορίσετε φίλτρα για να μειώσετε την κυκλοφορία που καταγράφει το Wireshark. Προτιμούμε να αποτυπώνουμε τα πάντα και να φιλτράρουμε οτιδήποτε δεν θέλουμε να δούμε όταν κάνουμε μια ανάλυση. Με αυτόν τον τρόπο, γνωρίζουμε ότι όλα όσα συνέβησαν βρίσκονται στο ίχνος. Δεν θέλετε να χάσετε ακούσια ένα συμβάν δικτύου που εξηγεί την κατάσταση που διερευνάτε λόγω του φίλτρου λήψης.

Φυσικά, για δίκτυα υψηλής επισκεψιμότητας, τα ίχνη μπορούν γρήγορα να γίνουν πολύ μεγάλα, επομένως το φιλτράρισμα κατά τη λήψη έχει νόημα σε αυτό το σενάριο. Ή, ίσως απλά το προτιμάτε έτσι.

Σημειώστε ότι η σύνταξη για τα φίλτρα λήψης είναι ελαφρώς διαφορετικά από αυτό για οθόνες.

Τα επισημασμένα εικονίδια στην παραπάνω εικόνα δείχνουν τα εξής, από αριστερά προς τα δεξιά:

Πτερύγιο καρχαρία: Εάν αυτό είναι μπλε, κάνοντας κλικ σε αυτό θα ξεκινήσει η σύλληψη πακέτου. Εάν το Wireshark καταγράφει πακέτα, αυτό το εικονίδιο θα είναι γκρι.
Τετράγωνο: Εάν είναι κόκκινο, κάνοντας κλικ σε αυτό θα σταματήσει η εκτελούμενη σύλληψη πακέτων. Εάν το Wireshark δεν καταγράφει πακέτα, αυτό το εικονίδιο θα είναι γκρι.
Πτερύγιο καρχαρία με κυκλικό βέλος: Εάν αυτό είναι πράσινο, κάνοντας κλικ σε αυτό θα σταματήσει το τρέχον ίχνος. Αυτό σας δίνει την ευκαιρία να αποθηκεύσετε ή να απορρίψετε τα πακέτα που έχετε καταγράψει και να επανεκκινήσετε το ίχνος. Εάν το Wireshark δεν καταγράφει πακέτα, αυτό το εικονίδιο θα είναι γκρι.

Αναλύοντας το ίχνος

Κάνοντας κλικ στο κόκκινο τετράγωνο εικονίδιο θα σταματήσει η σύλληψη δεδομένων, ώστε να μπορείτε να αναλύσετε τα πακέτα που καταγράφηκαν στο ίχνος. Τα πακέτα παρουσιάζονται με χρονική σειρά και χρωματικά κωδικοποιημένα σύμφωνα με το πρωτόκολλο του πακέτου. Οι λεπτομέρειες του επισημασμένου πακέτου εμφανίζονται στα δύο κάτω παράθυρα στη διεπαφή Wireshark.

Ένας απλός τρόπος για να διευκολύνετε την ανάγνωση του ίχνους είναι να έχετε το Wireshark να παρέχει ουσιαστικά ονόματα για τις διευθύνσεις IP προέλευσης και προορισμού των πακέτων. Για να το κάνετε αυτό, κάντε κλικ στην επιλογή Προβολή > Ανάλυση ονόματος και επιλέξτε «Επίλυση διευθύνσεων δικτύου».

Το Wireshark θα προσπαθήσει να επιλύσει το όνομα των συσκευών που έστειλαν και έλαβαν κάθε πακέτο. Δεν θα μπορεί να αναγνωρίσει κάθε συσκευή, αλλά αυτές που μπορεί θα σας βοηθήσουν να διαβάσετε το ίχνος.

Η κύλιση της οθόνης προς τα αριστερά θα αποκαλύψει περισσότερες στήλες στα δεξιά. Η στήλη πληροφοριών εμφανίζει οποιαδήποτε πληροφορία μπορεί να εντοπίσει το Wireshark από το πακέτο. Στο παρακάτω παράδειγμα, βλέπουμε ορισμένα αιτήματα και απαντήσεις ping.

  Πώς να εμφανίσετε την ημερομηνία και την ώρα στο τερματικό Linux (και να τα χρησιμοποιήσετε σε σενάρια Bash)

Από προεπιλογή, το Wireshark εμφανίζει όλα τα πακέτα με τη σειρά με την οποία εντοπίστηκαν. Πολλές συσκευές στέλνουν πακέτα εμπρός και πίσω ταυτόχρονα. Αυτό σημαίνει ότι μια μεμονωμένη συνομιλία μεταξύ δύο συσκευών είναι πιθανό να έχει πακέτα από άλλες συνδεδεμένα μεταξύ τους.

Για να εξετάσετε μια μεμονωμένη συνομιλία, μπορείτε να την απομονώσετε με πρωτόκολλο. Το πρωτόκολλο για κάθε πακέτο εμφανίζεται στη στήλη πρωτοκόλλου. Τα περισσότερα από τα πρωτόκολλα που θα δείτε ανήκουν στην οικογένεια TCP/IP. Μπορείτε να καθορίσετε το ακριβές πρωτόκολλο ή να χρησιμοποιήσετε το Ethernet ως είδος catchall.

Κάντε δεξί κλικ σε οποιοδήποτε από τα πακέτα με τη σειρά που θέλετε να εξετάσετε και, στη συνέχεια, κάντε κλικ στην επιλογή Φίλτρο συνομιλίας > Ethernet. Στο παρακάτω παράδειγμα, επιλέξαμε ένα πακέτο αιτήματος ping.

Απομονωμένο 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.

  Πώς να εγκαταστήσετε το Mumble Client σε Linux

Το SYN και το ACK είναι στην πραγματικότητα δύο σημαίες στο ίδιο πακέτο. Η αρχική συσκευή αναγνωρίζει το SYN στέλνοντας ένα ACK και, στη συνέχεια, οι συσκευές δημιουργούν μια σύνδεση δικτύου.

Αυτό ονομάζεται τριπλή χειραψία:

A -> SYN -> B

A  ACK -> B

Στο παρακάτω στιγμιότυπο οθόνης, κάποιος στον υπολογιστή “nostromo.local” κάνει ένα Ασφαλές κέλυφος (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, φροντίστε να το ελέγξετε η ηλεκτρονική του αναφορά.