Scapy

Scapy est un outil Open Source écrit par Philippe Biondi.

Cet utilitaire permet de manipuler, forger, décoder, émettre, recevoir les paquets d’une multitude de protocoles (ARP, DHCP, DNS, ICMP, IP…).

Il peut facilement manipuler la plupart des tâches classiques comme le scan, traceroute, des investigations, des attaques ou la découverte de réseaux (il peut remplacer hping, une infime partie de nmap, arpspoof, arp-sk, arping, tcpdump, WireShark, p0f, etc).

Il permet d’exécuter des tâches spécifiques que la plupart des autres outils ne sont pas capables de traiter, comme envoyer des trames invalides, injecter ses propres trames 802.11, combiner des techniques (VLAN hopping+ARP cache poisoning, VOIP decoding sur canal chiffré en WEP…).

La force de Scapy

Dans un premier temps, il est intéressant de savoir que la plupart des outils réseaux ne permettent pas d’effectuer des choses auxquelles l’auteur n’a pas pensé. Ces derniers ont un but précis et ne peuvent que très rarement en être dévié. Prenons l’exemple d’un outil d’empoisonnement de cache ARP, ce dernier ne nous laissera pas utiliser une double encapsulation de type 802.1Q.

Dans un second temps, ils confondent souvent le décodage et l’interprétation. Les machines sont douées pour décoder tandis que l’interprétation est réservée aux êtres humains. Certains programmes essaient d’imiter ce comportement. Par exemple, ils disent « ce port est ouvert » au lieu de « J’ai reçu un SYN-ACK ». Cela est plus facile pour les débutants, mais si vous êtes un bidouilleur dans l’âme, vous allez essayer de savoir ce que le programme a réellement voulu faire. Du coup on ressort son tcpdump à décoder et à interpréter ce que l’outil ne nous a pas indiqué.

Pour finir, même les programmes qui ne font que décoder, ne vous donnent pas tous les renseignements qu’ils ont reçu. Vous avez simplement ce que l’auteur a bien voulu vous faire voir. Par exemple, il est difficile de trouver un outil indiquant le padding (bits de bourrage) d’une trame Ethernet car cela n’est pas forcement utile (quoique ;)).

Scapy tente de résoudre ces différents problèmes et vous permet d’établir précisément les paquets que vous voulez.

C’est un modèle flexible, qui cherche à éviter de telles limites arbitraires. Vous êtes libre de mettre n’importe quelle valeur dans n’importe quel domaine, et de les empiler comme vous le voulez.

Après une sonde (scan, traceroute, etc) Scapy vous donne avant toute interprétation, le décodage complet des paquets.

Le réel avantage vient du fait que la construction d’un nouvel outil réseau demanderait au minimum une centaine de lignes en langage C. Scapy quand à lui n’en aura besoin que de 2.

Conception rapide de paquets

Le paradigme de Scapy est de proposer un « Domain Specific Language » (DSL) permettant une rapide et puissante description pour tout type de paquet. L’utilisation de la syntaxe et de l’interpréteur DSL a plusieurs avantages :

Il n’est pas nécessaire d’écrire un interpréteur séparé, les utilisateurs n’ont pas besoin d’apprendre un autre langage car ils en bénéficient d’un complet, concis et très puissant.

Scapy permet à l’utilisateur de décrire un paquet ou un ensemble de paquets pour les différentes couches. Les champs de chaque couches ont des valeurs utiles par défaut. Ces dernières peuvent être surchargées.

Scapy n’oblige pas l’utilisateur à utiliser des méthodes ou modèles préétablis. Cela permet de faciliter l’écriture pour un nouvel outil réseau.

En C, il faut environ une soixantaines de lignes pour décrire un paquet. Avec Scapy, les paquets à envoyer peuvent être décrits dans une seule ligne avec une autre ligne pour afficher le résultat. Énormément d’outils réseaux peuvent être réécrits en 2 lignes de Scapy.

Probe Once, interpet many

La découverte réseaux se nomme « test boîte noire » (condition réelle d’intrusion de l’extérieur). Quand l’on scan un réseau, de nombreux stimuli sont transmis alors que seulement un petit nombre d’entre eux sont des réponses. Si le bon stimuli est choisi, l’information désirée peut-être obtenue par des réponses ou l’absence de réponses. Contrairement à de nombreux outils, Scapy donne toutes les informations, c’est-à-dire tous les stimulis envoyés et toutes les réponses reçues. L’examen de ces données permet de fournir à l’utilisateur l’information désirée.

Scapy décode mais n’interprète pas

Le problème des outils de sonde est qu’ils tentent d’interpréter les réponses reçues au lieu de simplement décoder et de donner les faits.

Exemple :

 Version complète d'un message -> "Received a TCP Reset on port 80" Version interprétée d'un message -> "Port 80 is closed"

En effet, « Port 80 is closed » est une interprétation la plupart du temps.

Par exemple, certains scanners ont tendance à déclarer un port TCP filtré quand ils reçoivent un paquet ICMP de destination inaccessible alors que dans certains cas, cela signifie que le paquet n’a pas été filtré par le pare-feu, mais il n’y a pas d’hôte pour transmettre le paquet.

Interpréter les résultats permet d’aider les utilisateurs qui ne savent pas ce qu’est un scan de port, mais il peut aussi faire plus de mal que de bien.

Le problème vient en général du fait qu’ils fassent eux mêmes l’interprétation. Les utilisateurs confirmés vont essayer de faire du « reverse engineering » de l’outil d’interprétation pour déterminer les faits qui ont déclenché cette interprétation. Malheureusement, beaucoup d’informations seront perdues dans cette opération.

Démonstration

Nous allons démarrer Scapy lié à une session lestutosdenico et afficher la liste des protocoles supportés :

#scapy -s lestutosdenico
INFO: New session [lestutosdenico]
Welcome to Scapy (v2.1.0)

>>> ls()
ARP  : ARP
BOOTP  : BOOTP
CookedLinux : cooked linux
DHCP  : DHCP options
DNS  : DNS
DNSQR  : DNS Question Record
DNSRR  : DNS Resource Record

Manipulons quelques paquets :

>>> IP()<IP |>>>> a=IP(dst= »192.168.0.100″)
>>> a
<IP dst=192.168.0.100 |>
>>> a.dst
‘192.168.0.100’
>>> a.ttl64

Téléchargement

Télécharger Scapy 2.1.0

Installation

#apt-get install python
#tar zxvf scapy-latest.tar.gz
#cd scapy-2.1.0
#python setup.py install

Pour de plus amples informations sur Scapy, veuillez consulter les liens ci-dessous :

http://dl.afpy.org/pycon-fr-08/slides/renaud-lifchitz-scapy.pdf
http://www.secdev.org/projects/scapy/doc/
http://www.secdev.org/projects/scapy/doc/usage.html#interactive-tutorial

6 Responses to "Scapy"

Laissez un commentaire