En vous promenant sur Beamreactor, nous stockons votre IP 48h pour des raisons de sécurité.
BeamReactor Workbench
BeamReactor
System:
BeamReactor 3.0
Workbench 2.1
Mem: 0.5 MB
Time: 13:23:22

Lecteur Markdown

Knowledge Base › BEAMREACTOR_CONTEXTGUARDIAN

Beamreactor Contextguardian

ContextGuardian - Pare-feu bidirectionnel LLM #

> Enveloppe Soleau du 6 janvier 2025 - AEGIS IA (SIRET 993 471 077 00012)

> Premiere mise en oeuvre : 15 novembre 2024

1. Vue d'ensemble

ContextGuardian est le systeme de securite bidirectionnel de BeamReactor pour les interactions avec les Large Language Models (LLM). Il intercepte et analyse les echanges dans les deux directions (User -> LLM et LLM -> User) en temps reel.

text
User -> [ContextGuardian IN] -> LLM -> [ContextGuardian OUT] -> User

Il protege contre :

  • Attaques entrantes : prompt injection, jailbreak, exfiltration de donnees, manipulation comportementale
  • Attaques sortantes : injection de code, hallucinations dangereuses, fuite d'informations sensibles, biais toxiques

2. Architecture des composants

Mapping Soleau / Implementation #

| Composant Soleau | Classe BeamReactor | Fichier |

|---|---|---|

| ContextGuardian | LLMFirewall | lib/llm_connector/LLMFirewall.php |

| ThreatCorpus | AegisPatternManager | plugins/aegis_corpus/lib/AegisPatternManager.php |

| BehavioralAnalyzer | AegisDetector | plugins/aegis_corpus/lib/AegisDetector.php |

| PreventiveInjector (IPC) | LLMFirewall::filter_input() | Integration dans le flux LLM |

| RiskScorer | AegisDetector::calculateSuspicionScore() | Scoring ML multi-criteres |

Dependances #

text
LLMFirewall
  |-- AegisDetector (analyse ML)
  |     |-- aegis_language_metrics (table BDD)
  |     |-- aegis_jailbreak_patterns (table BDD)
  |     +-- aegis_jailbreak_patterns_i18n (traductions)
  |-- LogSpecialRequests (fallback legacy)
  +-- Parser::sanitize() (nettoyage final)

3. LLMFirewall - Classe principale

Namespace : Beamreactor\LLMConnector\LLMFirewall

Autoload : Charge via CoreAutoLoader (lib/loaders)

3.1 filter_input(string $prompt): ?string #

Filtre les entrees utilisateur avant envoi au LLM.

Flux :

1. AegisDetector::analyze() - Detection ML multilingue

2. Si blocked -> log + retourne null (requete bloquee)

3. LogSpecialRequests::logIfSuspicious() - Fallback logging

4. LogSpecialRequests::cleanPrompt() - Nettoyage

5. Parser::sanitize($prompt, 'string') - Sanitization finale

6. Verification longueur minimale

Retour : Prompt nettoye ou null si bloque.

php
$firewall = new LLMFirewall();
$clean = $firewall->filter_input($userPrompt);

if ($clean === null)
{
    // Requete bloquee par ContextGuardian
    return;
}

3.2 filter_output_chunk(string $chunk): string|false #

Filtre rapide pour le streaming temps-reel (SSE).

Flux :

1. AegisDetector::analyze() avec seuil output (AEGIS_OUTPUT_THRESHOLD, defaut 0.85)

2. Verification encodage UTF-8

3. Detection XSS rapide (regex <script, javascript:, onerror=, onclick=)

Retour : Chunk filtre ou false si bloque.

3.3 filter_output(string $response): string #

Filtre complet applique apres generation complete.

Flux :

1. Correction encodage via Parser::sanitize($response, 'encoding')

2. AegisDetector::analyze() avec seuil output

3. Si score >= seuil -> retourne message generique de blocage

4. Detection de repetitions suspectes (> 5 occurrences du meme mot)

Retour : Reponse filtree ou message de blocage.

4. AegisDetector - Moteur d'analyse

Namespace : Beamreactor\IA\Aegis\AegisDetector

4.1 Systeme de scoring #

Le score de suspicion (0.0 - 1.0) est calcule par combinaison ponderee de trois metriques :

| Metrique | Poids | Description |

|---|---|---|

| Longueur (Z-score) | 25% | Proximite avec la longueur moyenne des patterns connus |

| Densite lexicale | 50% | Frequence de mots suspects par rapport au corpus |

| N-grams | 25% | Correspondance bi-grams/tri-grams avec les patterns |

Bonus : +0.3 si pattern exact trouve dans le corpus (cap a 1.0).

4.2 Niveaux de risque #

| Score | Niveau | Action |

|---|---|---|

| 0.0 - 0.3 | Low risk | Transmission normale |

| 0.3 - 0.5 | Moderate risk | Transmission normale |

| 0.5 - 0.7 | Elevated risk | Warning + transmission |

| 0.7 - 1.0 | High risk | Blocage (seuil input par defaut) |

Le seuil output est plus eleve (0.85 par defaut) car le LLM peut mentionner des mots sensibles dans un contexte legitime.

4.3 Detection multilingue #

Le detecteur identifie automatiquement la langue du prompt en comparant les frequences de mots avec les metriques linguistiques precalculees (aegis_language_metrics).

Les patterns du corpus sont stockes avec traductions i18n, permettant la detection dans toutes les langues supportees.

