MCP ਸੁਰੱਖਿਆ: 95 ਪ੍ਰੋਡਕਸ਼ਨ ਆਊਟੇਜਾਂ ਤੋਂ ਬਾਅਦ ਮੈਂ ਕੀ ਸਿੱਖਿਆ
ਮੈਨੂੰ ਲੱਗਦਾ ਸੀ ਕਿ ਸੁਰੱਖਿਆ ਸਰਲ ਹੈ। ਡਿਪੈਂਡੈਂਸੀਆਂ (dependencies) ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ। HTTPS ਦੀ ਵਰਤੋਂ ਕਰੋ। ਸੀਕਰੇਟਸ (secrets) ਨੂੰ ਹਾਰਡਕੋਡ ਨਾ ਕਰੋ।
ਮੈਂ ਗਲਤ ਸੀ।
95 ਪ੍ਰੋਡਕਸ਼ਨ ਆਊਟੇਜਾਂ ਅਤੇ 1,800 ਘੰਟਿਆਂ ਦੇ ਡਿਵੈਲਪਮੈਂਟ ਤੋਂ ਬਾਅਦ, ਮੈਂ ਸਿੱਖਿਆ ਕਿ Model Context Protocol (MCP) ਦੀ ਸੁਰੱਖਿਆ ਵੱਖਰੀ ਹੈ। ਇਹ ਸਟੈਂਡਰਡ REST API ਸੁਰੱਖਿਆ ਵਾਂਗ ਨਹੀਂ ਹੈ।
MCP ਨਵੇਂ ਜੋਖਮ ਪੈਦਾ ਕਰਦਾ ਹੈ ਕਿਉਂਕਿ ਕਲਾਇੰਟ ਇੱਕ LLM ਹੈ, ਕੋਈ ਇਨਸਾਨ ਨਹੀਂ।
ਆਪਣੇ MCP ਸਰਵਰ ਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖਣ ਲਈ ਤੁਹਾਨੂੰ ਇਹ ਜਾਣਨਾ ਚਾਹੀਦਾ ਹੈ।
- MCP ਥ੍ਰੇਟ ਮਾਡਲ (Threat Model)
REST ਵਿੱਚ, ਤੁਹਾਨੂੰ ਪਤਾ ਹੁੰਦਾ ਹੈ ਕਿ ਤੁਹਾਡੀ API ਨੂੰ ਕੌਣ ਕਾਲ ਕਰ ਰਿਹਾ ਹੈ। MCP ਵਿੱਚ, LLM ਇੱਕ ਵਿਚੋਲੇ (middleman) ਵਜੋਂ ਕੰਮ ਕਰਦਾ ਹੈ। ਇਹ ਸਭ ਕੁਝ ਬਦਲ ਦਿੰਦਾ ਹੈ:
- LLMs ਟੂਲ ਕਾਲਾਂ ਜਾਂ ਪੈਰਾਮੀਟਰਾਂ ਬਾਰੇ ਗਲਤ ਜਾਣਕਾਰੀ (hallucinate) ਦੇ ਸਕਦੇ ਹਨ।
- ਯੂਜ਼ਰ ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਟੂਲਸ ਨੂੰ ਕਾਲ ਨਹੀਂ ਕਰਦੇ। ਉਹ LLM ਨਾਲ ਗੱਲ ਕਰਦੇ ਹਨ, ਅਤੇ LLM ਤੁਹਾਡੇ ਸਰਵਰ ਨਾਲ ਗੱਲ ਕਰਦਾ ਹੈ।
- ਮਾਲੀਸ਼ੀਅਸ ਕਲਾਇੰਟਸ ਡਿਸਕਵਰੀ ਦੌਰਾਨ ਤੁਹਾਡੇ ਸਰਵਰ ਵਿੱਚ ਲੁਕੇ ਹੋਏ ਟੂਲਸ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦੇ ਹਨ।
ਤੁਹਾਡਾ ਸਭ ਤੋਂ ਵੱਡਾ ਖਤਰਾ ਸਿਰਫ਼ ਇੱਕ ਹੈਕਰ ਨਹੀਂ ਹੈ। ਇਹ ਇੱਕ ਨੇਕ ਇਰਾਦੇ ਵਾਲਾ LLM ਹੈ ਜੋ ਅਣਜਾਣੇ ਵਿੱਚ ਅਜਿਹੀ ਗਲਤੀ ਕਰ ਦਿੰਦਾ ਹੈ ਜੋ ਤੁਹਾਡੇ ਸਿਸਟਮ ਨੂੰ ਕ੍ਰੈਸ਼ ਕਰ ਦਿੰਦੀ ਹੈ।
- API Key ਮੈਨੇਜਮੈਂਟ
ਕਈ ਡਿਵੈਲਪਰ ਚੀਜ਼ਾਂ ਨੂੰ ਆਸਾਨ ਬਣਾਉਣ ਲਈ ਕੁਐਰੀ ਪੈਰਾਮੀਟਰਾਂ (query parameters) ਵਿੱਚ API keys ਪਾਸ ਕਰਦੇ ਹਨ। ਇਹ ਇੱਕ ਗਲਤੀ ਹੈ। ਕੁਐਰੀ ਪੈਰਾਮੀਟਰ ਹਰ ਸਰਵਰ ਲੌਗ ਅਤੇ ਪ੍ਰੌਕਸੀ ਵਿੱਚ ਦਿਖਾਈ ਦਿੰਦੇ ਹਨ।
ਇਨ੍ਹਾਂ ਨਿਯਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ:
- ਹੈਡਰ ਅਥੈਂਟੀਕੇਸ਼ਨ (Authorization: Bearer) ਦੀ ਵਰਤੋਂ ਕਰੋ।
- JSON ਬਾਡੀ ਵਿੱਚ ਕੀਜ਼ (keys) ਪਾਸ ਕਰਨ ਤੋਂ ਬਚੋ।
- ਹਰ ਕਲਾਇੰਟ ਲਈ ਵੱਖਰੀ API key ਜਾਰੀ ਕਰੋ। ਇਹ ਤੁਹਾਨੂੰ ਸਭ ਕੁਝ ਵਿਗਾੜੇ ਬਿਨਾਂ ਵਰਤੋਂ ਨੂੰ ਟ੍ਰੈਕ ਕਰਨ ਅਤੇ ਐਕਸੈਸ ਰੋਕਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।
- ਸਖ਼ਤ ਇਨਪੁਟ ਵੈਲੀਡੇਸ਼ਨ (Strict Input Validation)
LLMs ਗਲਤ ਅੰਦਾਜ਼ਾ ਲਗਾਉਣਗੇ। ਉਹ ਗਲਤ ਟਾਈਪਸ ਅਤੇ ਵਾਧੂ ਪੈਰਾਮੀਟਰ ਭੇਜਣਗੇ। ਤੁਹਾਨੂੰ ਹਰ ਕਾਲ ਨੂੰ ਵੈਲੀਡੇਟ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ:
- ਪਹਿਲਾਂ ਚੈੱਕ ਕਰੋ ਕਿ ਟੂਲ ਦਾ ਨਾਮ ਤੁਹਾਡੀ ਸੂਚੀ ਵਿੱਚ ਹੈ ਜਾਂ ਨਹੀਂ।
- ਵਾਧੂ ਪੈਰਾਮੀਟਰਾਂ ਵਾਲੀਆਂ ਕਾਲਾਂ ਨੂੰ ਰੱਦ ਕਰ ਦਿਓ। ਉਹਨਾਂ ਨੂੰ ਸਿਰਫ਼ ਅਣਦੇਖਾ ਨਾ ਕਰੋ।
- ਪੈਰਾਮੀਟਰ ਟਾਈਪਸ ਨੂੰ ਬਿਲਕੁਲ ਮੈਚ ਕਰੋ। ਡੇਟਾ ਟਾਈਪਸ ਨੂੰ ਜ਼ਬਰਦਸਤੀ ਬਦਲਣ (coerce) ਦੀ ਕੋਸ਼ਿਸ਼ ਨਾ ਕਰੋ।
- ਮੈਮੋਰੀ ਕ੍ਰੈਸ਼ ਨੂੰ ਰੋਕਣ ਲਈ ਸਟ੍ਰਿੰਗਾਂ ਅਤੇ ਐਰੇਜ਼ (arrays) 'ਤੇ ਸਖ਼ਤ ਸਾਈਜ਼ ਲਿਮਿਟ ਸੈੱਟ ਕਰੋ।
- ਡਾਇਰੈਕਟਰੀ ਟ੍ਰੈਵਰਸਲ (directory traversal) ਨੂੰ ਰੋਕਣ ਲਈ ਸਾਰੇ ਫਾਈਲ ਪਾਥਾਂ ਨੂੰ ਸੈਨੀਟਾਈਜ਼ (sanitize) ਕਰੋ।
- ਲੇਅਰਡ ਰੇਟ ਲਿਮਿਟਿੰਗ (Layered Rate Limiting)
ਇੱਕ ਯੂਜ਼ਰ ਪ੍ਰੋਂਪਟ ਇੱਕੋ ਸਮੇਂ ਦਸ ਟੂਲ ਕਾਲਾਂ ਨੂੰ ਟ੍ਰਿਗਰ ਕਰ ਸਕਦਾ ਹੈ। ਇਹ ਸਕਿੰਟਾਂ ਵਿੱਚ ਤੁਹਾਡੇ ਕਨੈਕਸ਼ਨ ਪੂਲ ਨੂੰ ਖਤਮ ਕਰ ਸਕਦਾ ਹੈ।
ਰੱਖਿਆ ਦੀ ਤਿੰਨ ਲੇਅਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ:
- ਕਲਾਇੰਟ ਦੀ ਵਰਤੋਂ ਨੂੰ ਕੰਟਰੋਲ ਕਰਨ ਲਈ ਪ੍ਰਤੀ-API-key ਲਿਮਿਟਾਂ।
- ਬਰੂਟ ਫੋਰਸ (brute force) ਹਮਲਿਆਂ ਨੂੰ ਰੋਕਣ ਲਈ ਪ੍ਰਤੀ-IP ਲਿਮਿਟਾਂ।
- ਬਰਸਟਸ (bursts) ਦੌਰਾਨ ਆਪਣੇ ਸਰਵਰ ਨੂੰ ਚਾਲੂ ਰੱਖਣ ਲਈ ਕਨਕਰੈਂਟ ਕਨੈਕਸ਼ਨ ਲਿਮਿਟਾਂ।
- ਪ੍ਰੋਂਪਟ ਇੰਜੈਕਸ਼ਨ ਜੋਖਮ (Prompt Injection Risks)
ਇੱਕ ਯੂਜ਼ਰ LLM ਨੂੰ ਕਿਸੇ ਵਿਨਾਸ਼ਕਾਰੀ ਟੂਲ ਨੂੰ ਕਾਲ ਕਰਨ ਲਈ ਧੋਖਾ ਦੇ ਸਕਦਾ ਹੈ। ਜੇਕਰ ਕੋਈ ਯੂਜ਼ਰ LLM ਨੂੰ ਸਾਰੇ ਨੋਟਸ ਡਿਲੀਟ ਕਰਨ ਲਈ ਕਹਿੰਦਾ ਹੈ, ਤਾਂ LLM ਅਸਲ ਵਿੱਚ ਅਜਿਹਾ ਕਰ ਸਕਦਾ ਹੈ।
ਆਪਣੇ ਆਪ ਨੂੰ ਬਚਾਓ:
- ਰੀਡ (read) ਅਤੇ ਰਾਈਟ (write) ਆਪਰੇਸ਼ਨਾਂ ਨੂੰ ਵੱਖਰਾ ਰੱਖੋ।
- ਕਿਸੇ ਵੀ ਡਿਲੀਟ ਜਾਂ ਅੱਪਡੇਟ ਐਕਸ਼ਨ ਲਈ ਮੈਨੂਅਲ ਯੂਜ਼ਰ ਕਨਫਰਮੇਸ਼ਨ ਦੀ ਲੋੜ ਹੋਵੇ।
- ਆਪਣੇ ਡੇਟਾਬੇਸ ਯੂਜ਼ਰ ਲਈ 'ਪ੍ਰਿੰਸੀਪਲ ਆਫ ਲੀਸਟ ਪ੍ਰੀਵਿਲੇਜ' (principle of least privilege) ਦੀ ਵਰਤੋਂ ਕਰੋ।
ਸੁਰੱਖਿਆ ਇੱਕ ਨਿਰੰਤਰ ਪ੍ਰਕਿਰਿਆ ਹੈ। ਬਿਹਤਰ ਕੀ ਮੈਨੇਜਮੈਂਟ ਅਤੇ ਸਖ਼ਤ ਵੈਲੀਡੇਸ਼ਨ ਨਾਲ ਸ਼ੁਰੂਆਤ ਕਰੋ। ਇਹ ਕਦਮ ਜ਼ਿਆਦਾਤਰ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਦੇ ਹਨ।
Optional learning community: https://t.me/GyaanSetuAi
