Skip to content

Extraction des noms de domaine d’un fichier PCAP

Un court article afin de vous présenter un petit outil que j’ai fait récemment permettant d’extraire les domaines présents au sein d’un fichier PCAP.

J’ai eu à plusieurs reprises besoin d’avoir rapidement la liste des noms de domaine requêtes au sein d’un fichier de type capture réseau (.pcap). Ce type de fichier est produit par les outils de capture réseau tels que TCPDump ou Wireshark.

Cela m’est notamment utile lorsque j’étudie le comportement d’un jeu vidéo au niveau réseau, (ou tout autre client lourd, malware, etc.). Cela m’est également arrivé d’avoir besoin d’extraire ce type d’informations dans le cadre de CTF par exemple.

J’ai trouvé quelques outils simples sur le net remplissant cette tâche mais ils ne proposaient pas d’options particulières (de filtrage par exemple). J’ai donc pensé qu’il serait intéressant d’afficher dans un premier temps les noms de domaine requêtés (DNS QUERY), puis les réponses (DNS RESPONSE) et également de mettre en avant les requêtes n’ayant pas eu de réponse de la part d’un serveur DNS. Voila en somme ce que fait mon petit programme python.

PCAPdomainExtract : script python

Voici un exemple de la sortie qu’il peut produire :

root@kali:~/domainExtract# python PCAPdomainExtact.py -i test.PCAP.pcapng
########## DNS QUERY ############
DNS query, Server dest
 ------, ------
 secapps.com., 192.168.1.254
 secapps.com., 192.168.1.254
        burp., 192.168.1.254
        burp., 192.168.1.254
        burp., 192.168.1.34
        burp., 192.168.1.34
[...]
 recorder.sessionstack.com., 192.168.1.254
 recorder.sessionstack.com., 192.168.1.34
 recorder.sessionstack.com., 192.168.1.34
         ocsp.comodoca.com., 192.168.1.254
         ocsp.comodoca.com., 192.168.1.254
         ocsp.comodoca.com., 192.168.1.34
         ocsp.comodoca.com., 192.168.1.34
########## DNS RESPONSE #########
DNS type, domain, response
 ------, ------, ------
 [CNAME], www.google-analytics.com., www-google-analytics.l.google.com.
 [CNAME],         www.facebook.com., star-mini.c10r.facebook.com.
 [CNAME],        fonts.gstatic.com., gstaticadssl.l.google.com.
 [CNAME],     fonts.googleapis.com., googleadapis.l.google.com.
     [A],              secapps.com., 104.27.21.98
  [AAAA],        ocsp.comodoca.com., 2a02:1788:2fd::b2ff:5301
 [CNAME],     connect.facebook.net., scontent.xx.fbcdn.net.
     [A],recorder.sessionstack.com., 35.201.120.199
  [AAAA],     cdn.sessionstack.com., 2400:cb00:2048:1::6819:e811
 [CNAME],  stats.g.doubleclick.net., stats.l.doubleclick.net.
 [CNAME], www.googletagmanager.com., www-googletagmanager.l.google.com.
### DNS QUERY WITHOUT RESPONSE ####
[!] Also diplay response that are not in the specified
 type (if option -e, -a or -6 are used).
DNS query, Server dest
 ------, ------
 burp., 192.168.1.254
 burp., 192.168.1.254
 burp., 192.168.1.34
 burp., 192.168.1.34
 burp., 192.168.1.254
 burp., 192.168.1.254
 burp., 192.168.1.34
 burp., 192.168.1.34

Comme vous pouvez le voir, on distingue ici les requêtes des réponses (avec leur type) et les requêtes n’ayant pas obtenu de réponse.

Rien d’extraordinaire, mais je sais que ce petit outil peut avoir son utilité dans certains contextes, le voici donc sur Github : https://github.com/nj8/PCAPdomainExtract
Ce script python propose plusieurs options de filtrage basique :

  • -i (obligatoire) : permet d’indiquer le fichier d’entrée (format PCAP).
  • -a : permet l’affichage des réponses DNS de type A seulement (correspondant aux entrées IPv4).
  • -6 : permet l’affichage des réponses DNS de type AAAA seulement (correspondant aux entrées IPv6).
  • -e : Affichage de tous les types DNS sauf les types A.
  • -s : Permet de ne pas afficher les réponses DNS de type SOA qui perturbent parfois l’affichage.

En écrivant ce petit programme, j’ai eu l’occasion de me replonger dans Scapy, une librairie Python qui permet de lire des fichier au format PCAP, mais surtout d’analyser, de disséquer et générer des paquets réseaux de tout type, très pratique notamment pour effectuer du fuzzing réseau. Voici la documentation de Scapy : https://scapy.readthedocs.io/en/latest/

Améliorations

J’ai plusieurs idées d’améliorations et vous encourage à m’en proposer d’autres si vous en avez en tête :

  • Ajout d’une option de vérification des réponses obtenues avec spécification des DNS de référence.
  • Détection des requêtes sur un même domaine ayant entrainé des réponses différentes.

J’ajouterai ces améliorations lorsque j’aurai un peu plus de temps.[:en]Un court article afin de vous présenter un petit outil que j’ai fait récemment permettant d’extraire domaines présents au sein d’un fichier PCAP.

Partager :
Published inOutils

Be First to Comment

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *