Ce projet vise à améliorer la sécurité de la partie application de Open Systems Interconnection en locurence le protocole HTTP qui est utilisé pour la communication entre les client Web et les serveurs. Pour un deployment simplifié stable on ce base sur le framework de dev. Web Flask, le but de l'exercice est de deployer un eventaille de techniques et fonctionnalitées de securité pour pré-munir les actions malveillantes lié à la couche 7, en détectant et bloquant les attaques par force brute, les injections SQL, les ataques XSS et Les agents d'automatisation d'attaque connu en Cyber-Sécurité. ET fournir également un système de logging pour garder une trace des requêtes malveillantes et des adresses IP associées, comportement correspondant à un WAF (Web Application Firewall).
docker pull jhighpriestcode/flask-ids-waf:version-1.0
Lancer le container Docker (⚠️spécifié votre adresse mail de reception)
docker run -p 5000:5000 -e MAIL_RECEPTOR=your_email@example.com jhighpriestcode/flask-ids-waf:version-1.0
http://127.0.0.1:5000
.git clone https://github.com/AGuerand/Projet-Secu-B3Ynov.git
pip install requirements.txt
su
python app.py
http://127.0.0.1:5000
.Les routes login
et register
de l'application sont protégées par la fonction log_and_protect
. Elle vérifie les tentatives de connexion échouées pour détecter les attaques par force brute et analyse les entrées utilisateur pour détecter les injections SQL et les attaques XSS.
Si une attaque est détectée, l'adresse IP de l'émetteur est bloquée temporairement pendant 5 minutes, et un message d'erreur est renvoyé. Les requêtes suspectes sont enregistrées dans un fichier http_requests.log
, y compris l'heure, la date et l'adresse IP de l'émetteur et un message d'avertissement est envoyé à l'adresse mail de l'Administrateur.
app.py
: fichier principal de l'application Flask, contenant les routes, les modèles de base de données et les configurations.forms.py
: définition des formulaires de connexion et d'enregistrement avec les validateurs appropriés.http_logger.py
: fonctions de protection et de journalisation des requêtes HTTP. Implémente la détection des attaques et le blocage des adresses IP.templates
: dossier contenant les modèles HTML pour les pages de connexion et d'enregistrement.http_requests.log
: fichier de journalisation des requêtes HTTP (sera créé automatiquement lors de l'exécution de l'application).Vous pouvez personnaliser les paramètres de sécurité en modifiant les variables globales dans http_logger.py
:
max_attempts
: Nombre de tentatives de connexion échouées autorisées avant le blocage (par défaut : 5)block_duration
: Temps en secondes avant qu'une tentative de connexion échouée expire (par défaut : 300)block_duration_ip
: Durée de blocage en secondes pour une adresse IP (par défaut : 300)mail_receptor
: Adresse mail de Reception des Avertissement des attaquesVeuillez noter que l'approche utiliser peut ne pas être à 100 % fiable, car elles se bases sur les caracteristiques simples pour identifier les différentes types de attaques, certaines attaques avancé peuvent avoir raison de ce projet mais les attaques par soumision de formulaire sont gerer de facon à ralentir un maximum l'attaquant, le controle du flux de requete et la standardisation des formulaires clients joue un grand un role dans ce projet . Par exemple:
Pour réaliser ce projet, voici une liste de ressources et de documentations utilisé :
Flask : Le framework web Python utilisé pour développer l'application.
Flask-SQLAlchemy : L'extension Flask pour interagir avec des bases de données SQL.
Flask-Login : L'extension Flask pour gérer les sessions utilisateurs.
WTForms : Une bibliothèque Python pour gérer les formulaires web.
SQLite : Le système de base de données SQL utilisé pour stocker les informations des utilisateurs.
Gmail SMTP :
Captcha : Bibliotheque Captcha de Python
Sécurité web : Ressources pour comprendre les attaques par force brute, les injections SQL, les attaques XSS et les agents de cybersécurité.