M4210-TP2
TP2 : Scapy
Rushed Kanawati
13 mars 2017
Ce TP est `a r´ealiser en binˆome. Chaque binˆome dispose de trois machines Linux. Un seul rapport
est `a rendre `a la fin de la s´eance
esum´e
L’objectif de ce TP est de se familiariser avec l’outil scapy : un outil de forge de paquets
r´eseaux fr´equemment utilis´e pour l’audit de s´ecurit´e des r´eseaux. Les outils `a utiliser sont :
scapy, python et wireshark
Scapy
Description g´en´erale
scapy est une biblioth`eque de manipulation de paquets r´eseaux ´ecrit en python. Il permet
notamment de :
Forger des PDU de principaux protocoles : ethernet, IP, ICMP, ARP, UDP, TCP, . . . ; etc.
L’extension pour repr´esenter d’autres PDU est aussi possible. L’outil donne acc`es `a tous les
champs de donn´ees et de contrˆole d’un PDU permettant ainsi de g´en´erer des PDU correctes
ou erron´es.
Capturer et analyser du trafic r´eseau.
Ecrire des scripts permettant de g´en´erer, capturer et analyser des grandes quantit´es de PDU.
Ceci est souvent utils pour mettre en place des attaques r´eseaux sophistiqu´ees. Ces scripts
peuvent servir lors d’´etudes d’audit de la s´ecurit´e d’un syst`eme.
Mini guide d’utilisation
Commencer par installer la biblioth`eque scapy sur chacune des machines
sudo apt-get install scapy
Dans un interpr´eteur python (ex´ecut´e en mode root) importer le paquetage scapy.all
sudo python
Python 2.7.6 (v2.7.6 :3a1db0d2747e, Nov 10 2013, 00 :42 :54)
Type ”help”, ”copyright”, ”credits” or ”license” for more information.
>>> from scapy.all import *
1
M4210-TP2
La g´en´eration d’un PDU passe par l’invocation d’un constructeur du protocole demand´e. Par
exemple : ip =IP() g´en`ere un paquet IP avec la configuration par d´efaut.
La comande ls() liste l’ensemble des protocoles support´es par scapy
La commande ls(PDU()) montre les champs disponibles d’un PDU (par exemple ls(IP())
donne les champs d’un paquets IP.
L’acc`es `a un champ d’un PDU passe par la notation objet usuelle ou lors de la construction.
Exemple :
i p=IP ( )
ip . t t l =70
ip = IP ( t t l =70)
La m´ethode show permet d’afficher la configuration actuelle d’un PDU.
i p=IP ( )
ip . t t l =70
i p . show ( )
###[ IP ]###
v e r s i o n = 4
i h l = None
t o s = 0 x0
l e n = None
id = 1
f l a g s =
f r a g = 0
t t l = 70
pro to = ip
chksum = None
s r c = 1 2 7 . 0 . 0 . 1
dst = 1 2 7 . 0 . 0 . 1
\o p t i o n s \
L’encapsulation se fait par l’op´erateur /. Exemple : IP()/ICMP()
send(pkts, inter=0, loop=0, verbose=None) permet d’envoyer un paquet au niveau 3,
inter est le temps entre deux paquets, loop permet d’envoyer les paquets en boucle si 6= 0.
sendp est l’´equivalent de send mais au niveau 2.
sr, stp, sr1, srp1 sont des primitives d’envoi et de r´eception de r´eponses au niveau 3 et
2. Les primitives avec 1 donnent seulement le premier paquet re¸cu comme r´eponse.
srloop : pour envoyer et recevoir en boucle.
sniff permet de capturer des paquets en trafic.
2
M4210-TP2
Scapy : Prise en main
1Relever la configuration par d´efaut des PDU g´en´er´es par scapy pour les protocoles suivants :
ARP, IP, ICMP, TCP.
2Donner une instruction qui permet d’envoyer le paquet ICMP g´en´er´e par d´efaut.
3Donner un script python/scapy qui permet d’envoyer un paquet ICMP ECHO-request `a partir
de P C1`a P C3mais en usurpant l’adresse de P C2. Relever et justifier le trafic induit par
l’envoi de ce paquet.
4Donner un script python/scapy qui implement un simple op´eration de ping. Le script accepte
un seul argument : l’adresse destination. Il consiste `a envoyer un seul paquet ICMP echo
request. Si la machine destination r´eponds avec un paquet ICMP echo-reply le script affiche
le message destination up sinon il affiche destination unreachable.
5Modifier le script pr´ec´edent de sort `a utiliser l’op´eration timestamp request pour r´ealiser le
ping (type 13, r´eponse type 14)
6D´evelopper et tester un script python/scapy qui permet de tracer la route vers une machine
destination (indication : augmenter le TTL d’un paquet ICMP echo request progressivement)
Attaques DoS
1D´evelopper et tester un script python/scapy qui permet de r´ealiser l’attaque ping de la mort
2D´evelopper et tester un script python/scapy qui permet de r´ealiser une attaque de type land
3D´evelopper et tester un script python/scapy qui permet de r´ealiser une attaque de type
Teardrops
Autres attaques
1R´ealiser et tester un script d’attaque par saturation en envoyant un rafale de segments SYN.
2R´ealiser et tester une attaque de type arp spoofing sur P C3pour permettre `a P C2d’inter-
cepter le trafic de P C3vers P C1.
Attaque de balayage
Nous nous int´eressons ici `a d´evelopper des scripts python/scapy qui implantent les commandes
nmap suivantes :
1nmap -sS destination
2nmap -sX destination
3
M4210-TP2
Python : rappel
python est un langage de script largement utilis´e des des tˆaches d’administration syst`emes et
pour le prototype rapide d’application. Python est un langage `a typage dynamique avec une syntaxe
tr`es simple.
Types de donn´ees
i=3est un entier
i=3.0 est un r´eel (float).
i="33" est une chaine de caract`eres.
t=(5,6) est un tuple non modifiable
l=[1, 3, 5, [6], (6,7) ] est une liste d’´el´ements (h´et´erog`enes)
d={"one":1, "two":2}est un dictionnaire.
Structures de contrˆole
i f cond :
i n s t r u c t i o n 1
i n s t r u c t i o n 2
e l i f cond :
i n s t r u c t i o n 1
i n s t r u c t i o n 2
e l s e :
i n s t r u c t i o n 1
i n s t r u c t i o n 2
w h i l e c o l d :
i n s t r u c t i o n 1
i n s t r u c t i o n 2
f o r i in range ( 1 0 ) :
i n s t r u c t i o n 1
i n s t r u c t i o n 2
d ef f on c ( param ) :
c or p s de l a f o n c t i o n
Quelques modules utils
import sys
import random
p r in t sys . argv [ 0 ] # a f f i c h e r l e nom du s c r i p t
p r i n t s y s . argv [ 1 ] # a f f i c g e r l e premierargument
4
M4210-TP2
r=random . r a n d i n t ( 1 , 1 0 0 ) # g´e n ´e r e r un nombre e n t i e r a l ´e a t o i r e e n t r e 1 e t 100
5
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !