Ipdecap: supprimer l'encapsulation de paquets pcap

English version us flag

Présentation

Ipdcap est un outil permettant de “désencapsuler” les paquets encapsulés par les protocoles GRE, IPIP, 6in4 ou ESP (Ipsec), et peut également supprimer les entêtes IEEE 802.1Q (virtual lan)

Les paquets sont lus depuis un fichier pcap, éventuellement déchiffrées (ESP), puis écrits dans un autre fichier pcap.

Les buts recherchés sont:

  • Extraire les flux réseaux encapsulés pour les soumettre à des outils tcp conventionnels (tcptrace, tcpflow, …)
  • Réduire la taille d’un fichier pcap en supprimant le protocole d’encapsulation

A l’origine ipdecap a été écrit pour étudier un flux tcp traversant un tunnel IPSec, sans intervenir sur les équipements d’entrée et de sortie du tunnel.

Téléchargement

Dévelopement

  • Projet GitHub pour les patchs, bugs, …
  • Si possible, fournissez le fichier pcap ou la configuration ESP utilisé

Illustrations

        GRE packet
     +----------------+
     |   IP header    |
     +----------------+
     |   GRE header   |
     +----------------+
     |+--------------+|                            +--------------+
     ||  IP header   ||                            |  IP header   |
     |+--------------+|  +-------ipdecap-------->  +--------------+
     ||   Payload    ||                            |   Payload    |
     |+--------------+|                            +--------------+
     +----------------+


    IPSec packet (tunnel mode)
       +----------------+
       |   IP header    |
       +----------------+
       |   ESP header   |
       +----------------+
       |+--------------+|                            +--------------+
       ||  IP header   ||                            |  IP header   |
       |+--------------+|  +-------ipdecap-------->  +--------------+
       ||   Payload    ||                            |   Payload    |
       |+--------------+|                            +--------------+
       +----------------+
       |  ESP trailer   |
       +----------------+
       |    ESP auth    |
      +----------------+

Vu par Wireshark, avant et après traitement par ipdecap:

wireshark

  • bleu Métadonnées pcap + entête ethernet: copiés vers le paquet final
  • rouge Protocole d’encapsulation (ici ESP): supprimé
  • vert Charge utile (ici paquet tcp), déchiffré (clés nécessaires) puis copié vers le paquet final

Utilisation

En ligne de commande:

  • Un fichier pcap en entrée
  • Un fichier pcap de sortie
  • Un fichier de configuration, contenant les informations nécessaires au déchiffrement de protocoles d’encapsulation comme ESP
  • Eventuellement un filtre au format bpf limitant les paquets à traiter.
Ipdecap 0.5, decapsulate GRE, IPIP, 6in4, ESP packets, remove 802.1Q header - Loic Pefferkorn
Usage
    ipdecap [-v] [-l] [-V] -i input.cap -o output.cap [-c esp.conf] [-f <bpf filter>]
