
Pipeline de sécurité open-source auto-hébergé pour l'IT, l'IA et l'OT. Connexion requise. Preuves en sortie. : normalisation OCSF, 46 règles de détection (étiquetées MITRE/ATLAS/ICS), corrélation, packages de preuves, brouillons NIS2, console React reconstruite + démo GitHub Pages. Apache-2.0.
Connexion. Preuves à l'appui.
Pipeline de sécurité open source pour l'IT, l'IA et l'OT : des journaux bruts à un incident vérifié et à une notification NIS2 en brouillon.
Page du projet et démo en direct · Démarrage rapide · Console · Architecture · Statut (SSOT)
Les badges reflètent la dernière exécution réelle sur
main, pas une promesse. Les constats restants de Scorecard sont des compromis acceptés et documentés, et non des lacunes ; voir SSOT.md §1.
FENGARDE relie la télémétrie de sécurité de l'IT, de l'IA et de l'OT pour montrer ce qui s'est produit, qui ou quoi a agi, ce qui a été affecté, comment les événements sont liés et quelles preuves étayent la conclusion.
Conçu pour le Mittelstand industriel européen : open source, auto-hébergé, Apache-2.0, avec un parcours de notification d'incident NIS2 en brouillon, un générateur de rapports déterministe en allemand/anglais, un RBAC/MFA/journal d'audit/multi-tenant activables en option pour les déploiements de type MSP, un profil HA activable en option (testé par kill en direct, pas seulement câblé), et un triage par IA qui ne quitte jamais votre réseau.
Les journaux sont collectés, normalisés vers un schéma unique (OCSF), passés dans des règles de corrélation sur une fenêtre glissante, regroupés en incidents avec un graphe causal et un paquet de preuves chaîné par hachage, puis indexés dans OpenSearch. Chaque service est indépendant et ne communique avec les autres que par un bus de messages, de sorte que chaque pièce peut être mise à l'échelle ou remplacée sans réécrire les autres.
OLLAMA_URL est défini ; sinon un
stub déterministe étiqueté. Les données d'alerte ne transitent jamais par une API de LLM tierce,
et la console indique quel moteur a réellement tourné. La qualité des verdicts est médiocre dans les deux modèles mesurés (qwen2.5:3b 1 alerte étiquetée correcte sur 54, qwen2.5:7b 7 sur 54, majoritairement des réponses suspicious) ; voir
eval/llm_triage/RESULTS.md.OpenSearch, pas Elastic : pas d'astérisque de licence sur le moteur de stockage (ADR 003). Bon à savoir, mais pas un différenciateur face à Wazuh (son indexeur est aussi un fork d'OpenSearch).
| Méthode | Prérequis | Ce que vous obtenez |
|---|---|---|
| La page du projet | Un navigateur | La véritable console sur un enregistrement d'une exécution en laboratoire, avec une attaque rejouable, l'architecture, les 46 règles et quatre démonstrations enregistrées. Statique ; les écritures restent dans votre navigateur (docs/console-demo.md précise exactement ce qui est réel). |
make e2e | Python 3 | Une attaque par force brute SSH jusqu'à une véritable alerte, idempotente en cas de rejeu. Sans Docker, Redis ni OpenSearch. |
make demo | Docker | La pile complète en direct ; une véritable alerte de force brute apparaît dans la console en une minute environ. |
git clone https://github.com/supermhel/fengarde.git && cd fengarde
make preflight # doctor: checks vm.max_map_count, Docker RAM, free ports
make demo # docker compose up -- a real SSH brute-force alert appears
# in the dashboard within ~30-60s, no manual step
# open http://localhost:8080
Pas de Docker sous la main ? L'ensemble du pipeline de détection fonctionne sans aucune infrastructure :
make e2e # SSH brute-force -> real alert -> idempotent replay, no Docker/Redis/OpenSearch
bash tools/demo.sh # same test, narrated (Windows: powershell -File tools\demo.ps1)
Ce que vous observez : 10 échecs de connexion provenant d'une même IP en 60 secondes (SSH
Failed password ou Windows EventID 4625 — les deux normalisés vers le même événement
OCSF Authentication) déclenchent
common_bruteforce.yml
(threshold: 10, window_seconds: 60, regroupés par IP source), et l'alerte
apparaît dans la liste des alertes du tableau de bord, idempotente en cas de renvoi.
Prérequis : Docker Desktop ou Docker Engine + Compose v2, ≥4 Go de RAM
alloués à Docker ; Linux, macOS ou Windows via WSL2 (conteneurs Linux,
scripts POSIX sh). Python 3 uniquement si vous contribuez un parseur — pas besoin
de Docker pour cela (voir Contributing).
vm.max_map_countsudo sysctl -w vm.max_map_count=262144
# persist across reboots:
echo 'vm.max_map_count=262144' | sudo tee /etc/sysctl.d/99-fengarde.conf