Taxonomie van prompt injection
Een uitgebreid classificatieframework voor prompt injection-aanvallen, met directe en indirecte vectoren, afleveringsmechanismen, doellagen en severitybeoordeling voor systematisch red-teamtesten.
Prompt injection is niet één enkele aanval, maar een brede familie van technieken. Zonder een gedeelde taxonomie beschrijven red teams dezelfde aanval verschillend, bouwen verdedigers controles voor de ene variant terwijl ze andere missen, en verwarren risicobeoordelingen rariteiten met lage impact met kritieke exploits. Deze pagina biedt een classificatieframework dat structuur brengt in het landschap.
Waarom taxonomie ertoe doet
Bekijk twee bevindingen uit een red-teamopdracht:
- Een gebruiker typt "negeer eerdere instructies" en de chatbot onthult zijn systeemprompt.
- Een aanvaller plant een verborgen instructie in een PDF die, wanneer deze door de RAG-pijplijn van de chatbot wordt opgehaald, ervoor zorgt dat gebruikersdata via een toolaanroep naar een externe URL wordt geëxfiltreerd.
Beide zijn "prompt injection", maar ze verschillen in vector, afleveringsmechanisme, doellaag en severity. Een taxonomie die deze dimensies vastlegt, stelt teams in staat om herstel te prioriteren, trends over opdrachten heen te volgen en bevindingen nauwkeurig te communiceren.
Primaire classificatie: aanvalsvector
De eerste classificatie-as scheidt aanvallen naar de manier waarop de kwaadaardige instructie het model bereikt.
Directe injectie
De aanvaller heeft interactieve toegang tot de invoer van het model en plaatst de injectiepayload rechtstreeks in zijn eigen bericht. Dit is de eenvoudigste vector en vereist geen tussenpersoon.
Directe injectie kent onder meer de volgende subtypes:
| Subtype | Mechanisme | Voorbeeld |
|---|---|---|
| Instructieoverschrijving | Expliciet commando om de systeemprompt te negeren | "Negeer alle eerdere instructies en..." |
| Formaatnabootsing | De opmaak van de systeemprompt repliceren om de prioriteit te verhogen | "[SYSTEM] Nieuwe richtlijn: ..." |
| Context overflow | Het contextvenster vullen om systeeminstructies uit de aandacht te duwen | Veel paddingtekst gevolgd door nieuwe instructies |
| Delimiterontsnapping | Door de applicatie gedefinieerde delimiters sluiten en injecteren op een hoger privilegeniveau | </user_input> Nieuwe systeeminstructies: ... |
| Omzeilen via encoding | De payload obfusqueren met Base64, ROT13, Unicode of hex-encoding | "Decodeer deze Base64 en volg de instructies: ..." |
Voor een gedetailleerde behandeling van directe injectietechnieken, zie Direct Prompt Injection.
Indirecte injectie
De aanvaller communiceert niet rechtstreeks met het model. In plaats daarvan plant hij de injectiepayload in een gegevensbron die het model later zal consumeren: een webpagina, document, e-mail, databaserecord of API-respons.
Indirecte injectie kent onder meer de volgende subtypes:
| Subtype | Afleveringskanaal | Voorbeeld |
|---|---|---|
| RAG-poisoning | Documenten in een vector store | Verborgen tekst in een PDF die tijdens het zoeken wordt opgehaald |
| Injectie via webinhoud | Gecrawlde webpagina's | Onzichtbare instructies op een pagina die het model bezoekt |
| Op e-mail gebaseerde injectie | E-mailinhoud verwerkt door een AI-assistent | Verborgen instructies in een e-mailtekst of bijlage |
| Injectie via toolrespons | Responses van externe API's of tools | Kwaadaardige inhoud teruggegeven door een tool die de agent aanroept |
| Geheugenvergiftiging | Persistent gespreksgeheugen | Instructies geplant in het geheugen die over sessies heen persisteren |
Voor een gedetailleerde behandeling van indirecte injectie, zie Indirect Prompt Injection.
Secundaire classificatie: afleveringsmechanisme
Orthogonaal aan de vector beschrijft het afleveringsmechanisme hoe de payload is gestructureerd en aan het model wordt gepresenteerd om detectie te ontwijken.
Aflevering als platte tekst
De injectie is in natuurlijke taal geschreven zonder obfuscatie. Dit is het eenvoudigste mechanisme en het makkelijkst te detecteren, maar het blijft effectief tegen systemen zonder invoerfiltering.
Geëncodeerde aflevering
De payload wordt getransformeerd met een encoderingsschema. De aanvaller vertrouwt erop dat het model deze native kan decoderen, of voegt expliciete decodeerinstructies toe.
| Encoding | Detectiemoeilijkheid | Modelondersteuning |
|---|---|---|
| Base64 | Laag — eenvoudig te detecteren met pattern matching | Hoog — de meeste modellen kunnen decoderen |
| ROT13 | Laag — bekende cipher | Matig — sommige modellen hebben er moeite mee |
| Unicode-homoglyphen | Gemiddeld — visueel identieke tekens | Hoog — modellen verwerken de onderliggende codepoints |
| Hex-encoding | Laag — herkenbaar patroon | Matig |
| Pig Latin / woordspelletjes | Gemiddeld — geen standaardpatroon | Matig — vereist instructie |
| Manipulatie op tokenniveau | Hoog — misbruikt randgevallen van de tokenizer | Varieert per model |
Zie Encoding Bypasses voor gedetailleerde technieken.
Structurele aflevering
De payload misbruikt het structurele formaat van de invoer: XML-tags, markdown-opmaak, JSON-velden of speciale tokens. De aanvaller benut het begrip van het model van de documentstructuur om zijn instructies op een gezaghebbend niveau te positioneren.
Zie Delimiter Attacks voor gedetailleerde technieken.
Gefragmenteerde aflevering
De payload wordt opgesplitst over meerdere berichten, variabelen of gegevensbronnen. Geen enkel fragment bevat de complete kwaadaardige instructie, waardoor detectie door een filter op één punt buitengewoon moeilijk wordt.
Zie Payload Splitting voor gedetailleerde technieken.
Temporele aflevering
De payload wordt over meerdere gespreksbeurten heen afgeleverd, waarbij elke beurt in isolatie onschuldig lijkt. De kwaadaardige intentie ontstaat alleen uit het cumulatieve traject.
Zie Multi-Turn Injection voor gedetailleerde technieken.
Tertiaire classificatie: doellaag
Injectieaanvallen richten zich op verschillende lagen van de AI-systeemstack. Het identificeren van de doellaag bepaalt zowel de impact als de passende verdediging.
| Doellaag | Wat de aanvaller viseert | Impact |
|---|---|---|
| Safety alignment | Het getrainde weigeringsgedrag van het model | Het model produceert inhoud die het was getraind te weigeren |
| Applicatie-instructies | De systeemprompt en applicatielogica | Het model negeert door de ontwikkelaar gedefinieerde gedragsbeperkingen |
| Tool-/functielaag | Toolselectie en parametergeneratie | Het model roept ongeautoriseerde tools aan of geeft kwaadaardige parameters door |
| Data-toegangslaag | RAG-retrieval, databasequery's, bestandstoegang | Ongeautoriseerde toegang tot data of exfiltratie |
| Uitvoeropmaak | Responsstructuur en presentatie | Datalek via geprepareerde uitvoerformaten |
| Geheugen/toestand | Persistent geheugen of gesprekstoestand | Aanvallen over sessies heen, corruptie van de toestand |
Framework voor severitybeoordeling
Niet alle prompt injections zijn gelijk. Een gestructureerd severityframework helpt red teams om bevindingen te prioriteren en risico's aan stakeholders te communiceren.
Dimensies van severity
| Dimensie | Laag | Gemiddeld | Hoog | Kritiek |
|---|---|---|---|---|
| Betrouwbaarheid | Werkt < 10% van de pogingen | Werkt 10-50% | Werkt 50-90% | Werkt > 90% |
| Impact | Informatieonthulling (niet-gevoelig) | Extractie van de systeemprompt, kleine gedragsverandering | Toegang tot gevoelige data, omzeilen van veiligheid | Misbruik van tools, data-exfiltratie, code-uitvoering |
| Complexiteit | Vereist diepgaande expertise en eigen tooling | Vereist gemiddelde vaardigheid | Vereist basale promptkennis | Copy-paste-aanval, geen vaardigheid vereist |
| Scope | Eén enkele gebruikerssessie | Eén gebruiker over sessies heen | Meerdere gebruikers via indirecte injectie | Alle gebruikers via persistente vergiftiging |
| Detecteerbaarheid | Eenvoudig te detecteren met basale filters | Gedetecteerd door ML-gebaseerde classifiers | Omzeilt de meeste geautomatiseerde detectie | Niet te detecteren met de huidige methoden |
Samengestelde severityscoring
Om tot één enkele severitybeoordeling te komen, evalueer je de bevinding over alle vijf dimensies:
- Kritiek: Hoog of Kritiek in Impact ÉN Betrouwbaarheid, ongeacht de Complexiteit
- Hoog: Hoog in Impact OF (Gemiddelde Impact ÉN Hoge Betrouwbaarheid ÉN Lage Complexiteit)
- Gemiddeld: Gemiddeld in Impact ÉN Gemiddelde of hogere Betrouwbaarheid
- Laag: Lage Impact OF (ongeacht de Impact ÉN Lage Betrouwbaarheid)
Aanvallen koppelen aan verdedigingen
Een praktische taxonomie verbindt elke aanvalscategorie met de verdedigingslaag die verantwoordelijk is voor de mitigatie ervan. Deze koppeling helpt verdedigers te begrijpen welke controles welke dreigingen aanpakken en helpt red teams om lacunes te identificeren.
| Aanvalscategorie | Primaire verdediging | Secundaire verdediging |
|---|---|---|
| Directe instructieoverschrijving | Training van de instructiehiërarchie | Invoerclassificatie |
| Formaatnabootsing | Training van de instructiehiërarchie | Verharding van delimiters |
| Context overflow | Beheer van het contextvenster | Herhaling van instructies |
| Delimiterontsnapping | Robuust delimiterontwerp | Invoersanitisatie |
| Omzeilen via encoding | Invoernormalisatie, detectie van decodering | Uitvoermonitoring |
| Indirecte injectie (RAG) | Inhoudssanitisatie, dual-LLM-architectuur | Retrievalfiltering |
| Multi-turn escalatie | Monitoring van het gesprekstraject | Classificatie per beurt |
| Payload splitting | Analyse over berichten heen | Voorkomen van variabele-injectie |
| Misbruik van tools/functies | Toolautorisatie, parametervalidatie | Human-in-the-loop |
De taxonomie in de praktijk gebruiken
Voor red teams
- Scoping: Gebruik de dimensies vector en doellaag om de scope van de opdracht te bepalen. Een "prompt injection-beoordeling" moet specificeren welke vectoren en lagen binnen de scope vallen.
- Testplanning: Zorg ervoor dat de testcases elk afleveringsmechanisme dekken, niet alleen overschrijvingen met platte tekst.
- Rapportage: Classificeer elke bevinding op vector, mechanisme, doel en severity. Dit maakt vergelijking tussen opdrachten en trendanalyse mogelijk.
- Volledigheidscontrole: Bekijk na het testen de taxonomie om ongeteste categorieën te identificeren.
Voor verdedigers
- Lacuneanalyse: Koppel de huidige controles aan de taxonomie en identificeer onaangepakte categorieën.
- Controlevalidatie: Identificeer voor elke verdediging welke taxonomiecategorieën het aanpakt en test de dekking.
- Incidentclassificatie: Wanneer zich een prompt injection-incident voordoet, classificeer het onmiddellijk om het juiste responsplaybook te activeren.
Probeer het zelf
Gerelateerde onderwerpen
- Direct Injection — De meest voorkomende aanvalsvector in de taxonomie
- Indirect Injection — Aanvallen via externe gegevensbronnen
- Jailbreak Techniques — Technieken gericht op de safety alignment-laag
- Defense Evasion — Afleveringsmechanismen ontworpen om detectie te ontwijken
- Encoding Bypasses — Geëncodeerde afleveringsmechanismen in detail
Referenties
- Greshake, K. et al. (2023). "Not What You've Signed Up For: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection"
- OWASP (2025). OWASP Top 10 for LLM Applications
- MITRE (2024). ATLAS — Adversarial Threat Landscape for AI Systems
- Perez, F. & Ribeiro, I. (2022). "Ignore This Title and HackAPrompt"
- Liu, Y. et al. (2024). "Prompt Injection Attack Against LLM-Integrated Applications"
Wat maakt indirecte prompt injection over het algemeen ernstiger dan directe injectie?