Manipulatie van sparse embeddings
Het manipuleren van sparse embeddings (BM25, SPLADE) om retrievalresultaten te vergiftigen.
Overzicht
Het manipuleren van sparse embeddings (BM25, SPLADE) om retrievalresultaten te vergiftigen.
Dit onderwerp vormt een cruciaal gebied binnen AI-beveiliging dat onderwerp is geweest van substantieel onderzoek en daadwerkelijk misbruik in de praktijk. Inzicht in de concepten, technieken en verdedigingsmaatregelen die hier worden behandeld is essentieel voor iedereen die in AI-beveiliging werkt, in een offensieve of defensieve rol.
Zou et al. 2023 — "Universal and Transferable Adversarial Attacks on Aligned Language Models" biedt de fundamentele context voor de kwetsbaarheidsklasse die in dit artikel wordt onderzocht.
Kernbegrippen
Fundamentele principes
De beveiligingsimplicaties van dit onderwerp komen voort uit fundamentele eigenschappen van de manier waarop moderne taalmodellen worden ontworpen, getraind en uitgerold. Het gaat niet om geïsoleerde implementatiefouten, maar om systemische kenmerken die in wisselende mate alle transformer-gebaseerde taalmodellen treffen.
Het begrijpen van deze fundamentele eigenschap is de sleutel om te snappen waarom de technieken in dit artikel werken en waarom ze effectief blijven ondanks voortdurende verbeteringen in de veiligheidstraining van modellen. Veiligheidstraining voegt een gedragslaag toe waardoor modellen minder snel duidelijk schadelijke instructies opvolgen, maar die laag draait bovenop dezelfde architectuur en kan worden beïnvloed door dezelfde aandachtsmechanismen die legitieme invoer verwerken.
Technische verdieping
Het mechanisme achter deze kwetsbaarheidsklasse speelt zich af op het raakvlak tussen het vermogen om instructies op te volgen en de authenticatie van de bron. Tijdens de training leren modellen instructies op te volgen die in specifieke formaten en contexten worden aangeboden. Een aanvaller die adversarial content kan aanbieden in een formaat dat overeenkomt met de aangeleerde instructiepatronen van het model, kan het gedrag van het model met hoge betrouwbaarheid beïnvloeden.
from dataclasses import dataclass
from typing import Optional
import json
@dataclass
class SecurityAnalysis:
"""Framework voor het analyseren van de beveiligingseigenschappen van LLM-systemen."""
target: str
model: str
defenses: list
vulnerabilities: list
def assess_risk(self, attack_type: str) -> dict:
"""Beoordeel het risico voor een specifiek aanvalstype."""
# Controleer of een verdediging dit aanvalstype afdekt
relevant_defenses = [
d for d in self.defenses
if attack_type in d.get("covers", [])
]
# Risicofactoren
likelihood = "high" if not relevant_defenses else "medium"
impact = self._assess_impact(attack_type)
return {
"attack_type": attack_type,
"likelihood": likelihood,
"impact": impact,
"defenses": len(relevant_defenses),
"risk_level": self._calculate_risk(likelihood, impact),
}
def _assess_impact(self, attack_type: str) -> str:
"""Beoordeel de mogelijke impact van een aanvalstype."""
high_impact = ["data_exfiltration", "unauthorized_actions", "privilege_escalation"]
return "high" if attack_type in high_impact else "medium"
def _calculate_risk(self, likelihood: str, impact: str) -> str:
"""Bereken het totale risico op basis van waarschijnlijkheid en impact."""
risk_matrix = {
("high", "high"): "critical",
("high", "medium"): "high",
("medium", "high"): "high",
("medium", "medium"): "medium",
}
return risk_matrix.get((likelihood, impact), "medium")
def generate_report(self) -> str:
"""Genereer een risicobeoordelingsrapport."""
attacks = ["prompt_injection", "data_exfiltration", "unauthorized_actions"]
assessments = [self.assess_risk(a) for a in attacks]
report = f"# Risk Assessment: {self.target}\n\n"
for assessment in assessments:
report += (
f"## {assessment['attack_type']}\n"
f"- Risk: {assessment['risk_level']}\n"
f"- Likelihood: {assessment['likelihood']}\n"
f"- Impact: {assessment['impact']}\n"
f"- Active defenses: {assessment['defenses']}\n\n"
)
return reportAnalyse van het aanvalsoppervlak
Inzicht in het aanvalsoppervlak is essentieel voor zowel offensief als defensief werk:
| Aanvalsvector | Toegangspunt | Typische impact | Verdedigingsaanpak |
|---|---|---|---|
| Directe injectie | Invoer van gebruikersbericht | Extractie van system prompt, omzeilen van veiligheid | Invoerclassificatie |
| Indirecte injectie | Externe databronnen (web, documenten, tools) | Data-exfiltratie, ongeautoriseerde acties | Datasanitisatie |
| Misbruik van function calling | Injectie van toolparameters | Ongeautoriseerde API-aanroepen, datatoegang | Tool-sandboxing |
| Geheugenmanipulatie | Gespreksgeschiedenis, persistent geheugen | Persistentie over sessies heen, valse context | Geheugenvalidatie |
| Contextmanipulatie | Beheer van het contextvenster | Overschrijven van instructieprioriteit | Contextisolatie |
Toepassing in de praktijk
Implementatieaanpak
Om deze concepten in de praktijk toe te passen is een systematische methodologie nodig:
class PracticalFramework:
"""Praktisch framework voor het toepassen van de concepten in dit artikel."""
def __init__(self, target_config: dict):
self.config = target_config
self.findings = []
self.tested_vectors = set()
def test_vector(self, vector: str, payload: str) -> dict:
"""Test een specifieke aanvalsvector tegen het doelwit."""
self.tested_vectors.add(vector)
# Verstuur de payload
response = self._send(payload)
# Evalueer het resultaat
finding = {
"vector": vector,
"payload_length": len(payload),
"response_length": len(response),
"success": self._evaluate(response),
"defense_triggered": self._detect_defense(response),
}
if finding["success"]:
self.findings.append(finding)
return finding
def coverage_report(self) -> dict:
"""Rapporteer over de testdekking."""
all_vectors = {
"direct_injection", "indirect_injection", "function_abuse",
"memory_manipulation", "context_manipulation",
}
return {
"tested": list(self.tested_vectors),
"untested": list(all_vectors - self.tested_vectors),
"coverage": f"{len(self.tested_vectors)/len(all_vectors)*100:.0f}%",
"findings": len(self.findings),
}
def _send(self, payload: str) -> str:
"""Verstuur de payload naar het doelwit (implementatie verschilt per doelwit)."""
pass
def _evaluate(self, response: str) -> bool:
"""Evalueer of de aanval geslaagd is."""
pass
def _detect_defense(self, response: str) -> Optional[str]:
"""Detecteer welk verdedigingsmechanisme is geactiveerd."""
passAandachtspunten voor verdediging
Inzicht in verdedigingsmaatregelen is even belangrijk:
-
Invoervalidatie: De eerste verdedigingslinie. Zet invoerclassifiers in die inkomende prompts beoordelen op adversarial patronen voordat ze het model bereiken. Moderne classifiers combineren keyword-matching, regex-patronen en ML-gebaseerde detectie voor volledige dekking.
-
Uitvoerfiltering: Het vangnet. Bewerk alle modeluitvoer na om lekken van gevoelige data, fragmenten van de system prompt en andere beleidsschendingen te detecteren en te verwijderen. Uitvoerfilters horen onafhankelijk te zijn van invoerfilters om defense-in-depth te bieden.
-
Gedragsmonitoring: De detectielaag. Monitor de interactiepatronen van het model op afwijkingen die wijzen op lopende aanvallen — ongebruikelijke requestpatronen, herhaalde weigeringen of antwoordkenmerken die afwijken van het basisgedrag.
-
Architectuurontwerp: Het fundament. Ontwerp applicatie-architecturen die zo min mogelijk vertrouwen leggen in modeluitvoer, least privilege afdwingen voor toegang tot tools en duidelijke beveiligingsgrenzen tussen componenten handhaven.
Relevantie in de praktijk
Deze concepten zijn direct toepasbaar op AI-systemen in productie, in allerlei sectoren. De volgende factoren maken dit onderwerp bijzonder relevant:
- Alomtegenwoordigheid: De kwetsbaarheidsklasse treft alle grote modelaanbieders en deploymentconfiguraties
- Impact: Geslaagd misbruik kan leiden tot datablootstelling, ongeautoriseerde acties en compliance-schendingen
- Persistentie: De onderliggende architectuureigenschappen zorgen ervoor dat deze technieken relevant blijven naarmate modellen evolueren
- Regelgeving: Opkomende regelgeving (EU AI Act, NIST AI RMF) verplicht organisaties steeds vaker om deze risico's te beoordelen en te mitigeren
Actueel onderzoek
Het actieve onderzoek op dit gebied omvat:
- Formele robuustheidsgaranties: Het ontwikkelen van wiskundige kaders om modelgedrag te bewijzen onder begrensde adversarial verstoring
- Adversarial training op schaal: Trainingsprocedures die modellen tijdens de veiligheidstraining blootstellen aan adversarial invoer om de robuustheid te verbeteren
- Verdediging op basis van interpreteerbaarheid: Mechanistische interpreteerbaarheid gebruiken om te begrijpen waarom aanvallen slagen op neuronniveau, wat gerichte verdedigingen mogelijk maakt
- Gestandaardiseerde evaluatie: Benchmarks zoals HarmBench en JailbreakBench die de effectiviteit van aanvallen en verdedigingen systematisch meetbaar maken
Aandachtspunten bij implementatie
Architectuurpatronen
Bij het bouwen van systemen die met LLM's communiceren, beïnvloeden verschillende architectuurpatronen de beveiligingshouding van de applicatie als geheel:
Gateway-patroon: Een dedicated API-gateway staat tussen gebruikers en het LLM en regelt authenticatie, rate limiting, invoervalidatie en uitvoerfiltering. Dit centraliseert de beveiligingscontroles, 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 een LLM-applicatie."""
input_classifier: object # ML-gebaseerde invoerclassifier
output_filter: object # Contentfilter voor de uitvoer
rate_limiter: object # Rate-limitingdienst
audit_logger: object # Logger voor het audittraject
def process_request(self, user_id: str, message: str, session_id: str) -> dict:
"""Verwerk een request via alle beveiligingslagen."""
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: Auditlogging
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 de LLM-API-aanroep
passSidecar-patroon: Beveiligingscomponenten draaien naast het LLM als onafhankelijke services, elk verantwoordelijk voor een specifiek beveiligingsaspect. Dit zorgt voor betere isolatie en onafhankelijke schaalbaarheid, maar verhoogt de systeemcomplexiteit.
Mesh-patroon: Bij multi-agentsystemen heeft elke agent zijn eigen beveiligingsperimeter met authenticatie, autorisatie en auditing. De communicatie tussen agents volgt zero-trust-principes.
Gevolgen voor de prestaties
Beveiligingsmaatregelen brengen onvermijdelijk extra latency en rekenkosten met zich mee. Inzicht in deze afwegingen is essentieel voor productie-implementaties:
| Beveiligingslaag | Typische latency | Rekenkosten | 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 | Aanzienlijk |
| 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 onderscheppen, en pas daarna duurdere ML-gebaseerde analyse toe te passen op invoer die de eerste filters passeert. Deze trapsgewijze aanpak levert goede beveiliging op met acceptabele prestaties.
Monitoring en observability
Effectieve beveiligingsmonitoring voor LLM-applicaties vereist het bijhouden van metrieken die adversarial gedragspatronen vastleggen:
from dataclasses import dataclass
from collections import defaultdict
import time
@dataclass
class SecurityMetrics:
"""Houd beveiligingsrelevante metrieken bij voor LLM-applicaties."""
# Tellers
total_requests: int = 0
blocked_requests: int = 0
filtered_outputs: int = 0
anomalous_sessions: int = 0
# Snelheidsmeting
_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 request 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 het blokkeerpercentage 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 alert rechtvaardigen."""
block_rate = self.get_block_rate()
# Alarmeer als het blokkeerpercentage de drempel overschrijdt
if block_rate > 0.3: # >30% van de requests geblokkeerd in de laatste 5 min
return True
return FalseBeveiligingstests in CI/CD
Door AI-beveiligingstests in de ontwikkelpijplijn te integreren, vang je regressies op voordat ze de productie bereiken:
- Tests op unitniveau: Test afzonderlijke beveiligingscomponenten (classifiers, filters) tegen bekende payloads
- Integratietests: Test de volledige beveiligingspijplijn end-to-end
- Regressietests: Houd een suite van eerder ontdekte aanvalspayloads bij en verifieer dat ze geblokkeerd blijven
- Adversarial tests: Draai periodiek geautomatiseerde red team-tools (Garak, Promptfoo) als onderdeel van de deploymentpijplijn
Opkomende trends
Actuele onderzoeksrichtingen
Het vakgebied van LLM-beveiliging ontwikkelt zich razendsnel. Belangrijke onderzoeksrichtingen die het landschap waarschijnlijk gaan vormgeven, zijn onder meer:
-
Formele verificatie van LLM-gedrag: Onderzoekers verkennen wiskundige kaders om eigenschappen van modelgedrag onder adversarial 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 de veiligheidstraining expliciet blootstellen aan adversarial invoer, wat de robuustheid tegen bekende aanvalspatronen verbetert.
-
Verdediging op basis van interpreteerbaarheid: Onderzoek naar mechanistische interpreteerbaarheid stelt verdedigers in staat te begrijpen waarom specifieke aanvallen slagen op het niveau van neuronen en circuits, wat richting geeft aan gerichtere verdedigingsmaatregelen.
-
Multi-agentbeveiliging: Naarmate LLM-agents alomtegenwoordiger worden, is het beveiligen van communicatie tussen agents en het bewaken van vertrouwensgrenzen binnen agentsystemen een actief onderzoeksgebied met aanzienlijke praktische gevolgen.
-
Geautomatiseerde red teaming op schaal: Tools zoals Garak van NVIDIA, PyRIT van Microsoft en het Inspect-framework van de UK AISI maken geautomatiseerd beveiligingsonderzoek mogelijk op een schaal die voorheen onhaalbaar 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-beveiligingspraktijken bepalen.
Gevorderde aandachtspunten
Het evoluerende aanvalslandschap
Het AI-beveiligingslandschap evolueert razendsnel doordat zowel offensieve technieken als verdedigingsmaatregelen vooruitgaan. Verschillende trends bepalen de huidige stand van zaken:
Toenemende modelcapaciteiten creëren nieuwe aanvalsoppervlakken. Naarmate modellen toegang krijgen tot tools, code-uitvoering, webbrowsing en computergebruik, introduceert elke nieuwe capaciteit potentiële misbruikvectoren die niet bestonden in eerdere, tekst-only systemen. Het principe van least privilege wordt steeds belangrijker naarmate de capaciteiten van modellen toenemen.
Verbeteringen in veiligheidstraining zijn noodzakelijk maar niet voldoende. Modelaanbieders investeren fors in veiligheidstraining via RLHF, DPO, constitutional AI en andere alignment-technieken. Deze verbeteringen leggen de lat hoger voor geslaagde aanvallen, maar nemen de fundamentele kwetsbaarheid niet weg: modellen kunnen legitieme instructies niet betrouwbaar onderscheiden van adversarial instructies, omdat dat onderscheid niet in de architectuur is vastgelegd.
Geautomatiseerde red teaming-tools democratiseren het testen. Tools zoals Garak van NVIDIA, PyRIT van Microsoft en Promptfoo stellen organisaties in staat geautomatiseerde beveiligingstests uit te voeren zonder diepgaande AI-beveiligingsexpertise. Geautomatiseerde tools onderscheppen echter bekende patronen; nieuwe aanvallen en kwetsbaarheden in de bedrijfslogica vereisen nog steeds menselijke creativiteit en domeinkennis.
Druk vanuit regelgeving stuurt investeringen binnen organisaties. De EU AI Act, NIST AI RMF en sectorspecifieke regelgeving verplichten organisaties steeds vaker om AI-specifieke risico's te beoordelen en te mitigeren. Die druk vanuit de regelgeving stimuleert investeringen in AI-beveiligingsprogramma's, maar veel organisaties staan nog in de beginfase van het opbouwen van volwassen AI-beveiligingspraktijken.
Overkoepelende beveiligingsprincipes
Verschillende beveiligingsprincipes gelden voor alle onderwerpen die in dit curriculum aan bod komen:
-
Defense-in-depth: Geen enkele afzonderlijke verdedigingsmaatregel is voldoende. Stapel meerdere onafhankelijke verdedigingen, zodat het falen van één laag niet leidt tot compromittering van het systeem. Invoerclassificatie, uitvoerfiltering, gedragsmonitoring en architectuurcontroles horen allemaal aanwezig te zijn.
-
Ga uit van een inbreuk: Ontwerp systemen alsof elke afzonderlijke component gecompromitteerd kan raken. Deze mindset leidt tot betere isolatie, monitoring en incident-responsemogelijkheden. Wanneer een prompt injection slaagt, moet de blast radius via architectuurcontroles tot een minimum worden beperkt.
-
Least privilege: Geef modellen en agents alleen de minimale capaciteiten die nodig zijn voor hun beoogde functie. Een chatbot voor klantenservice heeft geen toegang tot het bestandssysteem of code-uitvoering nodig. Overmatige capaciteiten vergroten de impact van geslaagd misbruik.
-
Continu testen: AI-beveiliging is geen eenmalige beoordeling. Modellen veranderen, verdedigingen evolueren en er worden regelmatig nieuwe aanvalstechnieken ontdekt. Implementeer continue beveiligingstests als onderdeel van de ontwikkel- en deploymentcyclus.
-
Secure by default: Standaardconfiguraties horen veilig te zijn. Vereis expliciete opt-in voor riskante capaciteiten, gebruik allowlists in plaats van denylists en kies in geval van twijfel voor beperking in plaats van toegeeflijkheid.
Integratie met de organisatiebrede beveiliging
AI-beveiliging staat niet op zichzelf — ze moet integreren met het bredere beveiligingsprogramma van de organisatie:
| Beveiligingsdomein | AI-specifieke integratie |
|---|---|
| Identiteit en toegang | Beheer van API-sleutels, toegangscontroles voor modellen, gebruikersauthenticatie voor AI-functies |
| Databescherming | Classificatie van trainingsdata, PII in prompts, dataresidentie voor modelaanroepen |
| Applicatiebeveiliging | Threat modeling van AI-functies, prompt injection in SAST/DAST, veilige AI-ontwerppatronen |
| Incident response | AI-specifieke playbooks, monitoring van modelgedrag, forensisch onderzoek naar prompt injection |
| Compliance | Koppeling van AI aan regelgeving (EU AI Act, NIST), AI-audittrajecten, modeldocumentatie |
| Supply chain | Herkomst van modellen, beveiliging van afhankelijkheden, integriteitsverificatie van adapters/gewichten |
class OrganizationalIntegration:
"""Framework voor het integreren van AI-beveiliging met organisatiebrede beveiligingsprogramma's."""
def __init__(self, org_config: dict):
self.config = org_config
self.gaps = []
def assess_maturity(self) -> dict:
"""Beoordeel de volwassenheid van de AI-beveiliging binnen de organisatie."""
domains = {
"governance": self._check_governance(),
"technical_controls": self._check_technical(),
"monitoring": self._check_monitoring(),
"incident_response": self._check_ir(),
"training": self._check_training(),
}
overall = sum(d["score"] for d in domains.values()) / len(domains)
return {"domains": domains, "overall_maturity": round(overall, 1)}
def _check_governance(self) -> dict:
has_policy = self.config.get("ai_security_policy", False)
has_framework = self.config.get("risk_framework", False)
score = (int(has_policy) + int(has_framework)) * 2.5
return {"score": score, "max": 5.0}
def _check_technical(self) -> dict:
controls = ["input_classification", "output_filtering", "rate_limiting", "sandboxing"]
active = sum(1 for c in controls if self.config.get(c, False))
return {"score": active * 1.25, "max": 5.0}
def _check_monitoring(self) -> dict:
has_monitoring = self.config.get("ai_monitoring", False)
has_alerting = self.config.get("ai_alerting", False)
score = (int(has_monitoring) + int(has_alerting)) * 2.5
return {"score": score, "max": 5.0}
def _check_ir(self) -> dict:
has_playbook = self.config.get("ai_ir_playbook", False)
return {"score": 5.0 if has_playbook else 0.0, "max": 5.0}
def _check_training(self) -> dict:
has_training = self.config.get("ai_security_training", False)
return {"score": 5.0 if has_training else 0.0, "max": 5.0}Toekomstige richtingen
Verschillende trends in onderzoek en industrie zullen de evolutie van dit vakgebied vormgeven:
- Formele methoden voor AI-veiligheid: De ontwikkeling van wiskundige kaders die begrensde garanties kunnen bieden over modelgedrag onder adversarial omstandigheden
- Geautomatiseerde red teaming op schaal: Voortdurende verbetering van geautomatiseerde testtools die nieuwe kwetsbaarheden kunnen ontdekken zonder menselijke sturing
- AI-ondersteunde verdediging: AI-systemen inzetten om aanvallen op andere AI-systemen te detecteren en erop te reageren, wat een dynamisch aanval-verdedigingsecosysteem creëert
- Gestandaardiseerde evaluatie: Toenemende toepassing van gestandaardiseerde benchmarks (HarmBench, JailbreakBench) die een consistente meting van de voortgang mogelijk maken
- Harmonisatie van regelgeving: Convergentie van AI-regelgevingskaders over rechtsgebieden heen, wat duidelijkere eisen voor organisaties oplevert
Referenties en verder lezen
- OWASP LLM Top 10 2025 — Uitgebreide gids over de beveiligingsrisico's van LLM's (owasp.org/www-project-top-10-for-large-language-model-applications)
- MITRE ATLAS — Adversarial Threat Landscape for AI Systems (atlas.mitre.org)
- Zou et al. 2023 — "Universal and Transferable Adversarial Attacks on Aligned Language Models"
- Chao et al. 2023 — "Jailbreaking Black-Box LLMs in Twenty Queries" (PAIR)
- Garak (NVIDIA) — kwetsbaarheidsscanner voor LLM's (github.com/NVIDIA/garak)
Wat is de meest effectieve verdedigingsstrategie tegen de aanvalsklasse die in dit artikel wordt beschreven?
Waarom blijven de technieken die in dit artikel worden beschreven effectief ondanks de voortdurende beveiligingsverbeteringen van modelaanbieders?