Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Hacking et Forensic
  3. Réseau : la bibliothèque Scapy
Extrait - Hacking et Forensic Développez vos propres outils en Python (2ième édition)
Extraits du livre
Hacking et Forensic Développez vos propres outils en Python (2ième édition)
3 avis
Revenir à la page d'achat du livre

Réseau : la bibliothèque Scapy

Introduction

D’après la documentation officielle (man Scapy), Scapy est un puissant programme interactif de manipulation de paquets. Il peut forger ou décoder les paquets d’un grand nombre de protocoles, les émettre, les capturer, faire correspondre des requêtes et des réponses et bien plus encore. Il permet la manipulation de la plupart des outils de scan, traceroute, de sonde, de tests unitaires, d’attaques ou de découverte de réseau (il remplace facilement hping, 85 % de nmap, arpspoof, arp-sk, arping, tcpdump, tethereal, p0f, etc.). Il se comporte également très bien sur un grand nombre de tâches qu’un grand nombre de programmes n’est pas en mesure de manipuler, comme envoyer des trames invalides, injecter vos propres trames 802.11, combiner des techniques (VLAN hopping+ARP cache poisoning, VOIP decoding sur canal chiffré en WEP...), etc.

Philippe Biondi est l’auteur de Scapy. Il est l’auteur de nombreux logiciels, la plupart écrits en langage Python. Vous trouverez l’ensemble de ses papiers, conférences et logiciels sur son site.

Scapy est un outil multi-utilisation, c’est un :

  • forgeur de paquets

  • sniffeur

  • scanneur

  • outil de test (machine/service actif)

  • outil de fingerprint

  • outil d’attaque (valeurs non prévues dans les protocoles...)

images/HF01EP03.png

Il peut remplacer de nombreux outils existants : ethereal/wireshark, tcpdump...

Programmation réseau avec Scapy

1. Liste des protocoles supportés

Scapy va nous permettre de travailler sur de nombreux protocoles. Vous trouverez ci-dessous la liste des protocoles supportés par Scapy.

Si vous souhaitez connaître tous les protocoles utilisés, il suffira, dès que vous aurez lancé Scapy (se mettre en console shell puis taper scapy), d’effectuer la commande ls(IP).

ARP : ARP

ASN1_Packet : None

BOOTP : BOOTP

CookedLinux? : cooked linux

DHCP : DHCP options

DNS : DNS

DNSQR : DNS Question Record

DNSRR : DNS Resource Record

Dot11 : 802.11

Dot11ATIM : 802.11 ATIM

Dot11AssoReq : 802.11 Association Request

Dot11AssoResp : 802.11 Association Response

Dot11Auth : 802.11 Authentication

Dot11Beacon : 802.11 Beacon

Dot11Deauth : 802.11 Deauthentication

Dot11Disas : 802.11 Disassociation

Dot11Elt : 802.11 Information Element

Dot11ProbeReq : 802.11 Probe Request

Dot11ProbeResp : 802.11 Probe Response

Dot11ReassoReq : 802.11 Reassociation Request

Dot11ReassoResp : 802.11 Reassociation Response

Dot11WEP : 802.11 WEP packet

Dot1Q : 802.1Q

Dot3 : 802.3

EAP : EAP

EAPOL : EAPOL

Ether : Ethernet

GPRS : GPRSdummy

GRE : GRE

HCI_ACL_Hdr : HCI ACL header

HCI_Hdr : HCI header

HSRP : HSRP

ICMP : ICMP

ICMPerror : ICMP in ICMP

IP : IP

IPerror : IP in ICMP

IPv6 : IPv6 not implemented here.

ISAKMP : ISAKMP

ISAKMP_class : None

ISAKMP_payload : ISAKMP payload

ISAKMP_payload_Hash : ISAKMP Hash

ISAKMP_payload_ID : ISAKMP Identification

ISAKMP_payload_KE : ISAKMP Key Exchange

ISAKMP_payload_Nonce : ISAKMP Nonce

ISAKMP_payload_Proposal : IKE proposal

ISAKMP_payload_SA : ISAKMP SA

ISAKMP_payload_Transform : IKE Transform

ISAKMP_payload_VendorID : ISAKMP Vendor ID

IrLAPCommand : IrDA Link Access Protocol Command

IrLAPHead : IrDA Link Access Protocol Header

IrLMP : IrDA Link Management Protocol

L2CAP_CmdHdr : L2CAP command header

L2CAP_CmdRej : L2CAP Command Rej

L2CAP_ConfReq : L2CAP Conf Req

L2CAP_ConfResp : L2CAP Conf Resp

L2CAP_ConnReq : L2CAP Conn Req

L2CAP_ConnResp : L2CAP Conn Resp

L2CAP_DisconnReq : L2CAP Disconn Req

L2CAP_DisconnResp : L2CAP Disconn Resp

L2CAP_Hdr : L2CAP header

L2CAP_InfoReq : L2CAP Info Req

L2CAP_InfoResp : L2CAP Info Resp

LLC : LLC

MGCP : MGCP

MobileIP : Mobile IP (RFC 3344)

MobileIPRRP : Mobile IP Registration Reply (RFC 3344)

MobileIPRRQ : Mobile IP Registration Request (RFC 3344)

MobileIPTunnelData : Mobile IP Tunnel Data Message (RFC 3519)

NBNSNodeStatusResponse : NBNS Node Status Response

