
Première itération du WAF de rétroaction basé sur ML
NGWAF est créé par @yupengfei, @zhangbosen, @matthewng et @elizabethlim.
Un merci spécial à @ruinahkoh pour ses contributions aux premières étapes de NGWAF.
NGWAF est une preuve de concept expérimentale et n'est pas prête pour une utilisation en production dans sa forme actuelle.
Sommaire
Les Composants | Les Engrenages de NGWAF
Le Cerveau : WAF basé sur l'apprentissage automatique
Le Miroir : Environnement de Quarantaine Interactif et Évolutif
La Bibliothèque : Séquence de Réentraînement pour Renforcer le Cerveau
Avec la croissance explosive des applications web depuis le début des années 2000, les attaques basées sur le web sont devenues progressivement plus courantes. Une solution courante est le Pare-feu d'Application Web (WAF). Cependant, ajuster les règles des WAF actuels pour améliorer les mécanismes de détection peut être complexe et difficile. NGWAF cherche à résoudre ces inconvénients avec une architecture novatrice basée sur l'apprentissage automatique et une mise en quarantaine vers un système leurre.
Inspiré par les problèmes réels rencontrés lors de l'exploitation de WAF, NGWAF vise à simplifier et réinventer les opérations des WAF grâce aux processus suivants :
| Problème | Fonctionnalité NGWAF |
|---|---|
| La maintenance des mécanismes de détection et des règles peut être complexe | Utiliser l'apprentissage automatique pour automatiser le processus de création et de mise à jour des mécanismes de détection |
| Le blocage immédiat du trafic malveillant réduit les chances d'apprendre du comportement des acteurs malveillants pour de futures améliorations du WAF | Élimination des menaces via une quarantaine redirigée, contrairement au rejet et au blocage conventionnels du trafic malveillant |
Pour rendre le déploiement simple et portable, nous avons conteneurisé les différents composants de l'architecture à l'aide de Docker et les avons configurés dans un fichier docker-compose. Cela permet de le faire fonctionner sur une installation fraîche rapidement et facilement, car les dépendances sont gérées automatiquement par Docker. Le déploiement peut être étendu à un cluster Kubernetes local ou dans le cloud, ce qui le rend évolutif car les utilisateurs peuvent augmenter le nombre de nœuds/pods pour gérer de grandes quantités de trafic.
Le déploiement a été testé sur macOS (Docker Desktop) et Linux (Ubuntu).
NGWAF fonctionne prêt à l'emploi avec trois composants clés, ces composants comme mentionné ci-dessus sont tous conteneurisés et évolutifs selon l'utilisation souhaitée. La ressource protégée peut être personnalisée en modifiant le déploiement dans la configuration.
Architecture de haut niveau de NGWAF avec les flux de trafic attendus des différentes parties
NGWAF a été conçu avec les avantages utilisateur clés suivants à l'esprit :
NGWAF remplace les ensembles de règles traditionnels par des modèles d'apprentissage profond pour réduire la complexité de la gestion et de la mise à jour des règles. Au lieu de modifier manuellement les règles, l'apprentissage automatique de NGWAF automatise le processus d'apprentissage des schémas à partir de données malveillantes. Les données collectées dans l'environnement de quarantaine sont automatiquement nettoyées et regroupées par lots, ce qui permet de les réentraîner dans notre modèle de détection si souhaité.
NGWAF adopte une architecture novatrice comprenant un environnement interactif et de quarantaine conçu pour isoler les attaquants potentiels hostiles. Contrairement aux WAF conventionnels qui bloquent dès la détection, NGWAF redirige les acteurs malveillants vers des systèmes émulés, les piégeant pour atténuer l'impact de leurs actions malveillantes. L'environnement agit également comme un puits pour recueillir les méthodes d'attaque actuelles, permettant l'observation et la collecte de données malveillantes. Ces données peuvent être utilisées pour améliorer davantage la capacité de détection de NGWAF.
NGWAF en action : Lors de la détection d'une injection SQL, NGWAF redirige vers notre environnement de quarantaine, au lieu de rejeter ou bloquer la tentative.
Le principe directeur derrière la création de NGWAF est de se prémunir contre les risques mis en évidence dans le document de sensibilisation standard du Open Web Application Security Project - Le OWASP Top 10 2021.
Les données d'entraînement et les vérifications de conformité pour NGWAF sont collectées et effectuées sur la base de cette exigence.
Qui a besoin de manuel quand on peut passer au NEURONAL
Au lieu d'ensembles de règles traditionnels qui nécessitent que les analystes identifient et ajoutent manuellement des règles au fil du temps, NGWAF exploite des pipelines d'apprentissage automatique de bout en bout pour le mécanisme de détection, réduisant considérablement la complexité de la gestion des règles WAF, en particulier pour la détection de charges utiles complexes.
Pour ce faire, nous devions d'abord créer un modèle de base et une architecture que les utilisateurs peuvent utiliser comme point de départ, avant de pouvoir utiliser ultérieurement les données collectées à partir de leurs propres applications pour un réentraînement et un réglage fin :
L'architecture générale du modèle de base est un simple RNN avec un module LSTM bidirectionnel comme ci-dessous :
Image tirée de Tensorflow (lien)
En utilisant cette architecture RNN, nous avons pu obtenir des améliorations de performance par rapport à des modèles plus simples :
Bien que nous ayons inclus des journaux provenant de diverses applications afin d'améliorer la généralisabilité du modèle de base, une maintenance supplémentaire et un réentraînement du modèle seront importants pour :
Pour répondre à cela, les utilisateurs de NGWAF bénéficient de notre pipeline de réentraînement de modèle de bout en bout intégré, et peuvent facilement déclencher une maintenance du modèle en quelques étapes simples sans avoir à creuser sous le capot. (Voir Section 3 ci-dessous).
Ne les laissez pas partir, DÉTENEZ-LES !
Contrairement aux WAF traditionnels où le trafic malveillant est bloqué ou rejeté immédiatement, NGWAF adopte une approche plus flexible. Il redirige et détient les acteurs malveillants dans un environnement de quarantaine. Cet environnement se compose de divers pots de miel émulés interactifs pour tenter de recueillir davantage de méthodes/données d'attaque, ces données seront utilisées pour potentiellement améliorer le taux de détection de NGWAF des attaques plus modernes et complexes.
Actuellement, l'environnement de quarantaine de NGWAF transmet toutes les données soumises par l'attaquant piégé à notre pile ELK pour analyse et visualisation. Les données sont automatiquement nettoyées en différents composants de la requête HTTP, puis conditionnées en interne sur le backend de l'environnement au format JSON avant d'être transmises. Cela contribue à réduire le coût de main-d'œuvre nécessaire pour nettoyer et indexer les données lorsque nous lançons le processus de réentraînement.
NGWAF permet actuellement aux utilisateurs d'apporter des modifications à l'aspect et à la convivialité front-end de nos pots de miel dans l'environnement de quarantaine (basé sur une version personnalisée de drupot). Les utilisateurs doivent simplement remplacer le dossier d'actifs dans le volume Docker par leurs actifs front-end de choix.
NGWAF s'adapte également aux utilisateurs qui souhaitent lier leurs propres pots de miel dans le cadre de l'environnement de quarantaine. Les utilisateurs doivent simplement transmettre les requêtes HTTP du pot de miel au serveur backend de l'environnement (les processus backend nettoieront automatiquement et transmettront les données au tableau de bord d'analyse - pile ELK).
Intelligent n'est vraiment intelligent que si vous pouvez continuer d'apprendre
À mesure que de nouvelles charges utiles et vecteurs d'attaque émergent, il est important d'améliorer les capacités de détection pour garantir la sécurité. Par conséquent, une fonction de réentraînement est intégrée dans NGWAF pour garantir que les défenseurs puissent entraîner le modèle d'apprentissage automatique à détecter ces charges utiles plus récentes. Les utilisateurs qui ne sont pas familiers avec la science des données ou les réseaux de neurones pourront toujours affiner les modèles avec cette interface simple, car les étapes complexes sont gérées pour eux.
Les utilisateurs doivent uniquement télécharger un petit échantillon de données étiquetées provenant de leur propre système en direct (par exemple, quelques milliers), qui sera utilisé pour affiner le modèle existant sur le backend :
Lorsque l'entraînement est terminé, les utilisateurs recevront également quelques diagnostics de modèle succincts (par exemple, performance sur l'ensemble de test et à différents seuils de score) pour évaluer le nouveau modèle.
Pour déclencher le processus de réentraînement, rendez-vous sur le tableau de bord et suivez ces étapes :
payload [str] : cela doit être soit la charge utile de votre système, soit quelques exemples basés sur des chaînes (par exemple, des exemples d'injection SQL)label [int] : cela doit être 0 pour les exemples non malveillants et 1 pour les exemples malveillantsis_url [bool] : cela doit être TRUE si la charge utile provient de votre système (c'est-à-dire incluant d'autres informations système telles que le chemin et le périphérique), et FALSE s'il s'agit d'un exemple basé sur une chaîne (par exemple "1==1")http://localhost:8088 pour voir le panneau d'administration NGWAF.
NGWAF utilise la pile ELK pour capturer les journaux des données réseau qui transitent par NGWAF, permettant aux utilisateurs de surveiller le trafic passant par NGWAF pour une analyse plus approfondie.
NGWAF est également livré avec des notifications Telegram en direct, pour informer les propriétaires des menaces malveillantes en direct détectées par NGWAF.
Systèmes d'exploitation testés
Avec Docker en cours d'exécution, exécutez le fichier suivant en utilisant la commande ci-dessous :
./run.sh
Pour remplacer les cibles, pointez les variables dest_server et honey_pot_server vers les cibles correctes dans le fichier /waf/WafApp/waf.py
# Replace me
dest_server = "dvwa"
honey_pot_server = "drupot:5000"
Une fois le conteneur Docker opérationnel, vous pouvez visiter votre localhost, où ces ports exécutent ces services :
Configurez également ce qui suit dans un fichier waf-secrets.env
# ML MODEL API ENDPOINT
API_ENDPOINT="https://xxxxx.xxx"
API_KEY="******************"
# TELEGRAM CONFIG
TELEGRAM_CHAT_ID="-57893457893457345"
TELEGRAM_TOKEN="******************"
Configurez également ce qui suit dans un fichier waf-admin-secrets.env
# ML MODEL API ENDPOINT
API_ENDPOINT="https://xxxxxx.xxx"
API_KEY="******************"
BUCKET_NAME="******************"
ACCESS_KEY_ID="******************"
SECRET_ACCESS_KEY="******************"
SQL_USERNAME="******************"
SQL_PASSWORD="******************"
SQL_SERVER="******************"
SQL_DATABASE_NAME="******************"
NGWAF est un projet open source en cours de développement, les fonctions et fonctionnalités peuvent changer d'une mise à jour à l'autre. Si vous souhaitez contribuer, n'hésitez pas à créer un problème ou une demande de fusion !
| Architecture du modèle | Précision | Score F1 |
|---|
| Notre modèle final | 0.995 | 0.993 |
| Réseau de neurones sans module LSTM | 0.956 | 0.891 |
| Arbre de décision | 0.878 | 0.840 |
| Régression logistique | 0.946 | 0.914 |
| Port | Service | Remarques | Identifiants (si applicable) |
|---|
| 8080 | DVWA | Où réside le WAF | admin:password |
| 5601 | Elasticsearch | Pour visualiser les journaux | elastic:changeme |
| 8088 | Tableau de bord | Tableau de bord pour gérer le modèle WAF | |
| 5001 | Drupot | Pot de miel |