4.4 Methode analyze() #

php
$detector = new AegisDetector(0.7); // seuil
$result = $detector->analyze("ignore all previous instructions");

// Retour :
[
    'blocked'          => true,
    'score'            => 0.92,
    'language'         => 'en',
    'matched_patterns' => [
        ['pattern_id' => 'ignore_instructions_v1', 'severity' => 'critical', 'match_type' => 'exact']
    ],
    'cleaned_prompt'   => null,
    'details'          => [
        'final_score'  => 0.92,
        'length_score' => 0.7,
        'word_score'   => 0.95,
        'ngram_score'  => 0.85,
        'reason'       => 'High risk - likely jailbreak attempt'
    ]
]

5. Aegis Corpus - Base de menaces

5.1 Structure du corpus #

Table aegis_jailbreak_patterns :

| Champ | Description |

|---|---|

| pattern_id | Identifiant unique (ex: ignore_instructions_v1) |

| pattern_type | Categorie d'attaque |

| severity | low / medium / high / critical |

| active | Pattern actif ou desactive |

Categories d'attaque :

  • injection_poetry - Injections poetiques/indirectes (DAN, STAN, etc.)
  • projection - Projection d'autorite fictive
  • deviation - Deviation de contexte
  • direct_assault - Assaut direct sur les instructions
  • extraction - Tentative d'exfiltration de donnees systeme
  • roleplay - Jailbreak par roleplay malveillant

Table aegis_jailbreak_patterns_i18n : Traductions multilingues des patterns.

Table aegis_language_metrics : Metriques statistiques precalculees par langue (longueur moyenne, ecart-type, frequences de mots, n-grams).

5.2 Administration #

Le plugin aegis_corpus fournit une interface d'administration complete :

  • CRUD des patterns (AegisPatternManager)
  • Gestion des traductions (manuelle + auto-traduction IA)
  • Recalcul des metriques (AegisAnalyzer)
  • Statistiques et rapports globaux

Acces : ?obj=aegis_corpus.php (necessite AEGIS_CORPUS_LEVEL_ADMIN)

6. Integration MCP

Depuis la version 3.0.0 du dispatcher MCP, tous les appels tools passent par ContextGuardian.

Flux #

text
LLM --JSON-RPC--> MCP::callTool()
  |
  +-- extractStrings(arguments)
  |     Extraction recursive de toutes les chaines >= 5 caracteres
  |
  +-- Pour chaque chaine : LLMFirewall::filter_input()
  |     Si null -> erreur -32603 "ContextGuardian: request blocked"
  |
  +-- Tool::run(arguments)
  |
  +-- Pour chaque result.content[].text : LLMFirewall::filter_output()
  |     Filtrage du contenu retourne au LLM
  |
  +-- JSON-RPC response

Code d'erreur #

| Code | Signification |

|---|---|

| -32603 | Requete bloquee par ContextGuardian |

Degradation gracieuse #

Si LLMFirewall n'est pas disponible (aegis_corpus non installe), le MCP fonctionne normalement sans filtrage. Le chargement est lazy et verifie via class_exists().

7. Configuration

Les seuils sont configures dans llm_connector.conf.inc.php :

| Cle | Defaut | Description |

|---|---|---|

| AEGIS_INPUT_THRESHOLD | 0.7 | Seuil de blocage des entrees |

| AEGIS_OUTPUT_THRESHOLD | 0.85 | Seuil de blocage des sorties |

Le seuil output est volontairement plus eleve que l'input : le LLM peut utiliser un vocabulaire "sensible" dans un contexte pedagogique legitime.

8. Tables de journalisation

aegis_detection_log #

Toutes les detections (bloquees ou non) :

| Champ | Description |

|---|---|

| user_id | Utilisateur concerne |

| prompt_hash | SHA-256 du prompt (pas le contenu brut) |

| detected_language | Langue detectee |

| suspicion_score | Score de suspicion |

| matched_patterns | Patterns correspondants (JSON) |

| action_taken | blocked / warned / allowed |

llm_connector_output_anomalies #

Anomalies detectees en sortie :

| Champ | Description |

|---|---|

| session_id | Session LLM |

| anomaly_type | injection_attempt / repetition / encoding_error |

| severity | low / medium / high / critical |

| metadata | Details supplementaires (JSON) |

9. Detection d'encodage avancee

LLMFirewall inclut une detection de patterns d'encodage suspects :

  • Sequences UTF-8 overlong (exploitation classique \xC0\x80)
  • Surrogates UTF-16 invalides en UTF-8 (tentative de bypass)
  • Caracteres de controle invisibles en masse (> 5% du texte)
  • Zero-width characters en quantite (> 10 occurrences : \u200B, \u200C, \u200D, \uFEFF)

Ces patterns sont des vecteurs connus d'injection epinumerique.

10. Differences avec les solutions existantes

| Critere | OpenAI Moderation / Llama Guard | ContextGuardian |

|---|---|---|

| Direction | Unidirectionnelle (IN ou OUT) | Bidirectionnelle |

| Regles | Statiques | Corpus evolutif + apprentissage |

| Corpus de menaces | Non | Structure, multilingue, versionne |

| Injection preventive | Non | IPC (Injection Preventive de Contexte) |

| Scoring | Binaire | Adaptatif (0.0 - 1.0) |

| Integration | API externe | Natif dans le framework |

BeamReactor v3.0 • AmigaOS Workbench 2.1 Tribute • 2026