Keamanan MCP: Apa yang Saya Pelajari Setelah 95 Gangguan Produksi

Saya pikir keamanan itu sederhana. Perbarui dependensi. Gunakan HTTPS. Jangan menuliskan secret secara langsung di dalam kode.

Saya salah.

Setelah 95 gangguan produksi dan 1.800 jam pengembangan, saya belajar bahwa keamanan Model Context Protocol (MCP) itu berbeda. Ini tidak seperti keamanan REST API standar.

MCP menciptakan risiko baru karena kliennya adalah LLM, bukan manusia.

Berikut adalah hal-hal yang harus Anda ketahui untuk menjaga server MCP Anda tetap aman.

  1. Model Ancaman MCP

Dalam REST, Anda tahu persis siapa yang memanggil API Anda. Dalam MCP, LLM bertindak sebagai perantara. Ini mengubah segalanya:

  • LLM dapat berhalusinasi dalam pemanggilan tool atau parameter.
  • Pengguna tidak memanggil tool secara langsung. Mereka berbicara dengan LLM, dan LLM berbicara dengan server Anda.
  • Klien berbahaya dapat menyelidiki server Anda untuk mencari tool tersembunyi selama proses discovery.

Ancaman terbesar Anda bukan hanya peretas. Melainkan LLM yang berniat baik namun melakukan kesalahan tidak sengaja yang menyebabkan sistem Anda crash.

  1. Manajemen API Key

Banyak pengembang mengirimkan API key melalui query parameter agar lebih mudah. Ini adalah kesalahan. Query parameter akan muncul di setiap log server dan proxy.

Ikuti aturan berikut:

  • Gunakan autentikasi header (Authorization: Bearer).
  • Hindari mengirimkan key di dalam body JSON.
  • Berikan API key yang berbeda untuk setiap klien. Ini membantu Anda melacak penggunaan dan mencabut akses tanpa merusak segalanya.
  1. Validasi Input yang Ketat

LLM bisa salah menebak. Mereka akan mengirimkan tipe data yang salah dan parameter tambahan. Anda harus memvalidasi setiap panggilan:

  • Periksa terlebih dahulu apakah nama tool ada dalam daftar Anda.
  • Tolak panggilan dengan parameter tambahan. Jangan hanya mengabaikannya.
  • Cocokkan tipe parameter dengan tepat. Jangan melakukan koersi tipe data.
  • Tetapkan batas ukuran yang ketat pada string dan array untuk mencegah crash memori.
  • Bersihkan (sanitize) semua jalur file untuk mencegah directory traversal.
  1. Pembatasan Laju (Rate Limiting) Berlapis

Satu prompt pengguna dapat memicu sepuluh panggilan tool sekaligus. Hal ini dapat menghabiskan connection pool Anda dalam hitungan detik.

Gunakan tiga lapis pertahanan:

  • Batasan per-API-key untuk mengontrol penggunaan klien.
  • Batasan per-IP untuk menghentikan serangan brute force.
  • Batasan koneksi konkuren untuk menjaga server Anda tetap berjalan selama lonjakan trafik.
  1. Risiko Prompt Injection

Seorang pengguna dapat menipu LLM agar memanggil tool yang bersifat destruktif. Jika pengguna menyuruh LLM untuk menghapus semua catatan, LLM mungkin benar-benar melakukannya.

Lindungi diri Anda:

  • Pisahkan operasi baca (read) dan tulis (write).
  • Wajibkan konfirmasi manual pengguna untuk setiap tindakan hapus atau pembaruan.
  • Gunakan prinsip hak akses minimum (principle of least privilege) untuk pengguna database Anda.

Keamanan adalah proses yang berkelanjutan. Mulailah dengan manajemen key yang lebih baik dan validasi yang ketat. Langkah-langkah ini dapat menyelesaikan sebagian besar masalah.

Sumber: https://dev.to/kevinten10/mcp-security-what-i-learned-securing-my-mcp-server-after-95-production-outages-3hc0

Komunitas belajar opsional: https://t.me/GyaanSetuAi