MCP સુરક્ષા: 95 પ્રોડક્શન આઉટેજ પછી મેં શું શીખ્યું
મને લાગતું હતું કે સુરક્ષા સરળ છે. ડિપેન્ડન્સીઝ (dependencies) અપડેટ કરો. HTTPS નો ઉપયોગ કરો. સિક્રેટ્સ (secrets) ને હાર્ડકોડ ન કરો.
હું ખોટો હતો.
95 પ્રોડક્શન આઉટેજ અને 1,800 કલાકના ડેવલપમેન્ટ પછી, મેં શીખ્યું કે Model Context Protocol (MCP) સુરક્ષા અલગ છે. તે સ્ટાન્ડર્ડ REST API સુરક્ષા જેવી નથી.
MCP નવા જોખમો ઊભા કરે છે કારણ કે ક્લાયન્ટ (client) એક LLM છે, માણસ નથી.
તમારા MCP સર્વરને સુરક્ષિત રાખવા માટે તમારે આ બાબતો જાણવી જરૂરી છે.
1. MCP થ્રેટ મોડલ (Threat Model)
REST માં, તમે ચોક્કસપણે જાણો છો કે તમારી API કોણ કોલ કરી રહ્યું છે. MCP માં, LLM મધ્યસ્થી (middleman) તરીકે કામ કરે છે. આ બધું બદલી નાખે છે:
- LLMs ટૂલ કોલ્સ અથવા પેરામીટર્સ વિશે ભ્રમિત (hallucinate) થઈ શકે છે.
- યુઝર્સ સીધા ટૂલ્સ કોલ કરતા નથી. તેઓ LLM સાથે વાત કરે છે, અને LLM તમારા સર્વર સાથે વાત કરે છે.
- દુષ્ટ (malicious) ક્લાયન્ટ્સ ડિસ્કવરી દરમિયાન તમારા સર્વરમાં છુપાયેલા ટૂલ્સ શોધવાનો પ્રયાસ કરી શકે છે.
તમારો સૌથી મોટો ખતરો માત્ર હેકર નથી. તે એક સારા ઈરાદા વાળું LLM છે જે અજાણતા એવી ભૂલ કરી શકે છે જેનાથી તમારું સિસ્ટમ ક્રેશ થઈ જાય.
2. API કી મેનેજમેન્ટ (API Key Management)
ઘણા ડેવલપર્સ કામ સરળ બનાવવા માટે ક્વેરી પેરામીટર્સ (query parameters) માં API કી પાસ કરે છે. આ એક ભૂલ છે. ક્વેરી પેરામીટર્સ દરેક સર્વર લોગ અને પ્રોક્સીમાં દેખાય છે.
આ નિયમોનું પાલન કરો:
- હેડર ઓથેન્ટિકેશન (Authorization: Bearer) નો ઉપયોગ કરો.
- JSON બોડીમાં કી પાસ કરવાનું ટાળો.
- દરેક ક્લાયન્ટ માટે અલગ API કી ઇશ્યૂ કરો. આ તમને બધું બગાડ્યા વગર વપરાશને ટ્રેક કરવામાં અને એક્સેસ રિવોક (revoke) કરવામાં મદદ કરે છે.
3. કડક ઇનપુટ વેલિડેશન (Strict Input Validation)
LLMs ખોટી અટકળ કરી શકે છે. તેઓ ખોટા પ્રકારના (types) અને વધારાના પેરામીટર્સ મોકલશે. તમારે દરેક કોલનું વેલિડેશન કરવું જ પડશે:
- પહેલા તપાસો કે ટૂલનું નામ તમારી યાદીમાં છે કે નહીં.
- વધારાના પેરામીટર્સવાળા કોલ્સને રિજેક્ટ કરો. તેને ફક્ત અવગણશો નહીં.
- પેરામીટર પ્રકારોને બરાબર મેચ કરો. ડેટા પ્રકારોમાં ફેરફાર (coerce) કરશો નહીં.
- મેમરી ક્રેશ અટકાવવા માટે સ્ટ્રિંગ્સ અને એરેઝ (arrays) પર કડક સાઈઝ લિમિટ સેટ કરો.
- ડિરેક્ટરી ટ્રેવર્સલ (directory traversal) અટકાવવા માટે તમામ ફાઇલ પાથ સેનિટાઇઝ (sanitize) કરો.
4. લેયર્ડ રેટ લિમિટિંગ (Layered Rate Limiting)
એક યુઝર પ્રોમ્પ્ટ એકસાથે દસ ટૂલ કોલ્સ ટ્રિગર કરી શકે છે. આ સેકન્ડોમાં તમારા કનેક્શન પૂલને ખાલી કરી શકે છે.
ત્રણ સ્તરની સુરક્ષાનો ઉપયોગ કરો:
- ક્લાયન્ટના વપરાશને નિયંત્રિત કરવા માટે પ્રતિ-API-કી લિમિટ.
- બ્રુટ ફોર્સ એટેક અટકાવવા માટે પ્રતિ-IP લિમિટ.
- બર્સ્ટ્સ (bursts) દરમિયાન તમારા સર્વરને કાર્યરત રાખવા માટે કન્કરન્ટ કનેક્શન લિમિટ.
5. પ્રોમ્પ્ટ ઇન્જેક્શન જોખમો (Prompt Injection Risks)
એક યુઝર LLM ને વિનાશક ટૂલ કોલ કરવા માટે છેતરી શકે છે. જો યુઝર LLM ને બધી નોટ્સ ડિલીટ કરવા કહેશે, તો LLM ખરેખર તે કરી શકે છે.
પોતાને સુરક્ષિત કરો:
- રીડ (read) અને રાઈટ (write) ઓપરેશન્સને અલગ કરો.
- કોઈપણ ડિલીટ અથવા અપડેટ એક્શન માટે મેન્યુઅલ યુઝર કન્ફર્મેશન જરૂરી બનાવો.
- તમારા ડેટાબેઝ યુઝર માટે 'લીસ્ટ પ્રિવિલેજ' (least privilege) ના સિદ્ધાંતનો ઉપયોગ કરો.
સુરક્ષા એ એક સતત ચાલતી પ્રક્રિયા છે. બહેતર કી મેનેજમેન્ટ અને કડક વેલિડેશન સાથે શરૂઆત કરો. આ પગલાં મોટાભાગની સમસ્યાઓનું નિરાકરણ લાવશે.
Optional learning community: https://t.me/GyaanSetuAi
