Quelle est la procédure de réception et de traitement des paquets Wireshark sur une machine Windows?

20

Je suis sur le point d'utiliser Wireshark pour la surveillance du trafic sur mon ordinateur Windows . Pendant que j'y travaillais, je me demandais comment Wireshark parvient à intercepter les paquets réseau de bas niveau avant que Windows ne le fasse.

Tout d'abord, une interface réseau sur ma carte réseau reçoit un paquet. Le NIC effectue ensuite quelques vérifications initiales (CRC, bonne adresse MAC, ... etc.). En supposant que la vérification a réussi, la carte réseau transfère le paquet. Mais comment et où?

Je comprends que les pilotes sont la colle entre la carte réseau et le système d'exploitation ou toute autre application. Je suppose en outre qu'il existe un pilote distinct pour Windows et Wireshark ( WinPcap ?). Sinon, Wireshark ne pourrait pas recevoir de trames Ethernet . Y a-t-il deux pilotes NIC ou plus coexistant en même temps? Comment la carte réseau sait-elle laquelle utiliser?

Hansi
la source
Votre prémisse est incorrecte. La carte réseau remet toujours le paquet à Windows (en particulier, au pilote de périphérique, puis à la pile réseau), et c'est à Windows de décider quoi en faire. Windows a une fonctionnalité où un programme peut demander à recevoir des copies des paquets "tels qu'ils étaient sur le fil", peut-être en appliquant un filtre, et Wireshark utilise cette fonctionnalité. Wireshark ne contourne pas Windows.
zwol
(Il existe des systèmes d'exploitation expérimentaux qui tentent d'améliorer la mise en réseau à très haut débit en permettant la livraison directe des paquets de la carte réseau à l'application, mais AFAIK Windows ne peut pas le faire: vous passez toujours au moins par la couche NDIS.)
zwol

Réponses:

38

Le modèle d'E / S dans Windows est basé sur une pile de composants. Les données doivent circuler à travers les différents composants de cette pile qui existe entre la carte réseau physique et l'application qui consommera les données. Parfois, ces divers composants inspectent les données (un paquet TCP par exemple) au fur et à mesure qu'elles traversent la pile, et en fonction du contenu de ce paquet, les données peuvent être modifiées ou le paquet peut être entièrement rejeté.

Pile réseau

Il s'agit d'un modèle simplifié de la "pile réseau" que traversent les paquets pour passer de l'application au fil et vice versa.

L'un des composants les plus intéressants présentés dans la capture d'écran ci-dessus est l'API d'appel de WFP (Windows Filtering Platform). Si nous zoomions dessus, cela pourrait ressembler à ceci:

Plateforme de filtrage Windows

Les développeurs sont libres de brancher leurs propres modules aux endroits appropriés de cette pile. Par exemple, les produits antivirus utilisent généralement un «pilote de filtre» qui se connecte à ce modèle et inspecte le trafic réseau ou fournit des fonctionnalités de pare-feu. Le service Pare-feu Windows s'intègre bien entendu également à ce modèle.

Si vous vouliez écrire une application qui enregistre le trafic réseau, comme Wireshark, alors la façon appropriée de le faire serait d'utiliser votre propre pilote et de l'insérer dans la pile aussi bas que possible afin qu'il puisse détecter les paquets réseau avant que votre module de pare-feu ait une chance de les supprimer.

Il y a donc de nombreux «pilotes» impliqués dans ce processus. De nombreux types de pilotes également. En outre, d'autres formes d'entrée / sortie sur le système, telles que les lectures et les écritures sur le disque dur, suivent des modèles très similaires.

Autre remarque: les légendes du PAM ne sont pas le seul moyen de vous insinuer dans la pile réseau. WinPCap, par exemple, s'interface avec NDIS directement avec un pilote, ce qui signifie qu'il a la possibilité d'intercepter le trafic avant que le filtrage n'ait eu lieu.

Pilotes NDIS

WinPCap

Les références:

Pile TCP / IP nouvelle génération dans Vista +

Architecture de la plateforme de filtrage Windows

Ryan Ries
la source
3
Diagrammes exceptionnels. Sont-ils publiés sur microsoft.com quelque part? Si oui, j'aimerais fouiller et voir quelles autres informations sont disponibles à côté de celles-ci.
EEAA
1
Réponse parfaite. Bien et facile expliqué, visualisation impressionnante et sources fournies! Merci beaucoup!
Hansi
1
+1, il convient de mentionner qu'il existe un pilote open source intégré au WFP qui rend trivial l'écriture de telles applications appelées WinDivert . J'ai également écrit un wrapper .NET pour cela.
1
Auparavant, il y avait quelque chose appelé le «fournisseur de services en couches» - où vous pouviez intercepter et réécrire des paquets - y a-t-il un remplacement pour cette capacité? Fait-il partie de l'API de "filtrage"? (Oh, attendez, peu importe: je viens de regarder le lien WinDivert de @TechnikEmpire et je vois que c'est possible.)
davidbak
1
@davidbak oui, WinDivert est une sorte d'hybride. Les API des pilotes de légende sont destinées aux développeurs de créer des pilotes spécifiques qui peuvent faire autre chose que de simplement supprimer un paquet (ne nécessite aucun pilote). WinDivert est un tel pilote mais il est générique, offrant un accès complet aux paquets en poussant et en faisant sauter des paquets dans et hors du noyau et de l'espace en mode utilisateur.
3

Comme le dit la réponse de Ryan Ries:

WinPCap, par exemple, s'interface avec NDIS directement avec un pilote, ce qui signifie qu'il a la possibilité d'intercepter le trafic avant que le filtrage n'ait eu lieu.

et ceci est une description, dans la documentation WinPcap, de la façon dont cela fonctionne .


la source
Cela aurait été mieux en tant que modification de la réponse de Ryan. Ce n'est pas une réponse à part entière.
Courses de légèreté avec Monica
2
En fait, oui, il est une réponse à sa question - plus que la réponse de Ryan. La question était "comment fait Wireshark"; La réponse de Ryan donne beaucoup d'informations sur un mécanisme que WinPcap (qui est utilisé par Wireshark) n'utilise pas , donc c'est certainement intéressant, mais pas pertinent pour la question d'origine. Le lien que j'ai publié décrit comment WinPcap le fait, ce qui est pertinent pour la question d'origine.
7
Peut-être que si vous aviez cité et expliqué les passages pertinents de la ressource tierce. Si rien d'autre, une réponse de lien uniquement n'est pas une réponse. C'est la politique SE. Tout ce que votre réponse ajoute à cette page est, littéralement, "il y a une description du fonctionnement de la réponse de Ries ailleurs sur Internet"
Lightness Races avec Monica