Payloadbibliotheek voor prompt injection
Gecureerde bibliotheek van prompt injection-payloads, georganiseerd per techniek en doelverdediging.
Overzicht
Gecureerde bibliotheek van prompt injection-payloads, georganiseerd per techniek en doelverdediging.
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:
"""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
# Baselinegedrag
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 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 functieresultaten | Gemiddeld | Hoog |
| Contextmanipulatie | Misbruik van contextvenster-dynamiek | Hoog | Hoog |
| Training-time | Vergiftiging van trainings- of fine-tuningdata | Zeer hoog | Kritiek |
Praktische toepassing
Implementatie van techniek
Deze techniek in de praktijk implementeren vereist begrip van 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."""
# Pas payload aan op de defensieve houding van het doelwit
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,
}Verdedigingsoverwegingen
Defensieve maatregelen begrijpen is essentieel voor zowel offensieve als defensieve practitioners:
- Inputvalidatie: Gebruikersinput voorverwerken via classificatiemodellen die adversarial patronen detecteren voordat ze het doel-LLM bereiken
- Outputfiltering: Modeloutput naverwerken om gevoelige data, instructie-artefacten en andere indicatoren van succesvol misbruik te detecteren en te verwijderen
- Gedragsmonitoring: Real-time monitoring van modelgedragspatronen om afwijkende responses te detecteren die op lopende aanvallen kunnen wijzen
- Architectuurontwerp: Applicatie-architecturen ontwerpen die het vertrouwen in modeloutput minimaliseren en securitygrenzen extern afdwingen
Real-world relevantie
Dit onderwerp is direct relevant voor productie-AI-deployments in alle branches. CVE-2024-21513 — LangChain experimental: willekeurige code-uitvoering — documenteert real-world misbruik van deze kwetsbaarheidsklasse in uitgerolde systemen.
Organisaties die LLM-aangedreven applicaties uitrollen moeten:
- Beoordelen: Red team-beoordelingen uitvoeren die specifiek gericht zijn op deze kwetsbaarheidsklasse
- Verdedigen: Defense-in-depth-maatregelen implementeren passend bij het risiconiveau
- Monitoren: Monitoring uitrollen die misbruikpogingen in real-time kan detecteren
- Reageren: Incident response-procedures onderhouden specifiek voor compromittering van AI-systemen
- Itereren: Verdedigingen regelmatig opnieuw testen naarmate zowel aanvallen als modellen evolueren
Huidige onderzoeksrichtingen
Actief onderzoek op dit gebied richt zich op verschillende richtingen:
- Formele verificatie: Wiskundige garanties ontwikkelen voor modelgedrag onder adversarial omstandigheden
- Robuustheidstraining: Trainingsprocedures die modellen produceren die resistenter zijn tegen deze aanvalsklasse
- Detectiemethoden: Verbeterde technieken voor het detecteren van misbruikpogingen met lage false-positive-percentages
- Gestandaardiseerde evaluatie: Benchmark-suites zoals HarmBench en JailbreakBench om voortgang te meten
Implementatieoverwegingen
Architectuurpatronen
Bij het implementeren van systemen die interacteren met LLM's beïnvloeden verschillende architectuurpatronen de securityhouding van de hele applicatie:
Gateway-patroon: Een toegewijde API-gateway zit tussen gebruikers en het LLM en handelt authenticatie, rate limiting, inputvalidatie en outputfiltering af. Dit centraliseert securitycontroles 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()
# 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: inputclassificatie
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: outputfiltering
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:
# LLM API call implementation
passSidecar-patroon: Security-componenten draaien naast het LLM als onafhankelijke services, elk verantwoordelijk voor een specifiek aspect van security. Dit biedt betere isolatie en onafhankelijke schaling maar verhoogt de systeemcomplexiteit.
Mesh-patroon: Voor multi-agent systemen heeft elke agent zijn eigen securityperimeter met authenticatie, autorisatie en auditing. Inter-agent communicatie volgt zero-trust-principes.
Prestatie-implicaties
Securitymaatregelen voegen onvermijdelijk latentie en rekenkracht toe. Deze afwegingen begrijpen is essentieel voor productie-deployments:
| Securitylaag | Typische latentie | Rekenkosten | Impact op UX |
|---|---|---|---|
| Keywordfilter | <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 pijplijn | 100-500ms | Hoog | Gemiddeld |
De aanbevolen aanpak is om eerst snelle, lichtgewicht checks te gebruiken (keyword- en regex-filters) om voor de hand liggende aanvallen op te vangen, gevolgd door duurdere ML-gebaseerde analyse alleen voor input die de initiële filters passeert. Deze cascaderende aanpak biedt goede security met acceptabele prestaties.
Monitoring en observability
Effectieve security-monitoring voor LLM-toepassingen 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()
# Alarm als blokkeerpercentage drempel overschrijdt
if block_rate > 0.3: # >30% of requests blocked in last 5 min
return True
return FalseSecuritytesten in CI/CD
AI-securitytesten integreren in de ontwikkelpijplijn vangt regressies op voordat ze productie bereiken:
- Unit-niveau tests: Test individuele security-componenten (classifiers, filters) tegen bekende payloads
- Integratietests: Test de volledige securitypijplijn end-to-end
- Regressietests: Onderhoud een suite van eerder ontdekte aanvalspayloads en verifieer dat ze geblokkeerd blijven
- Adversarial tests: Voer periodiek geautomatiseerde red team-tools uit (Garak, Promptfoo) als deel van de deploymentpijplijn
Opkomende trends
Huidige onderzoeksrichtingen
Het veld van LLM-security evolueert snel. Belangrijke onderzoeksrichtingen die het landschap waarschijnlijk vormgeven zijn:
-
Formele verificatie voor LLM-gedrag: Onderzoekers verkennen wiskundige frameworks voor het bewijzen van eigenschappen over modelgedrag onder adversarial omstandigheden. Hoewel volledige formele verificatie van neurale netwerken onhaalbaar blijft, biedt begrensde verificatie van specifieke eigenschappen perspectief.
-
Adversarial training voor LLM-robuustheid: Naast standaard RLHF ontwikkelen onderzoekers trainingsprocedures die modellen tijdens veiligheidstraining expliciet blootstellen aan adversarial input, wat de robuustheid tegen bekende aanvalspatronen verbetert.
-
Door interpreteerbaarheid geleide verdediging: Onderzoek naar mechanistische interpreteerbaarheid stelt verdedigers in staat om te begrijpen waarom specifieke aanvallen slagen op neuron- en circuitniveau, en informeert gerichtere defensieve maatregelen.
-
Multi-agent security: Naarmate LLM-agents prominenter worden, is het beveiligen van inter-agent communicatie en het handhaven van vertrouwensgrenzen tussen agent-systemen een actief onderzoeksgebied met significante praktische implicaties.
-
Geautomatiseerde redteaming op schaal: Tools zoals NVIDIA's Garak, Microsoft's PyRIT en het Inspect-framework van het UK AISI maken geautomatiseerd securitytesten mogelijk op schaal die voorheen onmogelijk was, maar de kwaliteit en dekking van geautomatiseerd testen blijft een open uitdaging.
De integratie van deze onderzoeksrichtingen in productiesystemen zal de volgende generatie AI-securitypraktijken bepalen.
Implementatieoverwegingen
Architectuurpatronen
Bij het implementeren van systemen die interacteren met LLM's beïnvloeden verschillende architectuurpatronen de securityhouding van de hele applicatie:
Gateway-patroon: Een toegewijde API-gateway zit tussen gebruikers en het LLM en handelt authenticatie, rate limiting, inputvalidatie en outputfiltering af. Dit centraliseert securitycontroles 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()
# 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: inputclassificatie
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: outputfiltering
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:
# LLM API call implementation
passSidecar-patroon: Security-componenten draaien naast het LLM als onafhankelijke services, elk verantwoordelijk voor een specifiek aspect van security. Dit biedt betere isolatie en onafhankelijke schaling maar verhoogt de systeemcomplexiteit.
Mesh-patroon: Voor multi-agent systemen heeft elke agent zijn eigen securityperimeter met authenticatie, autorisatie en auditing. Inter-agent communicatie volgt zero-trust-principes.
Prestatie-implicaties
Securitymaatregelen voegen onvermijdelijk latentie en rekenkracht toe. Deze afwegingen begrijpen is essentieel voor productie-deployments:
| Securitylaag | Typische latentie | Rekenkosten | Impact op UX |
|---|---|---|---|
| Keywordfilter | <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 pijplijn | 100-500ms | Hoog | Gemiddeld |
De aanbevolen aanpak is om eerst snelle, lichtgewicht checks te gebruiken (keyword- en regex-filters) om voor de hand liggende aanvallen op te vangen, gevolgd door duurdere ML-gebaseerde analyse alleen voor input die de initiële filters passeert. Deze cascaderende aanpak biedt goede security met acceptabele prestaties.
Monitoring en observability
Effectieve security-monitoring voor LLM-toepassingen 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()
# Alarm als blokkeerpercentage drempel overschrijdt
if block_rate > 0.3: # >30% of requests blocked in last 5 min
return True
return FalseSecuritytesten in CI/CD
AI-securitytesten integreren in de ontwikkelpijplijn vangt regressies op voordat ze productie bereiken:
- Unit-niveau tests: Test individuele security-componenten (classifiers, filters) tegen bekende payloads
- Integratietests: Test de volledige securitypijplijn end-to-end
- Regressietests: Onderhoud een suite van eerder ontdekte aanvalspayloads en verifieer dat ze geblokkeerd blijven
- Adversarial tests: Voer periodiek geautomatiseerde red team-tools uit (Garak, Promptfoo) als deel van de deploymentpijplijn
Opkomende trends
Huidige onderzoeksrichtingen
Het veld van LLM-security evolueert snel. Belangrijke onderzoeksrichtingen die het landschap waarschijnlijk vormgeven zijn:
-
Formele verificatie voor LLM-gedrag: Onderzoekers verkennen wiskundige frameworks voor het bewijzen van eigenschappen over modelgedrag onder adversarial omstandigheden. Hoewel volledige formele verificatie van neurale netwerken onhaalbaar blijft, biedt begrensde verificatie van specifieke eigenschappen perspectief.
-
Adversarial training voor LLM-robuustheid: Naast standaard RLHF ontwikkelen onderzoekers trainingsprocedures die modellen tijdens veiligheidstraining expliciet blootstellen aan adversarial input, wat de robuustheid tegen bekende aanvalspatronen verbetert.
-
Door interpreteerbaarheid geleide verdediging: Onderzoek naar mechanistische interpreteerbaarheid stelt verdedigers in staat om te begrijpen waarom specifieke aanvallen slagen op neuron- en circuitniveau, en informeert gerichtere defensieve maatregelen.
-
Multi-agent security: Naarmate LLM-agents prominenter worden, is het beveiligen van inter-agent communicatie en het handhaven van vertrouwensgrenzen tussen agent-systemen een actief onderzoeksgebied met significante praktische implicaties.
-
Geautomatiseerde redteaming op schaal: Tools zoals NVIDIA's Garak, Microsoft's PyRIT en het Inspect-framework van het UK AISI maken geautomatiseerd securitytesten mogelijk op schaal die voorheen onmogelijk was, maar de kwaliteit en dekking van geautomatiseerd testen blijft een open uitdaging.
De integratie van deze onderzoeksrichtingen in productiesystemen zal de volgende generatie AI-securitypraktijken bepalen.
Referenties en verder lezen
- Anthropic 2024 — "Many-shot Jailbreaking" technical report
- CVE-2024-21513 — LangChain experimental: willekeurige code-uitvoering
- ISO/IEC 42001 — AI Management System Standard
Wat is de meest effectieve aanpak om je te verdedigen tegen de aanvalsklasse die in dit artikel behandeld wordt?
Waarom blijven de in dit artikel beschreven technieken effectief over verschillende modelversies en providers heen?