COMPRENDRE ET UTILISER PACKETBEAT
DANS LA STACK ELK
Introduction
Nous sommes maintenant confrontés à des entreprises avec des réseaux de plus
en plus complexes qui doivent être protégés. De nos jours, il est absolument
nécessaire de surveiller votre réseau, chaque organisation doit collecter toutes les
informations sur ses réseaux. Si vous ne surveillez pas votre réseau, comment
pourrez-vous détecter ce qui est un comportement normal ou une attaque ? Il
existe des attaques malveillantes évidentes, mais une détection plus précoce est
cruciale dans tout incident de cybersécurité. L'un des moyens les meilleurs et les
plus pratiques de détecter une activité anormale est la surveillance du réseau. Dans
cet article, nous allons voir comment est-il possible de surveiller votre réseau avec
l'outil Packetbeat, puis d'agréger toutes les informations dans la pile ELK.
Dans le chapitre précédent sur Metricbeat , nous avons décrit comment utiliser
Metricbeat pour envoyer des métriques systèmes dans la pile. Dans ce chapitre,
nous allons apprendre à utiliser Packetbeat qui fait partie de la famille d'expéditeurs
Beats les plus populaires.
Qu'est-ce que Packetbeat ?
Packetbeat est un outil de surveillance réseau développé par Elastic qui utilise la
bibliothèque libpcap, c'est un expéditeur et un analyseur de données open source
pour les paquets réseaux intégrés à la pile ELK (Elasticsearch, Logstash et Kibana)
et membre de la famille des expéditeurs Beats (Filebeat, Libbeat, Winlogbeat, etc...).
Appartient à [Link] - lien original ici
Il fournit des métriques de surveillance réseau en temps réel sur du protocole HTTP,
TLS, DNS et de nombreux autres protocoles réseaux.
Ainsi grâce à cet outil de surveillance de paquets de données avec la stack ELK, il
peut vous aider à détecter des niveaux inhabituels de trafic réseau et des
caractéristiques de paquets inhabituelles, à identifier les sources et les destinations
des paquets, à rechercher des chaînes de données spécifiques dans les paquets et
à créer un tableau de bord convivial avec des statistiques pertinentes prêtes à
l'emploi. Ainsi cela peut contribuer à améliorer vos temps de réponse aux attaques
malveillantes.
Dans cet article, nous allons démontrer la plupart des avantages mentionnés ci-
dessus. Plus précisément, nous allons apprendre à utiliser Packetbeat pour surveiller
les transactions HTTP d'une application Web et d'analyser les données en utilisant la
stack ELK.
Installation et configuration de Packetbeat
Préparation de l'application web
Afin d'éviter d'installer de nombreux paquets et bibliothèques, nous allons déployer
notre application web depuis la technologie Docker. Tout D'abord commencez par
télécharger les sources du projet en cliquant ici et désarchivez ensuite le projet.
Ensuite, je vais supposer que vous disposez déjà d'un environnement Docker
fonctionnel sur votre système, si ce n'est pas le cas merci de suivre mon article sur
l'installation de docker.
Appartient à [Link] - lien original ici
Une fois cette étape réalisée, placez-vous alors à la racine du projet et buildez
ensuite votre image avec la commande suivante :
docker build -t myapp .
Ensuite toujours depuis la racine du projet, lancez la commande suivante pour
exécuter vos conteneurs :
docker-compose up -d
On s'assure ensuite que nos conteneurs s'exécutent correctement sur les bons
ports:
docker ps
Résultat :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
97e0bb711609 myapp "docker-php-entrypoi…" 12 minutes ago Up 12 minutes [Link]:80
feae30be6007 mysql:5.7 "docker-entrypoint.s…" 12 minutes ago Up 12 minutes [Link]:33
Ici nous avons un conteneur contenant un serveur web nommé "myapp_c"
écoutant sur le port 80 et un autre conteneur mysql écoutant sur le port 3306.
Si tout c'est bien passé, alors visitez la page suivante [Link] et vous
obtiendrez le résultat suivant :
Appartient à [Link] - lien original ici
Installation de Packetbeat
Avant de commencer l'installation, assurez-vous d'avoir installé Elasticsearch pour
stocker et rechercher nos données, et d'avoir installé Kibana pour les visualiser et
les gérer (mon tuto d'installation est disponible ici).
Appartient à [Link] - lien original ici
Comme pour Metricbeat, il existe plusieurs façons d'installer Packetbeat. Dans
notre cas nous allons comme pour, soit installer Packetbeat depuis le gestionnaire de
paquets par défaut de notre distribution. Pour ce faire, vous devrez d'abord mettre à
niveau votre système et vos paquets:
sudo apt update -y && sudo apt upgrade -y
Pour les machines appartenant à la famille debian, vous devrez peut-être installer
le paquet apt-transport-https avant de continuer:
sudo apt-get install apt-transport-https
Téléchargez et installez ensuite la clé de signature publique (étape non obligatoire, si
vous avez suivie le chapitre précédent) :
Sous la famille debian:
wget -qO - [Link] | sudo apt-key add -
Sous la famille redhat:
sudo rpm --import [Link]
L'étape suivante consiste à ajouter le dépôt Elastic sur votre système (étape non
obligatoire, si vous avez suivie le chapitre précédent) :
Sous la famille debian:
echo "deb [Link] stable main" | sudo tee -a /etc/apt/sou
Sous la famille redhat, créez un fichier et nommez le par exemple [Link] dans
le répertoire /etc/[Link].d/ , contenant:
[elastic-7.x]
Appartient à [Link] - lien original ici
name=Elastic repository for 7.x packages
baseurl=[Link]
gpgcheck=1
gpgkey=[Link]
enabled=1
autorefresh=1
type=rpm-md
Il ne vous reste plus qu'à mettre à jour vos référentiels et d'installer Packetbeat:
Sous la famille debian:
sudo apt-get update && sudo apt-get install packetbeat
Sous la famille redhat:
sudo yum install packetbeat
Pour exécuter Packetbeat, utilisez la commande suivante:
sudo systemctl start packetbeat
Si jamais vous rencontrez des problèmes d'initialisation, veuillez vérifier les logs du
service Packetbeat à l'aide de la commande suivante :
sudo journalctl -f -u packetbeat
Configuration de Packetbeat
Le fichier de configuration de Packetbeat se retrouve dans
/etc/packetbeat/[Link] . Dans ce fichier, assurez-vous bien que la
configuration Packetbeat possède les bonnes informations pour communiquer
avec Kibana et Elasticsearch, si besoin décommentez les lignes suivantes :
[Link]: any
...
Appartient à [Link] - lien original ici
[Link]:
hosts: ["localhost:9200"]
username: "" #(si pas de login/mot de passe ne rien mettre)
password: "" #(si pas de login/mot de passe ne rien mettre)
...
[Link]:
host: "localhost:5601"
...
[Link]:
- type: icmp
enabled: false
- type: dns
ports: [53]
- type: http
ports: [80]
- type: mysql
ports: [3306]
Ci-dessous une explication détaillée sur les options de configuration Packetbeat
utilisées:
[Link] : ici on détermine quelle interface réseau
surveiller. Dans notre cas, nous allons écouter tous les paquets envoyés ou
reçus par le serveur, mais vous pouvez choisir le nom d'une interface réseau
spécifique si besoin.
[Link] : dans cette section Protocoles, nous devons
configurer les ports sur lesquels Packetbeat peut trouver chaque protocole.
Habituellement, les valeurs par défaut dans le fichier de configuration
suffiront, mais si vous utilisez des ports non standard, c'est l'endroit pour les
ajouter. Dans notre cas notre application est desservie par un serveur web et
une base de données MySQL.
Appartient à [Link] - lien original ici
[Link] : pour que les tableaux de bord fonctionnent, nous devons
spécifier le point de terminaison Kibana. Vous devrez entrer l'URL de votre
hôte Kibana et vos informations d'identification (nom d'utilisateur/mot de
passe) si nécessaire.
[Link] : spécifie la sortie à laquelle nous envoyons les
métriques Packetbeat. Nous utilisons Elasticsearch, vous devrez donc fournir
l'hôte, le protocole et les informations d'identification Elasticsearch si
nécessaire.
Une fois terminé, relancez Packetbeat:
sudo systemctl restart packetbeat
Visualisation des dashboards
Avant de visualiser nos dashboards, vérifiez au préalable qu'Elasticsearch et Kibana
sont en cours d'exécution et qu'Elasticsearch est prêt à recevoir des données de
Packetbeat:
sudo systemctl status elasticsearch kibana
Résultat :
? [Link] - Elasticsearch
Loaded: loaded (/lib/systemd/system/[Link]; disabled; vendor preset: enabled)
Active: active (running) since Wed 2021-07-14 12:29:01 CEST; 1h 29min ago
? [Link] - Kibana
Loaded: loaded (/etc/systemd/system/[Link]; disabled; vendor preset: enabled)
Active: active (running) since Wed 2021-07-14 12:28:42 CEST; 1h 30min ago
Ensuite lancez la sous-commande setup pour charger les tableaux de bord dans
Kibana (la commande peut prendre un peu de temps pour se terminer):
Appartient à [Link] - lien original ici
sudo packetbeat setup
Résultat :
Overwriting ILM policy is disabled. Set `[Link]: true` for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Afin de charger quelques données pour Packetbeat, visitez plusieurs fois la page
[Link] et ajoutez-y quelques articles :
Appartient à [Link] - lien original ici
Vous pouvez également simuler plusieurs visites, en utiliser la commande curl
avec une boucle for :
for i in {1..20}; do curl [Link] -s > /dev/null; done
Une fois les données chargées, tout pour Metricbeat pour découvrir vos logs,
rendez-vous dans [Link] et sur le menu à gauche cliquez sur
Discover:
Appartient à [Link] - lien original ici
Appartient à [Link] - lien original ici
Choisissez ensuite le pattern index packetbeat-* pour visualiser les logs de
Packetbeat:
L'étape suivante est de visualiser notre tableau de bord afin de visualiser la
collection de visualisations en temps réel issue par notre expéditeur Packetbeat.
Pour ce faire, sur le menu à gauche cliquez sur Dashboard:
Appartient à [Link] - lien original ici
Appartient à [Link] - lien original ici
Recherchez et cliquez sur les Dashboards de Packetbeat:
Vous obtenez ainsi plusieurs dashboards. Le premier type nommé "HTTP
Transactions" ressemble à l'image ci-dessous et vous donne le taux de code de
réponse et requête HTTP:
Appartient à [Link] - lien original ici
Dans le second nommé "Network Flows", vous avez des informations sur le flux de
réseau avec le nombre de connexions dans le temps et les hôtes créant/recevant
du trafic incluant également leur consommation réseaux:
Appartient à [Link] - lien original ici
Dans le troisième nommé "DNS Overview", vous avez un résumé sur les requêtes
DNS avec le temps de réponse moyen, le type de question de votre serveur DNS,
histogramme du temps de réponse DNS, etc... :
Appartient à [Link] - lien original ici
Dans le quatrième nommé "Databases: MySQL", vous avez le nombre du type de
requête SQL utilisé (SELECT, INSERT, etc ...), le débit de votre serveur MySQL, etc... :
Appartient à [Link] - lien original ici
Vous avez également d'autres tableaux de bord prêt à l'emploi que vous pouvez
visualiser par vous-même.
Conclusion
Maintenant que les métriques réseaux de votre application sont centralisées grâce
à Packetbeat, et que vous êtes en mesure de les visualiser avec Kibana, vous devriez
pouvoir voir ce que font vos serveurs en un coup d'œil.
Grâce à Packetbeat nous avons pu avoir rapidement des tableaux de bord de
surveillance du réseau opérationnel, nous donnant une idée en temps réel des
paquets transmis sur le fil.
Appartient à [Link] - lien original ici