Documentation Index
Fetch the complete documentation index at: https://docs.wardforge.org/llms.txt
Use this file to discover all available pages before exploring further.
Cette page documente les protections techniques intégrées à WardForge suite à l’audit de sécurité du 26 mars 2026. Elle s’adresse aux administrateurs qui souhaitent comprendre le fonctionnement interne du bot.
Vue d’Ensemble
WardForge implémente une défense en profondeur (defense-in-depth) avec plusieurs couches indépendantes. Si une couche est contournée, les suivantes prennent le relais.1. Anti-Phishing Récursif
Problème adressé
Les attaquants utilisent des chaînes de redirections pour masquer les URLs malveillantes. Un scanner naïf vérifiebit.ly/xyz (inoffensif) mais ne voit jamais evil-phishing.com vers lequel il redirige.
Solution implémentée
WardForge résout récursivement chaque URL en suivant les redirections HTTP jusqu’à l’URL finale.Traitement des domaines opaques
Certains domaines de redirection ne révèlent pas l’URL de destination sans interaction utilisateur (ex:get-qr.com, captcha gates). WardForge gère ce cas spécifiquement :
- Résolution possible → scan de l’URL finale contre les bases de phishing
- Résolution impossible (domaine opaque) → avertissement généré sans blocage automatique pour éviter les faux positifs
Les faux positifs sont prioritaires à éviter. Un avertissement sans blocage sur un domaine opaque est préférable à un blocage injustifié d’une URL légitime.
Détection de cycles
Un ensemblevisited est maintenu pour chaque résolution. Si une URL apparaît deux fois dans la chaîne, la résolution s’arrête immédiatement pour éviter les boucles infinies.
2. Protection contre les Decompression Bombs
Problème adressé
Une Decompression Bomb est un fichier compressé de petite taille (quelques Ko) qui se décompresse en plusieurs gigaoctets. Si un attaquant envoie une image.zip ou un fichier encodé avec du contenu malveillant, un scanner naïf pourrait tenter de décompresser le contenu en mémoire et crasher le bot.
Solution implémentée
WardForge applique des limites strictes lors du traitement des pièces jointes :-
Vérification de taille avant téléchargement : Le header
Content-Lengthest vérifié. Si la taille dépasseMAX_FILE_SIZE, le fichier est ignoré sans téléchargement. - Limite de pixels pour les images QR : Avant de passer une image au décodeur QR, les dimensions sont vérifiées. Une image de 1px × 4 milliards de pixels serait refusée.
-
Timeout de décompression : Chaque opération de décompression s’exécute dans un contexte avec timeout (
asyncio.wait_for). Si la décompression dépasse la limite de temps, l’opération est annulée. - Isolation des erreurs : Les exceptions de décompression sont capturées localement et logguées sans faire crasher le worker principal.
3. Protection Anti-Spam des APIs Externes
Problème adressé
WardForge consulte jusqu’à 3 APIs externes (PhishTank, Google Safe Browsing, VirusTotal) par URL scannée. Sans limitation, un attaquant pourrait envoyer des milliers de messages contenant des URLs pour épuiser les quotas API ou surcharger le bot.Solution implémentée
Unasyncio.Semaphore limite le nombre de requêtes API simultanées :
| Mécanisme | Implémentation | Objectif |
|---|---|---|
| Semaphore global | Semaphore(5) | Limite les appels API simultanés |
| Cache de résultats | TTL 1h par URL | Évite de scanner la même URL deux fois |
| Trust Score probabiliste | Score × 0.3 | Réduit les scans sur membres de confiance |
| Whitelist préemptive | Vérification avant réseau | Court-circuite tous les scans |
| Timeout par requête | 5s max par hop | Empêche les attentes infinies |
Scan probabiliste
Pour éviter de scanner chaque URL envoyée par un membre de confiance, WardForge applique un échantillonnage probabiliste basé sur le Trust Score :4. Protection contre les Fuites Mémoire
Problème adressé
Les sessions longues (captcha, anti-spam) accumulent des données en mémoire si elles ne sont pas nettoyées. Un attaquant peut créer des milliers de sessions captcha non terminées pour épuiser la RAM du bot.Solution implémentée
Des tâches de nettoyage périodiques tournent en arrière-plan pour chaque cog concerné :| Cog | Données nettoyées | Intervalle |
|---|---|---|
captcha.py | Sessions captcha expirées | 10 minutes |
automod.py | Historique de messages anti-spam | 5 minutes |
report.py | Cooldowns de signalement expirés | 30 minutes |
antiraid.py | Fenêtres de détection de raid | 1 minute |
5. Isolation de la Base de Données
Problème adressé
Les accès directs à la base de données depuis plusieurs cogs simultanés peuvent créer des conditions de course et des connexions pendantes en cas d’erreur.Solution implémentée
Toutes les requêtes passent par un pool centralisé avec gestion de contexte :asyncio.gather pour réduire la latence :
6. Vérification par Captcha
Algorithme
Le captcha mathématique utilisesecrets.choice (CSPRNG) au lieu de random pour éviter la prédiction de réponses :
asyncio.Lock par session empêche les conditions de course si l’utilisateur clique plusieurs fois simultanément.
Limites
- 3 tentatives maximum par session
- Timeout de 5 minutes par session
- Expiration automatique : les sessions non terminées sont nettoyées toutes les 10 minutes
- Résultat : +15 Trust Score (succès) ou -20 Trust Score + expulsion (échec)
7. Hiérarchie et Prévention des Escalades
WardForge vérifie systématiquement la hiérarchie des rôles avant toute action modération :Détection d’abus de modérateurs
Si un modérateur effectue trop d’actions en peu de temps (seuil configurable, défaut : 3 actions/10s), WardForge :- Logue l’événement comme suspect
- Notifie les administrateurs
- Peut restreindre les permissions du compte modérateur si le seuil est dépassé
8. Global Ban et Score de Confiance
Chaque entrée dans la liste noire globale porte un score de confiance :| Catégorie | Score de confiance | Description |
|---|---|---|
scammer | 90% | Arnaqueur confirmé |
raider | 85% | Raideur identifié |
spammer | 75% | Spammeur documenté |
other | 60% | Catégorie générique |
Résumé des Paramètres de Sécurité
| Protection | Paramètre clé | Valeur par défaut |
|---|---|---|
| Redirections max | MAX_HOPS | 3 |
| Timeout par hop | TIMEOUT_PER_HOP | 5s |
| Taille fichier max | MAX_FILE_SIZE | 10 Mo |
| Pixels image max | MAX_IMAGE_PIXELS | 16 MP (4096²) |
| Semaphore API | api_semaphore | 5 parallèles |
| Cache scan URL | TTL | 1 heure |
| Sessions captcha max | — | 3 tentatives / 5 min |
| Nettoyage sessions | Intervalle | 10 minutes |
| Seuil spam (défaut) | messages/fenêtre | 5 msgs / 5s |
| Itérations PBKDF2 | Sauvegardes | 480 000 |
