MCP सुरक्षा: ९५ प्रोडक्शन आऊटजेस (Production Outages) नंतर मी काय शिकलो

मला वाटले होते की सुरक्षा (security) सोपी आहे. डिपेंडेंसीज (dependencies) अपडेट करा. HTTPS वापरा. सीक्रेट्स (secrets) हार्डकोड करू नका.

मी चुकीचा होतो.

९५ प्रोडक्शन आऊटजेस आणि १,८०० तासांच्या डेव्हलपमेंटनंतर, मला समजले की Model Context Protocol (MCP) सुरक्षा वेगळी आहे. ती सामान्य REST API सुरक्षेसारखी नाही.

MCP नवीन धोके निर्माण करते कारण क्लायंट (client) हा माणूस नसून एक LLM आहे.

तुमचा MCP सर्व्हर सुरक्षित ठेवण्यासाठी तुम्हाला खालील गोष्टी माहित असणे आवश्यक आहे.

१. MCP थ्रेट मॉडेल (Threat Model)

REST मध्ये, तुमची API कोण कॉल करत आहे हे तुम्हाला नक्की माहित असते. MCP मध्ये, LLM मध्यस्थ (middleman) म्हणून काम करते. यामुळे सर्व काही बदलून जाते:

  • LLMs टूल कॉल्स किंवा पॅरामीटर्समध्ये 'हॅलुसिनेशन' (hallucinate) करू शकतात.
  • युजर्स थेट टूल्स कॉल करत नाहीत. ते LLM शी बोलतात आणि LLM तुमच्या सर्व्हरशी बोलते.
  • दुर्भावनापूर्ण क्लायंट्स (Malicious clients) डिस्कव्हरी दरम्यान तुमच्या सर्व्हरमधील लपविलेले टूल्स शोधण्याचा प्रयत्न करू शकतात.

तुमचा सर्वात मोठा धोका फक्त हॅकर नाही. तर एक चांगल्या हेतूने काम करणारा LLM, जो चुकून अशी चूक करतो ज्यामुळे तुमची सिस्टम क्रॅश होऊ शकते.

२. API की मॅनेजमेंट (API Key Management)

अनेक डेव्हलपर्स गोष्टी सोप्या करण्यासाठी क्वेरी पॅरामीटर्समध्ये (query parameters) API की पास करतात. ही एक चूक आहे. क्वेरी पॅरामीटर्स प्रत्येक सर्व्हर लॉग आणि प्रॉक्सीमध्ये दिसतात.

या नियमांचे पालन करा:

  • हेडर ऑथेंटिकेशन (header authentication - Authorization: Bearer) वापरा.
  • JSON बॉडीमध्ये की पास करणे टाळा.
  • प्रत्येक क्लायंटसाठी वेगळी API की जारी करा. यामुळे तुम्हाला वापर ट्रॅक करण्यास आणि सर्व काही विस्कळीत न करता ॲक्सेस रद्द करण्यास मदत होते.

३. कडक इनपुट व्हॅलिडेशन (Strict Input Validation)

LLMs चुकीचा अंदाज लावू शकतात. ते चुकीचे प्रकार (types) आणि अतिरिक्त पॅरामीटर्स पाठवू शकतात. तुम्हाला प्रत्येक कॉल व्हॅलिडेट करणे आवश्यक आहे:

  • प्रथम टूलचे नाव तुमच्या लिस्टमध्ये आहे का ते तपासा.
  • अतिरिक्त पॅरामीटर्स असलेल्या कॉल्स नाकारा. त्यांना फक्त दुर्लक्षित करू नका.
  • पॅरामीटर प्रकार (parameter types) तंतोतंत जुळवा. डेटा प्रकारांमध्ये जबरदस्तीने बदल (coerce) करू नका.
  • मेमरी क्रॅश टाळण्यासाठी स्ट्रिंग्स (strings) आणि ॲरे (arrays) वर कडक आकार मर्यादा (size limits) सेट करा.
  • डिरेक्टरी ट्रॅव्हर्सल (directory traversal) रोखण्यासाठी सर्व फाईल पाथ सॅनिटाइज (sanitize) करा.

४. लेअर्ड रेट लिमिटिंग (Layered Rate Limiting)

एका युजर प्रॉम्प्टमुळे एकाच वेळी दहा टूल कॉल्स ट्रिगर होऊ शकतात. यामुळे काही सेकंदात तुमचा कनेक्शन पूल (connection pool) संपू शकतो.

संरक्षणाचे तीन स्तर वापरा:

  • क्लायंटचा वापर नियंत्रित करण्यासाठी प्रति-API-key मर्यादा.
  • ब्रूट फोर्स अटॅक्स (brute force attacks) रोखण्यासाठी प्रति-IP मर्यादा.
  • अचानक वाढलेल्या ट्रॅफिक दरम्यान तुमचा सर्व्हर चालू ठेवण्यासाठी कॉनकरंट कनेक्शन (concurrent connection) मर्यादा.

५. प्रॉम्प्ट इंजेक्शन धोके (Prompt Injection Risks)

युजर LLM ला एखादे विनाशकारी टूल कॉल करण्यासाठी फसवू शकतो. जर युजरने LLM ला सर्व नोट्स डिलीट करण्यास सांगितले, तर LLM ते प्रत्यक्षात करू शकते.

स्वतःचे संरक्षण करा:

  • रीड (read) आणि राईट (write) ऑपरेशन्स वेगळे ठेवा.
  • कोणत्याही डिलीट किंवा अपडेट कृतीसाठी युजरची मॅन्युअल कन्फर्मेशन (manual confirmation) आवश्यक करा.
  • तुमच्या डेटाबेस युजरसाठी 'प्रिन्सिपल ऑफ लीस्ट प्रिव्हिलेज' (principle of least privilege) वापरा.

सुरक्षा ही एक निरंतर चालणारी प्रक्रिया आहे. चांगल्या की मॅनेजमेंट आणि कडक व्हॅलिडेशनपासून सुरुवात करा. या पायऱ्यांमुळे बहुतेक समस्या सुटतात.

स्रोत: https://dev.to/kevinten10/mcp-security-what-i-learned-securing-my-mcp-server-after-95-production-outages-3hc0

पर्यायी लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi