
Système de défense de site web réactif alimenté par l'IA qui détecte les attaques, les analyse, et corrige automatiquement le code source en temps réel à l'aide d'agents LLM.
Système de défense d'application Web réactif alimenté par l'IA, conçu pour résister aux piratages par IA en temps réel.
Mahoraga Defender est une POC d'un système de défense réactif, agnostique quant au type d'attaquant, en temps réel. Le mécanisme central consiste à piéger un adversaire pour qu'il effectue des découvertes et des attaques sur un environnement bénin et factice (environnement « shadow ») et à enregistrer ces attaques. Ensuite, un agent LLM analyse les journaux et transmet les détails des exploits détectés à d'autres agents LLM pour corriger les vulnérabilités et déployer les correctifs.
Le système est conçu pour être entièrement automatisé avec une optimisation des coûts d'API en tête. Une interface graphique a été créée pour surveiller facilement les journaux de trafic, l'activité des agents et le pipeline de correctifs, et pour contrôler le nombre d'agents à déployer.
Le site Web cible (victime) est un fork de crAPI (Completely Ridiculous API), une application Web intentionnellement vulnérable créée par OWASP pour l'enseignement des tests de sécurité d'API. crAPI simule une plateforme de propriétaires de véhicules avec des microservices couvrant les 10 principales vulnérabilités d'API de l'OWASP. Le défenseur est conçu pour distinguer clairement les sessions utilisateur normales des sessions adverses, afin que les utilisateurs normaux ne subissent aucune baisse de qualité d'expérience utilisateur pendant que le défenseur protège le site Web des attaquants.
Notre fork (crapi-fork/) ajoute :
Une copie vierge est conservée dans crapi-original/ afin que l'environnement puisse être réinitialisé entre les expériences.
crapi-fork/. Fonctionne dans un environnement bash cloisonné avec un accès limité à crapi-fork/ uniquement.Lors du déploiement, les services Python sont rechargés à chaud via gunicorn (instantané), tandis que les services Java/Go sont reconstruits via docker compose up -d --build.
Pourquoi pas d'agent testeur ? Nous avons envisagé d'ajouter un agent de test utilisateur dédié et un environnement de test séparé, mais nous les avons supprimés tous les deux pour garder le système léger.
conda create -n XYZ python=3.13, puis conda activate XYZ).pip install -r requirements.txt./start.sh à partir du répertoire racine du projet – cela réinitialise le code source de crapi-fork/ à partir de crapi-original/, reconstruit tous les services, plante les drapeaux et les honeypots.python3 -m harness.main --app-url http://localhost:8888 -v.localhost:8888 (la description du défi se trouve à localhost:8888/challenge). Si vous effectuez des tests de pénétration à l'aide d'un agent IA, l'agent ne doit avoir aucun accès aux processus docker internes, car cela serait considéré comme de la triche.localhost:3000 pour voir les journaux en temps réel, les actions des agents, les correctifs, les drapeaux capturés, etc.docker compose down -v pour supprimer les conteneurs docker et les bases de données qui ont été créés pour ce projet.Tableau de bord : http://localhost:3000
Une barre d'état globale des agents est visible sur tous les onglets, indiquant la santé des agents (actif/bloqué/inactif/erreur) avec des contrôles de mise à l'échelle.
Visionneuse de journaux de requêtes en écran partagé en temps réel (production/shadow) avec entrées colorées par sévérité et regroupement du trafic
Flux d'activité par agent avec invites système, appels d'outils et étiquettes de modèle LLM
Tableau Kanban : Détecté → En cours de correction → En cours de révision → Déployé, avec panneau de détails redimensionnable
Différences de code, fichiers modifiés, commandes de restauration et chronologie par correctif
Le système utilise toute API compatible OpenAI. Configurez les modèles dans config/llm.yaml :
# Analyseur Shadow — lit les journaux shadow pour détecter les exploits (sans appel d'outil)
shadow_analyzer:
provider: gemini
model: gemini-2.5-flash
api_key_env: GEMINI_API_KEY # defined in harness/.env
pricing:
input_per_million: 0.30
output_per_million: 2.50
# Correcteur — corrige le code source (agent avec appel d'outil)
fixer:
provider: gemini
model: gemini-3-flash-preview
api_key_env: GEMINI_API_KEY # defined in harness/.env
pricing:
input_per_million: 0.50
output_per_million: 3.00
# Réviseur — vérifie les correctifs (agent avec appel d'outil)
reviewer:
provider: gemini
model: gemini-3-flash-preview
api_key_env: GEMINI_API_KEY # defined in harness/.env
pricing:
input_per_million: 0.50
output_per_million: 3.00
Pour changer de fournisseur, modifiez provider et model, puis définissez la clé API correspondante dans harness/.env :
Fournisseurs pris en charge : OpenAI, Gemini, Anthropic, Groq, Together, Ollama, Mistral, DeepSeek, Fireworks, xAI, Perplexity, OpenRouter, Zhipu.
Ajoutez des fournisseurs personnalisés en ajoutant leur URL de base à la section providers du YAML.
providers:
openai: https://api.openai.com/v1
gemini: https://generativelanguage.googleapis.com/v1beta/openai/
anthropic: https://api.anthropic.com/v1/
groq: https://api.groq.com/openai/v1
... # ajoutez-en d'autres si nécessaire
Remarque : seuls quelques fournisseurs d'API ont une limite de débit suffisamment élevée pour prendre en charge 3 agents ou plus travaillant simultanément. Google Gemini en fait partie.
Remerciements spéciaux à d3lta05 (LinkedIn) et aleemladha pour leur aide avec les tests de pénétration.