OWASP LLM Top 10 2025 naslag
Snelle naslag voor de OWASP LLM Top 10 2025 met samenvattingen van detectie en mitigatie.
Overzicht
Snelle naslag voor de OWASP LLM Top 10 2025 met samenvattingen van detectie en mitigatie.
Kernconcepten
Fundamentele principes
Technische verdieping
# Demonstration of the core concept
from openai import OpenAI
client = OpenAI()
def demonstrate_concept(system_prompt: str, user_input: str) -> str:
"""Demonstrate the fundamental behavior pattern."""
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
# Baseline behavior
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 input | Adversarial content in gebruikersberichten | Laag | Variabel |
| Indirecte input | Adversarial content in externe data | Gemiddeld | Hoog |
| Tool-output | Adversarial content in function-resultaten | Gemiddeld | Hoog |
| Contextmanipulatie | Misbruik van contextvensterdynamiek | Hoog | Hoog |
| Training-time | Vergiftiging van training- of fine-tuning-data | Zeer hoog | Kritiek |
Praktische toepassing
Implementatie van techniek
Deze techniek in de praktijk implementeren vereist inzicht in zowel de aanvalsmethodologie als het defensieve landschap van het doelsysteem.
import json
from typing import Optional
class TechniqueFramework:
"""Framework for implementing and testing the described technique."""
def __init__(self, target_config: dict):
self.config = target_config
self.results = []
def prepare_payload(self, objective: str, constraints: dict) -> str:
"""Prepare the attack payload based on the objective and target constraints."""
# Adapt payload to target's defensive posture
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:
"""Execute the technique and collect results."""
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:
"""Generate a summary report of all execution results."""
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,
}Overwegingen voor verdediging
Inzicht in defensieve maatregelen is essentieel voor zowel offensieve als defensieve practitioners:
- Inputvalidatie: Voorverwerking van gebruikersinput via classificatiemodellen die adversarial patronen detecteren voordat ze de doel-LLM bereiken
- Outputfiltering: Naverwerking van modeloutput om gevoelige data, instructie-artefacten en andere indicatoren van geslaagde exploitatie te detecteren en verwijderen
- Gedragsmonitoring: Real-time monitoring van modelgedragspatronen om anomale antwoorden te detecteren die kunnen wijzen op lopende aanvallen
- Architectuurontwerp: Ontwerpen van applicatie-architecturen die het vertrouwen in modeloutput minimaliseren en beveiligingsgrenzen extern afdwingen
Praktijkrelevantie
Dit onderwerp is direct relevant voor productie-AI-deployments in alle sectoren. HarmBench — github.com/centerforaisafety/HarmBench — is een gestandaardiseerde evaluatie die exploitatie van deze kwetsbaarheidsklasse in uitgerolde systemen in de praktijk documenteert.
Organisaties die LLM-gestuurde applicaties uitrollen moeten:
- Beoordelen: Red team-assessments uitvoeren die specifiek gericht zijn op deze kwetsbaarheidsklasse
- Verdedigen: Defense-in-depth-maatregelen implementeren passend bij het risiconiveau
- Monitoren: Monitoring inzetten die exploitatiepogingen real-time kan detecteren
- Reageren: Incident response-procedures specifiek voor AI-systeem-compromittering onderhouden
- Itereren: Verdedigingen regelmatig opnieuw testen naarmate zowel aanvallen als modellen evolueren
Actuele onderzoeksrichtingen
Actief onderzoek op dit gebied richt zich op meerdere richtingen:
- Formele verificatie: Ontwikkelen van wiskundige garanties voor modelgedrag onder adversariële omstandigheden
- Robuustheidstraining: Trainingsprocedures die modellen produceren die resistenter zijn tegen deze aanvalsklasse
- Detectiemethoden: Verbeterde technieken voor het detecteren van exploitatiepogingen met lage false-positive-percentages
- Gestandaardiseerde evaluatie: Benchmark-suites zoals HarmBench en JailbreakBench om vooruitgang te meten
Overwegingen bij de implementatie
Architectuurpatronen
Bij het implementeren van systemen die met LLM's interacteren, beïnvloeden verschillende architectuurpatronen de beveiligingshouding van de totale applicatie:
Gateway-patroon: Een dedicated API-gateway zit tussen gebruikers en de LLM en handelt authenticatie, rate limiting, inputvalidatie en outputfiltering af. Dit centraliseert beveiligingscontroles maar creëert een single point of failure.
from dataclasses import dataclass
from typing import Optional
import time
@dataclass
class SecurityGateway:
"""Gateway pattern for securing LLM application access."""
input_classifier: object # ML-based input classifier
output_filter: object # Output content filter
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:
"""Process a request through all security layers."""
request_id = self._generate_request_id()
# Layer 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}
# Layer 2: Input classification
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"}
# Layer 3: LLM processing
response = self._call_llm(message, session_id)
# Layer 4: Output filtering
filtered = self.output_filter.filter(response)
if filtered.was_modified:
self.audit_logger.log(
request_id, "output_filtered",
user_id, filtered.reason
)
# Layer 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:
# LLM API call implementation
passSidecar-patroon: Beveiligingscomponenten draaien naast de LLM als onafhankelijke services, elk verantwoordelijk voor een specifiek beveiligingsaspect. Dit geeft betere isolatie en onafhankelijke scaling, maar verhoogt de systeemcomplexiteit.
Mesh-patroon: Bij multi-agent-systemen heeft elke agent een eigen beveiligingsperimeter met authenticatie, autorisatie en auditing. Communicatie tussen agents volgt zero-trust-principes.
Performance-implicaties
Beveiligingsmaatregelen voegen onvermijdelijk latentie en rekenkundige overhead toe. Inzicht in deze afwegingen is essentieel voor productie-deployments:
| Beveiligingslaag | Typische latentie | Rekenkosten | Impact op UX |
|---|---|---|---|
| Trefwoordfilter | <1ms | Verwaarloosbaar | Geen |
| Regex-filter | 1-5ms | Laag | Geen |
| ML-classifier (klein) | 10-50ms | Gemiddeld | Minimaal |
| ML-classifier (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 checks te gebruiken (trefwoord- en regex-filters) voor voor de hand liggende aanvallen, gevolgd door duurdere op ML gebaseerde analyse alleen voor inputs die de eerste filters passeren. Deze cascadebenadering levert goede beveiliging met acceptabele performance.
Monitoring en observability
Effectieve beveiligingsmonitoring voor LLM-applicaties vereist het bijhouden van metrics die adversarial gedragspatronen vastleggen:
from dataclasses import dataclass
from collections import defaultdict
import time
@dataclass
class SecurityMetrics:
"""Track security-relevant metrics for LLM applications."""
# Counters
total_requests: int = 0
blocked_requests: int = 0
filtered_outputs: int = 0
anomalous_sessions: int = 0
# Rate tracking
_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):
"""Record a request and its disposition."""
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:
"""Calculate the block rate over a time window."""
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:
"""Determine if current metrics warrant an alert."""
block_rate = self.get_block_rate()
# Alert if block rate exceeds threshold
if block_rate > 0.3: # >30% of requests blocked in last 5 min
return True
return FalseBeveiligingstesten in CI/CD
Het integreren van AI-beveiligingstesten in de ontwikkelingspijplijn vangt regressies op voordat ze in productie terechtkomen:
- Tests op unitniveau: Test individuele beveiligingscomponenten (classifiers, filters) tegen bekende payloads
- Integratietests: Test de volledige beveiligingspipeline end-to-end
- Regressietests: Onderhoud een suite met eerder ontdekte aanvalspayloads en verifieer dat ze geblokkeerd blijven
- Adversarial tests: Voer periodiek geautomatiseerde red team-tools (Garak, Promptfoo) uit als onderdeel van de deployment-pipeline
Opkomende trends
Actuele onderzoeksrichtingen
Het veld van LLM-beveiliging evolueert snel. Belangrijke onderzoeksrichtingen die het landschap waarschijnlijk gaan vormgeven zijn onder andere:
-
Formele verificatie van LLM-gedrag: Onderzoekers verkennen wiskundige raamwerken om eigenschappen van modelgedrag onder adversariële omstandigheden te bewijzen. Hoewel volledige formele verificatie van neurale netwerken onhaalbaar blijft, is begrensde verificatie van specifieke eigenschappen veelbelovend.
-
Adversarial training voor LLM-robuustheid: Naast standaard RLHF ontwikkelen onderzoekers trainingsprocedures die modellen tijdens safety training expliciet blootstellen aan adversarial inputs, wat de robuustheid tegen bekende aanvalspatronen verbetert.
-
Interpretability-gestuurde verdediging: Onderzoek naar mechanistische interpretabiliteit stelt verdedigers in staat te begrijpen waarom specifieke aanvallen op neuron- en circuitniveau slagen, wat richting geeft aan gerichtere defensieve maatregelen.
-
Multi-agent-beveiliging: Naarmate LLM-agents wijdverspreider raken, is het beveiligen van inter-agent-communicatie en het handhaven van vertrouwensgrenzen in agentsystemen een actief onderzoeksgebied met grote praktische gevolgen.
-
Geautomatiseerde redteaming op schaal: Tools zoals NVIDIA's Garak, Microsoft's PyRIT en het Inspect-framework van de Britse AISI maken geautomatiseerde beveiligingstesten op schaal mogelijk die eerder onmogelijk was, maar kwaliteit en dekking van geautomatiseerde testen blijven een open uitdaging.
De integratie van deze onderzoeksrichtingen in productiesystemen zal de volgende generatie AI-beveiligingspraktijken definiëren.
Overwegingen bij de implementatie
Architectuurpatronen
Bij het implementeren van systemen die met LLM's interacteren, beïnvloeden verschillende architectuurpatronen de beveiligingshouding van de totale applicatie:
Gateway-patroon: Een dedicated API-gateway zit tussen gebruikers en de LLM en handelt authenticatie, rate limiting, inputvalidatie en outputfiltering af. Dit centraliseert beveiligingscontroles maar creëert een single point of failure.
from dataclasses import dataclass
from typing import Optional
import time
@dataclass
class SecurityGateway:
"""Gateway pattern for securing LLM application access."""
input_classifier: object # ML-based input classifier
output_filter: object # Output content filter
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:
"""Process a request through all security layers."""
request_id = self._generate_request_id()
# Layer 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}
# Layer 2: Input classification
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"}
# Layer 3: LLM processing
response = self._call_llm(message, session_id)
# Layer 4: Output filtering
filtered = self.output_filter.filter(response)
if filtered.was_modified:
self.audit_logger.log(
request_id, "output_filtered",
user_id, filtered.reason
)
# Layer 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:
# LLM API call implementation
passSidecar-patroon: Beveiligingscomponenten draaien naast de LLM als onafhankelijke services, elk verantwoordelijk voor een specifiek beveiligingsaspect. Dit geeft betere isolatie en onafhankelijke scaling, maar verhoogt de systeemcomplexiteit.
Mesh-patroon: Bij multi-agent-systemen heeft elke agent een eigen beveiligingsperimeter met authenticatie, autorisatie en auditing. Communicatie tussen agents volgt zero-trust-principes.
Performance-implicaties
Beveiligingsmaatregelen voegen onvermijdelijk latentie en rekenkundige overhead toe. Inzicht in deze afwegingen is essentieel voor productie-deployments:
| Beveiligingslaag | Typische latentie | Rekenkosten | Impact op UX |
|---|---|---|---|
| Trefwoordfilter | <1ms | Verwaarloosbaar | Geen |
| Regex-filter | 1-5ms | Laag | Geen |
| ML-classifier (klein) | 10-50ms | Gemiddeld | Minimaal |
| ML-classifier (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 checks te gebruiken (trefwoord- en regex-filters) voor voor de hand liggende aanvallen, gevolgd door duurdere op ML gebaseerde analyse alleen voor inputs die de eerste filters passeren. Deze cascadebenadering levert goede beveiliging met acceptabele performance.
Monitoring en observability
Effectieve beveiligingsmonitoring voor LLM-applicaties vereist het bijhouden van metrics die adversarial gedragspatronen vastleggen:
from dataclasses import dataclass
from collections import defaultdict
import time
@dataclass
class SecurityMetrics:
"""Track security-relevant metrics for LLM applications."""
# Counters
total_requests: int = 0
blocked_requests: int = 0
filtered_outputs: int = 0
anomalous_sessions: int = 0
# Rate tracking
_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):
"""Record a request and its disposition."""
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:
"""Calculate the block rate over a time window."""
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:
"""Determine if current metrics warrant an alert."""
block_rate = self.get_block_rate()
# Alert if block rate exceeds threshold
if block_rate > 0.3: # >30% of requests blocked in last 5 min
return True
return FalseBeveiligingstesten in CI/CD
Het integreren van AI-beveiligingstesten in de ontwikkelingspijplijn vangt regressies op voordat ze in productie terechtkomen:
- Tests op unitniveau: Test individuele beveiligingscomponenten (classifiers, filters) tegen bekende payloads
- Integratietests: Test de volledige beveiligingspipeline end-to-end
- Regressietests: Onderhoud een suite met eerder ontdekte aanvalspayloads en verifieer dat ze geblokkeerd blijven
- Adversarial tests: Voer periodiek geautomatiseerde red team-tools (Garak, Promptfoo) uit als onderdeel van de deployment-pipeline
Opkomende trends
Actuele onderzoeksrichtingen
Het veld van LLM-beveiliging evolueert snel. Belangrijke onderzoeksrichtingen die het landschap waarschijnlijk gaan vormgeven zijn onder andere:
-
Formele verificatie van LLM-gedrag: Onderzoekers verkennen wiskundige raamwerken om eigenschappen van modelgedrag onder adversariële omstandigheden te bewijzen. Hoewel volledige formele verificatie van neurale netwerken onhaalbaar blijft, is begrensde verificatie van specifieke eigenschappen veelbelovend.
-
Adversarial training voor LLM-robuustheid: Naast standaard RLHF ontwikkelen onderzoekers trainingsprocedures die modellen tijdens safety training expliciet blootstellen aan adversarial inputs, wat de robuustheid tegen bekende aanvalspatronen verbetert.
-
Interpretability-gestuurde verdediging: Onderzoek naar mechanistische interpretabiliteit stelt verdedigers in staat te begrijpen waarom specifieke aanvallen op neuron- en circuitniveau slagen, wat richting geeft aan gerichtere defensieve maatregelen.
-
Multi-agent-beveiliging: Naarmate LLM-agents wijdverspreider raken, is het beveiligen van inter-agent-communicatie en het handhaven van vertrouwensgrenzen in agentsystemen een actief onderzoeksgebied met grote praktische gevolgen.
-
Geautomatiseerde redteaming op schaal: Tools zoals NVIDIA's Garak, Microsoft's PyRIT en het Inspect-framework van de Britse AISI maken geautomatiseerde beveiligingstesten op schaal mogelijk die eerder onmogelijk was, maar kwaliteit en dekking van geautomatiseerde testen blijven een open uitdaging.
De integratie van deze onderzoeksrichtingen in productiesystemen zal de volgende generatie AI-beveiligingspraktijken definiëren.
Referenties en verdere lectuur
- CVE-2023-36258 — LangChain arbitrary code execution via PALChain
- HarmBench — github.com/centerforaisafety/HarmBench — gestandaardiseerde evaluatie
- MITRE ATLAS — AML.T0054 (LLM Plugin Compromise)
Wat is de effectiefste aanpak voor verdediging tegen de aanvalsklasse die in dit artikel wordt behandeld?
Waarom blijven de technieken in dit artikel effectief bij verschillende modelversies en -leveranciers?