Comment créer des règles, des chronologies et des cas à partir d'événements Suricata à l'aide des applications SIEM de Kibana
Introduction
Les didacticiels précédents de cette série vous ont guidé dans l'installation et la configuration de Suricata. Ils ont également expliqué comment utiliser Filebeat pour envoyer des alertes de votre serveur Suricata à un serveur Elastic Stack, à utiliser avec sa fonctionnalité intégrée de gestion des informations et des événements de sécurité (SIEM).
Dans ce dernier didacticiel de la série, vous allez créer des règles Kibana personnalisées et générer des alertes dans les tableaux de bord SIEM de Kibana. Une fois que vous avez mis en place des règles et compris où et comment filtrer les journaux de Suricata à l'aide de Kibana, vous découvrirez comment créer et gérer des cas à l'aide des outils d'analyse chronologique de Kibana.
À la fin de ce didacticiel, 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.
Conditions préalables
Si vous avez suivi cette série de didacticiels, vous devriez déjà avoir un serveur avec au moins 4 Go de RAM et 2 processeurs, et un utilisateur non root configuré. Pour les besoins de ce guide, vous pouvez le configurer en suivant nos guides de configuration initiale du serveur pour Ubuntu 20.04, Debian 11 ou Rocky Linux 8, selon le système d'exploitation de votre choix.
Vous aurez également besoin de Suricata installé et exécuté sur votre serveur. Si vous avez besoin d'installer Suricata sur votre serveur, vous pouvez le faire en utilisant 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 Suite Elastic et configuré pour que Filebeat puisse envoyer les journaux de votre serveur Suricata à 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 créer un système de gestion des informations et des événements de sécurité (SIEM) avec Suricata et la pile élastique sur Ubuntu 20.04
- Debian 11 : Comment créer un système de gestion des informations et des événements de sécurité (SIEM) avec Suricata et la pile élastique sur Debian 11
- Rocky Linux 8 : Comment créer un système de gestion des informations et des événements de sécurité (SIEM) avec Suricata et la pile élastique sur Rocky Linux 8
Assurez-vous que vous pouvez vous connecter à Kibana sur votre serveur Elasticsearch et qu'il existe des événements dans les différents tableaux de bord 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 informations d'identification que vous avez générées dans le didacticiel précédent.
Étape 1 - Activer les 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é.
sudo nano /etc/elasticsearch/elasticsearch.yml
Ajoutez la ligne en surbrillance suivante à la fin du fichier :
/etc/elasticsearch/elasticsearch.yml
. . . discovery.type: single-node xpack.security.enabled: true xpack.security.authc.api_key.enabled: true
Enregistrez et fermez le fichier lorsque vous avez terminé l'édition. Si vous utilisez nano
, vous pouvez le faire avec CTRL+X
, puis Y
et ENTER
pour confirmer.
Redémarrez maintenant Elasticsearch pour que le nouveau paramètre prenne effet.
sudo systemctl restart elasticsearch.service
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énement Suricata, vous devrez créer des règles qui généreront des alertes sur les événements entrants. Visitez le Rules Dashboard sur la page de l'application de sécurité de Kibana pour créer ou importer des règles.
Pour les besoins de ce didacticiel, nous utiliserons les signatures suivantes pour détecter le trafic dirigé vers un serveur sur des ports incompatibles (trafic SSH, HTTP et TLS respectivement) :
Exemple de signature Suricata
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 que vous pouvez générer des alertes et que vous pouvez accéder aux événements correspondants dans les tableaux de bord Suricata par défaut dans Kibana.
Visitez maintenant la page Règles dans l'application de 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-y ce qui suit :
Saisie du langage de requête Kibana
rule.id: "1000000" or rule.id :"1000001"
Assurez-vous que vos valeurs rule.id
correspondent à la valeur sid
de Suricata pour l'attaque ou les attaques pour lesquelles vous souhaitez alerter.
Modifiez le menu déroulant Aperçu rapide de la requête sur Mois dernier, puis cliquez sur Aperçu des résultats. En supposant que vous ayez des événements correspondants dans vos journaux Suricata, la page sera mise à jour avec un graphique qui affiche les alertes du mois dernier. Votre page devrait ressembler à la capture d'écran suivante :
Cliquez sur Continuer pour procéder à l'ajout d'un nom au champ Nom de la règle, qui est requis pour chaque règle que vous ajoutez. Ajoutez un nom au champ Nom de la règle. Dans cet exemple, nous utiliserons la description du message de la règle Suricata SSH TRAFFIC on non-SSH port
. Ajoutez également une description de la règle. Nous utiliserons Check for SSH connection attempts on non-standard ports
dans cet exemple.
Vous pouvez également développer la section Paramètres avancés et ajouter des détails sur la règle. Par exemple, vous pouvez ajouter une explication sur la manière de gérer une alerte générée par la règle ou un lien vers des articles de chercheurs en sécurité sur un type d'attaque particulier.
Lorsque vous avez terminé d'ajouter le nom de la règle, la description et les champs supplémentaires facultatifs, cliquez sur Continuer pour passer à l'étape 3 de la création de la règle.
Laissez les paramètres de la section suivante Schedule rule avec leurs valeurs par défaut et cliquez sur Continuer.
Enfin, sur le Actions de règle étape, cliquez Créer et activer une règle .
Vous serez redirigé vers une nouvelle page qui affiche les détails de la règle :
Remarque : Cela peut prendre 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.
S'il existe d'autres règles Suricata pour lesquelles vous souhaitez recevoir des alertes, répétez les étapes ci-dessus, en remplaçant le sid
de la signature dans le champ de requête personnalisé rule.id
de Kibana.
Une fois que vous avez une règle ou des règles en place, vous êtes prêt à passer à l'étape suivante où vous examinerez les alertes et créerez un cas ou des 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 une ou plusieurs règles configurées pour générer des alertes dans l'application SIEM de Kibana, vous avez 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 que vous avez généré du trafic invalide qui correspond à la ou aux signatures Suricata que vous utilisez. Par exemple, vous pouvez déclencher l'exemple de règle Suricata sid:1000000
en exécutant une commande comme celle-ci depuis votre ordinateur local :
ssh -p 80 your_server_ip
Cette commande essaiera de se connecter à votre serveur en utilisant SSH sur le port 80, au lieu du port 22 par défaut et devrait déclencher une alerte. L'apparition de l'alerte dans Kibana peut prendre quelques minutes, car elle doit être traitée par Elasticsearch et la règle que vous avez créée dans Kibana.
Ensuite, vous allez ajouter le champ comnunity_id
au tableau des alertes qui s'affiche en bas de la page. Rappelons du premier tutoriel que ce champ est généré par Suricata et représente les adresses IP et les ports uniques contenus dans un flux réseau. Cliquez sur le bouton Fields 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 le modal 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 chronologique. Cela garantira que toutes les alertes qui partagent le community_id
que Suricata a ajouté à l'événement sont ajoutées à une chronologie pour une enquête plus approfondie :
Cliquez ensuite sur le lien Untitled Timeline en bas à gauche de votre navigateur. Ce lien vous amènera à une page qui n'affiche que les alertes avec le champ Suricata community_id
que vous souhaitez examiner.
La page de 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 sur le côté droit de la page et sélectionnez le bouton Alertes de détection, puis cliquez sur Enregistrer. Cette option limitera la chronologie pour n'afficher 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 en forme de crayon en haut à gauche de la page de la chronologie. La capture d'écran suivante indique où trouver l'icône en forme de crayon et le bouton Toutes les sources de données :
Vous pouvez ajouter du texte dans le champ de description si vous souhaitez ajouter des informations supplémentaires à 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.
À l'étape suivante, vous utiliserez vos vues chronologiques des événements pour joindre des alertes à l'application Cases de Kibana dans la suite d'outils SIEM.
Étape 4 - Création et gestion des cas SIEM
À l'étape précédente, vous avez créé une chronologie pour regrouper les alertes et les paquets individuels en fonction du champ community_id
de Suricata. Dans cette section du didacticiel, 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 que vous êtes sur une page de chronologie dans votre navigateur. Cliquez sur le bouton Joindre au dossier en haut à droite de la page de chronologie, puis sur le bouton Joindre au nouveau dossier dans la liste qui s'affiche.
Vous serez redirigé vers une page où vous pourrez saisir des informations sur l'incident sur lequel vous enquêtez. Dans l'exemple de capture d'écran suivant, 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 balises facultatives. Dans cet exemple, le nom du cas est SSH TRAFFIC on non-SSH port from 203.0.113.5
puisqu'il s'agit du type spécifique de trafic et d'hôte que nous étudions. Avec de nombreux événements à étudier dans votre système SIEM, un schéma de nommage comme celui-ci vous aidera à suivre les cas, les délais et les alertes puisque le nom correspondra à l'alerte Kibana et au champ de message de la signature Suricata.
Faites défiler vers le bas de la page et cliquez sur le bouton Créer un dossier. Votre navigateur sera sur une page qui affiche 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 à l'étape précédente de ce didacticiel.
Pour chaque alerte que vous souhaitez inclure dans le cas, cliquez sur l'icône Plus d'actions sur l'alerte. Cliquez sur Ajouter au dossier existant.
Cliquez sur le nom du cas dans le modal qui apparaît pour ajouter l'alerte au cas. Assurez-vous de sélectionner le cas qui correspond à la chronologie et aux alertes sur lesquelles vous enquêtez. Répétez l'ajout de chaque alerte de la liste au cas existant.
Visitez à nouveau l'application Cases 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 :
De là, vous pouvez faire défiler jusqu'au bas de l'affaire et ajouter toute information supplémentaire que vous souhaitez. Par exemple, toutes les mesures que vous avez prises pour enquêter sur une alerte ou des alertes, les changements de configuration de Suricata comme une règle nouvelle ou modifiée, la transmission à un autre membre de l'équipe ou tout autre élément pertinent au 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 dans un emplacement central.
Conclusion
Dans ce didacticiel, vous avez développé votre système Suricata et Elastic Stack SIEM existant en ajoutant des règles à Kibana qui génèrent des alertes sur un trafic spécifique d'intérêt. Vous avez également créé une chronologie ou des chronologies pour regrouper des ensembles d'alertes en fonction de leur community_id
. Enfin, vous avez créé un cas et y avez lié votre chronologie, ainsi que les alertes individuelles qui vous intéressent.
Avec ce système SIEM en place, vous pouvez désormais suivre les événements de sécurité sur vos systèmes à presque toutes les échelles. Au fur et à mesure que vous vous familiariserez avec Suricata et que vous suivrez les alertes qu'il génère dans votre Kibana SIEM, vous pourrez personnaliser les alertes Suricata et les actions par défaut qu'il prend en fonction de votre réseau particulier.
Pour plus d'informations sur les outils SIEM de Kibana, consultez la Elastic Security Documentation officielle. Les guides y expliquent comment utiliser les règles, les alertes, les chronologies et les cas de manière beaucoup plus détaillée.
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énement Suricata et les fonctionnalités SIEM sur une seule page.