Prompt injection defense playbook adalah serangkaian langkah defensif untuk mencegah model bahasa besar (LLM) “dipaksa” mengikuti instruksi berbahaya yang disisipkan pengguna, konten web, dokumen, atau sumber data lain. Jika aplikasi Anda memakai LLM untuk merangkum dokumen, menjawab pertanyaan, mengotomasi tiket, atau menjalankan agen yang memanggil tool/API, prompt injection bisa berujung pada kebocoran data, manipulasi keputusan, hingga penyalahgunaan akses.

Artikel ini membahas playbook yang dapat langsung dipakai tim engineering dan security. Fokusnya defensif: membangun kontrol yang mengurangi dampak, bukan mengajarkan cara menyalahgunakan.

Apa itu prompt injection (dan mengapa berbahaya)?

Prompt injection terjadi ketika instruksi yang tidak dipercaya (untrusted instructions) berhasil memengaruhi perilaku LLM, mengalahkan tujuan sistem, atau memanipulasi output. Instruksi tersebut bisa berasal dari:

  • Input pengguna (chat, form, komentar).
  • Konten eksternal yang diambil aplikasi (web page, email, tiket, dokumen).
  • Data retrieval (RAG) dari knowledge base yang bisa dipengaruhi pihak lain.

Risikonya meningkat saat LLM terhubung ke:

  • Data sensitif (CRM, HRIS, dokumen internal).
  • Tool/API (mengirim email, membuat tiket, mengubah konfigurasi, menjalankan workflow).
  • Otorisasi pengguna (SSO/role-based) yang tidak dipetakan dengan baik ke tindakan LLM.

Inti masalahnya sederhana: LLM akan mencoba “membantu” mengikuti instruksi. Tanpa kontrol yang tepat, aplikasi Anda bisa memperlakukan teks berbahaya seolah-olah kebijakan internal.

Model ancaman: definisikan sebelum membangun kontrol

Defense yang efektif dimulai dari threat modeling. Gunakan pertanyaan berikut untuk memetakan risiko:

  • Aset apa yang harus dilindungi? Misalnya data PII, rahasia perusahaan, kredensial, akses API.
  • Siapa penyerangnya? Pengguna anonim, pengguna terautentikasi, pihak eksternal yang memengaruhi konten (misalnya pengirim email), atau insider.
  • Permukaan serangannya? Chat UI, upload dokumen, ingestion pipeline, RAG, integrasi tool.
  • Dampak terburuk yang realistis? Kebocoran data, perubahan data, reputasi, kepatuhan.
  • Kontrol yang sudah ada? AuthN/AuthZ, logging, DLP, rate limiting, sandbox.

Hasil threat modeling harus menjadi daftar skenario prioritas (top risks) yang bisa diuji dan dimonitor. Tanpa ini, Anda mudah terjebak “sekadar menambah prompt” tanpa menurunkan risiko secara nyata.

Playbook pertahanan berlapis (defense in depth)

Tidak ada satu teknik yang “menyelesaikan” prompt injection. Praktik terbaik adalah berlapis: kontrol pada input, konteks, tool, output, dan operasi.

1) Pisahkan instruksi tepercaya vs data tidak tepercaya

Prinsip utama: data tidak pernah menjadi instruksi. Saat Anda memasukkan dokumen, email, atau konten web ke konteks LLM, perlakukan itu sebagai kutipan atau bahan referensi, bukan perintah.

  • Gunakan struktur pesan yang jelas: sistem/developer message untuk kebijakan; user/data untuk konten.
  • Labeling eksplisit: tandai blok sebagai “untrusted content” agar LLM diarahkan untuk hanya mengekstrak fakta, bukan mengikuti perintah.
  • Minimalkan konteks: hanya kirim bagian yang relevan (top-k passages), bukan seluruh dokumen.

Catatan: ini membantu, tetapi bukan kontrol keamanan tunggal karena model tetap bisa salah menafsirkan.

2) Validasi input dan batasi kanal yang berisiko

Kontrol input bukan untuk “mencari kata kunci berbahaya” semata, melainkan mengurangi variasi serangan dan mencegah konten yang tidak perlu masuk ke LLM.

  • Batasi format (misalnya hanya teks polos) untuk fitur tertentu, atau lakukan sanitasi markup.
  • Ukuran dan batasan: limit panjang input, jumlah dokumen, dan frekuensi permintaan (rate limiting).
  • Allowlist sumber untuk retrieval: hanya domain/knowledge base yang dikurasi.
  • Quarantine untuk konten yang baru di-ingest: verifikasi sebelum masuk indeks pencarian.

