Langsung ke konten
Guide

Shadow MCP: masalah perusahaan yang tidak dianggarkan oleh siapa pun

| 8 min read

Karyawan menyambungkan server MCP yang tidak sah ke Claude dan Cursor. Satu aturan gateway, satu kueri inventaris, dan satu templat kebijakan sebagai yang terdepan.

Dark network lines representing shadow traffic and MCP detection
Photo by Markus Spiske on Unsplash

Shadow IT dulunya berarti manajer pemasaran yang mengeluarkan biaya untuk Dropbox. Shadow SaaS berarti tim produk mendaftar ke Figma dengan kartu kredit pribadi. Keduanya terkandung: alat dijalankan di browser tab, menyentuh data yang sudah dapat dilihat pengguna, dan tidak dapat melewati batas tab. Bayangan MCP memecahkan penahanan itu. Seorang karyawan mengubah server MCP komunitas menjadi Cursor atau Claude Desktop, dan sekarang agen dapat membaca kunci SSH, menjalankan perintah shell, dan berbicara dengan produksi database melalui kredensial ambien pengguna.

Cloudflare Gateway mengirimkan aturan yang mendukung MCP pada bulan April 2026. Zscaler dan Netskope mengikuti dalam waktu singkat minggu. Perkakas tersebut menyusul karena tim keamanan perusahaan mulai bertanya. Posting ini mencakup empat hal yang harus dilakukan pada kuartal ini: memahami model ancaman, membangun deteksi, mengirimkan dan skrip inventaris, mendapatkan daftar yang diizinkan, dan menerbitkan kebijakan tiga halaman.

Mengapa Shadow MCP lebih buruk dari Shadow SaaS

Tab SaaS jahat di browser berjalan di kotak pasir. Itu tidak dapat membaca kunci pribadi SSH pengguna. Itu tidak dapat menelurkan cangkang. Itu tidak dapat membuka koneksi TCP ke Postgres produksi Anda. Perambannya kebijakan asal yang sama dan sandbox OS membawa penahanan.

Server MCP berjalan di luar browser. Claude Desktop dan Cursor menelurkan server stdio saat masih kecil proses pada mesin pengguna dengan izin pengguna. Server HTTP MCP terhubung dengan kredensial apa pun yang ditempelkan pengguna. Agen kemudian memanggil alat dari server itu sebagai bagiannya putaran normalnya. Dari sudut pandang sistem operasi, pemanggilan alat adalah pengguna yang membuka a file atau menjalankan perintah.

Perbedaan nyata: server komunitas GitHub MCP diambil dari paket npm acak dan ditambahkan ke dalamnya ~/.cursor/mcp.json dapat mengekstrak apa pun ke dalamnya ~/.ssh/, setiap .env file di bawah direktori home Anda, dan seluruh isi repo pengguna telah memeriksa. Pengguna menyetujuinya sekali. Agen tidak pernah bertanya lagi. Seorang bajingan berbasis browser alat tidak dapat melakukan semua itu.

Tambahkan satu hal lagi: VPN pengguna. Jika laptop menggunakan VPN perusahaan saat agen berjalan, server MCP mewarisi posisi jaringan tersebut. Layanan internal, pementasan database, dan titik akhir metadata semuanya dapat dijangkau. Server tidak perlu melakukan phishing kepada siapa pun. Itu hanya menunggu agar VPN dapat terhubung.

Menemukan Shadow MCP di jaringan Anda

Deteksi bekerja pada tiga lapisan: titik akhir, gerbang keluar, dan DNS. Anda ingin sinyal dari ketiganya karena masing-masing menangkap mode kegagalan yang berbeda.

Di titik akhir, perhatikan proses anak yang dihasilkan oleh Claude Desktop atau Cursor. Kedua klien panggil server stdio sebagai subproses dengan nama proses induk yang diketahui. EDR Anda (CrowdStrike, SentinelOne, Pembela untuk Titik Akhir) dapat memberi peringatan pada setiap pohon proses yang di-root Claude.app, Cursor.app, atau claude-code. Saring ke yang Anda setujui; tandai yang lainnya.

