Madalena Couture
2 juillet 2020
Comment rendre le tapis Cricut collant à nouveau
2 juillet 2020

Câbles Ethernet connectés à un commutateur réseau.
Inara Prusakova / Shutterstock

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.

Analyse de paquets avec Real Bite

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.

Installation de Wireshark

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

sudo apt-get installe cableshark dans une fenêtre de terminal.

Sur Fedora, tapez:

sudo dnf install filshark

sudo dnf installe cableshark dans une fenêtre de terminal.

Sur Manjaro, utilisez cette commande:

sudo pacman -Syu filshark-qt

sudo pacman -Syu filshark-qt dans une fenêtre de terminal.

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 "»Et appuyez sur la barre d'espace.

Écran d'installation recommandant de ne pas exécuter Wireshark en tant que root. "Width =" 646 "height =" 381 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this .onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Sur l'écran suivant, appuyez sur Tab pour déplacer la surbrillance rouge sur "»Et appuyez sur la barre d'espace.

L'écran d'options permettant aux utilisateurs non root d'exécuter Wireshark, avec "Oui" en surbrillance. "Width =" 644 "height =" 377 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon ( this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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

sudo usermod -a -G wirehark $ USER dans une fenêtre de terminal. "width =" 646 "height =" 147 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); " onerror = "this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Vous devriez voir «Wirehark» dans la liste des groupes.

Démarrage de Wireshark

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 &

Wireshark & ​​dans une fenêtre de terminal.

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.

L'interface principale de Wheelshark. "Width =" 646 "height =" 432 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

Cliquez sur "Démarrer la capture" dans le menu contextuel. "Width =" 377 "height =" 147 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this .onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

L'aileron de requin, le carré et l'aileron de requin avec une flèche circulaire mis en évidence dans l'interface Wireshark avec une capture de paquet active. "Width =" 646 "height =" 432 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload = "pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);" onerror = "this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Les icônes en surbrillance dans l'image ci-dessus indiquent les éléments suivants, de gauche à droite:

  • Aileron de requin: S'il est bleu, cliquez dessus pour démarrer une capture de paquet. Si Wireshark capture des paquets, cette icône sera grise.
  • Carré: S'il est rouge, cliquez dessus pour arrêter une capture de paquet en cours. Si Wireshark ne capture pas de paquets, cette icône sera grise.
  • Aileron de requin avec flèche circulaire: S'il est vert, cliquez dessus pour arrêter la trace en cours d'exécution. Cela vous donne la possibilité d'enregistrer ou de supprimer les paquets capturés et de redémarrer la trace. Si Wireshark ne capture pas de paquets, cette icône sera grise.

Analyse de la trace

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.

Une trace capturée affichée dans Wireshark dans l'ordre chronologique. "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this .onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

Trace Wireshark avec les noms des périphériques résolus. "Width =" 646 "height =" 524 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

La colonne Info affichant certaines requêtes et réponses ping. "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this .onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

Ping "conversation" isolée dans l'interface Wireshark. "Width =" 645 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this .onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

Création de vos propres filtres

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.

Wireshark avec un filtre ip.addr == 192.168.4.20. "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); " onerror = "this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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

Éclat de fil avec un filtre ip.addr == 192.168.4.20. "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); " onerror = "this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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

Wireshark avec filtre http.request "width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null ; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

Wireshark avec un filtre de! (Ip.addr == 192.168.4.14). "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this ); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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

Wireshark avec un filtre TCP contient youtube. "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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

Wireshark avec un filtre tcp.analysis.retransmission. "Width =" 646 "height =" 524 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Naissance, vie, mort et cryptage

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é.

Wireshark montrant une connexion SSH entre deux ordinateurs. "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this. onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

Wireshark montrant les paquets de poignée de main à trois voies. "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this. onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

Wireshark montrant les paquets de prise de contact à quatre voies. "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this. onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

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.

Wireshark avec un filtre ip.addr == 192.168.4.25 && ssh. "Width =" 646 "height =" 525 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this) ; "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Autres modèles de filtres utiles

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.hostEt des dizaines d'autres.

Utilisez les modèles de filtres suivants comme base de vos filtres:

  • Pour afficher uniquement les paquets de protocole HTTP: http
  • Pour afficher uniquement les paquets de protocole DNS: DNS
  • Pour afficher uniquement les paquets TCP avec 4000 comme port source ou de destination: tcp.port == 4000
  • Pour afficher tous les paquets de réinitialisation TCP: http.request
  • Pour filtrer les paquets ARP, ICMP et DNS: ! (arp ou icmp ou dns)
  • Pour afficher toutes les retransmissions dans une trace: tcp.analysis.retransmission
  • Pour filtrer les indicateurs (comme 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.

//]]>