Snelle referentie voor MITRE ATLAS
Snelle referentiegids voor MITRE ATLAS-tactieken, -technieken en -procedures voor AI-systemen.
Overzicht
Snelle referentiegids voor MITRE ATLAS-tactieken, -technieken en -procedures voor AI-systemen.
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
# Baseline-gedrag
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 | Moeilijkheidsgraad | Impact |
|---|---|---|---|
| Directe invoer | Adversarial content in gebruikersberichten | Laag | Variabel |
| Indirecte invoer | Adversarial content in externe data | Gemiddeld | Hoog |
| Tool-outputs | Adversarial content in functie-resultaten | Gemiddeld | Hoog |
| Contextmanipulatie | Misbruik van contextvenster-dynamiek | Hoog | Hoog |
| Tijdens training | Vergiftiging van training- of fine-tuning-data | Zeer hoog | Kritiek |
Praktische toepassing
Implementatie van de techniek
Het in de praktijk implementeren van deze techniek 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."""
# Stem payload af op de defensieve houding 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:
"""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,
}Defensieve overwegingen
Inzicht in defensieve maatregelen is essentieel voor zowel offensieve als defensieve practici:
- Invoervalidatie: Voorverwerking van gebruikersinvoer via classificatiemodellen die adversarial patronen detecteren voordat ze het doel-LLM bereiken
- Output-filtering: Naverwerking van model-outputs om gevoelige data, instructie-artefacten en andere indicatoren van succesvolle exploitatie te detecteren en te verwijderen
- Gedragsmonitoring: Realtime monitoring van gedragspatronen van het model om afwijkende antwoorden te detecteren die op lopende aanvallen kunnen wijzen
- Architectuurontwerp: Applicatie-architecturen ontwerpen die het vertrouwen in model-outputs minimaliseren en security-grenzen extern afdwingen
Reële relevantie
Dit onderwerpgebied is direct relevant voor productie-AI-deployments in alle sectoren. OWASP LLM Top 10 2025 -- LLM07 (Insecure Plugin Design) documenteert reële exploitatie van deze kwetsbaarheidsklasse in uitgerolde systemen.
Organisaties die LLM-aangedreven applicaties uitrollen moeten:
- Beoordelen: Red team-assessments uitvoeren die zich specifiek richten op deze kwetsbaarheidsklasse
- Verdedigen: Defense-in-depth-maatregelen implementeren die passend zijn voor het risiconiveau
- Monitoren: Monitoring inzetten die exploitatiepogingen realtime kan detecteren
- Reageren: Incident response-procedures specifiek voor AI-systeem-compromittering bijhouden
- Itereren: Verdedigingen regelmatig hertesten naarmate zowel aanvallen als modellen evolueren
Huidige onderzoeksrichtingen
Actief onderzoek op dit gebied richt zich op meerdere richtingen:
- Formele verificatie: Ontwikkelen van wiskundige garanties voor modelgedrag onder adversarial omstandigheden
- Robustness training: Trainingsprocedures die modellen produceren die beter bestand zijn tegen deze aanvalsklasse
- Detectiemethoden: Verbeterde technieken voor het detecteren van exploitatiepogingen met lage false-positive rates
- Gestandaardiseerde evaluatie: Benchmark-suites zoals HarmBench en JailbreakBench om voortgang te meten
Implementatie-overwegingen
Architectuurpatronen
Bij het implementeren van systemen die met LLM's interacteren beïnvloeden verschillende architectuurpatronen de security-positie van de algehele applicatie:
Gateway-patroon: Een specifieke API-gateway zit tussen gebruikers en het LLM, en handelt authenticatie, rate limiting, invoervalidatie en output-filtering af. 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 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: 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: Output-filtering
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 onafhankelijk schalen, maar verhoogt de systeemcomplexiteit.
Mesh-patroon: Voor multi-agent-systemen heeft elke agent zijn eigen security-perimeter met authenticatie, autorisatie en auditing. Communicatie tussen agents volgt zero-trust-principes.
Prestatie-implicaties
Veiligheidsmaatregelen voegen onvermijdelijk latency en rekenkracht toe. Begrip van deze trade-offs is essentieel voor productie-deployments:
| Security-laag | Typische latency | Rekenkundige kosten | Impact op UX |
|---|---|---|---|
| Keyword-filter | <1ms | Verwaarloosbaar | Geen |
| Regex-filter | 1-5ms | Laag | Geen |
| ML-classifier (klein) | 10-50ms | Matig | Minimaal |
| ML-classifier (groot) | 50-200ms | Hoog | Merkbaar |
| LLM-as-judge | 500-2000ms | Zeer hoog | Significant |
| Volledige pipeline | 100-500ms | Hoog | Matig |
De aanbevolen aanpak is om eerst snelle, lichtgewicht controles te gebruiken (keyword- en regex-filters) om voor de hand liggende aanvallen te vangen, gevolgd door duurdere ML-gebaseerde analyse alleen voor invoer die de eerste filters passeert. Deze cascadische aanpak biedt goede security met acceptabele prestaties.
Monitoring en observability
Effectieve security-monitoring voor LLM-applicaties vereist het volgen 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."""
# Tellers
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 als block rate de drempel overschrijdt
if block_rate > 0.3: # >30% van requests geblokkeerd in laatste 5 min
return True
return FalseSecurity-tests in CI/CD
Door AI-security-testen te integreren in de ontwikkelpipeline vang je regressies voordat ze de productie bereiken:
- Unit-niveau tests: Test individuele security-componenten (classifiers, filters) tegen bekende payloads
- Integratietests: Test de volledige security-pipeline 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 (Garak, Promptfoo) uit als onderdeel van de deployment-pipeline
Opkomende trends
Huidige onderzoeksrichtingen
Het veld van LLM-security ontwikkelt zich snel. Belangrijke onderzoeksrichtingen die het landschap waarschijnlijk vorm zullen geven, zijn onder andere:
-
Formele verificatie van LLM-gedrag: Onderzoekers verkennen wiskundige frameworks om eigenschappen van modelgedrag te bewijzen onder adversarial omstandigheden. Hoewel volledige formele verificatie van neurale netwerken onpraktisch blijft, biedt begrensde verificatie van specifieke eigenschappen perspectief.
-
Adversarial training voor LLM-robuustheid: Naast standaard RLHF ontwikkelen onderzoekers trainingsprocedures die modellen tijdens de veiligheidstraining expliciet blootstellen aan adversarial inputs, wat de robuustheid tegen bekende aanvalspatronen verbetert.
-
Interpretability-gestuurde verdediging: Mechanistisch interpretability-onderzoek stelt verdedigers in staat te begrijpen waarom specifieke aanvallen slagen op neuron- en circuit-niveau, wat gerichtere defensieve maatregelen mogelijk maakt.
-
Multi-agent-security: Naarmate LLM-agents wijdverbreider worden, is het beveiligen van inter-agent-communicatie en het handhaven van vertrouwensgrenzen tussen agent-systemen een actief onderzoeksgebied met aanzienlijke praktische implicaties.
-
Geautomatiseerde red teaming op schaal: Tools zoals NVIDIA's Garak, Microsoft's PyRIT en het Inspect-framework van UK AISI maken geautomatiseerd security-testen mogelijk op schalen die voorheen onmogelijk waren, maar de kwaliteit en dekking van geautomatiseerd testen blijft een open uitdaging.
De integratie van deze onderzoeksrichtingen in productiesystemen zal de volgende generatie AI-security-praktijken definiëren.
Implementatie-overwegingen
Architectuurpatronen
Bij het implementeren van systemen die met LLM's interacteren beïnvloeden verschillende architectuurpatronen de security-positie van de algehele applicatie:
Gateway-patroon: Een specifieke API-gateway zit tussen gebruikers en het LLM, en handelt authenticatie, rate limiting, invoervalidatie en output-filtering af. 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 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: 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: Output-filtering
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 onafhankelijk schalen, maar verhoogt de systeemcomplexiteit.
Mesh-patroon: Voor multi-agent-systemen heeft elke agent zijn eigen security-perimeter met authenticatie, autorisatie en auditing. Communicatie tussen agents volgt zero-trust-principes.
Prestatie-implicaties
Veiligheidsmaatregelen voegen onvermijdelijk latency en rekenkracht toe. Begrip van deze trade-offs is essentieel voor productie-deployments:
| Security-laag | Typische latency | Rekenkundige kosten | Impact op UX |
|---|---|---|---|
| Keyword-filter | <1ms | Verwaarloosbaar | Geen |
| Regex-filter | 1-5ms | Laag | Geen |
| ML-classifier (klein) | 10-50ms | Matig | Minimaal |
| ML-classifier (groot) | 50-200ms | Hoog | Merkbaar |
| LLM-as-judge | 500-2000ms | Zeer hoog | Significant |
| Volledige pipeline | 100-500ms | Hoog | Matig |
De aanbevolen aanpak is om eerst snelle, lichtgewicht controles te gebruiken (keyword- en regex-filters) om voor de hand liggende aanvallen te vangen, gevolgd door duurdere ML-gebaseerde analyse alleen voor invoer die de eerste filters passeert. Deze cascadische aanpak biedt goede security met acceptabele prestaties.
Monitoring en observability
Effectieve security-monitoring voor LLM-applicaties vereist het volgen 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."""
# Tellers
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 als block rate de drempel overschrijdt
if block_rate > 0.3: # >30% van requests geblokkeerd in laatste 5 min
return True
return FalseSecurity-tests in CI/CD
Door AI-security-testen te integreren in de ontwikkelpipeline vang je regressies voordat ze de productie bereiken:
- Unit-niveau tests: Test individuele security-componenten (classifiers, filters) tegen bekende payloads
- Integratietests: Test de volledige security-pipeline 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 (Garak, Promptfoo) uit als onderdeel van de deployment-pipeline
Opkomende trends
Huidige onderzoeksrichtingen
Het veld van LLM-security ontwikkelt zich snel. Belangrijke onderzoeksrichtingen die het landschap waarschijnlijk vorm zullen geven, zijn onder andere:
-
Formele verificatie van LLM-gedrag: Onderzoekers verkennen wiskundige frameworks om eigenschappen van modelgedrag te bewijzen onder adversarial omstandigheden. Hoewel volledige formele verificatie van neurale netwerken onpraktisch blijft, biedt begrensde verificatie van specifieke eigenschappen perspectief.
-
Adversarial training voor LLM-robuustheid: Naast standaard RLHF ontwikkelen onderzoekers trainingsprocedures die modellen tijdens de veiligheidstraining expliciet blootstellen aan adversarial inputs, wat de robuustheid tegen bekende aanvalspatronen verbetert.
-
Interpretability-gestuurde verdediging: Mechanistisch interpretability-onderzoek stelt verdedigers in staat te begrijpen waarom specifieke aanvallen slagen op neuron- en circuit-niveau, wat gerichtere defensieve maatregelen mogelijk maakt.
-
Multi-agent-security: Naarmate LLM-agents wijdverbreider worden, is het beveiligen van inter-agent-communicatie en het handhaven van vertrouwensgrenzen tussen agent-systemen een actief onderzoeksgebied met aanzienlijke praktische implicaties.
-
Geautomatiseerde red teaming op schaal: Tools zoals NVIDIA's Garak, Microsoft's PyRIT en het Inspect-framework van UK AISI maken geautomatiseerd security-testen mogelijk op schalen die voorheen onmogelijk waren, maar de kwaliteit en dekking van geautomatiseerd testen blijft een open uitdaging.
De integratie van deze onderzoeksrichtingen in productiesystemen zal de volgende generatie AI-security-praktijken definiëren.
Referenties en verder lezen
- NIST AI RMF (Risk Management Framework)
- OWASP LLM Top 10 2025 -- LLM07 (Insecure Plugin Design)
- NeMo Guardrails (NVIDIA) -- github.com/NVIDIA/NeMo-Guardrails -- programmeerbare guardrails
Wat is de meest effectieve aanpak om je te verdedigen tegen de aanvalsklasse die in dit artikel wordt behandeld?
Waarom blijven de technieken die in dit artikel worden beschreven effectief over verschillende modelversies en providers heen?