Berhenti Memercayai Agen: Ikat Persetujuan pada Pemanggilan Tool yang Spesifik
Sebagian besar sistem agentic melindungi tindakan berbahaya seperti penulisan file atau transfer uang dengan persetujuan sederhana.
Biasanya, persetujuan ini adalah flag boolean dalam status sistem. Contoh: approved: true.
Ini adalah sebuah kesalahan. Boolean gagal dalam tiga cara yang dieksploitasi oleh penyerang:
- Flip: Penyerang mengubah status dari false ke true melalui prompt injection atau celah kode.
- Replay: Anda menyetujui perintah aman seperti "read file." Sistem melihat "true" dan mengizinkan perintah kedua yang berbahaya seperti "delete database."
- Argument Drift: Anda menyetujui "send $10." Penyerang mengubah jumlahnya menjadi $10.000 sebelum eksekusi. Flag tersebut tetap menunjukkan "true."
Masalahnya adalah Anda memodelkan persetujuan sebagai properti dari seluruh sesi. Persetujuan harus menjadi bukti untuk satu pemanggilan spesifik.
Cara memperbaikinya:
Saat manusia menyetujui sebuah pemanggilan, buatlah tag yang aman. Tag ini harus mengunci empat hal berikut:
- ID pemanggilan tool yang unik.
- Hash dari argumen yang tepat.
- Identitas pengguna.
- Waktu kedaluwarsa.
Verifikasi tag ini pada saat eksekusi yang tepat. Gunakan kunci rahasia yang hanya diketahui oleh sistem.
Ikuti aturan berikut untuk implementasi:
- Gunakan Kanonikalitas (Canonicalization): Baik pemberi persetujuan maupun eksekutor harus melakukan hash pada byte yang sama persis. Gunakan RFC 8785 untuk memastikan angka dan kunci cocok.
- Fail Closed: Jika tag hilang, kedaluwarsa, atau salah, kembalikan error "not approved" yang spesifik. Jangan memperlakukannya sebagai hasil tool standar.
- Deny by Default: Hanya izinkan tool yang memerlukan persetujuan eksplisit. Tolak sisanya.
- Tangani Replay: Jika Anda menggunakan engine seperti Temporal, pastikan kunci rahasia Anda bersifat deterministik. Jika kunci berubah setelah restart sistem, semua persetujuan yang ada akan gagal.
Otorisasi tidak boleh menjadi potongan status yang mengambang. Ia harus menjadi amplop terikat yang membuktikan: "Orang spesifik ini menyetujui argumen spesifik ini untuk tool spesifik ini hingga waktu spesifik ini."
Berhenti menggunakan boolean. Itu bukan penyederhanaan. Itu adalah bug.
Komunitas pembelajaran opsional: https://t.me/GyaanSetuAi