Introduction
Les tutoriels précédents de cette série vous ont guidé sur l’installation et la configuration de Suricata. Ils ont également expliqué comment utiliser Filebeat pour envoyer des alertes de votre serveur Suricata vers un serveur Elastic Stack, à utiliser avec sa fonctionnalité de Gestion des Informations et des Événements de Sécurité (SIEM) intégrée.
Dans ce dernier tutoriel de la série, vous créerez des règles personnalisées dans Kibana et générerez des alertes dans les tableaux de bord SIEM de Kibana. Une fois que vous avez des règles en place et que vous comprenez où et comment filtrer les journaux de Suricata en utilisant Kibana, vous explorerez comment créer et gérer des cas en utilisant les outils d’analyse de la chronologie de Kibana.
À la fin de ce tutoriel, vous disposerez d’un système SIEM que vous pourrez utiliser pour suivre et enquêter sur les événements de sécurité sur tous les serveurs de votre réseau.
Prérequis
Si vous avez suivi cette série de tutoriels, vous devriez déjà disposer d’un serveur avec au moins 4 Go de RAM et 2 CPU, ainsi qu’un utilisateur non root configuré. Aux fins de ce guide, vous pouvez configurer cela en suivant nos guides de configuration de serveur initial pour Ubuntu 20.04, Debian 11 ou Rocky Linux 8, selon votre système d’exploitation de choix.
Vous aurez également besoin de Suricata installé et en cours d’exécution sur votre serveur. Si vous devez installer Suricata sur votre serveur, vous pouvez le faire en suivant l’un des tutoriels suivants en fonction de votre système d’exploitation :
- Ubuntu 20.04 : Comment installer Suricata sur Ubuntu 20.04
- Debian 11 : Comment installer Suricata sur Debian 11
- Rocky Linux 8 : Comment installer Suricata sur Rocky Linux 8
Vous aurez également besoin d’un serveur exécutant la pile Elastic et configuré de manière à ce que Filebeat puisse envoyer des journaux depuis votre serveur Suricata vers Elasticsearch. Si vous devez créer un serveur Elastic Stack, utilisez l’un des tutoriels de la liste suivante qui correspond à votre système d’exploitation :
- Ubuntu 20.04: Comment construire un système de gestion des informations et des événements de sécurité (SIEM) avec Suricata et l’Elastic Stack sur Ubuntu 20.04
- Debian 11: Comment construire un système de gestion des informations et des événements de sécurité (SIEM) avec Suricata et l’Elastic Stack sur Debian 11
- Rocky Linux 8: Comment construire un système de gestion des informations et des événements de sécurité (SIEM) avec Suricata et l’Elastic Stack sur Rocky Linux 8
Assurez-vous que vous pouvez vous connecter à Kibana sur votre serveur Elasticsearch et qu’il y a des événements dans les différents tableaux de bord des alertes et événements Suricata.
Une fois que vous avez tous les prérequis en place, ouvrez un tunnel SSH vers votre serveur Kibana et connectez-vous à Kibana avec votre navigateur en utilisant les identifiants que vous avez générés dans le tutoriel précédent.
Étape 1 — Activation des clés API dans Elasticsearch
Avant de pouvoir créer des règles, des alertes et des chronologies dans Kibana, vous devez activer un paramètre de module de sécurité xpack
.
Ouvrez votre fichier /etc/elasticsearch/elasticsearch.yml
avec nano
ou votre éditeur préféré.
Ajoutez la ligne surlignée suivante à la fin du fichier :
. . .
discovery.type: single-node
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
Enregistrez et fermez le fichier lorsque vous avez fini d’éditer. Si vous utilisez nano
, vous pouvez le faire avec CTRL+X
, puis Y
et ENTER
pour confirmer.
Maintenant, redémarrez Elasticsearch pour que le nouveau paramètre prenne effet.
Vous êtes maintenant prêt à configurer des règles, examiner des alertes, et créer des chronologies et des cas dans Kibana.
Étape 2 — Ajout de Règles à Kibana
Pour utiliser la fonctionnalité SIEM de Kibana avec les données d’événements Suricata, vous devrez créer des règles qui généreront des alertes sur les événements entrants. Visitez le Tableau de bord des Règles dans la page de l’application de sécurité de Kibana pour créer ou importer des règles.
Pour les besoins de ce tutoriel, nous utiliserons les signatures suivantes pour détecter le trafic dirigé vers un serveur sur des ports non appariés (trafic SSH, HTTP et TLS respectivement) :
alert ssh any any -> 203.0.113.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000000;)
alert ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000001;)
alert http any any -> 203.0.113.5 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000002;)
alert http any any -> 2001:DB8::1/32 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000003;)
alert tls any any -> 203.0.113.5 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000004;)
alert tls any any -> 2001:DB8::1/32 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000005;)
Si vous utilisez vos propres signatures, ou celles d’un ensemble de règles, assurez-vous de pouvoir générer des alertes et d’accéder aux événements correspondants dans les tableaux de bord Suricata par défaut dans Kibana.
Maintenant, visitez la page des règles dans l’application Sécurité de Kibana http://localhost:5601/app/security/rules/. Cliquez sur le bouton Créer une nouvelle règle en haut à droite de la page.
Assurez-vous que la carte de type de règle Requête personnalisée est sélectionnée. Faites défiler jusqu’au champ de saisie Requête personnalisée et collez ce qui suit:
rule.id: "1000000" or rule.id :"1000001"
Assurez-vous que les valeurs de rule.id
correspondent à la valeur sid
de Suricata pour l’attaque ou les attaques sur lesquelles vous souhaitez recevoir une alerte.
Changez la sélection du menu déroulant Aperçu rapide de la requête sur Le mois dernier puis cliquez sur Afficher les résultats. En supposant que vous ayez des événements correspondants dans vos journaux Suricata, la page se mettra à jour avec un graphique montrant les alertes du dernier mois. Votre page devrait ressembler à la capture d’écran suivante:
Cliquez sur Continuer pour procéder à l’ajout d’un nom dans le champ Nom de la règle, ce qui est requis pour chaque règle ajoutée. Ajoutez un nom dans le champ Nom de la règle. Dans cet exemple, nous utiliserons la description du message de la règle Suricata SSH TRAFFIC sur un port non-SSH
. Ajoutez également une description pour la règle. Dans cet exemple, nous utiliserons Vérifier les tentatives de connexion SSH sur des ports non standards
.
Vous pouvez également développer la section Paramètres avancés et ajouter des détails sur la règle. Par exemple, vous pourriez ajouter une explication sur la manière de gérer une alerte générée par la règle, ou lier à des articles de chercheurs en sécurité sur un type d’attaque particulier.
Une fois que vous avez ajouté le nom de la règle, la description et les champs facultatifs supplémentaires, cliquez sur Continuer pour passer à l’étape 3 de la création de la règle.
Laissez les paramètres de la section suivante Planifier la règle avec leurs valeurs par défaut et cliquez sur Continuer.
Enfin, à l’étape Actions de la règle, cliquez sur Créer et activer la règle.
Vous serez redirigé vers une nouvelle page qui affiche les détails de la règle :
Remarque : Il peut falloir quelques minutes pour que les données d’alerte se remplissent au début. Ce délai est dû au fait que la planification par défaut de la règle est de s’exécuter toutes les 5 minutes.
Si vous souhaitez recevoir des alertes sur d’autres règles Suricata, répétez les étapes ci-dessus en substituant le sid
de la signature dans le champ de requête personnalisée rule.id
de Kibana.
Une fois que vous avez mis en place une ou plusieurs règles, vous êtes prêt à passer à l’étape suivante où vous examinerez les alertes et créerez un ou plusieurs cas pour les gérer.
Étape 3 — Création d’une chronologie pour suivre les alertes liées au trafic SSH
Maintenant que vous avez configuré une règle ou des règles pour générer des alertes dans l’application SIEM de Kibana, vous aurez besoin d’un moyen de regrouper et de gérer davantage les alertes. Pour commencer, visitez le tableau de bord des alertes de Kibana : http://127.0.0.1:5601/app/security/alerts.
Assurez-vous d’avoir généré un trafic invalide correspondant à la signature ou aux signatures Suricata que vous utilisez. Par exemple, vous pourriez déclencher la règle Suricata d’exemple sid:1000000
en exécutant une commande comme celle-ci depuis votre machine locale:
Cette commande tentera de se connecter à votre serveur en utilisant SSH sur le port 80, au lieu du port par défaut 22, et devrait déclencher une alerte. Il peut falloir quelques minutes pour que l’alerte apparaisse dans Kibana, car elle doit être traitée par Elasticsearch et la règle que vous avez créée dans Kibana.
Ensuite, vous ajouterez le champ comnunity_id
au tableau des alertes affiché en bas de la page. Rappelez-vous du premier tutoriel que ce champ est généré par Suricata et représente les adresses IP uniques et les ports contenus dans un flux réseau. Cliquez sur le bouton Champs et dans la boîte de dialogue modale qui apparaît, saisissez network.community_id
puis cochez la case à côté du nom du champ:
Fermez la boîte de dialogue modale et le champ sera ajouté au tableau des alertes. Passez maintenant la souris sur l’une des alertes ayant la même valeur community_id
et cliquez sur l’icône Ajouter à l’enquête de la timeline. Cela garantira que toutes les alertes partageant le community_id
ajouté par Suricata à l’événement sont ajoutées à une timeline pour une enquête ultérieure:
Cliquez ensuite sur le lien Chronologie sans titre en bas à gauche de votre navigateur. Ce lien vous dirigera vers une page qui ne présente que des alertes avec le champ community_id
de Suricata que vous souhaitez investiguer.
La page de la chronologie vous montre plus de détails sur les paquets individuels associés à une alerte ou à un flux réseau. Vous pouvez utiliser la chronologie pour avoir une meilleure idée du moment où un flux réseau suspect a commencé, de son origine et de sa durée.
Cliquez sur le bouton Toutes les sources de données situé sur le côté droit de la page et sélectionnez le bouton Alertes de détection, puis cliquez sur Enregistrer. Cette option restreindra la chronologie pour ne présenter que les alertes générées par Kibana. Sans cette option, les alertes de Suricata seront également incluses dans la chronologie.
Pour enregistrer votre nouvelle chronologie, cliquez sur l’icône du crayon en haut à gauche de la page de la chronologie. La capture d’écran suivante met en évidence l’emplacement de l’icône du crayon et du bouton Toutes les sources de données :
Vous pouvez ajouter du texte dans le champ de description s’il y a des informations supplémentaires que vous souhaitez ajouter à la chronologie. Une fois que vous avez terminé de modifier le nom et la description de la chronologie, cliquez sur le bouton Enregistrer en bas à droite de la boîte de dialogue modale.
Répétez les étapes ci-dessus pour créer des chronologies pour d’autres alertes que vous souhaitez examiner plus en détail ultérieurement.
Dans l’étape suivante, vous utiliserez vos vues chronologiques des événements pour attacher des alertes à l’application Cases de Kibana dans la suite d’outils SIEM.
Étape 4 — Création et gestion des cas SIEM
Dans l’étape précédente, vous avez créé une chronologie pour regrouper les alertes individuelles et les paquets en fonction du champ community_id
de Suricata. Dans cette section du tutoriel, vous allez créer un cas pour suivre et gérer les alertes dans votre chronologie.
Pour créer un nouveau cas à partir de votre chronologie, assurez-vous d’être sur une page de chronologie dans votre navigateur. Cliquez sur le bouton Attacher au cas en haut à droite de la page de la chronologie, puis sur le bouton Attacher à un nouveau cas dans la liste qui apparaît.
Vous serez redirigé vers une page où vous pourrez saisir des informations sur l’incident que vous êtes en train d’enquêter. Dans la capture d’écran d’exemple suivante, le cas est notre exemple d’alertes de trafic SSH sur un port non-SSH:
Remplissez les champs avec un nom descriptif et une ou plusieurs étiquettes facultatives. Dans cet exemple, le nom du cas est TRAFFIC SSH sur un port non-SSH de 203.0.113.5
car il s’agit du type spécifique de trafic et d’hôte que nous enquêtons. Avec de nombreux événements à enquêter dans votre système SIEM, un schéma de dénomination comme celui-ci vous aidera à suivre les cas, les chronologies et les alertes car le nom correspondra à l’alerte Kibana et au champ de message de la signature Suricata.
Faites défiler jusqu’au bas de la page et cliquez sur le bouton Créer un cas. Votre navigateur affichera une page qui montre le cas enregistré. Vous pouvez ajouter des commentaires au format Markdown avec des informations supplémentaires, ainsi que modifier le cas à partir de cette page.
Ensuite, cliquez sur le lien dans la description pour accéder à la chronologie du cas que vous avez ajoutée lors de l’étape précédente de ce tutoriel.
Pour chaque alerte que vous souhaitez inclure dans le cas, cliquez sur l’icône Autres actions sur l’alerte. Cliquez sur Ajouter au cas existant.
Cliquez sur le nom du cas dans la fenêtre modale qui apparaît pour ajouter l’alerte au cas. Assurez-vous de sélectionner le cas correspondant à la chronologie et aux alertes que vous êtes en train d’investiguer. Répétez l’ajout de chaque alerte de la liste au cas existant.
Maintenant, rendez-vous à nouveau dans l’application Cas dans Kibana](http://localhost:5601/app/security/cases) en utilisant le menu de navigation sur le côté gauche de la page. Cliquez sur votre cas et notez comment les alertes que vous avez ajoutées sont répertoriées dans les détails du cas :
À partir de là, vous pouvez faire défiler jusqu’au bas du cas et ajouter toutes les informations supplémentaires que vous souhaitez. Par exemple, toutes les étapes que vous avez entreprises pour enquêter sur une alerte ou des alertes, les modifications de configuration apportées à Suricata comme une règle nouvelle ou modifiée, le transfert à un autre membre de l’équipe ou toute autre information pertinente pour le cas.
Une fois que vous êtes à l’aise avec la création de cas pour les différents types d’alertes que vous souhaitez suivre, vous pouvez désormais utiliser les outils SIEM de Kibana pour organiser et coordonner l’investigation de toute alerte en un seul endroit central.
Conclusion
Dans ce tutoriel, vous avez développé votre système SIEM existant Suricata et Elastic Stack en ajoutant des règles à Kibana qui génèrent des alertes concernant un trafic spécifique d’intérêt. Vous avez également créé une chronologie ou des chronologies pour regrouper des ensembles d’alertes basées sur leur community_id
. Enfin, vous avez créé un cas et lié votre chronologie à celui-ci, ainsi qu’aux alertes individuelles d’intérêt.
Avec ce système SIEM en place, vous pouvez désormais suivre les événements de sécurité sur vos systèmes à presque n’importe quelle échelle. En devenant plus familier avec Suricata et en suivant les alertes qu’il génère dans votre SIEM Kibana, vous pourrez personnaliser les alertes Suricata et les actions par défaut qu’il prend pour adapter à votre réseau particulier.
Pour plus d’informations sur les outils SIEM de Kibana, visitez la Documentation officielle d’Elastic Security. Les guides expliquent en détail comment utiliser les Règles, les Alertes, les Chronologies et les Cas.
Pour une interface SIEM plus légère, vous pourriez également être intéressé par EveBox, qui présente toutes les données d’événements Suricata et la fonctionnalité SIEM sur une seule page.