Options:
  -c, --conf     configuration file for ESP parameters (IP addresses, algorithms, ... (see man ipdecap)
  -h, --help     this help message
  -i, --input    pcap file to process
  -o, --output   pcap file with decapsulated data
  -f, --filter   only process packets matching the bpf filter
  -l, --list     list availables ESP encryption and authentication algorithms
  -V, --version  print version
  -v, --verbose  verbose
  • Pour traiter les protocoles GRE, IPIP, 6in4 et 802.1Q, seuls les paramètres -i et -o sont obligatoires.

Exemples

  • Enlever l’encapsulation GRE des paquets lus depuis gre.cap, écrire les paquets dans sortie.cap

    $ ipdecap -i entree_gre.cap -o sortie.cap
    
  • Enlever l’encapsulation ESP, configuration dans le fichier esp.conf

    $ ipdecap -i esp.cap -o output.cap -c esp.conf
    
  • Enlever l’encapsulation IPIP, mais seulement pour le traffic entre 192.168.2.100 and 192.168.2.101

    ipdecap -i ipip.cap -o output.cap -f "src 192.168.2.100 and dst 192.168.2.101"
    

Fichier de configuration ESP

  • C’est un fichier texte contenant les informations nécessaires au déchiffrements du protocole ESP (IPs, algorithmes, clés, spi, hôtes)

Format

  • Une ligne par flux

    <ip a> <ip b> <algorithme chiffrement> <algorithme authentification> <clé (hexadécimal)> <spi (hexadécimal)
    
  • Le séparateur est une espace ou une tabulation.

Exemples

  • Chiffrement avec 3des-cbc, authentification par hmac-sha1, entre 192.168.0.1 et 192.168.0.9, déchiffrement bi-directionnel ~~~ 192.168.0.1 192.168.0.9 3des-cbc hmac_sha1-96 0x621b2908eb34d1e99198dd889d3deca765311a0867baf785 0x0e021431 192.168.0.9 192.168.0.1 3des-cbc hmac_sha1-96 0x1b88f80580e87106d776cb1bfe051509e690826480f72cef 0x066a6d95 ~~~

Installation

Dépendances

Compilation

Il n’y a actuellement pas de paquets disponibles, il faut compiler ipdecap depuis les sources:

wget https://loicpefferkorn.net/ipdecap/ipdecap-0.7.tar.gz
tar xvzf ipdecap-0.7.tar.gz
cd ipdecap-0.7
sh autogen.sh
./configure
make
make install

Notes

Ipdecap a été testé sur un nombre limité de captures, je serai très content d’avoir vos retours !

Limitations

  • Pas de support de l’ESP en mode transport

Protocoles supportés

Encapsulation

  • GRE
  • IPIP
  • 6in4 (IPv6 encapsulé dans de l’IPv4)
  • ESP (ipsec, mode tunnel)

Algorithmes ESP

  • (crypt) des-cbc 3des-cbc aes128-cbc aes128-ctr null_enc
  • (auth) hmac_md5-96 hmac_sha1-96 aes_xcbc_mac-96 null_auth any96 any128 any160 any192 any256 any384 any512

Plate-formes testées

  • Linux i686/amd64
  • FreeBSD-9.2 - amd64

Récupération des paramètres ESP

Freebsd

      $ setkey -Da
      192.168.2.100 192.168.2.101                                                  <---- <ip a> 192.168.2.100 <ip b> 192.168.2.101
        esp mode=tunnel spi=91789053(0x057896fd) reqid=0(0x00000000)           <---- <spi> 0x057896fd
        E: 3des-cbc  6ca63e7e 4473684e 93b4868e 0ff41562 ba06f7d1 86ef2922     <---- <crypt> 3des-cbc  <key> 0x6ca63e7e4473684e...
        A: hmac-sha1  0dc52bea 9666ac07 41014f3e 345ebd33 3d6ab85f             <---- <auth> hmac-sha1
        seq=0x000c06d3 replay=4 flags=0x00000000 state=mature
        created: Apr  5 22:20:37 2012	current: Apr  5 22:43:29 2012
        diff: 1372(s)	hard: 36000(s)	soft: 28800(s)
        last: Apr  5 22:43:29 2012	hard: 0(s)	soft: 0(s)
        current: 87237648(bytes)	hard: 0(bytes)	soft: 0(bytes)
        allocated: 788179	hard: 0	soft: 0
        sadb_seq=1 pid=1246 refcnt=2
      192.168.2.101 192.168.2.100
        esp mode=tunnel spi=87014357(0x052fbbd5) reqid=0(0x00000000)
        E: 3des-cbc  33e9b962 a6938efd 4c1dd1df 3f63482f ae254d18 9e329020
        A: hmac-sha1  b243f963 df27ed30 a62682d0 8c2617e6 34f8a39f
        seq=0x001235b0 replay=4 flags=0x00000000 state=mature
        created: Apr  5 22:20:37 2012	current: Apr  5 22:43:29 2012
        diff: 1372(s)	hard: 36000(s)	soft: 28800(s)
        last: Apr  5 22:43:29 2012	hard: 0(s)	soft: 0(s)
        current: 1628123122(bytes)	hard: 0(bytes)	soft: 0(bytes)
        allocated: 1193392	hard: 0	soft: 0
        sadb_seq=0 pid=1246 refcnt=1

Le fichier de configuration ESP peut être généré depuis la sortie de setkey -Da avec le script fourni sadb2conf.awk.

  $ setkey -Da | ./sadb2conf.awk > configuration.file

Auteur

Loïc Pefferkorn loic-ipdecap@loicpefferkorn.net