Reniflage de paquets réseau

Le reniflement ou le reniflage de paquets réseau est le processus de surveillance et de capture de tous les paquets passant par un réseau donné à l'aide d'outils de reniflage. C'est une forme dans laquelle, nous pouvons «brancher les fils téléphoniques» et apprendre à connaître la conversation. Il est également appeléwiretapping et peut être appliqué aux réseaux informatiques.

Il y a tellement de possibilités que si un ensemble de ports de commutation d'entreprise est ouvert, l'un de leurs employés peut renifler tout le trafic du réseau. N'importe qui dans le même emplacement physique peut se connecter au réseau à l'aide d'un câble Ethernet ou se connecter sans fil à ce réseau et renifler le trafic total.

En d'autres termes, le reniflement vous permet de voir toutes sortes de trafic, à la fois protégé et non protégé. Dans les bonnes conditions et avec les bons protocoles en place, une partie attaquante peut être en mesure de collecter des informations qui peuvent être utilisées pour d'autres attaques ou pour causer d'autres problèmes pour le réseau ou le propriétaire du système.

Que peut-on renifler?

On peut renifler les informations sensibles suivantes à partir d'un réseau -

  • Trafic des e-mails
  • Mots de passe FTP
  • Trafic Web
  • Mots de passe Telnet
  • Configuration du routeur
  • Sessions de chat
  • Trafic DNS

Comment fonctionne le reniflement?

Un sniffer met normalement la carte réseau du système en mode promiscuité afin qu'il écoute toutes les données transmises sur son segment.

Le mode promiscuous fait référence à la manière unique du matériel Ethernet, en particulier des cartes d'interface réseau (NIC), qui permet à un NIC de recevoir tout le trafic sur le réseau, même s'il n'est pas adressé à ce NIC. Par défaut, un NIC ignore tout le trafic qui ne lui est pas adressé, ce qui est fait en comparant l'adresse de destination du paquet Ethernet avec l'adresse matérielle (MAC) du périphérique. Bien que cela soit parfaitement logique pour la mise en réseau, le mode non promiscuité rend difficile l'utilisation d'un logiciel de surveillance et d'analyse du réseau pour diagnostiquer les problèmes de connectivité ou la comptabilisation du trafic.

Un sniffer peut surveiller en permanence tout le trafic vers un ordinateur via le NIC en décodant les informations encapsulées dans les paquets de données.

Types de reniflement

Le reniflement peut être de nature active ou passive. Nous allons maintenant découvrir les différents types de reniflage.

Reniflage passif

En sniffing passif, le trafic est verrouillé mais il n'est en aucun cas modifié. Le reniflement passif permet uniquement l'écoute. Cela fonctionne avec les appareils Hub. Sur un périphérique concentrateur, le trafic est envoyé à tous les ports. Dans un réseau qui utilise des concentrateurs pour connecter des systèmes, tous les hôtes du réseau peuvent voir le trafic. Par conséquent, un attaquant peut facilement capturer le trafic qui passe.

La bonne nouvelle est que les hubs sont presque devenus obsolètes ces derniers temps. La plupart des réseaux modernes utilisent des commutateurs. Par conséquent, le reniflement passif n'est pas plus efficace.

Reniflage actif

En sniffing actif, le trafic est non seulement verrouillé et surveillé, mais il peut également être modifié d'une manière déterminée par l'attaque. Le sniffing actif est utilisé pour renifler un réseau basé sur des commutateurs. Il s'agit d'injecter des paquets de résolution d'adresse (ARP) dans un réseau cible pour inonder la table de mémoire adressable par contenu de commutateur (CAM). CAM garde la trace de quel hôte est connecté à quel port.

Voici les techniques de reniflement actif -

  • Inondation MAC
  • Attaques DHCP
  • Empoisonnement DNS
  • Attaques d'usurpation d'identité
  • Empoisonnement ARP

Les effets de reniflement sur les protocoles

Des protocoles tels que le tried and true TCP/IPn'ont jamais été conçus avec la sécurité à l'esprit. De tels protocoles n'offrent pas beaucoup de résistance aux intrus potentiels. Voici les différents protocoles qui se prêtent à un reniflement facile -

HTTP

Il permet d'envoyer des informations en texte clair sans aucun cryptage et donc une véritable cible.

SMTP (protocole de transfert de courrier simple)

SMTP est utilisé dans le transfert des e-mails. Ce protocole est efficace, mais il n'inclut aucune protection contre le reniflement.

NNTP (Network News Transfer Protocol)

Il est utilisé pour tous les types de communication. Un inconvénient majeur est que les données et même les mots de passe sont envoyés sur le réseau sous forme de texte clair.

POP (protocole de bureau de poste)

POP est strictement utilisé pour recevoir des e-mails des serveurs. Ce protocole n'inclut pas de protection contre le reniflement car il peut être piégé.

FTP (protocole de transfert de fichiers)

FTP est utilisé pour envoyer et recevoir des fichiers, mais il n'offre aucune fonctionnalité de sécurité. Toutes les données sont envoyées sous forme de texte clair qui peut être facilement reniflé.

IMAP (Internet Message Access Protocol)

IMAP est identique à SMTP dans ses fonctions, mais il est très vulnérable au sniffing.

Telnet

Telnet envoie tout (noms d'utilisateur, mots de passe, frappes) sur le réseau sous forme de texte clair et par conséquent, il peut être facilement reniflé.

Les renifleurs ne sont pas les utilitaires stupides qui vous permettent d'afficher uniquement le trafic en direct. Si vous voulez vraiment analyser chaque paquet, enregistrez la capture et examinez-la chaque fois que le temps le permet.

Implémentation à l'aide de Python

Avant d'implémenter le renifleur de socket brut, comprenons le struct méthode comme décrit ci-dessous -

struct.pack (fmt, a1, a2,…)

Comme son nom l'indique, cette méthode est utilisée pour renvoyer la chaîne, qui est compressée selon le format donné. La chaîne contient les valeurs a1, a2 et ainsi de suite.

struct.unpack (fmt, chaîne)

Comme son nom l'indique, cette méthode décompresse la chaîne selon un format donné.

Dans l'exemple suivant d'en-tête IP de renifleur de socket brut, qui correspond aux 20 octets suivants du paquet et parmi ces 20 octets, nous nous intéressons aux 8 derniers octets. Les derniers octets indiquent si les adresses IP source et de destination analysent -

Maintenant, nous devons importer quelques modules de base comme suit -

import socket
import struct
import binascii

Maintenant, nous allons créer une socket, qui aura trois paramètres. Le premier paramètre nous renseigne sur l'interface des paquets - PF_PACKET pour Linux spécifique et AF_INET pour Windows; le deuxième paramètre nous indique qu'il s'agit d'une socket brute et le troisième paramètre nous indique le protocole qui nous intéresse —0x0800 utilisé pour le protocole IP.

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))

Maintenant, nous devons appeler le recvfrom() méthode pour recevoir le paquet.

while True:
   packet = s.recvfrom(2048)

Dans la ligne de code suivante, nous déchirons l'en-tête Ethernet -

ethernet_header = packet[0][0:14]

Avec la ligne de code suivante, nous analysons et décompressons l'en-tête avec le struct méthode -

eth_header = struct.unpack("!6s6s2s", ethernet_header)

La ligne de code suivante renverra un tuple avec trois valeurs hexadécimales, converties par hexify dans le binascii module -

print "Destination MAC:" + binascii.hexlify(eth_header[0]) + " Source MAC:" + binascii.hexlify(eth_header[1]) + " Type:" + binascii.hexlify(eth_header[2])

Nous pouvons maintenant obtenir l'en-tête IP en exécutant la ligne de code suivante -

ipheader = pkt[0][14:34]
ip_header = struct.unpack("!12s4s4s", ipheader)
print "Source IP:" + socket.inet_ntoa(ip_header[1]) + " Destination IP:" + socket.inet_ntoa(ip_header[2])

De même, nous pouvons également analyser l'en-tête TCP.