RootView est un analyseur de logs serveur via SSH développé pour automatiser et simplifier la détection d'intrusions (Blue Team). Conçu pour lutter contre la "fatigue des logs", il permet de surveiller un parc de serveurs Linux sans nécessiter l'installation d'agents lourds sur les machines cibles.
- Production
- Fonctionnalités Clés
- Architecture et Technologies
- Prérequis et Compatibilité
- Configuration SSH (Ajout de serveur)
- Installation et Déploiement
- Utilisation
- Simulation d'Attaques
- Tests
RootView est déployé et accessible à l'adresse suivante :
Hébergé sur AWS EC2 (Ubuntu), déployé avec Gunicorn + Nginx.
- Surveillance "Agentless" : Connexion distante sécurisée via SSH sans installation de logiciel sur le serveur cible.
- Moteur de Détection Multi-Vecteurs :
- Système : Brute Force SSH, Utilisation d'utilisateurs invalides (Invalid User).
- Web : Injections SQL (SQLi), Path Traversal (LFI), Déni de Service (DOS), Brute Force sur des endpoints spécifiques (ex:
/login).
- Threat Intelligence : Évaluation dynamique de la réputation des adresses IP attaquantes via l'API AbuseIPDB.
- Tableau de Bord Interactif : Visualisation claire des menaces qualifiées, avec accès aux logs bruts (preuves) et mise en évidence des IP listées.
- Playbook de Remédiation : Recommandations techniques intégrées (Fail2ban, configuration SSH, requêtes préparées) pour contrer les vecteurs d'attaque détectés.
L'application repose sur une architecture monolithique robuste :
- Backend : Python3 avec le framework Web Flask.
- Base de données : PostgreSQL (gérée via Flask-SQLAlchemy) pour garantir l'intégrité des données et la gestion des accès concurrents en production.
- Client Réseau : Paramiko pour la gestion du protocole SSH et l'extraction des logs.
- Automatisation : Flask-APScheduler pour déclencher des analyses globales à intervalles réguliers.
- Frontend : HTML5, Tailwind CSS, et Bootstrap Icons pour une interface moderne.
- Déploiement (Production) : Gunicorn (Serveur WSGI) et Nginx (Reverse Proxy) sur environnement Linux.
Pour que RootView puisse analyser correctement un serveur cible, ce dernier doit respecter les conditions suivantes :
- Système d'exploitation : Distribution Linux (Debian / Ubuntu recommandés).
- Service SSH : Accessible et configuré.
- Fichiers de logs requis :
- Pour les attaques système :
/var/log/auth.log. Le compte utilisé doit avoir les droits de lecture sur ce fichier (idéalement viasudosans mot de passe pour la commandetail). - Pour les attaques Web :
/var/log/nginx/access.logou/var/log/apache2/access.log.
- Pour les attaques système :
RootView utilise l'authentification par clé privée pour se connecter à vos serveurs de manière sécurisée. La librairie réseau (Paramiko) supporte les clés au format RSA ou Ed25519.
Voici la procédure complète pour préparer un serveur cible et récupérer la clé privée nécessaire à l'interface RootView :
Ouvrez un terminal et exécutez la commande suivante pour créer une clé hautement sécurisée (Ed25519) :
ssh-keygen -t ed25519 -f ~/.ssh/rootview_key -C "rootview_monitoring"Laissez la "passphrase" (mot de passe) vide pour permettre à l'application de s'y connecter automatiquement.
Copiez la clé publique vers le serveur que vous souhaitez surveiller :
ssh-copy-id -i ~/.ssh/rootview_key.pub utilisateur_cible@adresse_ip_du_serveurRootView a besoin de la clé privée pour s'authentifier. Affichez-la avec cette commande :
cat ~/.ssh/rootview_keyCopiez l'intégralité du texte affiché, incluant les lignes -----BEGIN OPENSSH PRIVATE KEY----- et -----END OPENSSH PRIVATE KEY-----. C'est cette valeur qu'il faudra coller dans le champ "Clé privée" lors de l'ajout du serveur dans le tableau de bord.
git clone https://github.com/NO6B/RootView.git
cd RootViewSi vous déployez sur un environnement Linux (Debian/Ubuntu), installez PostgreSQL et les librairies nécessaires :
sudo apt update
sudo apt install postgresql postgresql-contrib libpq-devIl est recommandé d'isoler les dépendances Python du projet :
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtCréez un fichier .env à la racine du projet et ajoutez-y les paramètres suivants :
# Sécurité de l'application
SECRET_KEY=votre_cle_secrete_aleatoire_et_robuste
# Connexion à la base de données PostgreSQL
SQLALCHEMY_DATABASE_URI=postgresql://user_name:votre_mot_de_passe@localhost/rootview
# Clé API AbuseIPDB (Threat Intelligence)
api_key=votre_cle_api_abuseipdb_ici
# Seuils de déclenchement des alertes
SEUIL_BRUTE_FORCE_SSH=5
SEUIL_DOS=50
SEUIL_BRUTE_FORCE_WEB=10SEUIL_BRUTE_FORCE_SSH, SEUIL_DOS et SEUIL_BRUTE_FORCE_WEB
sont obligatoires — l'application ne démarrera pas sans elles.
La clé api_key AbuseIPDB est optionnelle : sans elle, les alertes
sont créées sans score de réputation.
(Note : Vous pouvez obtenir une clé API gratuite en créant un compte sur AbuseIPDB.)
sudo -u postgres psqlPuis dans le shell PostgreSQL :
CREATE USER rootview_user WITH PASSWORD 'rootview_motdepass';
CREATE DATABASE rootview OWNER rootview_user;
\qRemplacez rootview_user et rootview_motdepass par les valeurs que vous mettez dans SQLALCHEMY_DATABASE_URI.
Assurez-vous d'avoir créé votre utilisateur et votre base de données PostgreSQL au préalable sur votre système. Ensuite, exécutez cette commande pour vous y connecter et générer les tables nécessaires (Utilisateur, Serveur, Alerte, CacheIP) :
python init_db.pypython run.pyNote : La commande
python run.pyutilise le serveur de développement Flask et est réservée au développement local uniquement.
Pour un environnement de production stable, utilisez Gunicorn (idéalement derrière un reverse proxy Nginx géré par systemd) :
gunicorn -w 5 -b 127.0.0.1:5000 run:app- Inscription et Connexion : Accédez à la plateforme et créez votre premier compte administrateur robuste (minimum 8 caractères, majuscule, chiffre, caractère spécial).
- Ajouter un serveur : Naviguez dans la section "Serveurs" et cliquez sur "Nouveau serveur". Renseignez :
- Le nom d'usage (ex: Serveur Prod).
- L'adresse IP.
- L'utilisateur SSH (ex: ubuntu ou root).
- L'endpoint Web à surveiller (ex:
/loginou/wp-admin). - La clé privée générée lors de la configuration SSH.
- Surveillance : Le planificateur tourne en tâche de fond (toutes les 5 minutes). Vous pouvez également déclencher une analyse manuelle en cliquant sur "Lancer l'analyse" depuis le Dashboard.
Pour vérifier le bon fonctionnement de RootView et faire une démonstration active de ses capacités, un script de simulation est fourni. Il génère un trafic malveillant détectable par le moteur d'analyse.
- Rendez le script exécutable :
chmod +x tests/test_intrusions.sh- Éditez le fichier
test_intrusions.shpour y insérer l'adresse IP de votre serveur cible (variableCIBLE). - Exécutez le script depuis une machine distante :
./tests/test_intrusions.sh- Retournez sur le tableau de bord RootView et lancez une analyse pour visualiser l'apparition des nouvelles alertes (Brute Force, SQLi, Path Traversal, etc.).
RootView dispose d'une couverture de tests complète répartie en trois niveaux :
| Fichier | Type | Tests |
|---|---|---|
tests/test_analyseur.py |
Unitaires + Intégration | 12 |
tests/test_integration_db.py |
Intégration PostgreSQL | 2 |
tests/routes_test.py |
Routes HTTP | 14 |
Pour lancer les tests :
pytest -v
Projet développé dans le cadre d'un portfolio cybersécurité. Usage strictement défensif.