Le reniflage de paquets et l’usurpation d’identité sont deux menaces en constante évolution dans le domaine de la sécurité des réseaux. Il existe de nombreux outils de détection et d'usurpation de paquets, tels que Wireshark, tcpdump, netwox, etc. Certains de ces outils sont largement utilisés par les experts en sécurité, ainsi que par les attaquants. Être capable d'utiliser ces outils est important, mais ce qui est plus important en matière de sécurité réseau est de comprendre comment ces outils fonctionnent, c'est-à-dire comment le reniflage et l'usurpation de paquets sont implémentés dans les logiciels.
Vous trouverez ci-dessous un simple programme de renifleur qui utilise Scapy :
from scapy . all import *
print ( "SNIFFING PACKETS" )
def print_pkt ( pkt ):
print ( "Source IP:" , pkt [ IP ]. src )
print ( "Destination IP:" , pkt [ IP ]. dst )
print ( "Protocol:" , pkt [ IP ]. proto )
print ( " n " )
pkt = sniff ( filter = 'icmp' , prn = print_pkt )
Dans le code ci-dessus, pour chaque paquet capturé, la fonction de rappel print_pkt()
sera invoquée ; cette fonction imprimera certaines informations du paquet.
Lors du reniflage de paquets, certains types de paquets peuvent présenter un intérêt accru. Il est possible de sélectionner uniquement certains paquets en définissant des filtres lors de la conception d'un renifleur. Le filtrage de Scapy utilise la syntaxe BPF (Berkeley Packet Filter).
Exemples de filtrage possible avec Scapy :
128.200.0.0/16
En tant qu'outil d'usurpation de paquets, Scapy permet de définir des valeurs arbitraires dans les champs de différents en-têtes de paquets. Par exemple, l'usurpation d'adresse IP peut être utilisée par une partie malveillante pour lancer une attaque DDoS contre une cible. L'usurpation d'adresse IP est la création de paquets IP dont l'adresse source est modifiée soit pour dissimuler l'identité de l'expéditeur, soit pour usurper l'identité d'une autre entité du réseau (un système informatique, un centre de données, etc.), ou les deux.
Usurer un paquet ICMP
from scapy . all import *
print ( "SENDING SPOOFED ICMP PACKET" )
ip = IP ( src = "1.2.3.4" , dst = "93.184.216.34" ) # IP Layer
icmp = ICMP () # ICMP Layer
pkt = ip / icmp # Construct the complete packet
pkt . show ()
send ( pkt , verbose = 0 )
Usurer des paquets UDP
from scapy . all import *
print ( "SENDING SPOOFED UDP PACKET" )
ip = IP ( src = "1.2.3.4" , dst = "10.0.2.69" ) # IP Layer
udp = UDP ( sport = 8888 , dport = 9090 ) # UDP Layer
data = "Hello UDP! n " # Payload
pkt = ip / udp / data # Construct the complete packet
pkt . show ()
send ( pkt , verbose = 0 )
Combinez les techniques de reniflage et d'usurpation d'identité pour implémenter un programme de détection puis d'usurpation d'identité. Besoin de deux VM sur le même LAN. Depuis la VM A, envoyez une requête ping à une IP X. Cette action génère un paquet de demande d'écho ICMP. Si X est vivant, le programme ping recevra une réponse d'écho et imprimera la réponse. Le programme de détection puis d'usurpation d'identité s'exécute sur la VM B, qui surveille le réseau local via le reniflage de paquets. Chaque fois qu'il voit une demande d'écho ICMP, quelle que soit l'adresse IP cible, le programme envoie immédiatement une réponse d'écho en utilisant la technique d'usurpation de paquet. Par conséquent, que la machine X soit vivante ou non, le programme ping recevra toujours une réponse indiquant que X est vivant.
IP ()
IP (). show ()
IP () / ICMP ()
p = IP () / ICMP ()
p . show ()
p = IP () / UDP ()
p . show ()
p = IP () / UDP () / "This is my UDP packet"
p . show ()
send ( IP () / UDP () / "This is my UDP packet" )
send ( IP ( dst = '10.0.2.7' ) / UDP () / "This is my UDP packet" )
Merci pour votre intérêt, ce projet était amusant et perspicace !