Extraction de champs et formatage

WiresharkBeginner
Pratiquer maintenant

Introduction

L'analyse du trafic réseau nécessite souvent l'extraction d'informations précises à partir de milliers de paquets. Bien que la lecture des résumés de paquets soit utile pour les humains, les outils et scripts automatisés exigent des données structurées.

C'est ici que l'analyse de paquets rejoint l'ingénierie des données. Un humain peut parcourir visuellement quelques lignes de paquets, mais les ordinateurs fonctionnent mieux lorsque les informations sont organisées en champs et colonnes stables. Une fois le trafic réseau converti en sortie structurée, il peut être recherché, compté, graphé, importé dans des tableurs ou traité par des pipelines Python et SIEM.

Dans ce laboratoire, vous apprendrez à transformer le trafic réseau brut en formats structurés et faciles à analyser à l'aide de tshark, la version en ligne de commande de Wireshark. Vous vous entraînerez à désactiver la sortie par défaut lisible par l'homme, à sélectionner des champs de protocole spécifiques (tels que les adresses IP, les requêtes DNS et les User-Agents HTTP), et à formater les résultats en valeurs séparées par des virgules (CSV) pour une analyse ultérieure.

Désactiver la sortie par défaut

Dans cette étape, vous apprendrez à modifier le comportement de sortie par défaut de tshark.

Par défaut, lorsque vous lisez un fichier de capture de paquets avec tshark, il affiche une ligne de résumé pour chaque paquet. Ce résumé est conçu pour une lecture humaine, mais il est très difficile à analyser par des scripts ou à importer dans des bases de données. Pour extraire des données spécifiques, nous devons d'abord dire à tshark d'arrêter d'imprimer ce résumé par défaut et de se préparer à sortir des champs spécifiques.

L'idée clé est que les résumés sont orientés vers la présentation, tandis que les champs sont orientés vers l'analyse. Une ligne de résumé peut sembler pratique pour une personne, mais de petits changements de formatage peuvent briser l'automatisation en aval. L'extraction de champs nommés vous donne une sortie prévisible que d'autres outils peuvent consommer de manière fiable.

Nous y parvenons en utilisant l'option -T fields. L'indicateur -T signifie "Text output format" (format de sortie texte), et le définir sur fields indique à tshark que nous voulons uniquement voir les champs de données exacts que nous spécifions.

Cependant, si vous utilisez uniquement -T fields sans spécifier quels champs vous voulez, tshark n'affichera rien. Vous devez l'associer à l'indicateur -e, qui spécifie le champ exact à extraire.

Commençons par extraire uniquement le numéro de trame de notre fichier de capture exemple. Assurez-vous d'être dans votre répertoire de travail par défaut /home/labex/project.

Exécutez la commande suivante pour lire le fichier sample.pcap et extraire uniquement les numéros de trame :

tshark -r sample.pcap -T fields -e frame.number | head -n 5

L'indicateur -r indique à tshark de lire à partir d'un fichier au lieu de capturer le trafic en direct. La partie | head -n 5 de la commande limite la sortie aux 5 premières lignes afin que votre terminal ne soit pas inondé de chiffres.

Vous devriez voir une sortie similaire à celle-ci :

1
2
3
4
5

Remarquez à quel point la sortie est propre par rapport au résumé standard de tshark. C'est la base pour construire des jeux de données structurés à partir du trafic réseau.

Utiliser un formatage de colonne personnalisé

Dans cette étape, vous apprendrez à extraire plusieurs champs simultanément et à les formater en valeurs séparées par des virgules (CSV).

Lorsque vous utilisez plusieurs indicateurs -e, tshark extrait plusieurs champs et les place dans des colonnes. Par défaut, tshark sépare ces colonnes à l'aide d'un caractère "Tabulation". Bien que les valeurs séparées par des tabulations soient utiles, le CSV est le standard universel pour importer des données dans des tableurs, des bases de données et des outils d'analyse comme Pandas en Python.

Cela peut sembler être un détail de formatage, mais le choix du format façonne ce que vous pouvez faire ensuite. Le travail de sécurité implique souvent de déplacer des données entre des analyseurs de paquets, des pipelines shell, des tableurs, des notebooks et des tableaux de bord. Plus votre sortie est facile à importer ailleurs, plus il devient facile de transformer une commande ponctuelle en un flux de travail reproductible.

Pour modifier le caractère qui sépare les colonnes, nous utilisons l'option -E separator=.

Extrayons le numéro de trame, l'adresse IP source et l'adresse IP de destination, et formatons-les en CSV. Les noms de champs pour les IP source et destination sont ip.src et ip.dst.

Pour nous assurer que nous examinons des paquets qui ont réellement des adresses IP (et ignorer des éléments comme les paquets ARP de bas niveau qui n'en ont pas), nous utiliserons le filtre -Y "ip" parallèlement à notre extraction de champs.

Exécutez la commande suivante dans votre terminal :

tshark -r sample.pcap -Y "ip" -T fields -e frame.number -e ip.src -e ip.dst -E separator=, | head -n 5

Vous devriez voir une sortie similaire à celle-ci :

12,127.0.0.1,127.0.0.11
13,127.0.0.11,127.0.0.1
14,127.0.0.1,127.0.0.11
15,127.0.0.11,127.0.0.1
16,172.60.1.88,104.18.26.120

Comme nous avons filtré les paquets ARP initiaux, vous remarquerez que les numéros de trame peuvent ne pas commencer à 1. Parfois, un paquet peut ne pas contenir un champ spécifique, et dans ce cas, tshark laissera simplement cette colonne vide, garantissant que votre structure CSV reste intacte.

Extraire les requêtes DNS

Dans cette étape, vous combinerez l'extraction de champs avec des filtres d'affichage pour isoler et extraire des informations spécifiques du trafic DNS.

Lors de l'analyse du trafic réseau, vous voulez rarement extraire des champs de tous les paquets. Habituellement, vous vous intéressez à un protocole spécifique. Vous pouvez utiliser l'indicateur -Y pour appliquer un filtre d'affichage avant d'extraire les champs.

C'est un autre exemple de réduction de la portée avant d'interpréter les résultats. Si vous mélangez des protocoles non liés dans une seule exportation, la sortie devient clairsemée et confuse car de nombreux paquets ne contiendront pas les champs que vous avez demandés. Filtrer d'abord permet de garder le jeu de données résultant sémantiquement cohérent.

Par exemple, si nous voulons voir quels sites Web un utilisateur essaie de visiter, nous pouvons examiner ses requêtes DNS. Le filtre d'affichage pour le trafic DNS est simplement dns. Le champ spécifique qui contient le nom de domaine interrogé est dns.qry.name.

Extrayons l'adresse IP source et le nom de la requête DNS, mais uniquement pour les paquets qui sont réellement des requêtes ou des réponses DNS.

Exécutez la commande suivante :

tshark -r sample.pcap -Y "dns" -T fields -e ip.src -e dns.qry.name -E separator=, | head -n 5

Votre sortie ressemblera à ceci :

10.0.2.15,labex.io
168.63.129.16,labex.io
10.0.2.15,google.com
168.63.129.16,google.com

En combinant -Y "dns" avec -T fields, nous nous assurons que notre sortie CSV ne contient que des données pertinentes, filtrant tout le bruit de fond des autres protocoles réseau.

Extraire les User-Agents HTTP

Dans cette dernière étape, vous extrairez des informations détaillées du trafic HTTP, en vous concentrant spécifiquement sur la chaîne User-Agent.

Le User-Agent est une chaîne envoyée par un navigateur Web ou un client au serveur, identifiant le logiciel utilisé (par exemple, Chrome, Firefox ou un script personnalisé). Les analystes en sécurité extraient souvent les User-Agents pour identifier des scripts automatisés malveillants ou des navigateurs obsolètes sur un réseau.

Les métadonnées comme le User-Agent sont utiles car elles donnent des indices sur le comportement sans nécessiter l'inspection de chaque octet de contenu. Dans la défense réseau, de nombreux jugements utiles proviennent de champs de contexte tels que l'agent utilisateur, l'en-tête d'hôte, le nom de serveur TLS ou le nom de requête DNS. Ils aident les analystes à séparer le trafic applicatif normal de l'automatisation suspecte.

Pour isoler les requêtes HTTP, nous pouvons utiliser le filtre d'affichage http.request. Les champs que nous voulons extraire sont l'IP source (ip.src), le domaine hôte demandé (http.host), le chemin URI spécifique (http.request.uri) et la chaîne User-Agent (http.user_agent).

Exécutez la commande suivante pour extraire ces métadonnées HTTP au format CSV :

tshark -r sample.pcap -Y "http.request" -T fields -e ip.src -e http.host -e http.request.uri -e http.user_agent -E separator=,

Vous devriez voir une sortie similaire à celle-ci :

10.0.2.15,example.com,/,curl/7.81.0
10.0.2.15,neverssl.com,/,LabEx-Custom-Agent/1.0

Remarquez comment nous avons extrait avec succès le User-Agent personnalisé LabEx-Custom-Agent/1.0 qui a été généré lors de la configuration du laboratoire. Cette technique est incroyablement puissante pour créer des rapports automatisés ou alimenter des données réseau dans des tableaux de bord de surveillance de la sécurité.

Résumé

Dans ce laboratoire, vous avez appris à transformer des captures de paquets réseau brutes en données structurées et analysables à l'aide de tshark. Vous avez commencé par désactiver la sortie par défaut lisible par l'homme en utilisant -T fields. Vous avez ensuite appris à sélectionner des points de données spécifiques à l'aide de l'indicateur -e et à les formater en CSV en utilisant -E separator=,. Enfin, vous avez combiné ces techniques de formatage avec des filtres d'affichage (-Y) pour extraire des informations très spécifiques, telles que les noms de requêtes DNS et les chaînes User-Agent HTTP. Ces compétences sont essentielles pour automatiser l'analyse réseau et intégrer les données de paquets avec d'autres outils de sécurité.