L'objectif de ce projet est de proposer une une architecture permettant d'effectuer des analyses de fichier .pcap
grâce à Kibana.
Qu'est ce qu'un fichier .pcap
?
C'est un type de fichier généré par des logiciels d'enregistrement de trafic réseau comme Wireshark. Ils contiennent des enregistrement de paquet réseau sur une période donnée.
Analyser ces données fichiers peut permettre de faire des reviews du trafic réseau passé, de backtester des algorithmes d'analyse automatique de réseau, etc.. Afin de faciliter leur analyse nous avons décidé de créer une architecture de traitement de ces données, d'indexation et de visualisation grâce à FileBeat, Logstash, ElasticSearch et Kibana.
Toute l'architecture est encapsulée dans des conteneurs docker et orchestrée via docker compose. Cela nous permet d'abstraire facilement les connections réseaux entre les différents composants. L'architecture se présente comme suit:
À la racine de ce projet se trouve un dossier data qui contiendra nos fichiers .pcap
et .json
. Après avoir copié les fichiers .pcap
dans ce dossier, il suffit de lancer la création de l'architecture grâce à docker compose. Le workflow contient deux principales étapes:
- Le conteneur Wireshark lit et transcrit tous les fichiers présents dans le dossier data/pcaps. Il génère ensuite plusieurs fichiers
.json
qu'il stocke dans le dossier data/json. - Le conteneur Filebeat se charge de lire et de transmettre les fichiers à Logstash.
- Le conteneur Logstash se charge d'effectuer des transformations sur les données chargées. En effet, le problème de Filebeat est qu'il ne parse pas automatiquement les dates des fichiers
.json
et par conséquent le timestamp par défaut est celui de l'enregistrement des fichiers par FileBeat. Logstash nous permet de parser ces dates et de les utiliser comme index dans notre base de données Elasticsearch. - Les conteneurs ElasticSearch et Kibana se lancent en parallèle et se connectent entre eux. Kibana permet de communiquer avec ElasticSearch afin de visualiser les données que Logstash aura stocké à l'intérieur.
- Docker Engine (version 20.10.6)
- Docker Compose (version 1.29.1)
- 2.5 GB de RAM
Afin de lancer la stack, veuillez suivre les étapes suivantes:
- copiez les fichiers
.pcap
dans le dossier data/pcaps. - lancez la stack localement grâce à Docker Compose:
$ docker-compose up
Attendez quelques minutes que l'architecture se lance et que les fichiers soient transcris. Vous pouvez accéder à l'interface de Kibana à l'adresse suivante: http://127.0.0.1:5601.
Une fois que vous avez terminé vous pouvez stopper les conteneurs:
$ docker-compose down -v
Note: vous pouvez utiliser l'option -v
si vous souhaitez supprimer les données persistantes créées par les volumes de Docker.
Pour faire notre démonstration nous avons utilisé le fichier .pca
suivant: https://download.netresec.com/pcap/4sics-2015/4SICS-GeekLounge-151020.pcap
Ces données représentent des enregistrement qui ont été effectués le 20/10/2015.
Ces données sont assez volumineuse donc leur traitement par Wireshark peut prendre du temps. Attendez quelques minutes après le lancement pour effectuer les étapes ci-dessous.
Une fois que les données sont chargées dans ElasticSearch, vous devriez pouvoir créer un Index Pattern depuis l'interface de Kibana (ou en ligne de commande). Cherchez l'onget Index patterns puis cliquez sur Create index pattern:
Sélectionnez ensuite la source packets-webserver01-2015-10-20 (dans le cas de mon exemple) puis utilisez layers.frame.frame.frame_time comme index temporel (ATTENTION: @timestamp correspond au timestamp d'envoie des fichiers par FileBeat). Une fois l'index créé, vous pouvez visualiser les données avec un Dashboard personannalisé.
Note: un index est l'équivalent d'une table dans une base de données relationelles (cf. Mapping SQL/ElasticSearch).
À titre d'exemple, j'ai réalisé le Dashboard suivant qui permet d'analyser grossièrement l'activité du réseau sur la période:
Initialement, je voulais utiliser Packetbeat afin de transcrire les fichiers .pcap
et de les charger directement dans ElasticSearch. En effet, PacketBeat est utilisé pour enregistrer des flux réseaux et de les charger automatiquement dans ElasticSearch.
Malheureusement, je ne suis pas arrivé à faire fonctionner correctement l'architecture. Vous pouvez retrouver le projet correspondant dans le dossier elk-packetbeat/. Si vous exécutez ce projet (de la même manière que le précédent) vous serez en mesure de visualiser, grâce à Kibana, l'activité réseau de votre ordinateur en temps réel.