Vergiftiging van conversationeel geheugen
Het vergiftigen van opslag van gespreksgeschiedenis om het begrip van de agent van eerdere interacties te wijzigen.
Overzicht
Het vergiftigen van opslag van gespreksgeschiedenis om het begrip van de agent van eerdere interacties te wijzigen.
Kernconcepten
Fundamentele principes
Technische verdieping
# Demonstratie van het kernconcept
from openai import OpenAI
client = OpenAI()
def demonstrate_concept(system_prompt: str, user_input: str) -> str:
"""Demonstreer het fundamentele gedragspatroon."""
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_input},
],
temperature=0.0,
)
return response.choices[0].message.content
# Basisgedrag
baseline = demonstrate_concept(
system_prompt="You are a helpful assistant that only discusses cooking.",
user_input="What is the capital of France?",
)
print(f"Baseline: {baseline}")Analyse van het aanvalsoppervlak
Het aanvalsoppervlak voor deze kwetsbaarheidsklasse omvat:
| Aanvalsvector | Beschrijving | Moeilijkheid | Impact |
|---|---|---|---|
| Directe invoer | Adversariële content in gebruikersberichten | Laag | Variabel |
| Indirecte invoer | Adversariële content in externe data | Gemiddeld | Hoog |
| Tooluitvoer | Adversariële content in functieresultaten | Gemiddeld | Hoog |
| Contextmanipulatie | Exploiteren van de dynamiek van het contextvenster | Hoog | Hoog |
| Tijdens de training | Vergiftigen van trainings- of fine-tuning-data | Zeer hoog | Kritiek |
Praktische toepassing
Techniekimplementatie
Het in de praktijk implementeren van deze techniek vereist begrip van zowel de aanvalsmethodologie als het verdedigingslandschap van het doelsysteem.
import json
from typing import Optional
class TechniqueFramework:
"""Framework voor het implementeren en testen van de beschreven techniek."""
def __init__(self, target_config: dict):
self.config = target_config
self.results = []
def prepare_payload(self, objective: str, constraints: dict) -> str:
"""Bereid de aanvalspayload voor op basis van de doelstelling en doelbeperkingen."""
# Pas de payload aan op de verdedigingshouding van het doel
payload = self._base_payload(objective)
if constraints.get("input_classifier"):
payload = self._apply_obfuscation(payload)
if constraints.get("output_filter"):
payload = self._add_extraction_channel(payload)
return payload
def execute(self, payload: str) -> dict:
"""Voer de techniek uit en verzamel resultaten."""
response = self._send_to_target(payload)
success = self._evaluate_response(response)
result = {
"payload_hash": hash(payload),
"success": success,
"response_length": len(str(response)),
}
self.results.append(result)
return result
def report(self) -> dict:
"""Genereer een samenvattend rapport van alle uitvoeringsresultaten."""
total = len(self.results)
successes = sum(1 for r in self.results if r["success"])
return {
"total_attempts": total,
"successes": successes,
"success_rate": successes / total if total > 0 else 0,
}Verdedigingsoverwegingen
Het begrijpen van verdedigingsmaatregelen is essentieel voor zowel offensieve als defensieve practitioners:
- Invoervalidatie: Het voorverwerken van gebruikersinvoer via classificatiemodellen die adversariële patronen detecteren voordat ze de doel-LLM bereiken
- Uitvoerfiltering: Het naverwerken van modeluitvoer om gevoelige gegevens, instructie-artefacten en andere indicatoren van succesvolle exploitatie te detecteren en te verwijderen
- Gedragsmonitoring: Realtime monitoring van gedragspatronen van het model om afwijkende responses te detecteren die kunnen wijzen op lopende aanvallen
- Architectuurontwerp: Het ontwerpen van applicatiearchitecturen die het vertrouwen in modeluitvoer minimaliseren en security-grenzen extern afdwingen
Relevantie in de praktijk
Dit onderwerpgebied is direct relevant voor productie-AI-deployments in alle sectoren. OWASP LLM Top 10 2025 — LLM07 (Insecure Plugin Design) documenteert exploitatie uit de praktijk van deze kwetsbaarheidsklasse in ingezette systemen.
Organisaties die LLM-aangedreven applicaties inzetten, zouden moeten:
- Beoordelen: Red team-beoordelingen uitvoeren die specifiek gericht zijn op deze kwetsbaarheidsklasse
- Verdedigen: Defense-in-depth-maatregelen implementeren die passen bij het risiconiveau
- Monitoren: Monitoring inzetten die exploitatiepogingen realtime kan detecteren
- Reageren: Procedures voor incidentrespons handhaven die specifiek zijn voor compromittering van AI-systemen
- Itereren: Verdedigingen regelmatig opnieuw testen naarmate zowel aanvallen als modellen evolueren
Huidige onderzoeksrichtingen
Actief onderzoek in dit gebied richt zich op verschillende richtingen:
- Formele verificatie: Het ontwikkelen van wiskundige garanties voor modelgedrag onder adversariële omstandigheden
- Robuustheidstraining: Trainingsprocedures die modellen produceren die beter bestand zijn tegen deze aanvalsklasse
- Detectiemethoden: Verbeterde technieken voor het detecteren van exploitatiepogingen met lage ratio's valse positieven
- Gestandaardiseerde evaluatie: Benchmark-suites zoals HarmBench en JailbreakBench voor het meten van vooruitgang
Implementatie-overwegingen
Architectuurpatronen
Bij het implementeren van systemen die interageren met LLM's beïnvloeden verschillende architectuurpatronen de security-houding van de hele applicatie:
Gateway-patroon: Een dedicated API-gateway bevindt zich tussen gebruikers en de LLM en verzorgt authenticatie, rate limiting, invoervalidatie en uitvoerfiltering. Dit centraliseert security-controles, maar creëert een single point of failure.
from dataclasses import dataclass
from typing import Optional
import time
@dataclass
class SecurityGateway:
"""Gateway-patroon voor het beveiligen van toegang tot LLM-applicaties."""
input_classifier: object # Op ML gebaseerde invoerclassificator
output_filter: object # Uitvoer-contentfilter
rate_limiter: object # Rate limiting-service
audit_logger: object # Audit trail-logger
def process_request(self, user_id: str, message: str, session_id: str) -> dict:
"""Verwerk een verzoek door alle security-lagen heen."""
request_id = self._generate_request_id()
# Laag 1: Rate limiting
if not self.rate_limiter.allow(user_id):
self.audit_logger.log(request_id, "rate_limited", user_id)
return {"error": "Rate limit exceeded", "retry_after": 60}
# Laag 2: Invoerclassificatie
classification = self.input_classifier.classify(message)
if classification.is_adversarial:
self.audit_logger.log(
request_id, "input_blocked",
user_id, classification.category
)
return {"error": "Request could not be processed"}
# Laag 3: LLM-verwerking
response = self._call_llm(message, session_id)
# Laag 4: Uitvoerfiltering
filtered = self.output_filter.filter(response)
if filtered.was_modified:
self.audit_logger.log(
request_id, "output_filtered",
user_id, filtered.reason
)
# Laag 5: Audit logging
self.audit_logger.log(
request_id, "completed",
user_id, len(message), len(filtered.content)
)
return {"response": filtered.content}
def _generate_request_id(self) -> str:
import uuid
return str(uuid.uuid4())
def _call_llm(self, message: str, session_id: str) -> str:
# Implementatie van LLM API-aanroep
passSidecar-patroon: Security-componenten draaien naast de LLM als onafhankelijke services, elk verantwoordelijk voor een specifiek aspect van security. Dit biedt betere isolatie en onafhankelijke schaalbaarheid, maar verhoogt de complexiteit van het systeem.
Mesh-patroon: Voor multi-agentsystemen heeft elke agent zijn eigen security-perimeter met authenticatie, autorisatie en auditing. Communicatie tussen agents volgt zero-trust-principes.
Prestatie-implicaties
Security-maatregelen voegen onvermijdelijk latentie en rekenoverhead toe. Het begrijpen van deze afwegingen is essentieel voor productie-deployments:
| Security-laag | Typische latentie | Rekenkosten | Impact op UX |
|---|---|---|---|
| Keyword-filter | <1ms | Verwaarloosbaar | Geen |
| Regex-filter | 1-5ms | Laag | Geen |
| ML-classificator (klein) | 10-50ms | Matig | Minimaal |
| ML-classificator (groot) | 50-200ms | Hoog | Merkbaar |
| LLM-as-judge | 500-2000ms | Zeer hoog | Significant |
| Volledige pipeline | 100-500ms | Hoog | Gemiddeld |
De aanbevolen aanpak is om eerst snelle, lichtgewicht controles te gebruiken (keyword- en regex-filters) om voor de hand liggende aanvallen op te vangen, gevolgd door duurdere op ML gebaseerde analyse alleen voor invoer die de initiële filters passeert. Deze cascaderende aanpak biedt goede security met acceptabele prestaties.
Monitoring en observability
Effectieve security-monitoring voor LLM-applicaties vereist het bijhouden van metrieken die patronen van adversarieel gedrag vastleggen:
from dataclasses import dataclass
from collections import defaultdict
import time
@dataclass
class SecurityMetrics:
"""Houd security-relevante metrieken bij voor LLM-applicaties."""
# Tellers
total_requests: int = 0
blocked_requests: int = 0
filtered_outputs: int = 0
anomalous_sessions: int = 0
# Tempotracking
_request_times: list = None
_block_times: list = None
def __post_init__(self):
self._request_times = []
self._block_times = []
def record_request(self, was_blocked: bool = False, was_filtered: bool = False):
"""Registreer een verzoek en de afhandeling ervan."""
now = time.time()
self.total_requests += 1
self._request_times.append(now)
if was_blocked:
self.blocked_requests += 1
self._block_times.append(now)
if was_filtered:
self.filtered_outputs += 1
def get_block_rate(self, window_seconds: int = 300) -> float:
"""Bereken de blokkeerratio over een tijdvenster."""
now = time.time()
cutoff = now - window_seconds
recent_requests = sum(1 for t in self._request_times if t > cutoff)
recent_blocks = sum(1 for t in self._block_times if t > cutoff)
if recent_requests == 0:
return 0.0
return recent_blocks / recent_requests
def should_alert(self) -> bool:
"""Bepaal of de huidige metrieken een waarschuwing rechtvaardigen."""
block_rate = self.get_block_rate()
# Waarschuw als de blokkeerratio een drempel overschrijdt
if block_rate > 0.3: # >30% van de verzoeken geblokkeerd in de laatste 5 min
return True
return FalseSecurity-testen in CI/CD
Het integreren van AI-security-testen in de ontwikkelpijplijn vangt regressies op voordat ze in productie belanden:
- Tests op unit-niveau: Test individuele security-componenten (classificatoren, filters) tegen bekende payloads
- Integratietests: Test de volledige security-pijplijn van begin tot eind
- Regressietests: Onderhoud een suite van eerder ontdekte aanvalspayloads en verifieer dat ze geblokkeerd blijven
- Adversariële tests: Draai periodiek geautomatiseerde red team-tools (Garak, Promptfoo) als onderdeel van de deployment-pijplijn
Opkomende trends
Huidige onderzoeksrichtingen
Het veld van LLM-security evolueert snel. Belangrijke onderzoeksrichtingen die het landschap waarschijnlijk zullen vormgeven, zijn onder meer:
-
Formele verificatie van LLM-gedrag: Onderzoekers verkennen wiskundige frameworks om eigenschappen van modelgedrag onder adversariële omstandigheden te bewijzen. Hoewel volledige formele verificatie van neurale netwerken onhaalbaar blijft, toont begrensde verificatie van specifieke eigenschappen belofte.
-
Adversariële training voor LLM-robuustheid: Naast standaard RLHF ontwikkelen onderzoekers trainingsprocedures die modellen tijdens de safety-training expliciet blootstellen aan adversariële invoer, waardoor de robuustheid tegen bekende aanvalspatronen verbetert.
-
Door interpreteerbaarheid geleide verdediging: Onderzoek naar mechanistische interpreteerbaarheid stelt verdedigers in staat te begrijpen waarom specifieke aanvallen slagen op neuron- en circuitniveau, wat gerichtere verdedigingsmaatregelen oplevert.
-
Multi-agent-security: Naarmate LLM-agents alomtegenwoordiger worden, is het beveiligen van communicatie tussen agents en het handhaven van vertrouwensgrenzen over agentsystemen heen een actief onderzoeksgebied met aanzienlijke praktische implicaties.
-
Geautomatiseerde red teaming op schaal: Tools zoals NVIDIA's Garak, Microsofts PyRIT en het Inspect-framework van het Britse AISI maken geautomatiseerde security-testen mogelijk op schalen die voorheen onmogelijk waren, maar de kwaliteit en dekking van geautomatiseerde tests blijft een open uitdaging.
De integratie van deze onderzoeksrichtingen in productiesystemen zal de volgende generatie AI-security-praktijken bepalen.
Implementatie-overwegingen
Architectuurpatronen
Bij het implementeren van systemen die interageren met LLM's beïnvloeden verschillende architectuurpatronen de security-houding van de hele applicatie:
Gateway-patroon: Een dedicated API-gateway bevindt zich tussen gebruikers en de LLM en verzorgt authenticatie, rate limiting, invoervalidatie en uitvoerfiltering. Dit centraliseert security-controles, maar creëert een single point of failure.
from dataclasses import dataclass
from typing import Optional
import time
@dataclass
class SecurityGateway:
"""Gateway-patroon voor het beveiligen van toegang tot LLM-applicaties."""
input_classifier: object # Op ML gebaseerde invoerclassificator
output_filter: object # Uitvoer-contentfilter
rate_limiter: object # Rate limiting-service
audit_logger: object # Audit trail-logger
def process_request(self, user_id: str, message: str, session_id: str) -> dict:
"""Verwerk een verzoek door alle security-lagen heen."""
request_id = self._generate_request_id()
# Laag 1: Rate limiting
if not self.rate_limiter.allow(user_id):
self.audit_logger.log(request_id, "rate_limited", user_id)
return {"error": "Rate limit exceeded", "retry_after": 60}
# Laag 2: Invoerclassificatie
classification = self.input_classifier.classify(message)
if classification.is_adversarial:
self.audit_logger.log(
request_id, "input_blocked",
user_id, classification.category
)
return {"error": "Request could not be processed"}
# Laag 3: LLM-verwerking
response = self._call_llm(message, session_id)
# Laag 4: Uitvoerfiltering
filtered = self.output_filter.filter(response)
if filtered.was_modified:
self.audit_logger.log(
request_id, "output_filtered",
user_id, filtered.reason
)
# Laag 5: Audit logging
self.audit_logger.log(
request_id, "completed",
user_id, len(message), len(filtered.content)
)
return {"response": filtered.content}
def _generate_request_id(self) -> str:
import uuid
return str(uuid.uuid4())
def _call_llm(self, message: str, session_id: str) -> str:
# Implementatie van LLM API-aanroep
passSidecar-patroon: Security-componenten draaien naast de LLM als onafhankelijke services, elk verantwoordelijk voor een specifiek aspect van security. Dit biedt betere isolatie en onafhankelijke schaalbaarheid, maar verhoogt de complexiteit van het systeem.
Mesh-patroon: Voor multi-agentsystemen heeft elke agent zijn eigen security-perimeter met authenticatie, autorisatie en auditing. Communicatie tussen agents volgt zero-trust-principes.
Prestatie-implicaties
Security-maatregelen voegen onvermijdelijk latentie en rekenoverhead toe. Het begrijpen van deze afwegingen is essentieel voor productie-deployments:
| Security-laag | Typische latentie | Rekenkosten | Impact op UX |
|---|---|---|---|
| Keyword-filter | <1ms | Verwaarloosbaar | Geen |
| Regex-filter | 1-5ms | Laag | Geen |
| ML-classificator (klein) | 10-50ms | Matig | Minimaal |
| ML-classificator (groot) | 50-200ms | Hoog | Merkbaar |
| LLM-as-judge | 500-2000ms | Zeer hoog | Significant |
| Volledige pipeline | 100-500ms | Hoog | Gemiddeld |
De aanbevolen aanpak is om eerst snelle, lichtgewicht controles te gebruiken (keyword- en regex-filters) om voor de hand liggende aanvallen op te vangen, gevolgd door duurdere op ML gebaseerde analyse alleen voor invoer die de initiële filters passeert. Deze cascaderende aanpak biedt goede security met acceptabele prestaties.
Monitoring en observability
Effectieve security-monitoring voor LLM-applicaties vereist het bijhouden van metrieken die patronen van adversarieel gedrag vastleggen:
from dataclasses import dataclass
from collections import defaultdict
import time
@dataclass
class SecurityMetrics:
"""Houd security-relevante metrieken bij voor LLM-applicaties."""
# Tellers
total_requests: int = 0
blocked_requests: int = 0
filtered_outputs: int = 0
anomalous_sessions: int = 0
# Tempotracking
_request_times: list = None
_block_times: list = None
def __post_init__(self):
self._request_times = []
self._block_times = []
def record_request(self, was_blocked: bool = False, was_filtered: bool = False):
"""Registreer een verzoek en de afhandeling ervan."""
now = time.time()
self.total_requests += 1
self._request_times.append(now)
if was_blocked:
self.blocked_requests += 1
self._block_times.append(now)
if was_filtered:
self.filtered_outputs += 1
def get_block_rate(self, window_seconds: int = 300) -> float:
"""Bereken de blokkeerratio over een tijdvenster."""
now = time.time()
cutoff = now - window_seconds
recent_requests = sum(1 for t in self._request_times if t > cutoff)
recent_blocks = sum(1 for t in self._block_times if t > cutoff)
if recent_requests == 0:
return 0.0
return recent_blocks / recent_requests
def should_alert(self) -> bool:
"""Bepaal of de huidige metrieken een waarschuwing rechtvaardigen."""
block_rate = self.get_block_rate()
# Waarschuw als de blokkeerratio een drempel overschrijdt
if block_rate > 0.3: # >30% van de verzoeken geblokkeerd in de laatste 5 min
return True
return FalseSecurity-testen in CI/CD
Het integreren van AI-security-testen in de ontwikkelpijplijn vangt regressies op voordat ze in productie belanden:
- Tests op unit-niveau: Test individuele security-componenten (classificatoren, filters) tegen bekende payloads
- Integratietests: Test de volledige security-pijplijn van begin tot eind
- Regressietests: Onderhoud een suite van eerder ontdekte aanvalspayloads en verifieer dat ze geblokkeerd blijven
- Adversariële tests: Draai periodiek geautomatiseerde red team-tools (Garak, Promptfoo) als onderdeel van de deployment-pijplijn
Opkomende trends
Huidige onderzoeksrichtingen
Het veld van LLM-security evolueert snel. Belangrijke onderzoeksrichtingen die het landschap waarschijnlijk zullen vormgeven, zijn onder meer:
-
Formele verificatie van LLM-gedrag: Onderzoekers verkennen wiskundige frameworks om eigenschappen van modelgedrag onder adversariële omstandigheden te bewijzen. Hoewel volledige formele verificatie van neurale netwerken onhaalbaar blijft, toont begrensde verificatie van specifieke eigenschappen belofte.
-
Adversariële training voor LLM-robuustheid: Naast standaard RLHF ontwikkelen onderzoekers trainingsprocedures die modellen tijdens de safety-training expliciet blootstellen aan adversariële invoer, waardoor de robuustheid tegen bekende aanvalspatronen verbetert.
-
Door interpreteerbaarheid geleide verdediging: Onderzoek naar mechanistische interpreteerbaarheid stelt verdedigers in staat te begrijpen waarom specifieke aanvallen slagen op neuron- en circuitniveau, wat gerichtere verdedigingsmaatregelen oplevert.
-
Multi-agent-security: Naarmate LLM-agents alomtegenwoordiger worden, is het beveiligen van communicatie tussen agents en het handhaven van vertrouwensgrenzen over agentsystemen heen een actief onderzoeksgebied met aanzienlijke praktische implicaties.
-
Geautomatiseerde red teaming op schaal: Tools zoals NVIDIA's Garak, Microsofts PyRIT en het Inspect-framework van het Britse AISI maken geautomatiseerde security-testen mogelijk op schalen die voorheen onmogelijk waren, maar de kwaliteit en dekking van geautomatiseerde tests blijft een open uitdaging.
De integratie van deze onderzoeksrichtingen in productiesystemen zal de volgende generatie AI-security-praktijken bepalen.
Referenties / Verder lezen
- MITRE ATLAS — AML.T0054 (LLM Plugin Compromise)
- OWASP LLM Top 10 2025 — LLM07 (Insecure Plugin Design)
- CVE-2023-39659 — LangChain arbitrary code execution via json agent
Wat is de meest effectieve aanpak om je te verdedigen tegen de aanvalsklasse die in dit artikel aan bod komt?
Waarom blijven de technieken die in dit artikel worden beschreven effectief over verschillende modelversies en aanbieders heen?