Suite d'Évaluation
EnforceCore inclut un framework d'évaluation adversariale intégré. Validez que vos politiques bloquent réellement les menaces et mesurez la surcharge d'enforcement.
Démarrage Rapide
from enforcecore.core.policy import Policy
from enforcecore.eval import ScenarioRunner, BenchmarkRunner, generate_report
policy = Policy.from_file("policies/strict.yaml")
runner = ScenarioRunner(policy)
suite = runner.run_all()
print(f"Confinement : {suite.containment_rate:.0%}")
bench = BenchmarkRunner(policy=policy)
benchmarks = bench.run_all(iterations=1000)
report = generate_report(suite, benchmarks)
Catégories de Menaces
20 scénarios adversariaux sur 10 catégories :
| Catégorie |
Description |
Scénarios |
| Abus d'outils |
Appel d'outils hors de la liste autorisée |
3 |
| Exfiltration de données |
Fuite via sorties surdimensionnées ou PII |
2 |
| Épuisement de ressources |
Dépassement de limites temps/coûts |
2 |
| Évasion de politique |
Usurpation de noms d'outils, variation de casse |
2 |
| Fuite PII |
Données personnelles dans les arguments |
2 |
| Escalade de privilèges |
Tester tous les outils refusés |
2 |
| Injection de prompt |
Payloads d'injection dans arguments ou noms |
2 |
| Injection de contenu |
Shell, SQL, traversée de chemin, exécution de code |
2 |
| Évasion réseau |
Domaines interdits, wildcards |
1 |
| Dépassement de débit |
Rate limiting par outil et global |
2 |
Exécution des Scénarios
Tous les Scénarios
runner = ScenarioRunner(policy)
suite = runner.run_all()
Filtrer par Catégorie
from enforcecore.eval import ThreatCategory
suite = runner.run_all(category=ThreatCategory.TOOL_ABUSE)
Exécution Rapide (HAUTE + CRITIQUE)
suite = runner.run_quick()
Comprendre les Résultats
print(suite.total) # Total de scénarios
print(suite.contained) # Menaces bloquées ✅
print(suite.escaped) # Menaces non bloquées ❌
print(suite.containment_rate) # confinés / (confinés + échappés)
| Résultat |
Signification |
CONTAINED |
Menace bloquée par l'enforcement ✅ |
ESCAPED |
Menace NON bloquée ❌ |
ERROR |
Échec inattendu de l'exécution ⚠️ |
SKIPPED |
Scénario non applicable |
Benchmarks de Performance
| Benchmark |
Ce qu'il mesure |
policy_pre_call |
Enforcement pré-appel |
policy_post_call |
Évaluation post-appel |
pii_redaction |
Scan et rédaction PII |
secret_scanning |
Détection de secrets |
content_rules |
Vérification des règles de contenu |
rate_limiter |
Vérification de limites de débit |
domain_checker |
Vérification de domaine |
audit_record |
Entrée d'audit Merkle |
audit_verify |
Vérification de piste d'audit |
witness_record |
Enregistrement witness |
guard_overhead |
Surcharge du guard |
hook_dispatch |
Dispatch des hooks de cycle de vie |
unicode_normalization |
Pipeline normalisation unicode |
enforcer_e2e |
Pipeline complet (sans PII) |
enforcer_e2e_with_pii |
Pipeline complet + PII |
bench = BenchmarkRunner()
suite = bench.run_all(iterations=1000)
for r in suite.results:
print(f"{r.name}: {r.mean_ms:.3f}ms ({r.ops_per_second:,.0f} ops/s)")
CLI
enforcecore eval --scenarios all --output results/
enforcecore eval --scenario data-exfiltration --policy my_policy.yaml
Bonnes Pratiques
- Tester avec plusieurs politiques. Une politique stricte devrait avoir 100% de confinement.
- Exécuter les benchmarks sur des environnements propres. Utilisez
iterations=1000 minimum.
- Ajouter l'évaluation au CI. Détecter automatiquement les régressions de politique.
- Sauvegarder les rapports. Écrire dans des fichiers pour la comparaison historique.