Hören Sie auf, dem Agenten blind zu vertrauen: Binden Sie Genehmigungen an exakte Tool-Aufrufe
Die meisten agentischen Systeme schützen gefährliche Aktionen wie das Schreiben von Dateien oder Geldtransfers durch eine einfache Genehmigung.
Normalerweise ist diese Genehmigung ein Boolean-Flag im Systemzustand.
Beispiel: approved: true.
Das ist ein Fehler. Ein Boolean versagt auf drei Arten, die Angreifer ausnutzen:
- Flip: Ein Angreifer ändert den Zustand von
falsezutruemittels Prompt Injection oder Code-Schwachstellen. - Replay: Sie genehmigen einen sicheren Befehl wie „Datei lesen“. Das System sieht „true“ und erlaubt einen zweiten, gefährlichen Befehl wie „Datenbank löschen“.
- Argument Drift: Sie genehmigen „10 $ senden“. Ein Angreifer ändert den Betrag vor der Ausführung auf 10.000 $. Das Flag steht immer noch auf „true“.
Das Problem ist, dass Sie die Genehmigung als eine Eigenschaft der gesamten Sitzung modellieren. Sie muss ein Nachweis für einen ganz spezifischen Aufruf sein.
So beheben Sie es:
Wenn ein Mensch einen Aufruf genehmigt, erstellen Sie ein sicheres Tag. Dieses Tag muss die folgenden vier Dinge sperren:
- Die eindeutige Tool-Call-ID.
- Einen Hash der exakten Argumente.
- Die Benutzeridentität.
- Eine Ablaufzeit.
Verifizieren Sie dieses Tag zum exakten Zeitpunkt der Ausführung. Verwenden Sie einen geheimen Schlüssel, den nur das System kennt.
Befolgen Sie diese Regeln für die Implementierung:
- Verwenden Sie Kanonialisierung: Sowohl der Genehmiger als auch der Ausführende müssen exakt dieselben Bytes hashen. Verwenden Sie RFC 8785, um sicherzustellen, dass Zahlen und Schlüssel übereinstimmen.
- Fail Closed: Wenn ein Tag fehlt, abgelaufen oder falsch ist, geben Sie einen spezifischen „nicht genehmigt“-Fehler zurück. Behandeln Sie dies nicht als standardmäßiges Tool-Ergebnis.
- Deny by Default: Erlauben Sie nur Tools, die eine explizite Genehmigung erfordern. Verweigern Sie alles andere.
- Replays behandeln: Wenn Sie Engines wie Temporal verwenden, stellen Sie sicher, dass Ihr geheimer Schlüssel deterministisch ist. Wenn sich der Schlüssel nach einem Systemneustart ändert, werden alle bestehenden Genehmigungen fehlschlagen.
Autorisierung sollte kein schwebender Zustand sein. Sie muss ein gebundener Umschlag sein, der beweist: „Diese spezifische Person hat diese spezifischen Argumente für dieses spezifische Tool bis zu diesem spezifischen Zeitpunkt genehmigt.“
Hören Sie auf, Booleans zu verwenden. Sie sind keine Vereinfachung. Sie sind ein Bug.
Optionale Lern-Community: https://t.me/GyaanSetuAi