Tujuannya adalah mengurangi peluang konten eksternal menjadi “saluran” injeksi yang tidak terkontrol.

3) Tool/agent safety: jadikan tool sebagai titik kontrol utama

Jika LLM dapat memanggil tool (mengirim email, mengubah data, membuat transaksi), titik keamanan paling penting adalah lapisan tool—bukan hanya prompt.

  • Least privilege: token yang dipakai LLM hanya boleh melakukan tindakan minimum yang dibutuhkan.
  • Periksa otorisasi di server: setiap aksi tool harus diverifikasi oleh backend berdasarkan identitas pengguna dan kebijakan, bukan “niat” LLM.
  • Konfirmasi eksplisit untuk aksi berisiko (human-in-the-loop), misalnya menghapus data atau mengirim ke pihak eksternal.
  • Parameter validation: validasi skema, tipe, panjang, dan allowlist nilai sensitif (misalnya domain email tujuan).
  • Jangan izinkan eksekusi arbitrer: hindari desain tool yang terlalu umum seperti “run any query” atau “execute command” tanpa guardrail ketat.

Dengan cara ini, bahkan jika LLM “tertipu” oleh instruksi berbahaya, dampaknya dibatasi oleh kebijakan dan validasi tool.

4) Kontrol data sensitif: minimisasi, masking, dan DLP

Prompt injection sering bertujuan membocorkan rahasia. Maka, kontrol data harus disiapkan sejak desain.

  • Data minimization: jangan masukkan rahasia yang tidak perlu ke konteks (API keys, token, catatan internal sensitif).
  • Redaction/masking sebelum konteks: hapus atau samarkan PII, nomor identitas, alamat, atau rahasia lain sesuai kebutuhan.
  • Policy-based access: retrieval harus mempertimbangkan hak akses pengguna (row-level security, document-level ACL).
  • DLP pada output: deteksi pola data sensitif (misalnya nomor kartu, NIK, kredensial) dan blok/blur sebelum ditampilkan.

Praktik terbaik: anggap LLM sebagai komponen yang bisa salah; rahasia harus tetap aman walau model salah merespons.

5) Output guardrails: periksa sebelum ditampilkan atau dieksekusi

Output LLM bisa berbahaya dalam dua cara: mengandung data sensitif atau menginstruksikan tindakan tidak aman (misalnya menyarankan konfigurasi lemah). Terapkan pemeriksaan output:

  • Content policy: larang output tertentu (contoh: kredensial, data personal, instruksi tindakan destruktif).
  • Schema enforcement: untuk use case terstruktur (misalnya JSON), validasi ketat dan tolak output yang tidak sesuai.
  • Safe completion: jika terdeteksi risiko, kembalikan jawaban aman dan arahkan pengguna ke proses yang benar.

Untuk sistem agen, jangan pernah menjalankan aksi hanya berdasarkan output teks. Aksi harus melalui lapisan tool yang tervalidasi.

6) RAG hardening: amankan retrieval dan konteks

RAG (Retrieval-Augmented Generation) menambah permukaan serangan karena konten yang diambil bisa mengandung instruksi tersembunyi. Hardening yang umum:

  • Curated knowledge base: prioritaskan sumber internal yang dikelola, bukan web bebas.
  • Metadata trust score: beri skor kepercayaan dokumen; batasi dokumen baru/anonim.
  • Context delimiting: bungkus hasil retrieval sebagai kutipan yang harus diperlakukan sebagai referensi.
  • Query rewriting yang aman: batasi transformasi query agar tidak “terbujuk” memasukkan permintaan yang melanggar kebijakan.

RAG yang aman menekankan akses berbasis izin dan penyajian konteks yang tidak mendorong LLM menaati instruksi dari dokumen.

7) Logging, deteksi, dan respon insiden

Prompt injection adalah masalah keamanan operasional juga. Anda perlu visibilitas untuk mengukur dan merespons.

  • Log terstruktur: simpan input, konteks retrieval (ID dokumen), output, dan tindakan tool (tanpa menyimpan rahasia secara sembrono).
  • Alerting: deteksi lonjakan penolakan kebijakan, pola permintaan abnormal, atau percobaan akses data di luar peran.
  • Audit trail tool: semua panggilan tool harus punya jejak siapa, kapan, parameter apa, dan hasilnya.
  • Playbook respon: prosedur untuk mematikan fitur, mencabut token, menghapus dokumen berbahaya dari indeks, dan melakukan notifikasi.

Tanpa monitoring, Anda tidak akan tahu apakah kontrol Anda bekerja atau hanya terlihat aman di atas kertas.

Checklist implementasi cepat (ringkas)

  • Threat model untuk use case LLM + definisi aset sensitif.
  • Tool permission least privilege + server-side authorization.
  • RAG dengan ACL dan sumber kurasi.
  • Minimisasi data + redaction sebelum konteks.
  • Output filtering + schema validation.
  • Logging dan alerting untuk input/konteks/output/tool.
  • Uji berkala (red team internal) dan perbaikan berkelanjutan.

Pengujian keamanan: bagaimana memastikan kontrol Anda efektif?

Pengujian prompt injection sebaiknya dianggap sebagai bagian dari siklus SDLC, bukan aktivitas satu kali.

  • Test cases berbasis skenario: misalnya “konten dokumen mencoba mengubah kebijakan”, “pengguna meminta data di luar hak akses”, “dokumen baru yang tidak tepercaya masuk indeks”.
  • Unit test untuk tool: validasi parameter, otorisasi, dan penolakan aksi berbahaya harus teruji otomatis.
  • Evaluasi output: ukur tingkat kebocoran (leakage), kepatuhan policy, dan false positive DLP.
  • Chaos/security drills: simulasi pencabutan token, pemblokiran sumber data, atau rollback indeks.

Target pengujian bukan “membuat model sempurna”, melainkan memastikan kontrol sistem tetap menahan dampak ketika model salah.

Tata kelola (governance): kebijakan yang perlu ada

Teknis saja tidak cukup. Untuk organisasi, siapkan kebijakan minimum:

  • Klasifikasi data: apa yang boleh masuk prompt/konteks, apa yang dilarang.
  • Approval integrasi tool: daftar tool yang boleh dipanggil LLM dan standar kontrolnya.
  • Retensi log: berapa lama log disimpan, siapa yang bisa mengakses, bagaimana masking dilakukan.
  • Proses perubahan: setiap perubahan prompt, model, atau pipeline retrieval harus melewati review security.

Dengan governance, mitigasi tidak bergantung pada individu atau “best effort” tim.

FAQ

Apa bedanya prompt injection dengan jailbreak?

Jailbreak biasanya merujuk pada upaya pengguna membuat model melanggar kebijakan konten (misalnya memproduksi output terlarang). Prompt injection lebih luas: instruksi berbahaya bisa datang dari pengguna atau konten eksternal dan bertujuan memanipulasi aplikasi, termasuk kebocoran data atau penyalahgunaan tool.

Apakah menambah “system prompt yang kuat” sudah cukup?

Tidak. System prompt membantu, tetapi bukan boundary keamanan. Kontrol yang paling penting adalah server-side authorization, least privilege pada tool, minimisasi data, serta validasi dan monitoring. Anggap prompt sebagai salah satu lapisan, bukan satu-satunya pagar.

Bagaimana cara aman memakai RAG tanpa takut dokumen “menyuntik” instruksi?

Gunakan knowledge base yang dikurasi, terapkan ACL per dokumen, batasi sumber retrieval, dan bungkus konten retrieval sebagai referensi (bukan instruksi). Tambahkan kontrol output dan DLP untuk mencegah kebocoran jika model salah.

Apa sinyal bahwa aplikasi LLM saya sedang diserang prompt injection?

Sinyal umum meliputi lonjakan penolakan kebijakan, output yang meminta rahasia/akses tambahan, percobaan mengarahkan model untuk mengabaikan aturan, akses dokumen di luar peran, serta anomali panggilan tool (misalnya parameter tidak lazim atau volume meningkat).

Kontrol mana yang paling prioritas untuk produk yang sudah terlanjur live?

Prioritaskan: (1) kunci tool dengan least privilege dan otorisasi server-side, (2) batasi data sensitif di konteks, (3) aktifkan logging dan audit trail, (4) pasang output DLP/guardrails, dan (5) kurasi sumber RAG. Ini memberi penurunan risiko cepat tanpa menunggu perombakan besar.

Kesimpulan: Prompt injection adalah risiko sistemik pada aplikasi berbasis LLM. Solusi yang efektif bukan “prompt yang lebih pintar”, melainkan arsitektur defensif berlapis: pemisahan instruksi vs data, kontrol tool yang ketat, proteksi data sensitif, guardrails output, serta monitoring dan pengujian berkelanjutan. Dengan playbook ini, Anda bisa mengintegrasikan LLM dengan lebih aman tanpa mengorbankan manfaatnya.