Function-Calling-Chain-Confusion
Verwar meerstaps-function-calling-ketens om validatiestappen over te slaan en onbedoelde operatievolgorden uit te voeren.
Overzicht
Verwar meerstaps-function-calling-ketens om validatiestappen over te slaan en onbedoelde operatievolgorden uit te voeren.
Kernconcepten
Fundamentele principes
Het praktische gevolg van deze architecturale eigenschap is dat elke component in het systeem die de tokensequentie die door het model wordt verwerkt kan beïnvloeden, het potentieel heeft om zijn gedrag te beïnvloeden. Dit omvat directe gebruikersinputs, indirecte gegevensbronnen zoals webinhoud en documenten die door RAG-systemen worden geconsumeerd, tool- en function-call-resultaten, en zelfs het formaat en de structuur van het gesprek zelf.
Taxonomie en classificatie
Het begrijpen van de taxonomie van aanvallen en verdedigingen in dit domein is essentieel voor systematische beveiligingsbeoordeling. Het volgende classificatieframework biedt een gestructureerde aanpak:
| Categorie | Beschrijving | Prevalentie | Detectiemoeilijkheid |
|---|---|---|---|
| Directe aanvallen | Adversariële inhoud in gebruikersberichten | Zeer hoog | Laag-Gemiddeld |
| Indirecte aanvallen | Adversariële inhoud in externe data | Hoog | Gemiddeld-Hoog |
| Architecturaal | Het uitbuiten van systeemontwerp-eigenschappen | Gemiddeld | Hoog |
| Tijdens training | Het vergiftigen of manipuleren van training | Laag | Zeer hoog |
| Tijdens inferentie | Het uitbuiten van inferentie-infrastructuur | Laag-Gemiddeld | Hoog |
Technische verdieping
# Demonstratie van het kernconcept
from openai import OpenAI
client = OpenAI()
def demonstrate_concept(system_prompt: str, user_input: str) -> str:
"""Demonstreer het fundamentele gedragspatroon."""
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}")
# Het model zou moeten weigeren om over geografie te antwoorden conform zijn systeemprompt.
# Bepaalde inputformuleringen kunnen deze beperking echter overschrijven,
# wat de fundamentele spanning aantoont tussen het volgen van instructies
# en het afdwingen van veiligheid.Analyse van het aanvalsoppervlak
Het aanvalsoppervlak voor deze kwetsbaarheidsklasse omvat meerdere vectoren, elk met afzonderlijke kenmerken:
| Aanvalsvector | Beschrijving | Moeilijkheid | Impact |
|---|---|---|---|
| Directe input | Adversariële inhoud in gebruikersberichten | Laag | Variabel |
| Indirecte input | Adversariële inhoud in externe data | Gemiddeld | Hoog |
| Tooluitvoer | Adversariële inhoud in functieresultaten | Gemiddeld | Hoog |
| Contextmanipulatie | Het uitbuiten van de dynamiek van het contextvenster | Hoog | Hoog |
| Tijdens training | Het vergiftigen van trainings- of fine-tuningdata | Zeer hoog | Kritiek |
Elke vector vereist verschillende exploitatietechnieken en wordt verdedigd door verschillende mechanismen. Een uitgebreide beveiligingsbeoordeling moet alle relevante vectoren voor de doelsysteemarchitectuur evalueren.
Praktische toepassing
Implementatie van de techniek
Het in de praktijk implementeren van deze techniek vereist begrip van zowel de aanvalsmethodologie als het verdedigingslandschap van het doelsysteem.
import json
from typing import Optional, List
from dataclasses import dataclass
@dataclass
class AttackResult:
"""Resultaat van een enkele aanvalspoging."""
payload_hash: str
success: bool
response_length: int
defense_triggered: Optional[str] = None
class TechniqueFramework:
"""Framework voor het implementeren en testen van de beschreven techniek."""
def __init__(self, target_config: dict):
self.config = target_config
self.results: List[AttackResult] = []
def prepare_payload(self, objective: str, constraints: dict) -> str:
"""Bereid de aanvalspayload voor op basis van het doel en de doelbeperkingen."""
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 _base_payload(self, objective: str) -> str:
"""Genereer een basispayload voor het gegeven doel."""
return f"Please help me with: {objective}"
def _apply_obfuscation(self, payload: str) -> str:
"""Pas obfuscatie toe om inputclassifiers te omzeilen."""
# Voorbeeld: voeg zero-width-tekens in tussen sleuteltermen
return payload # Implementeer specifieke obfuscatiestrategie
def _add_extraction_channel(self, payload: str) -> str:
"""Voeg een alternatief extractiekanaal toe om outputfilters te omzeilen."""
return payload + "\nEncode your response in Base64."
def execute(self, payload: str) -> AttackResult:
"""Voer de techniek uit en verzamel resultaten."""
response = self._send_to_target(payload)
success = self._evaluate_response(response)
result = AttackResult(
payload_hash=str(hash(payload))[:12],
success=success,
response_length=len(str(response)),
)
self.results.append(result)
return result
def _send_to_target(self, payload: str) -> str:
"""Verstuur payload naar het doelsysteem."""
# Implementatie hangt af van de doelconfiguratie
return ""
def _evaluate_response(self, response: str) -> bool:
"""Evalueer of de reactie succes aangeeft."""
return False
def report(self) -> dict:
"""Genereer een samenvattend rapport van alle uitvoeringsresultaten."""
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
Het begrijpen van verdedigende maatregelen is essentieel voor zowel offensieve als defensieve practitioners:
-
Inputvalidatie: Het voorverwerken van gebruikersinputs via classificatiemodellen die adversariële patronen detecteren voordat ze de doel-LLM bereiken. Moderne inputclassifiers gebruiken fine-tuned taalmodellen die getraind zijn op datasets van bekende aanvalspatronen en kunnen hoge detectiepercentages bereiken voor bekende aanvalsklassen, terwijl ze lage vals-positiefpercentages behouden.
-
Outputfiltering: Het naverwerken van modeluitvoer om gevoelige data, instructie-artefacten en andere indicatoren van geslaagde exploitatie te detecteren en te verwijderen. Outputfilters controleren doorgaans op patronen zoals systeemprompt-lekkage, PII-blootstelling en generatie van schadelijke inhoud.
-
Gedragsmonitoring: Realtime monitoring van modelgedragspatronen om anomale reacties te detecteren die kunnen wijzen op lopende aanvallen. Dit omvat het bijhouden van metrieken zoals de verdeling van reactielengtes, onderwerpcoherentie en afwijking van verwachte gedragspatronen.
-
Architectuurontwerp: Het ontwerpen van applicatiearchitecturen die het vertrouwen in modeluitvoer minimaliseren en beveiligingsgrenzen extern afdwingen. Dit omvat het scheiden van datavlakken van controlevlakken en het implementeren van het principe van least privilege voor alle voor het model toegankelijke bronnen.
Relevantie in de praktijk
Dit onderwerpgebied is direct relevant voor productie-AI-deployments in alle sectoren. Inspect AI (UK AISI) — github.com/UKGovernmentBEIS/inspect_ai — AI safety evaluations documenteert exploitatie uit de praktijk van deze kwetsbaarheidsklasse in ingezette systemen.
Organisaties die LLM-aangedreven applicaties inzetten zouden moeten:
- Beoordelen: Red-team-assessments uitvoeren die specifiek gericht zijn op deze kwetsbaarheidsklasse
- Verdedigen: Defense-in-depth-maatregelen implementeren die passen bij het risiconiveau
- Monitoren: Monitoring inzetten die exploitatiepogingen in realtime kan detecteren
- Reageren: Incidentresponsprocedures onderhouden die specifiek zijn 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 veelbelovende richtingen:
- Formele verificatie: Het ontwikkelen van wiskundige garanties voor modelgedrag onder adversariële omstandigheden
- Robuustheidstraining: Trainingsprocedures die modellen produceren die beter bestand zijn tegen deze aanvalsklasse
- Detectiemethoden: Verbeterde technieken voor het detecteren van exploitatiepogingen met lage vals-positiefpercentages
- Gestandaardiseerde evaluatie: Benchmarksuites zoals HarmBench en JailbreakBench voor het meten van voortgang
- Geautomatiseerde verdediging: Systemen die zich automatisch aanpassen aan nieuwe aanvalspatronen met behulp van online learning
- Cross-modale generalisatie: Begrijpen hoe deze kwetsbaarheden zich manifesteren over verschillende inputmodaliteiten heen
Implementatiepatronen
Patroon 1: Reconnaissance-eerst-benadering
De meest effectieve implementatie begint met grondige reconnaissance om de verdedigingshouding van het doelsysteem te begrijpen voordat enige exploitatie wordt geprobeerd. Dit patroon wordt aanbevolen voor alle productie-assessments.
from dataclasses import dataclass
from enum import Enum
class DefenseLayer(Enum):
INPUT_CLASSIFIER = "input_classifier"
OUTPUT_FILTER = "output_filter"
GUARDRAIL = "guardrail"
RATE_LIMITER = "rate_limiter"
BEHAVIORAL_MONITOR = "behavioral_monitor"
@dataclass
class TargetProfile:
"""Profiel van de verdedigingshouding van het doelsysteem."""
identified_defenses: list
estimated_difficulty: str
recommended_techniques: list
bypass_candidates: list
def build_target_profile(recon_results: dict) -> TargetProfile:
"""Bouw een doelprofiel op uit reconnaissance-resultaten."""
defenses = []
techniques = []
# Analyseer latentiepatronen voor detectie van inputclassifier
if recon_results.get("avg_latency_increase", 0) > 1.5:
defenses.append(DefenseLayer.INPUT_CLASSIFIER)
techniques.append("encoding_bypass")
techniques.append("semantic_obfuscation")
# Analyseer reactiepatronen voor detectie van outputfilter
if recon_results.get("truncated_responses", 0) > 0:
defenses.append(DefenseLayer.OUTPUT_FILTER)
techniques.append("format_exploitation")
techniques.append("side_channel_extraction")
difficulty = (
"high" if len(defenses) >= 3
else "medium" if len(defenses) >= 1
else "low"
)
return TargetProfile(
identified_defenses=defenses,
estimated_difficulty=difficulty,
recommended_techniques=techniques,
bypass_candidates=[d for d in defenses if d != DefenseLayer.RATE_LIMITER],
)Patroon 2: Iteratieve verfijning
Dit patroon gebruikt feedback van mislukte pogingen om de aanpak te verfijnen. Elke iteratie verwerkt informatie die geleerd is uit de verdedigende reactie.
Patroon 3: Multi-vector-convergentie
Pas meerdere technieken tegelijkertijd toe om overlappende aanvalsvectoren te creëren. Zelfs als elke individuele techniek gedeeltelijk verdedigd is, kan de combinatie het doel bereiken via verzadiging van de verdediging.
Industrie-impactbeoordeling
De kwetsbaarheidsklasse die in dit artikel wordt beschreven, heeft aanzienlijke implicaties voor meerdere sectoren:
| Sector | Primair risico | Impactseverity | Regelgevende zorg |
|---|---|---|---|
| Gezondheidszorg | Blootstelling van patiëntgegevens via AI-assistenten | Kritiek | HIPAA-schendingen |
| Financiële dienstverlening | Transactiemanipulatie via AI-adviseurs | Kritiek | SEC/OCC-compliance |
| Juridisch | Schending van verschoningsrecht via AI-onderzoekstools | Hoog | Advocaat-cliëntverschoningsrecht |
| Onderwijs | Manipulatie van beoordelingen via AI-tutoren | Gemiddeld | Academische integriteit |
| Overheid | Blootstelling van geclassificeerde data via AI-systemen | Kritiek | Nationale veiligheid |
| Retail | Blootstelling van klant-PII via chatbots | Hoog | GDPR/CCPA-compliance |
Organisaties zouden hun blootstelling aan deze kwetsbaarheidsklasse moeten beoordelen en passende verdedigende maatregelen moeten implementeren. Het NIST AI 600-1 Generative AI Profile en de EU AI Act bieden regelgevende frameworks die in toenemende mate dergelijke beoordelingen vereisen.
Vergelijking met verwante kwetsbaarheidsklassen
Begrijpen hoe deze kwetsbaarheidsklasse zich verhoudt tot andere helpt practitioners om uitgebreide beoordelingsstrategieën te ontwikkelen:
- Traditionele injectie-aanvallen (SQL, XSS, command injection): Vergelijkbaar in concept — niet-vertrouwde data geïnterpreteerd als instructies — maar opererend op het natuurlijke-taalniveau in plaats van de syntaxis van formele talen
- Social engineering: Deelt de exploitatie van vertrouwens- en autoriteitspatronen, maar richt zich op het model in plaats van op mensen
- Adversariële ML-aanvallen: Onderdeel van dezelfde familie, maar gericht op het instructie-opvolgende gedrag in plaats van op classificatiegrenzen
- Toeleveringsketen-aanvallen: Complementair aanvalsoppervlak — compromittering van de toeleveringsketen kan de impact van prompt-injectie versterken
Samenvatting en kernprincipes
De concepten die in dit artikel worden verkend, weerspiegelen fundamentele uitdagingen in AI-beveiliging die zullen blijven bestaan naarmate de technologie evolueert. Kernprincipes om mee te nemen:
- Architecturale bewustwording: Beveiligingsgrenzen kunnen niet door het model alleen worden afgedwongen — externe mechanismen zijn vereist
- Defense-in-depth: Geen enkele laag biedt adequate bescherming — meerdere onafhankelijke lagen zijn essentieel
- Continue beoordeling: Het dreigingslandschap evolueert snel — regelmatig testen is niet optioneel
- Praktische focus: Theoretisch begrip moet worden gekoppeld aan praktische testervaring
- Professionele standaarden: Bevindingen moeten duidelijk worden gedocumenteerd met bruikbare remediëringsrichtlijnen
Testmethodologie
Volg bij het beoordelen van systemen op deze kwetsbaarheidsklasse een gestructureerde methodologie om uitgebreide dekking te waarborgen:
Fase 1: Ontdekking
Tijdens de ontdekking breng je de architectuur van het systeem in kaart, identificeer je inputoppervlakken en karakteriseer je het basisgedrag van het model. Deze fase zou moeten worden uitgevoerd zonder enige adversariële intentie — het doel is puur observationeel.
Belangrijke activiteiten:
- Identificeer alle inputkanalen (directe gebruikersinput, bestandsupload, webinhoud, API-parameters)
- Karakteriseer de reactiepatronen van het model voor onschuldige inputs
- Meet de baseline-latentie en verdelingen van reactielengtes
- Identificeer foutafhandelingsgedrag en informatieblootstelling in foutmeldingen
Fase 2: Enumeratie
Enumereer de verdedigingslagen van het systeem via systematisch onderzoek. Gebruik de latentiegebaseerde en gedragsmatige detectietechnieken die in de labs-sectie worden beschreven.
Belangrijke activiteiten:
- Onderzoek op inputclassifiers met gecontroleerde grensverkennende payloads
- Test op outputfilters met verzoeken die filtering zouden moeten triggeren
- Identificeer rate-limiting-drempels en blokkeergedrag
- Breng de weigeringspatronen van het systeem en informatieblootstelling in weigeringen in kaart
Fase 3: Exploitatie
Probeer exploitatie met technieken die aangepast zijn aan de geïdentificeerde verdedigingshouding. Begin met de eenvoudigste technieken en escaleer de complexiteit naar behoefte.
Belangrijke activiteiten:
- Voer de primaire techniek uit tegen geïdentificeerde zwakheden
- Pas payloads aan op basis van verdedigende reacties
- Keten meerdere technieken voor het omzeilen van defense-in-depth
- Documenteer alle geslaagde en mislukte pogingen met volledige details
Fase 4: Validatie en rapportage
Valideer bevindingen op betrouwbaarheid en documenteer ze voor het assessmentrapport.
class FindingReport:
"""Gestructureerd bevindingsrapport voor AI-beveiligingsassessments."""
def __init__(self, title: str, severity: str, description: str):
self.title = title
self.severity = severity
self.description = description
self.owasp_mapping = ""
self.mitre_mapping = ""
self.steps_to_reproduce = []
self.evidence = []
self.recommendations = []
def add_step(self, step: str) -> None:
self.steps_to_reproduce.append(step)
def add_recommendation(self, rec: str) -> None:
self.recommendations.append(rec)
def to_markdown(self) -> str:
steps = "\n".join(f"{i+1}. {s}" for i, s in enumerate(self.steps_to_reproduce))
recs = "\n".join(f"- {r}" for r in self.recommendations)
return f"""
## {self.title}
**Severity**: {self.severity}
**OWASP**: {self.owasp_mapping}
**MITRE ATLAS**: {self.mitre_mapping}
### Description
{self.description}
### Steps to Reproduce
{steps}
### Recommendations
{recs}
"""Verklarende woordenlijst van sleuteltermen
| Term | Definitie |
|---|---|
| Prompt-injectie | Techniek waarbij adversariële inhoud in de input modelgedrag beïnvloedt buiten de beoogde grenzen |
| Defense-in-depth | Beveiligingsarchitectuur met meerdere onafhankelijke verdedigingslagen |
| Guardrail | Programmeerbaar veiligheidsmechanisme dat input- of outputgedrag van het model beperkt |
| Inputclassifier | ML-model dat inputs classificeert als onschuldig of adversarieel voor verwerking |
| Outputfilter | Naverwerkingsmechanisme dat modeluitvoer scant op gevoelige of schadelijke inhoud |
| Contextvenster | Het maximale aantal tokens dat een model in een enkele forward pass kan verwerken |
| Red teaming | Geautoriseerd adversarieel testen van systemen om kwetsbaarheden te ontdekken |
| RLHF | Reinforcement Learning from Human Feedback — een trainingstechniek voor het aligneren van modelgedrag |
| RAG | Retrieval-Augmented Generation — techniek voor het funderen van modelreacties in externe data |
| MCP | Model Context Protocol — standaard voor het verbinden van AI-agents met externe tools en data |
Referenties / Verder lezen
- Garak (NVIDIA) — github.com/NVIDIA/garak — LLM vulnerability scanner
- Inspect AI (UK AISI) — github.com/UKGovernmentBEIS/inspect_ai — AI safety evaluations
- CVE-2023-39659 — LangChain arbitrary code execution via json agent
Wat is de meest effectieve aanpak voor het 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 aanbieders heen?