Usalama wa MCP: Nilichojifunza Baada ya Hitilafu 95 za Uzalishaji
Nilidhani usalama ni rahisi. Sasisha utegemezi (dependencies). Tumia HTTPS. Usiweke siri (secrets) moja kwa moja kwenye kodi.
Nilikuwa nimekosea.
Baada ya hitilafu 95 za uzalishaji na saa 1,800 za uendelezaji, nilijifunza kuwa usalama wa Model Context Protocol (MCP) ni tofauti. Sio kama usalama wa kawaida wa REST API.
MCP inatengeneza hatari mpya kwa sababu mteja (client) ni LLM, si binadamu.
Hapa kuna mambo unayopaswa kujua ili kuweka seva yako ya MCP salama.
- Mtindo wa Tishio la MCP
Katika REST, unajua hasa nani anayepiga API yako. Katika MCP, LLM hufanya kazi kama mpatanishi. Hii inabadilisha kila kitu:
- LLM zinaweza kuleta dhana potofu (hallucinate) kuhusu wito wa zana (tool calls) au vigezo (parameters).
- Watumiaji hawapigi zana moja kwa moja. Wanazungumza na LLM, na LLM inazungumza na seva yako.
- Wateja wenye nia mbaya wanaweza kuchunguza seva yako ili kutafuta zana zilizofichwa wakati wa ugunduzi (discovery).
Tishio lako kubwa si mdukuzi tu. Ni LLM yenye nia njema inayofanya kosa la bahati mbaya linalosababisha mfumo wako kusimama.
- Usimamizi wa API Key
Waendelezaji wengi hupitisha API keys kwenye vigezo vya kuulizia (query parameters) ili kurahisisha mambo. Hili ni kosa. Query parameters huonekana katika kila log ya seva na proxy.
Fuata sheria hizi:
- Tumia uthibitishaji wa kichwa (header authentication) (Authorization: Bearer).
- Epuka kupitisha funguo (keys) kwenye mwili wa JSON (JSON body).
- Toa API key tofauti kwa kila mteja. Hii inakusaidia kufuatilia matumizi na kufuta ufikiaji bila kuharibu kila kitu.
- Uhakiki Mkali wa Ingizo (Strict Input Validation)
LLM zitakisia vibaya. Zitatuma aina zisizo sahihi na vigezo vya ziada. Lazima uhakiki kila wito:
- Kwanza, angalia ikiwa jina la zana lipo kwenye orodha yako.
- Kataa wito wenye vigezo vya ziada. Usipuuze tu.
- Linganisha aina za vigezo (parameter types) kwa usahihi. Usilazimishe aina za data (do not coerce data types).
- Weka mipaka mkali ya ukubwa kwenye maandishi (strings) na orodha (arrays) ili kuzuia hitilafu za kumbukumbu (memory crashes).
- Safisha (sanitize) njia zote za faili ili kuzuia directory traversal.
- Udhibiti wa Kasi wa Tabaka (Layered Rate Limiting)
Amri moja ya mtumiaji inaweza kusababisha wito kumi wa zana kwa wakati mmoja. Hii inaweza kuisha pool yako ya miunganisho (connection pool) ndani ya sekunde chache.
Tumia tabaka tatu za ulinzi:
- Mipaka ya kila API key ili kudhibiti matumizi ya mteja.
- Mipaka ya kila IP ili kuzuia mashambulizi ya brute force.
- Mipaka ya miunganisho inayofanyika kwa wakati mmoja (concurrent connection limits) ili kuweka seva yako hai wakati wa ongezeko la ghafla.
- Hatari za Prompt Injection
Mtumiaji anaweza kudanganya LLM ili itumie zana ya uharibifu. Ikiwa mtumiaji ataambia LLM ifute maelezo yote, LLM inaweza kufanya hivyo kweli.
Jilinde:
- Tenganisha shughuli za kusoma (read) na kuandika (write).
- Hitaji uthibitishaji wa mtumiaji kwa njia ya mkono kwa kitendo chochote cha kufuta au kusasisha.
- Tumia kanuni ya upendeleo mdogo zaidi (principle of least privilege) kwa mtumiaji wako wa hifadhidata (database user).
Usalama ni mchakato unaoendelea. Anza na usimamizi bora wa funguo na uhakiki mkali. Hatua hizi hutatua matatizo mengi.
Jumuiya ya kujifunza ya hiari: https://t.me/GyaanSetuAi
