Wireshark est un analyseur de paquets de classe mondiale disponible sur Linux, Windows et macOS. Ses filtres sont flexibles et sophistiqués, mais parfois contre-intuitifs. Nous allons vous expliquer les "pièges" que vous devez rechercher.
Wireshark est l'un des joyaux du monde open-source. Il s'agit d'un outil logiciel de classe mondiale, utilisé par les professionnels et les amateurs pour enquêter et diagnostiquer les problèmes de réseau. Les développeurs de logiciels l'utilisent pour localiser et caractériser les bogues dans les routines de communication. Les chercheurs en sécurité l'utilisent pour capturer et décompresser les activités malveillantes sur un réseau.
Un flux de travail typique consiste à exécuter Wireshark en mode Capture, afin qu'il enregistre le trafic réseau via l'une des interfaces réseau de l'ordinateur. Les paquets réseau sont affichés en temps réel, au fur et à mesure de leur capture. Cependant, c'est dans l'analyse post-capture que le détail granulaire de ce qui se passe sur le réseau est révélé.
Les paquets capturés sont appelés trace. Une fois la capture terminée, la trace peut être parcourue, paquet par paquet. Vous pouvez inspecter n'importe quel paquet dans les moindres détails, cartographier les "conversations" réseau entre les appareils et utiliser des filtres pour inclure (ou exclure) les paquets de votre analyse.
Les capacités de filtrage de Wireshark sont inégalées, avec une grande flexibilité et un pouvoir de résolution. Il existe des subtilités dans leur syntaxe qui facilitent l'écriture d'un filtre et obtiennent un résultat qui ne répond pas à vos attentes.
Si vous ne comprenez pas comment fonctionnent les filtres dans Wireshark, vous ne sortirez jamais de la première vitesse et ne réduirez pas les capacités du logiciel.
Lorsque vous installez Wireshark, il vous est demandé si toute personne utilisant un compte non root doit pouvoir capturer les traces réseau. Dire non à cela pourrait être une idée intéressante. Vous ne voudrez peut-être pas que tout le monde puisse voir ce qui se passe sur le réseau. Cependant, l'installation de Wireshark pour que seuls ceux qui ont des privilèges root puissent l'utiliser signifie que tous ses composants s'exécuteront avec des autorisations élevées.
Wireshark contient plus de 2 millions de lignes de code compliqué et interagit avec votre ordinateur au niveau le plus bas. Les meilleures pratiques de sécurité recommandent que le moins de code possible puisse s'exécuter avec des privilèges élevés, en particulier lorsqu'il fonctionne à un niveau aussi bas.
Il est beaucoup plus sûr d'exécuter Wireshark avec un compte d'utilisateur normal. Nous pouvons toujours restreindre les personnes autorisées à exécuter Wireshark. Cela nécessite quelques étapes de configuration supplémentaires, mais c'est la façon la plus sûre de procéder. Les éléments de capture de données de Wireshark fonctionneront toujours avec des privilèges élevés, mais le reste de Wireshark
fonctionne comme un processus normal.
Pour démarrer l'installation sur Ubuntu, tapez:
sudo apt-get install filshark
Sur Fedora, tapez:
sudo dnf install filshark
Sur Manjaro, utilisez cette commande:
sudo pacman -Syu filshark-qt
Pendant l'installation, vous verrez l'écran ci-dessous, vous recommandant de ne pas exécuter Wireshark
en tant que root. Appuyez sur Tab pour déplacer la surbrillance rouge sur "
Sur l'écran suivant, appuyez sur Tab pour déplacer la surbrillance rouge sur "
Courir Wireshark
, vous devez être membre du groupe «Wireshark», créé lors de l'installation. Cela vous permet de contrôler qui peut exécuter Wireshark
. Toute personne qui ne fait pas partie du groupe «Wirehark» ne peut pas exécuter Wireshark
.
Pour vous ajouter au groupe «Wireshark», utilisez cette commande:
sudo usermod -a -G wirehark $ USER
Pour que votre nouvelle appartenance à un groupe prenne effet, vous pouvez vous déconnecter et vous reconnecter, ou utiliser cette commande:
newgrp cableshark
Pour voir si vous faites partie du nouveau groupe, utilisez le groupes
commander:
groupes
Vous devriez voir «Wirehark» dans la liste des groupes.
Vous pouvez lancer Wireshark avec la commande ci-dessous. L'esperluette (&
) lance Wireshark
comme tâche de fond, ce qui signifie que vous pouvez continuer à utiliser la fenêtre du terminal. Vous pouvez même fermer la fenêtre du terminal et Wireshark continuera de fonctionner.
Tapez ce qui suit:
Wireshark &
EN RELATION: Comment exécuter et contrôler les processus d'arrière-plan sous Linux
L'interface Wireshark apparaît. Les périphériques d'interface réseau présents sur votre ordinateur sont répertoriés, ainsi que certains pseudo-périphériques intégrés.
Une ligne ondulée à côté d'une interface signifie qu'elle est en direct et que le trafic réseau la traverse. Une ligne plate signifie qu'il n'y a aucune activité sur l'interface. Le premier élément de cette liste est «enp0s3», la connexion filaire de cet ordinateur et, comme prévu, il indique l'activité.
Pour commencer à capturer des paquets, nous cliquons avec le bouton droit sur «enp0s3», puis sélectionnons «Démarrer la capture» dans le menu contextuel.
Vous pouvez définir des filtres pour réduire la quantité de trafic capturé par Wireshark. Nous préférons tout capturer et filtrer tout ce que nous ne voulons pas voir lors d'une analyse. De cette façon, nous savons que tout ce qui s'est passé est dans la trace. Vous ne voulez pas rater par inadvertance un événement réseau qui explique la situation que vous étudiez en raison de votre filtre de capture.
Bien sûr, pour les réseaux à fort trafic, les traces peuvent rapidement devenir très importantes, donc le filtrage à la capture est logique dans ce scénario. Ou peut-être préférez-vous simplement de cette façon.
Notez que la syntaxe de les filtres de capture sont légèrement différents que pour les écrans.
Les icônes en surbrillance dans l'image ci-dessus indiquent les éléments suivants, de gauche à droite:
Cliquez sur l'icône carré rouge pour arrêter la capture des données afin que vous puissiez analyser les paquets capturés dans la trace. Les paquets sont présentés par ordre temporel et codés par couleur selon le protocole du paquet. Les détails du paquet en surbrillance sont affichés dans les deux volets inférieurs de l'interface Wireshark.
Un moyen simple de faciliter la lecture de la trace consiste à demander à Wireshark de fournir des noms significatifs pour les adresses IP source et de destination des paquets. Pour ce faire, cliquez sur Affichage> Résolution de nom et sélectionnez «Résoudre les adresses réseau».
Wireshark tentera de résoudre le nom des périphériques qui ont envoyé et reçu chaque paquet. Il ne sera pas en mesure d'identifier chaque appareil, mais ceux qu'il pourra vous aider à lire la trace.
Faire défiler l'affichage vers la gauche fera apparaître plus de colonnes sur la droite. La colonne d'informations affiche toutes les informations que Wireshark peut détecter à partir du paquet. Dans l'exemple ci-dessous, nous voyons certains ping
demandes et réponses.
Par défaut, Wireshark affiche tous les paquets dans l'ordre dans lequel ils ont été tracés. De nombreux appareils envoient des paquets d'avant en arrière simultanément. Cela signifie qu'une seule conversation entre deux appareils est susceptible d'avoir des paquets d'autres entrelacés entre eux.
Pour examiner une seule conversation, vous pouvez l'isoler par protocole. Le protocole de chaque paquet est indiqué dans la colonne protocole. La plupart des protocoles que vous verrez appartiennent à la famille TCP / IP. Vous pouvez spécifier le protocole exact ou utiliser Ethernet comme une sorte de fourre-tout.
Cliquez avec le bouton droit sur l'un des paquets de la séquence que vous souhaitez examiner, puis cliquez sur Filtre de conversation> Ethernet. Dans l'exemple ci-dessous, nous avons sélectionné un ping
demande de paquet.
La séquence de paquets est affichée sans autres entre eux, car Wireshark a généré automatiquement un filtre pour ce faire. Il est affiché dans la barre de filtre et surligné en vert, ce qui indique que la syntaxe du filtre est correcte.
Pour effacer le filtre, cliquez sur «X» dans la barre de filtre.
Mettons un simple filtre dans la barre de filtre:
ip.addr == 192.168.4.20
Cela sélectionne tous les paquets qui ont été envoyés ou reçus par l'appareil avec l'adresse IP 192.168.4.20. Notez le double signe égal (==
) sans espace entre eux.
Pour voir les paquets envoyés par un appareil (la source), vous pouvez utiliser ip.src
; pour voir les paquets qui sont arrivés sur un appareil (la destination), vous pouvez utiliser ip.dst
, comme indiqué ci-dessous:
ip.dst == 192.168.4.20 && ip.src == 192.168.4.28
Notez l'utilisation d'une double esperluette (&&
) pour indiquer le «et» logique. Ce filtre recherche les paquets arrivés à 192.168.4.20 à partir de 192.168.4.28.
Les nouveaux utilisateurs des filtres Wireshark pensent souvent qu'un tel filtre capturera tous les paquets entre deux adresses IP, mais ce n'est pas le cas.
En fait, il filtre tous les paquets vers ou depuis l'adresse IP 192.168.4.20, indépendamment de leur provenance ou de leur destination. Il en va de même avec tous les paquets de l'adresse IP 192.168.4.28. Pour le dire plus simplement, il filtre tout le trafic vers ou depuis l'une des adresses IP.
Vous pouvez également rechercher des activités sur d'autres protocoles. Par exemple, vous pouvez taper ce filtre pour rechercher des requêtes HTTP:
http.request
Pour exclure des paquets provenant ou envoyés à un appareil, utilisez un point d'exclamation (!
) et placez le filtre entre parenthèses (()
):
! (ip.addr == 192.168.4.14)
Ce filtre exclut tous les paquets envoyés vers ou depuis 192.168.4.14.
C'est contre-intuitif car le filtre contient l'opérateur d'égalité (
). Vous vous attendiez peut-être à taper ce filtre comme suit:==
ip.addr! = 192.168.4.14
Cependant, cela ne fonctionnera pas.
Vous pouvez également rechercher des chaînes dans des paquets, par protocole. Ce filtre recherche Protocole de contrôle de transmission (TCP) paquets contenant la chaîne «youtube»:
TCP contient YouTube
Un filtre qui recherche la retransmission est utile pour vérifier s'il y a un problème de connectivité. Les retransmissions sont des paquets qui sont renvoyés car ils ont été endommagés ou perdus lors de la transmission initiale. Un trop grand nombre de retransmissions indique une connexion lente ou un appareil qui réagit lentement.
Tapez ce qui suit:
tcp.analysis.retransmission
Une connexion réseau entre deux appareils est établie chaque fois que l'un contacte l'autre et envoie un SYN
(synchroniser) le paquet. L'appareil récepteur envoie alors un ACK
(accusé de réception) paquet. Il indique s'il acceptera la connexion en envoyant un SYN
paquet.
SYN
et ACK
sont en fait deux drapeaux dans le même paquet. L'appareil d'origine reconnaît la SYN
en envoyant un ACK
, puis les périphériques établissent une connexion réseau.
Cela s'appelle la poignée de main à trois voies:
A -> SYN -> B A <- SYN, ACK ACK -> B
Dans la capture d'écran ci-dessous, quelqu'un sur l'ordinateur "nostromo.local" fait un Enveloppe de protection (SSH) connexion à l'ordinateur «ubuntu20-04.local». La prise de contact à trois voies est la première partie de la communication entre les deux ordinateurs. Notez que les deux lignes contenant le SYN
les paquets sont codés par couleur en gris foncé.
Faire défiler l'affichage pour afficher les colonnes à droite révèle la SYN
, SYN / ACK
, et ACK
paquets de poignée de main.
Vous remarquerez que l'échange de paquets entre les deux ordinateurs alterne entre les protocoles TCP et SSH. Les paquets de données sont transmis via la connexion SSH chiffrée, mais les paquets de messages (comme ACK
) sont envoyés via TCP. Nous filtrerons les paquets TCP sous peu.
Lorsque la connexion réseau n'est plus nécessaire, elle est supprimée. La séquence de paquets pour rompre une connexion réseau est une négociation à quatre voies.
Un côté envoie un AILETTE
(terminer) le paquet. L'autre extrémité envoie un ACK
reconnaître la AILETTE
, puis envoie également un AILETTE
pour indiquer qu'il accepte que la connexion soit interrompue. Le premier côté envoie un ACK
pour le AILETTE
il vient de recevoir, et la connexion réseau est ensuite démontée.
Voici à quoi ressemble la poignée de main à quatre voies:
A -> FIN -> B A <- FIN, ACK ACK -> B
Parfois, l'original AILETTE
ferroutages sur un ACK
paquet qui allait être envoyé de toute façon, comme indiqué ci-dessous:
A -> FIN, ACK -> B A <- FIN, ACK ACK -> B
C'est ce qui se passe dans cet exemple.
Si nous voulons voir uniquement le trafic SSH pour cette conversation, nous pouvons utiliser un filtre qui spécifie ce protocole. Nous tapons ce qui suit pour voir tout le trafic utilisant le protocole SSH vers et depuis l'ordinateur distant:
ip.addr == 192.168.4.25 && ssh
Cela filtre tout sauf le trafic SSH vers et depuis 192.168.4.25.
Lorsque vous saisissez un filtre dans la barre de filtre, il reste rouge jusqu'à ce que le filtre soit syntaxiquement correct. Il deviendra vert lorsque le filtre sera correct et complet.
Si vous saisissez un protocole, tel que TCP
, ip
, udp
, ou chut
, suivi d'un point (.
), un menu apparaît. Il répertorie les filtres récents contenant ce protocole et tous les champs pouvant être utilisés dans les filtres pour ce nom de protocole.
Par exemple, avec ip
, vous pouvez utiliser ip.addr
, ip.checksum
, ip.src
, ip.dst
, ip.id
, ip.host
Et des dizaines d'autres.
Utilisez les modèles de filtres suivants comme base de vos filtres:
http
DNS
tcp.port == 4000
http.request
! (arp ou icmp ou dns)
tcp.analysis.retransmission
SYN
ou AILETTE
): Vous devez définir une valeur de comparaison pour ceux-ci: 1
signifie que le drapeau est défini, et 0
signifie que ce n'est pas le cas. Ainsi, un exemple serait: tcp.flags.syn == 1
.Nous avons couvert certains des principes directeurs et des utilisations fondamentales des filtres d'affichage ici, mais, bien sûr, il y en a beaucoup plus.
Pour apprécier toute la portée et la puissance de Wireshark
filtres, assurez-vous de vérifier sa référence en ligne.