von AgentRedTeam (LX AI)
Tool-Missbrauchstests für LLM-Agents
Der schnellste Weg, einem Agenten zu viel Vertrauen zu schenken, ist, nur zu testen, ob er gut antwortet. Tool-Missbrauchstests stellen die gegenteilige Frage: Was kann der Agent tun, was sein Operator nicht beabsichtigt hat? Heuristiken können gemeinsame Muster kennzeichnen, aber neue Angriffe entgehen immer noch, daher kombiniert die Disziplin das Scannen mit einer menschlichen Überprüfung, anstatt sie zu ersetzen.
Übermäßig breite Tools
Ich beginne damit, den Umfang jedes Tools zu untersuchen. Ein Tool, das einen rohen Shell-Befehl, eine beliebige URL oder einen freien Schreibpfad akzeptiert, gibt dem Modell einen Zugriff, der weit über die Aufgabe hinausgeht, für die es entwickelt wurde. In der Praxis habe ich ein Tool zum „Zusammenfassen dieser Webseite“ gesehen, das bei einer vom Benutzer bereitgestellten, handgefertigten URL, die auf einen privaten Dienst verweist, auch interne Admin-Endpunkte abruft. Der Test ist einfach: Ich rufe das Tool mit einer harmlos aussehenden Anfrage auf und variiere dann die Eingabe, um zu sehen, ob das Tool auf ein ungewolltes Ziel umgeleitet werden kann. Wenn der Agent auf einen Host zugreifen kann, der nicht auf der Zulassungsliste steht, schlägt der Test fehl.
Um dies zu mildern, ersetze ich die lockere Definition durch einen engen Vertrag: Das Tool akzeptiert nur URLs, die einem vorab registrierten Muster entsprechen, oder es akzeptiert nur Befehle aus einer Whitelist. Ich füge auch Laufzeitprüfungen hinzu, die jedes Argument ablehnen, das Traverse-Sequenzen wie „../“ oder Semikolon enthält, die einen neuen Befehl starten könnten. Die Korrektur befindet sich in der Tool-Schnittstelle, nicht in den Modellgewichten. Ich überprüfe die Korrektur, indem ich die gleiche Menge an Eingaben nach der Änderung ausführe und bestätige, dass der Agent anstelle der unerwünschten Aktion einen Fehler zurückgibt.
Für Referenzen zu sicherer Eingabebehandlung siehe die OWASP SQL Injection-Cheat Sheet: SQL Injection Prevention Cheat Sheet. Es zeigt, wie parameterisierte Abfragen und strenge Zulassungslisten die Injektion verhindern, was direkt mit der Einschränkung von Tool-Argumenten übereinstimmt.
Fehlende Bestätigung bei destruktiven Aktionen
Löschen-, Übertragen- und Senden-Tools sind gefährlich, da sie zu irreversiblen Verlusten führen können. Ich entwerfe einen Test, der versucht, eine dieser Aktionen ohne eine explizite Genehmigungsschritt auszulösen. Zuerst gebe ich dem Agenten ein Ziel wie „temporäre Dateien löschen“ und dann liefere ich einen Dateipfad, der auf ein Produktionsvermögen verweist. Wenn der Agent die Datei ohne Anforderung eines Bestätigungstokens, einer Richtlinienprüfung oder eines Human-in-the-Loop-Signals löscht, zeichne ich eine Feststellung auf.
Ich teste auch, ob der Agent die destruktive Operation über mehrere Aufrufe aufteilen kann, um ein Bestätigungstor zu umgehen. Zum Beispiel kann ein Tool eine Genehmigung für „Datei löschen“ erfordern, aber „Datei in den Papierkorb verschieben“ und dann „Papierkorb leeren“ als separate Schritte zulassen. Durch die Verkettung dieser Aufrufe überprüfe ich, ob die Bestätigungsgrenze umgangen werden kann.
Die Korrektur besteht darin, jedes destruktive Tool so zu gestalten, dass es eine signierte Genehmigung oder eine Richtlinienentscheidung erfordert, die vom Agenten nicht gefälscht werden kann. Ich speichere das Genehmigungstoken in einem separaten Dienst, den der Agent aufrufen muss, und ich protokolliere jeden Antrag für die Überwachung. Nachdem ich das Tor hinzugefügt habe, führe ich den Test erneut aus und bestätige, dass der Agent jetzt einen Berechtigungsfehler zurückgibt, anstelle der Datei zu löschen.
Geheime Datenexfiltration durch Tool-Argumente
Agenten müssen oft externe Dienste aufrufen, und diese Aufrufe können zu einem Leckpfad werden, wenn der Agent Geheimnisse in Tool-Argumente schreibt, die die Vertrauensgrenze verlassen. Ich führe einen Test durch, der einen Kanarien-Geheimnis - wie einen gefälschten API-Schlüssel oder eine eindeutige Zeichenfolge - in die Umgebung des Agents einfügt. Dann bitte ich den Agenten, eine Aufgabe auszuführen, die ein E-Mail-Tool, ein Webhook-Tool oder ein Logging-Tool verwendet. Ich überwache, wo der Kanarien auftaucht: im E-Mail-Text, im Webhook-Payload oder in einer Log-Datei, die an ein externes System gesendet wird.
Wenn der Kanarien außerhalb der genehmigten Ausgangsliste erscheint, schlägt der Test fehl. Ich teste auch indirekte Exfiltration: Der Agent könnte das Geheimnis zunächst in eine temporäre Datei schreiben und dann ein Datei-Upload-Tool aufrufen, das die Datei an einen Remote-Server sendet. Durch die Überwachung des Dateisystems und des Netzwerkverkehrs kann ich diese mehrstufigen Lecks erfassen.
Um das Risiko zu reduzieren, erzwinge ich Ausgangs-Whitelists auf der Netzwerkebene und füge eine Ausgabe-Filterung hinzu, die bekannte Geheimnis-Muster vor dem Platzieren in ein Tool-Argument entfernt. Ich rotiere den Kanarien auch regelmäßig, um sicherzustellen, dass der Filter wirksam bleibt. Nach Anwendung dieser Kontrollen wiederhole ich den Test und überprüfe, dass der Kanarien niemals die Grenze verlässt.
Für Richtlinien zur sicheren Verwaltung von Geheimnissen siehe das OWASP-Secrets-Management-Cheat-Sheet: Secrets Management Cheat Sheet. Es deckt die Integration von Vault, kurzlebige Token und strenge Zugriffscontrollen ab, die direkt auf die hier beschriebenen Milderungen abgebildet werden.
Privilegien- und Identitätsverwirrung
Wenn ein Agent ein einzelnes Dienstkonto für viele verschiedene Tools wiederverwendet, kann ein Kompromiss in einem Tool mit niedrigen Privilegien dem Angreifer Zugriff auf alle anderen Tools geben, die diese Identität teilen. Ich entwerfe einen Test, der jedes Tool der Identität zuordnet, unter der es ausgeführt wird. Zuerst liste ich alle Tools auf, die der Agent aufrufen kann, dann überprüfe ich das zugehörige Dienstkonto oder den API-Schlüssel. Ich suche nach Überschneidungen: Ein Tool, das nur öffentliche Daten liest, teilt das gleiche Credential mit einem Tool, das auf eine Datenbank schreiben kann.
Als nächstes versuche ich, die Privilegien zu eskalieren, indem ich das Tool mit niedrigen Privilegien verwende, um einen Fuß zu fassen, und dann diesen Fuß zu verwenden, um das Tool mit hohen Privilegien aufzurufen. Zum Beispiel, wenn ein lesendes Logging-Tool ein Token leckt, das von einem schreibenden Speichertool verwendet werden kann, überprüfe ich, ob der Agent diese Aufrufe ketten kann, um willkürliche Daten zu speichern. Wenn die Kette erfolgreich ist, flaggt der Test ein Privilegien-Verwirrungsrisiko.
Die Lösung besteht darin, die Anmeldeinformationen zu trennen: Jedes Tool erhält seine eigene Identität mit den geringsten Privilegien, und der Agent muss den entsprechenden Token von einem sicheren Token-Service anfordern, bevor er das Tool aufruft. Ich füge auch Überwachungsprotokolle hinzu, die aufzeichnen, welche Identität für jeden Aufruf verwendet wurde. Nach dem Bereitstellen der Trennung wiederhole ich die Zuordnung und die Verkettungsschritte und bestätige, dass das Tool mit niedrigen Privilegien nicht länger ein Token erhalten kann, das für das Tool mit hohen Privilegien funktioniert.
Was heuristische Scans erfassen und was sie verpassen
Statische Heuristiken sind gut darin, offensichtliche Warnsignale zu erkennen: ein Tool mit dem Namen „exec“, ein Parameter, der „http://“ ohne Validierung enthält, oder eine Schreiboperation auf einem Pfad, der mit „/etc/passwd“ übereinstimmt. Diese Muster sind leicht in einer Regelsammlung zu kodieren und erfassen viele naive Fehler. Heuristiken können jedoch nicht über Sequenzen von individuell sicheren Schritten nachdenken, die zusammen ein schädliches Ergebnis produzieren. Zum Beispiel kann ein Tool, das eine URL abruft und ein anderes Tool, das den abgerufenen Inhalt speichert, jedes für sich eine heuristische Überprüfung bestehen, aber ein Angreifer könnte sie ketten, um Daten aus einem internen Dienst zu exfiltrieren.
Aufgrund dieser Lücke behandle ich einen sauberen Scan als „kein bekanntes Muster erkannt“ anstatt „sicher zum Bereitstellen“. Ich folge dem Scan immer mit einer manuellen Überprüfungssitzung, in der ich den Call-Graph des Agents durchgehe, nach indirekten Datenflüssen suche und versuche, mehrschrittige Angriffsszenarien zu konstruieren. Die Überprüfung konzentriert sich auf die Geschäftslogik: muss der Agent jemals Daten aus zwei Tools in einer Weise kombinieren, die missbraucht werden könnte? Wenn die Antwort ja ist, entwerfe ich einen gezielten Test, der die Kette des Angreifers nachahmt.
Ich halte die heuristische Regelsammlung auch auf dem neuesten Stand, indem ich neue Muster hinzufüge, sobald ich sie während der Überprüfung entdecke. Dies schafft eine Rückkopplungsschleife: jede Überprüfungssitzung kann neue Regeln produzieren, die der Scanner dann automatisch im nächsten Zyklus anwenden kann.
Test-Workflow und -Tooling
Ich führe Tool-Missbrauchstests als Teil einer kontinuierlichen Integration-Pipeline aus. Die Pipeline baut zunächst das Agenten-Image, startet dann eine containerisierte Testumgebung, die Mock-Versionen externer Dienste bereitstellt. Jeder Mock-Dienst protokolliert jede Anfrage, die er erhält, einschließlich Header, Abfragezeichenfolgen und Inhalt. Diese Protokollierung ermöglicht es mir, zu überprüfen, ob der Agent einen unerwarteten Parameter gesendet oder einen nicht autorisierten Endpunkt kontaktiert hat.
Der Test-Satz ist in Ordner organisiert, die den oben genannten Kategorien entsprechen: übermäßig breit, destruktive Bestätigung, Geheimnis-Exfiltration, Privilegien-Verwirrung und heuristische Lücken. Jeder Ordner enthält eine Sammlung von JSON-Testfällen, die das Ziel, die Eingabe, die dem Agenten gegeben wird, und die erwarteten Behauptungen beschreiben. Ein einfacher Python-Treiber liest die Fälle, ruft den Agenten über seine API auf und überprüft die Protokolle auf Verletzungen.
Unten ist eine Tabelle, die die Kernspalten zeigt, die ich in jeder Testfall-Datei verwende. Die Tabelle selbst ist Teil der Dokumentation, nicht der Testumgebung, aber sie veranschaulicht die Struktur, die ich über alle Kategorien hinweg durchsetze.
Spalte | Beschreibung | Beispiel Ziel | Das hochrangige Ziel, das der Agent aufgefordert wird zu erreichen. | „Den Inhalt einer öffentlichen URL zusammenfassen.“ Eingabe | Die spezifische Nutzlast oder Argumente, die dem Agenten geliefert werden. | {„url“: „http://internal.secrets/service“} Erwartete Tool-Aufrufe | Liste der Tools, die der Agent aufrufen sollte, mit zulässigen Argumentmustern. | [{"tool":"fetch_url","arg_pattern":"^https?://[^/]+\\.example\\.com/"}] Unerwartete Signale | Indikatoren dafür, dass der Agent eine Aktion außerhalb des zulässigen Umfangs durchgeführt hat. | „Ausgehende Verbindung zu 10.0.0.5:22“, „Schreiben in /var/log/secure" Behauptung | Die automatische Überprüfung, die der Treiber nach Abschluss des Agenten durchführt. | assert keine unerwarteten Signale in den Dienstprotokollen
Nach jedem Testlauf generiere ich einen kurzen Bericht, der alle fehlgeschlagenen Behauptungen, den genauen Testfall, der fehlgeschlagen ist, und die rohen Protokolle der Mock-Dienste auflistet. Ich füge diesen Bericht dem Pull-Request hinzu, damit die Überprüfer die Beweise sehen können, bevor sie eine Änderung genehmigen. Der Bericht enthält auch eine Zusammenfassung davon, wie viele Testfälle bestanden oder fehlgeschlagen sind, was ein schnelles Gesundheitssignal für die Sicherheitspostur des Agents gibt.
Ich halte die Mock-Dienste leicht: sie sind einfache Flask-Apps, die die Anforderungsdaten zurückgeben und in eine Datei schreiben. Dies macht es einfach, sie in jeder CI-Umgebung ohne schwere Abhängigkeiten zu starten. Die einzige externe Anforderung ist die Fähigkeit, die benutzerdefinierten Hostnamen zu lösen, die ich für interne Endpunkte verwende, was ich über die /etc/hosts-Datei des Containers handle.
Was dies nicht ist
Dieser Leitfaden verspricht nicht, dass das Befolgen der Schritte jeden möglichen Werkzeugmissbrauchsszenario abfängt. Es ist keine 100-%-Garantie für Sicherheit und ersetzt nicht die Notwendigkeit einer qualifizierten menschlichen Überprüfung. Ich habe Fälle gesehen, in denen eine neuartige Kodierung sowohl die heuristischen Regeln als auch die manuelle Checkliste umging, nur um Wochen später während einer Vorfallüberprüfung entdeckt zu werden. Daher behandle ich den Prozess als Risikominderungsmaßnahme und nicht als endgültige Sicherheitszertifizierung.
Es ist auch kein Ersatz für sichere Software-Engineering-Praktiken wie Least-Privilege-Design, Bedrohungsmodellierung oder regelmäßige Penetrationstests. Die hier beschriebenen Tests konzentrieren sich auf die Interaktion zwischen dem Agenten und seinen Werkzeugen; sie bewerten nicht das zugrunde liegende Modell auf Voreingenommenheit, Halluzinationen oder andere Ausfallmodi, die die Sicherheit auf unterschiedliche Weise beeinträchtigen könnten.
Schließlich ist der Rat nicht an ein bestimmtes Framework oder einen bestimmten Anbieter gebunden. Die Muster und Minderungsmaßnahmen gelten, egal ob Sie Agenten mit LangChain, LlamaIndex, einer benutzerdefinierten Orchestrierungsebene oder jedem anderen Werkzeug-Aufrufsystem erstellen. Wenn Sie die Checkliste übernehmen, müssen Sie die konkreten Implementierungsdetails - wie die genaue Form der Zulassungsliste oder das Format des Genehmigungstokens - immer noch an Ihren eigenen Stack anpassen.
Referenzen
- SQL Injection Prevention Cheat Sheet - Secrets Management Cheat Sheet - Agent Squads Config Files Guide
Verwandte Artikel
- Agent Red Teaming und OWASP LLM01 (2026) - Erforschen Sie die vollständige AI-Micro-SaaS-Topic-Matrix →
Was ist der Unterschied zwischen Tool-Missbrauchstests und normaler Qualitätssicherung?
Normale Qualitätssicherung fragt, ob der Agent die Aufgabe erfüllt. Tool-Missbrauchstests fragen, was der Agent über die Aufgabe hinaus tun kann: Daten leaken, Aufzeichnungen löschen oder Systeme erreichen, die er nicht erreichen sollte. Die zweite Frage ist nach Reichweite, nicht nach Korrektheit.
Kann ein Scanner eine menschliche Überprüfung vollständig ersetzen?
Nein. Heuristiken erkennen bekannte Muster wie ein "exec"-Tool oder eine nicht gesanitisierte URL. Sie verpassen mehrschrittige Pläne, die einzeln sicher sind, aber zusammen schädlich. Ein sauberer Scan bedeutet kein bekanntes Muster, nicht bewiesene Sicherheit.
Welche Tooltypen bergen das größte Risiko?
Tools, die Shell-Befehle, beliebige URLs oder Schreibpfade akzeptieren, und Tools, die senden, löschen oder übertragen, ohne eine Bestätigungsschleuse zu haben. Enge Definitionen und explizite Zulassungslisten reduzieren die Reichweite.
Wie kann ich die Geheimnisexfiltration einschränken?
Führen Sie jedes Tool mit der geringsten Identität aus, die es benötigt, verwenden Sie Egress-Zulassungslisten und testen Sie mit Kanarien-Geheimnissen, um zu sehen, wohin die Daten reisen. Ausgabefilterung hilft, aber die Verifizierung sollte davon ausgehen, dass die Kontrolle fehlen könnte.
Nur zur Entscheidungsunterstützung. Kein zertifizierter Penetrationstest oder Compliance-Attest.