Saat keluar, filter lalu lintas HTTP. MCP melalui HTTP Streamable mengirimkan header yang berbeda (mcp-protocol-version) dan tipe konten yang khas (application/json-rpc-2). Cloudflare Gateway, Zscaler, dan Netskope semuanya cocok keduanya. Berikut aturan Cloudflare Zero Trust untuk memblokir MCP yang tidak berizin sambil mengizinkan Anda host yang disetujui:

Di DNS, penyelesai Anda melihat pencarian host server MCP komunitas sebelum koneksi HTTPS apa pun terbuka. Masukkan daftar yang diizinkan ke dalam filter DNS Anda (Cisco Umbrella, NextDNS, Cloudflare Gateway DNS) sebagai satu-satunya tujuan MCP yang diizinkan. Setiap pencarian lain yang cocok dengan yang diketahui Umpan registri MCP mendapat blok dan tiket.

Untuk server stdio yang diinstal npm, agen DLP titik akhir Anda dapat memantau kecocokan paket *-mcp-*, @modelcontextprotocol/*, atau paket apa pun yang mendeklarasikan mcp masuk ke dalamnya package.json bin bidang. Itu menangkap install acara sebelum pengguna menghubungkan server ke Cursor.

Bangun inventaris MCP dalam satu sore

Deteksi memberi tahu Anda ketika server baru muncul. Inventaris memberi tahu Anda apa yang sudah diinstal. Kirim skrip, jalankan melalui MDM Anda (Jamf, Intune, Kandji), dan posting hasilnya ke pelaporan titik akhir. Suatu sore bekerja, maka Anda tahu mesin mana yang memiliki server mana.

Skrip membaca dua file konfigurasi yang digunakan setiap klien utama. Claude Desktop mempertahankan konfigurasinya di ~/Library/Application Support/Claude/claude_desktop_config.json di macOS dan %APPDATA%\Claude/claude_desktop_config.json di Windows. Kursor mempertahankan konfigurasinya ~/.cursor/mcp.json. Kedua file tersebut adalah JSON biasa dengan mcpServers nama server pemetaan objek ke perintah, argumen, URL, dan env vars.

Hash itu penting. File konfigurasi berubah ketika pengguna menambahkan server, memutar kunci, atau menarik a templat tim. Simpan SHA-256 dari seluruh file dan waspadai perubahan apa pun yang tidak Anda lakukan. Itu env nama var (bukan nilai) juga masuk dalam laporan; melihat GITHUB_PERSONAL_ACCESS_TOKEN terdaftar di bawah server komunitas adalah sinyalnya sendiri.

Jalankan skrip setiap hari. Masukkan output ke dalam inventaris aset Anda yang ada (Snipe-IT, ServiceNow, atau tabel Postgres). Buat dasbor yang menunjukkan: server baru minggu ini, server di lebih dari N mesin, dan server yang hash konfigurasinya berubah. Ketiga tampilan tersebut mencakup sebagian besar dari apa yang Anda inginkan perlu bertanya nanti.

Izinkan server yang Anda percayai

Inventaris menunjukkan kepada Anda apa yang diinstal. Daftar yang diizinkan menyatakan apa yang diperbolehkan. Penolakan default, semuanya server ditinjau, setiap persetujuan berakhir. Versi file dalam Git sehingga riwayat persetujuannya dapat diaudit.

Ada tiga hal yang menjadikan daftar yang diizinkan ini berguna. Pertama, setiap entri memiliki tiket peninjauan dan masa berlakunya; persetujuan tidak hidup selamanya. Kedua, server stdio menyertakan argumen yang diizinkan, jadi a postgres-mcp biner disetujui dengan --readonly tidak dapat dijalankan kembali akses tulis tanpa ulasan baru. Ketiga, cakupan diberi nama dan eksplisit; lapisan kontrol selanjutnya dapat menegakkannya.

Memasukkan server baru ke daftar yang diizinkan memerlukan dua pemeriksaan otomatis sebelum peninjauan manusia. Pertama, verifikasi postur TLS dari host server. Server yang melayani MCP melalui HTTP teks biasa, atau dengan sertifikat yang habis masa berlakunya dalam 10 hari, atau HSTS yang hilang, bukan merupakan kandidat:

Kedua, periksa header respons. Anda ingin HSTS dengan usia maksimal yang panjang, masuk akal content-type, dan sebuah mcp-protocol-version header yang cocok dengan apa server mengatakan ia mendukung manifesnya. Peralihan antara header dan manifes merupakan tanda bahaya:

Jalankan kedua pemeriksaan sebagai bagian dari tiket masuk. Jika salah satu gagal, tiket ditutup secara otomatis dengan alasan kegagalan. Reviewer hanya melihat server yang lulus dasar-dasarnya.

Kebijakan MCP tiga halaman yang dibutuhkan setiap perusahaan

Kebijakannya tidak perlu lama-lama. Hal ini perlu menjawab lima pertanyaan: apa yang disetujui, siapa menyetujui server baru, apa yang dapat dilakukan setiap peran, bagaimana Anda memantaunya, dan apa yang terjadi kapan ada yang tidak beres. Tabel pendek melakukan lebih banyak pekerjaan daripada dokumen 30 halaman yang tidak dibaca siapa pun.

Daerah Kebijakan Kontrol
Server yang disetujui Hanya server dalam daftar YAML yang diizinkan yang dapat berjalan di perangkat perusahaan atau menyentuh data perusahaan. Blok DNS + jalan keluar, aturan proses EDR, file daftar yang diizinkan yang dimasukkan MDM, masa berlaku persetujuan enam bulan.
Proses peninjauan Platform Keamanan meninjau semua permintaan server baru. Platform Data menandatangani bersama server mana pun dengan akses database. Penandatanganan hukum di server yang memproses data yang diatur. Tinjau templat tiket, TLS otomatis dan pemeriksaan header, SLA yang diterbitkan dalam lima hari kerja.
Batasan ruang lingkup Insinyur mendapatkan server data hanya-baca secara default. Akses tulis memerlukan pemberi persetujuan kedua. Kredensial produksi dilarang; gunakan pementasan atau token yang dicakup. Paket daftar yang diizinkan per peran didorong melalui MDM, kunci API tercakup dengan TTL pendek, cakupan penerapan gateway autentikasi.
Pemantauan Setiap panggilan alat melalui server yang disetujui masuk ke log audit. Upaya server yang tidak disetujui memicu peringatan dalam waktu 15 menit. Audit gerbang tenggelam ke Kafka dan SIEM, perbedaan inventaris harian, peringatan penyimpangan hash file konfigurasi.
Respons insiden Server MCP yang disusupi dianggap sebagai integrasi API yang disusupi. Cabut kunci server, karantina titik akhir yang terpengaruh, tinjau log audit untuk jendela paparan. Runbook terdokumentasi, rotasi panggilan, meja triwulanan yang mencakup skenario MCP.
Pengecualian Pengecualian sementara memerlukan persetujuan CISO, masa berlaku 30 hari, dan rencana tindak lanjut tertulis. Templat tiket pengecualian, entri daftar yang diizinkan habis masa berlakunya, tinjauan pengecualian mingguan.
Keluar dari pesawat Ketika seorang karyawan keluar, konfigurasi MCP mereka akan dihapus bersama dengan negara bagian perusahaan lainnya. Kunci apa pun yang mereka pegang akan diputar dalam waktu 24 jam. Tindakan penghapusan MDM, runbook rotasi kunci, log audit akses terakhir per kunci.

Poin-poin penting

  • Kemampuan MCP melebihi kemampuan SaaS. Server MCP komunitas membaca SSH kunci, menjalankan perintah shell, dan mewarisi posisi VPN Anda. Perlakukan itu seperti sebuah hak istimewa integrasi, tidak seperti tab browser.
  • Deteksi membutuhkan tiga lapisan. Aturan proses EDR, filter HTTP gateway aktif mcp-protocol-version, dan daftar izin DNS mencakup mode kegagalan yang berbeda.
  • Persediaan dalam satu sore. Skrip Python 60 baris membaca dua konfigurasi file yang digunakan setiap klien utama, melakukan hashing, dan mempostingnya ke titik akhir pelaporan. Jalankan setiap hari melalui MDM.
  • Daftar yang diizinkan ditolak secara default, masa berlakunya singkat. Setiap server memiliki tiket ulasan dan masa berlakunya enam bulan. Menggunakan /v1/ssl/check Dan /v1/headers/inspect sebagai gerbang masuk otomatis.
  • Sebuah tabel mengalahkan kebijakan 30 halaman. Server yang disetujui, proses peninjauan, cakupan batasan, pemantauan, respons insiden, pengecualian, offboarding. Tujuh baris, satu halaman, diposting di wiki teknik.

Server MCP milik Botoi di api.botoi.com/mcp adalah contoh tampilan server setelah siap untuk daftar yang diizinkan: TLS 1.3, HSTS, cakupan kunci API, batas kecepatan per kunci, dan 49 alat yang dikurasi dengan anotasi. Anda dapat memverifikasi sendiri posturnya dengan dua ikal di atas sebelum menambahkannya, atau periksa halaman pengaturan MCP dan itu dokumen API untuk daftar alat lengkap.

FAQ

Apa yang dianggap sebagai server MCP untuk tujuan inventaris?
Server stdio dan HTTP dihitung. Server stdio adalah proses anak yang muncul dari Claude Desktop atau Cursor dari entri file konfigurasi; tidak ada jejak jaringan sampai agen memulainya, namun memiliki permukaan kemampuan yang sama. Server HTTP berada di URL yang dihubungkan oleh klien melalui HTTP atau SSE yang Dapat Dialiri. Inventaris Anda harus mencakup keduanya, yang berarti membaca file konfigurasi di titik akhir dan mengawasi jalan keluar untuk tanda lalu lintas MCP.
Bisakah saya memblokir MCP sepenuhnya di jaringan perusahaan tanpa merusak agen yang disetujui?
Ya. Blokir semuanya secara default di gerbang keluar, lalu izinkan nama host tertentu yang digunakan oleh server MCP Anda yang disetujui. Server stdio yang disetujui tidak menyentuh jaringan sama sekali (mereka berkomunikasi dengan API pendukungnya melalui HTTPS normal, yang sudah Anda kendalikan). Anda kehilangan eksperimen MCP komunitas di perangkat perusahaan, itulah intinya. Pengembang masih dapat menggunakan mesin pribadi di luar VPN untuk eksplorasi.
Apa perbedaan Shadow MCP dengan risiko injeksi cepat?
Injeksi cepat adalah penyerang yang menipu model agar melakukan sesuatu yang tidak diinginkan operatornya. Shadow MCP adalah operator itu sendiri yang memasang kabel dalam kemampuan yang belum ditinjau. Aktor ancaman berbeda, kontrol berbeda. Pertahanan injeksi yang cepat (konfirmasi alat, sandboxing, pemfilteran keluaran) tidak membantu jika alat tersebut tidak seharusnya ada di sana. Anda memerlukan inventaris dan daftar yang diizinkan selain pertahanan tingkat model.
Apakah pemblokiran memerlukan peningkatan firewall generasi berikutnya?
Tidak. Pemfilteran DNS ditambah pemeriksaan jalan keluar lapisan HTTP mencakup sebagian besarnya. Cloudflare Gateway, Zscaler, dan Netskope semuanya mengirimkan aturan sadar MCP mulai April 2026. Untuk lokal, Anda dapat memfilter header MCP-Protocol-Version atau jenis konten application/json-rpc-2 dengan proksi L7 apa pun. Squid, Envoy, dan HAProxy semuanya menangani ini. Bagian yang sulit bukanlah filternya; itu mempertahankan daftar yang diizinkan.
Jejak audit apa yang diberikan MCP kepada saya?
Hampir tidak ada. Protokol ini mendefinisikan panggilan dan respons alat, tetapi tidak memerlukan server atau klien untuk mencatatnya. Claude Desktop menyimpan beberapa log lokal; Kursornya kurang begitu. Server komunitas sering kali tidak mencatat apa pun. Jika Anda memerlukan jejak audit yang bertahan dalam tinjauan insiden, Anda melengkapinya sendiri di sisi server, atau meletakkan gateway di depan yang menulis log terstruktur. Jangan mengandalkan klien untuk memegang bukti.

Mulai membangun dengan botoi

150+ endpoint API untuk pencarian, pemrosesan teks, pembuatan gambar, dan utilitas developer. Paket gratis, tanpa kartu kredit.