NBNSNodeStatusResponseEnd...

Scapy et IPv6

1. Notion d’IPv6

a. Généralités

Le nombre d’adresses IPv4 disponibles est limité à 4 294 967 296 soit 232. À l’époque, ce nombre ne semblait jamais pouvoir être atteint.

En 1992, ces adresses IP sont ouvertes au commerce sur l’Internet.

Une année plus tard, nous assistons au déclenchement du plan d’urgence car il n’y a plus aucune classe B disponible :

  • Il y a donc création de la notation CIDR, d’où une diminution du gaspillage de l’espace d’adressage et une diminution de la taille des tables de routage.

  • On procède à la création et la mise en place d’un plan d’adressage privé et du NAT.

Les mesures techniques induisent des contraintes et de nouveaux problèmes, les protocoles dynamiques doivent être traités indépendamment (ex : FTP) et une couche de sécurité est obligatoire pour assurer l’intégrité de la confidentialité.

Une première mouture de l’IPv6 est proposée en 1995 pour une version finale en 1998.

Le RIPE annonce la fin de la distribution de l’IPv4 en février 2011 (pour l’IANA) et la fin de la distribution en novembre pour les représentants régionaux de l’IANA.

L’IPv6 est codé sur 128 bits (32 pour IPv4), ses 64 bits de poids fort représentent le réseau et ses 64 bits de poids faible représentent l’identification des hôtes.

Les adresses sont représentées sous la forme de 8 digits hexadécimaux, chaque digit représentant 16 bits sous forme hexadécimale.

b. IPv6 : RFC 2373

Les adresses IP peuvent s’écrire sous cette forme :

  • 2001:470:1f14:10b9:0000:0000:0000:2

  • 2001:470:1F14:10b9::2

L’écriture d’un ensemble de zéros contigus peut être simplifiée mais pas plus d’une fois sur une adresse :

  • 2:0000:0000:0000:2:0000:0000:2

  • 2::2::2 => pas valide

  • 2::2:0000:0000:2 => valide

  • 2:0000:0000:0000:2::2 => valide

Partie réseau

Les adresses sont structurées selon un modèle dit agrégé.

La notation utilisée pour caractériser les agrégats...

Quelques autres exemples

Nous souhaitons sniffer les paquets TCP sur le port 80 de la machine et afficher le résultat à l’écran.

images/HF07EP03.png

Nous souhaitons maintenant appliquer une fonction à chaque paquet reçu. Nous pourrons utiliser la variable prn qui va nous servir à appliquer une fonction a sur chaque paquet. Nous pourrons bien sûr utiliser une fonction lambda pour nous aider.

Nous aurons besoin d’effectuer un MITM (Man in the Middle, homme du milieu) pour tester le réseau dans un audit. Il existe bien sûr des logiciels spécialisés, mais nous avons la possibilité de le faire avec Scapy. Cette technique du MITM passe par de l’ARP cache poisoning.

Lors d’une attaque de type ARP poisoning, le pirate va se glisser entre les données envoyées par l’utilisateur et le routeur.

images/HF09EP03.png

Il nous faut utiliser le protocole ARP, d’où l’utilisation de la fonction ARP() aves les paramètres suivants :

  • requête ARP (1).

  • dst : adresse MAC de destination (si besoin).

  • hwsrc : adresse MAC que vous voulez mettre dans la table ARP distante (attaquant).

  • pdst : adresse IP de la machine distante dont vous voulez infecter la table ARP (victime).

  • psrc : adresse IP de la passerelle.

images/HF10EP03.png

Il nous faut maintenant mettre notre machine en mode forward IP (/proc/sys/net/ipv4/ip_forward) et lancer le script ci-dessus ainsi qu’un sniffer (en Scapy ou directement...

Conclusion

Nous venons de découvrir les principales fonctionnalités de Scapy. Il en existe bien d’autres et si vous souhaitez approfondir vos connaissances, vous pourrez trouver sur le Net des documentations, des exemples d’utilisation.

Seule votre imagination pourra vous brider dans l’utilisation de Scapy, c’est un outil puissant, plein de ressources, et seule son utilisation fréquente vous permettra d’en maîtriser les méandres.

Mise en pratique

1. Canal caché IP

Énoncé

Prérequis : Python, Scapy, notion de réseau

But : réaliser un script Python qui utilise un canal caché IP.

Énoncé :

Un canal caché IP (covert channel IP) est un canal de communication entre deux ordinateurs qui utilise la bande passante d’un autre canal dans l’objectif de transmettre des informations sans l’autorisation ou la connaissance du propriétaire de l’information ou de l’administrateur du réseau.

Grâce à Scapy, réalisez ce script Python.

Correction

chap3_exo2.py


#!/usr/bin/env python  
# -*- coding: iso-8859-15 -*-  
 
from scapy.all import *  
conf.verb=0  
 
def traitePaquet(p):  
        if p[IP].ttl > 230:  
                print ""  
                sys.exit(0)  
        sys.stdout.write(chr(p[IP].id))  
 
sniff(  
        filter = "icmp and src //@victim//",  
        lfilter = lambda p: p.haslayer(ICMP) and p[IP].id < 256, 
        prn = traitePaquet,  
                                 #}Pour le traitement en live 
                                 store = 0,   
                                 #}  
) 
 

2. Détection de Rogue AP

Énoncé

Prérequis : Python, Scapy...