Elasticsearch et Fluentd
La pile EFK
Nous avons déjà examiné la pile ELK, mais comme promis au début de la série, nous voulions également vous présenter une alternative à Logstash. Fluentd est plus léger et certains administrateurs le préfèrent.
Comme dans nos blogs précédents, vous pouvez configurer un environnement de travail en clonant notre dépôt Git et suivre les instructions.
Pourquoi EFK pour la sécurité ?
La pile EFK offre plusieurs avantages pour la surveillance de la sécurité. Comme nous l'avons mentionné précédemment, Elasticsearch fournit des capacités de recherche rapides à travers d'énormes ensembles de données, ce qui le rend idéal pour analyser les journaux de sécurité provenant de plusieurs sources. Fluentd, tout comme Logstash dans nos exemples précédents, agit comme une couche de journalisation unifiée qui peut analyser, transformer et acheminer les données de journal provenant de diverses sources vers Elasticsearch. Kibana sert de frontend de visualisation, tandis qu'Elastic Security ajoute des capacités SIEM dédiées, y compris la chasse aux menaces, la gestion des cas et des règles de détection automatisées.
Dans les prochaines sections, nous discuterons des principales différences entre Fluentd et Logstash.
Architecture et performance
Logstash est construit en Java/JRuby et tend à être plus gourmand en ressources, avec une utilisation de mémoire plus élevée mais un excellent débit de traitement. Il utilise une architecture basée sur des pipelines avec des étapes d'entrée → filtre → sortie qui est particulièrement bien adaptée aux transformations complexes.
Fluentd est écrit en Ruby avec des parties critiques pour la performance en C, ce qui le rend plus léger en utilisation de mémoire et plus efficace pour le streaming de journaux à fort volume. Il utilise un système de routage basé sur des tags qui peut être plus flexible pour des scénarios de routage de journaux complexes.
Capacités d'analyse Syslog
Logstash excelle dans l'analyse syslog avec :
- Des plugins d'entrée syslog intégrés riches qui gèrent divers formats RFC (RFC3164, RFC5424)
- Des motifs grok puissants pour une analyse personnalisée
- Un support regex solide pour l'extraction de messages complexes
- Une excellente gestion des données structurées au sein des messages syslog
Fluentd offre :
- Un bon support syslog via des plugins comme fluent-plugin-syslog
- Une analyse plus légère qui est efficace pour des scénarios à fort débit
- Mieux adapté aux scénarios où vous devez préserver la structure originale du message
- Une configuration plus simple pour l'ingestion de syslog de base
Configuration et facilité d'utilisation
Logstash utilise un langage spécifique au domaine qui est intuitif pour une pensée basée sur des pipelines, mais peut devenir complexe pour des règles de traitement intriquées. La configuration est très expressive pour la transformation des données.
Fluentd utilise un format de configuration plus simple que beaucoup trouvent plus facile à comprendre et à maintenir, surtout pour des scénarios lourds en routage.
Écosystème et plugins
Logstash dispose d'un écosystème mature avec de nombreux plugins de filtrage spécifiquement conçus pour le traitement et l'enrichissement des journaux. Il s'intègre parfaitement avec l'ensemble Elastic Stack.
Fluentd a un large écosystème de plugins et est plus neutre vis-à-vis des fournisseurs, ce qui facilite l'intégration avec divers backends au-delà d'Elasticsearch.
Utilisation de la mémoire et des ressources
Pour le traitement syslog spécifiquement, Fluentd utilise généralement moins de mémoire et a une empreinte plus petite, ce qui peut être crucial dans des environnements à ressources limitées ou lors du traitement de volumes très élevés de données syslog.
Logstash nécessite plus de ressources mais fournit plus de puissance de traitement pour des transformations et filtrages complexes.
Fiabilité et durabilité des données
Les deux gèrent le syslog de manière fiable, mais Fluentd dispose de mécanismes de mise en mémoire tampon et de réessai intégrés que certains trouvent plus robustes pour garantir la livraison des données. Logstash nécessite une configuration supplémentaire pour des garanties de fiabilité similaires.
Lequel devrais-je choisir ?
Si vous êtes déjà investi dans l'écosystème Elastic et avez besoin de capacités avancées de transformation des données, Logstash est un choix solide. Pour ceux qui privilégient l'efficacité des ressources et une configuration plus simple—surtout pour l'ingestion de syslog—Fluentd peut être le meilleur choix.
Pratique avec EFK
Configurer Elastic Security
Elastic Security est la base des capacités SIEM d'Elastic. Dans la section suivante, nous utiliserons notre environnement de jeu EFK Docker Stack pour l'explorer en pratique.
1. Clonez le dépôt Git : https://github.com/object1st/efk-stack.git
Remarque : Le dépôt est organisé comme indiqué ci-dessous. Plus tard dans le processus de configuration, vous devrez ajouter les mots de passe que vous créez aux fichiers de configuration fluentd.conf et kibana.yml.
2. Assurez-vous d'avoir installé docker et docker compose dans votre VM Ubuntu de test.Consultez notre blog précédent pour des instructions sur ce processus.
3. Changez de répertoire.
cd efk-stack
4. Exécutez cette commande pour démarrer l'environnement :
docker compose up -d
5. Vérifiez que tous les conteneurs fonctionnent :
docker ps
6. Vérifiez que les services fonctionnent sans erreurs dans les conteneurs :
docker logs elasticseach
docker logs kibana
docker logs fluentd
Remarque : Pour Kibana et Fluentd, vous verrez une erreur car nous n'avons pas encore configuré la sécurité.
Configurer les mots de passe et l'intégration de la sécurité
Étape 1 : Configurer les mots de passe pour Elasticsearch
1. Pour commencer, vous devrez créer des mots de passe pour les utilisateurs intégrés dans Elasticsearch. Exécutez la commande suivante :
docker exec -it elasticsearch bin/elasticsearch-setup-passwords interactive
2. Cela vous demandera de définir des mots de passe pour plusieurs utilisateurs. Vous n'avez besoin de vous souvenir que des mots de passe pour les deux utilisateurs suivants :
- elastic
- kibana_system
3. Pour les autres utilisateurs, vous pouvez entrer n'importe quel mot de passe—ils ne seront pas nécessaires pour ce tutoriel.
Étape 2 : Ajouter des mots de passe aux fichiers de configuration
1. Une fois que vous avez créé les mots de passe, ajoutez-les à votre fichier de configuration Kibana :
Fichier : kibana.yaml
2. Mettez à jour ou ajoutez les lignes suivantes avec les mots de passe que vous avez définis :
3. Assurez-vous de le remplacer par le mot de passe réel que vous avez créé.
Étape 3 : Redémarrer les conteneurs Kibana
Après avoir mis à jour le fichier kibana.yaml avec le mot de passe correct, redémarrez le conteneur Kibana pour appliquer les modifications :
docker compose restart kibana
Étape 4 : Mettre à jour la configuration de Fluentd
Ensuite, mettez à jour votre fichier fluentd.conf pour inclure le mot de passe Elasticsearch que vous avez créé précédemment. Cela garantit que Fluentd peut s'authentifier correctement lors de l'envoi de journaux à Elasticsearch.
Remarque : Assurez-vous que le mot de passe est stocké en toute sécurité et n'est pas exposé dans le contrôle de version.
Étape 5 : Redémarrer Fluentd
Une fois que vous avez mis à jour la configuration, redémarrez le conteneur Fluentd :
docker compose restart fluentd
Étape 6 : Vérifier l'état des conteneurs
Pour confirmer que Kibana et Fluentd fonctionnent correctement, vérifiez leurs journaux :
Journaux de Fluentd :
docker logs fluentd
Journaux de Kibana :
docker logs kibana
Recherchez toute erreur ou avertissement qui pourrait indiquer des problèmes d'authentification ou de connectivité.
Étape 7 : Accéder à Kibana
1. Vous serez accueilli par l'écran de connexion suivant :
2. Connectez-vous en utilisant le mot de passe que vous avez créé pour l'utilisateur Elastic.
Ingestion d'un message syslog de test dans Fluentd
Pour tester votre configuration, vous enverrez un message syslog d'exemple dans Fluentd, qui l'analysera et le transmettra à Elasticsearch. Kibana vous permettra ensuite de visualiser les données et de créer des alertes à l'aide d'Elastic Security.
Étape 1 : Créer un modèle d'index
Avant d'envoyer des données, vous devez définir un modèle d'index qui correspond à la structure des journaux que Fluentd enverra.
- Naviguez vers le dossier Exemples dans votre dépôt cloné.
- Ouvrez le fichier nommé create_index_template.txt.
- Remplacez le mot de passe de l'espace réservé par votre mot de passe Elastic réel.
- Copiez tout le contenu du fichier.
- Collez-le dans votre terminal et appuyez sur “Entrée” pour exécuter la commande.
- Si cela réussit, vous devriez voir une réponse comme :
Cela confirme que le modèle d'index a été créé et est prêt à recevoir des données.
Étape 2 : Envoyer un message Syslog de test Veeam
Exécutez la commande suivante dans votre terminal pour simuler une alerte de ransomware Veeam :
echo '<14>1 2025-03-20T14:06:09.662307+02:00 VBRSRV01 Veeam_MP - - [origin enterpriseId="31023"] [categoryId=0 instanceId=41600 DetectionTimeUTC="03/20/2025 13:05:41" OibID="0e54d3bf-add8-48eb-9122-fad3ac1e8fb3" ActivityType="EncryptedData" UserName="TECH\user1" ObjectName="VM01" VbrHostName="vbrsrv01.tech.local" Description="Potential malware activity detected"]' | nc -u -q0 localhost 5514
Ce message sera récupéré par Fluentd, analysé et envoyé à Elasticsearch.
Étape 3 : Créer un modèle d'index dans Kibana
1. Dans Kibana, allez à Gestion de la pile → Modèles d'index.
2. Cliquez sur “Créer un modèle d'index.”
3. Dans le champ de nom du modèle d'index, entrez :
veeam-logs-*
4. Sélectionnez le champ de timestamp approprié dans le menu déroulant.
5. Cliquez sur “Créer un modèle d'index.”
Vous devriez maintenant voir des données du message de test que vous venez d'envoyer.
Création de règles de détection dans Elastic Security
Avec des données entrant dans Elasticsearch, vous pouvez maintenant créer des règles de détection pour identifier des activités suspectes.
Étape 1 : Créer une clé API pour les règles de détection
Exécutez la commande suivante pour générer une clé API pour Elastic Security :
curl -u elastic:Yourelasticpassword -X POST "localhost:9200/_security/api_key" \
-H "Content-Type: application/json" \
-d'{
"name": "kibana-detection-rules",
"role_descriptors": {
"kibana_security": {
"cluster": ["manage_security", "monitor"],
"indices": [
{
"names": ["*"],
"privileges": ["read", "write", "create_index", "view_index_metadata"]
}
]
}
}
}'
Étape 2 : Initialiser le moteur de détection
Exécutez cette commande pour initialiser le moteur de détection dans Kibana :
curl -u elastic:YOURELASTICPASSWORD -X POST "localhost:5601/api/detection_engine/index" -H 'Content-Type: application/json' -H 'kbn-xsrf: true'
Étape 3 : Créer une règle de détection personnalisée
1. Dans Kibana, allez à Sécurité → Règles.
2. Cliquez sur “Créer une nouvelle règle.”
3. Choisissez “Requête personnalisée.”
4. Sous Modèles d'index, supprimez les valeurs par défaut et ajoutez :
veeam-logs-*
5. Dans le champ de requête personnalisée, entrez :
activity_type: "EncryptedData"
6. Remplissez les détails de la règle :
- Nom : Veeam Alerte de ransomware
- Description : Détecte une activité potentielle de ransomware à partir des alertes Veeam
- Sévérité : Élevée
- Score de risque : 75
7. Cliquez sur “Continuer” et configurez le calendrier :
- Pour les tests initiaux, envisagez de définir un intervalle de calendrier court—comme toutes les 20 secondes—pour vérifier rapidement que les alertes sont déclenchées comme prévu. Vous pouvez ajuster cet intervalle plus tard en fonction de vos besoins opérationnels.
8. Ignorez les actions de règle pour l'instant (optionnel). Nous n'ajouterons aucune action de règle, mais vous pouvez expérimenter si vous souhaitez essayer différentes approches.
9. Cliquez sur “Créer et activer la règle.”
Étape 4 : Déclencher à nouveau l'alerte
Envoyez un autre message de test pour déclencher la règle :
echo '<14>1 2025-03-20T14:06:09.662307+02:00 VBRSRV01 Veeam_MP - - [origin enterpriseId="31023"] [categoryId=0 instanceId=41600 DetectionTimeUTC="03/20/2025 13:05:41" OibID="0e54d3bf-add8-48eb-9122-fad3ac1e8fb3" ActivityType="EncryptedData" UserName="TECH\user1" ObjectName="VM01" VbrHostName="vbrsrv01.tech.local" Description="Potential malware activity detected"]' | nc -u -q0 localhost 5514
Vous devriez maintenant voir l'alerte apparaître dans la section Sécurité → Alertes. Vous pouvez cliquer sur l'alerte pour voir les détails et l'accuser réception.
Création de tableaux de bord de sécurité
Pour construire un tableau de bord de sécurité, allez à Analyse → Tableau de bord et ajoutez ces visualisations :
- Tentatives d'authentification échouées au fil du temps : Un graphique linéaire montrant quand les échecs de connexion se produisent, vous aidant à repérer les modèles d'attaque et les périodes de forte activité.
- Principales adresses IP sources par tentatives échouées : Un tableau répertoriant les adresses IP avec le plus d'échecs de connexion, facilitant l'identification des récidivistes.
- Distribution géographique des attaques : Une carte montrant d'où proviennent les attaques, vous donnant une vue globale des origines des menaces.
- Ratio de succès vs échec d'authentification : Un graphique à secteurs comparant les connexions réussies et échouées pour mettre en évidence une activité inhabituelle.
- Chronologie du score de risque : Un histogramme montrant comment les scores de risque changent au fil du temps, vous aidant à détecter des pics dans les niveaux de menace.
Fonctionnalités de sécurité avancées
Elastic Security offre des outils pour améliorer la détection et l'analyse des menaces :
- Chronologie : Permet aux analystes de revoir les événements de sécurité en détail et de comprendre comment les attaques se déroulent.
- Ajustement des règles de détection : Aide à réduire les fausses alertes tout en maintenant une détection précise. Ajustez régulièrement les règles en fonction du comportement normal du système. Utilisez l'apprentissage automatique pour repérer une activité inhabituelle.
- Gestion des cas : Suit les enquêtes et conserve des dossiers d'audit. Les règles de détection peuvent automatiquement créer des cas avec des détails pertinents pour accélérer la réponse.
Considérations de production
Pour des déploiements sécurisés et fiables :
- Renforcement de la sécurité : Utilisez le chiffrement TLS, appliquez l'authentification et l'autorisation, et appliquez des mises à jour régulières. Déployez Elasticsearch dans un cluster pour une haute disponibilité et configurez des sauvegardes.
- Planification des ressources : Elasticsearch a besoin de suffisamment de mémoire et de stockage rapide. Définissez des politiques de conservation des journaux qui équilibrent sécurité et coût. Utilisez la gestion du cycle de vie des index pour gérer automatiquement les anciennes données.
- Sécurité réseau : Utilisez des pare-feu pour limiter l'accès aux composants EFK. Segmentez votre réseau pour garder le système de sécurité séparé des autres infrastructures.
Conclusion
La pile EFK avec Elastic Security vous offre une base solide pour surveiller et détecter les menaces. Avec cette configuration, vous pouvez collecter, traiter et analyser les journaux de sécurité, détecter automatiquement les menaces et visualiser les données à travers des tableaux de bord.
À mesure que votre système se développe, élargissez vos sources de journaux, créez des règles de détection personnalisées et connectez-vous à des flux d'intelligence sur les menaces externes. Une surveillance de sécurité efficace nécessite des mises à jour régulières, des ajustements et des analystes qualifiés. La pile EFK fournit les outils—le succès dépend de la manière dont vous les utilisez.