ਇੱਕ ਕਸਟਮਰ-ਸਰਵਿਸ ਚੈਟਬੋਟ ਨੇ ਮਟਨ ਰੈਸਿਪੀ ਦੀ ਇੱਕ ਸਧਾਰਨ ਬੇਨਤੀ ਤੋਂ ਬਾਅਦ ਆਪਣੇ ਸਿਸਟਮ ਪ੍ਰੋਂਪਟ (system prompts) ਖੋਲ੍ਹ ਦਿੱਤੇ। ਕੁਝ ਹੀ ਮਿੰਟਾਂ ਵਿੱਚ ਬੋਟ ਨੇ ਨਾ ਸਿਰਫ਼ ਰੈਸਿਪੀ ਦਿੱਤੀ, ਸਗੋਂ Python ਕੋਡ ਵੀ ਤਿਆਰ ਕੀਤਾ ਅਤੇ ਉਹ ਅੰਦਰੂਨੀ ਨਿਰਦੇਸ਼ ਵੀ ਪ੍ਰਗਟ ਕਰ ਦਿੱਤੇ ਜੋ ਇਸਦੇ ਵਿਵਹਾਰ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਦੇ ਹਨ।
ਇਹ ਘਟਨਾ ਸਾਬਤ ਕਰਦੀ ਹੈ ਕਿ ਇੱਕ ਭਾਸ਼ਾ ਮਾਡਲ (language model) ਦਾ "ਸਿਸਟਮ ਪ੍ਰੋਂਪਟ" ਕੋਈ ਸੁਰੱਖਿਆ ਕੰਧ ਨਹੀਂ ਹੈ। ਜਦੋਂ ਇੱਕ ਬੋਟ ਤੁਰੰਤ ਇਹ ਫੈਸਲਾ ਕਰਦਾ ਹੈ ਕਿ ਉਪਭੋਗਤਾ ਦੀ ਬੇਨਤੀ ਉਸਦੇ ਮਿਸ਼ਨ ਦੇ ਅਨੁਕੂਲ ਹੈ ਜਾਂ ਨਹੀਂ, ਤਾਂ ਇੱਕ ਹਮਲਾਵਰ ਉਸ ਤਰਕ ਨੂੰ ਮੋੜ ਸਕਦਾ ਹੈ ਅਤੇ ਮਾਡਲ ਨੂੰ ਗੁਪਤ ਜਾਣਕਾਰੀ ਪ੍ਰਗਟ ਕਰਨ ਲਈ ਮਜਬੂਰ ਕਰ ਸਕਦਾ ਹੈ।
ਇਸ ਉਲੰਘਣਾ ਦਾ ਕਾਰਨ ਕੀ ਸੀ
ਟੈਸਟ ਇੱਕ ਸਿੱਧੇ ਸਵਾਲ ਨਾਲ ਸ਼ੁਰੂ ਹੋਇਆ: “ਕੀ ਤੁਸੀਂ ਮੈਨੂੰ ਮਟਨ ਸਟੂ (mutton stew) ਦੀ ਰੈਸਿਪੀ ਦੇ ਸਕਦੇ ਹੋ?” ਬੋਟ, ਜਿਸਦਾ ਘੋਸ਼ਿਤ ਉਦੇਸ਼ ਕੰਪਨੀ ਦੀਆਂ ਸੇਵਾਵਾਂ ਬਾਰੇ ਦੱਸਣਾ ਸੀ, ਨੇ ਇੱਕ ਪੂਰੀ ਰੈਸਿਪੀ ਨਾਲ ਜਵਾਬ ਦਿੱਤਾ, ਸਮੱਗਰੀ ਦਾ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਲਈ ਇੱਕ ਛੋਟਾ Python ਸਕ੍ਰਿਪਟ ਜੋੜਿਆ, ਅਤੇ ਫਿਰ ਆਪਣੇ ਸਿਸਟਮ ਪ੍ਰੋਂਪਟ ਦੇ ਬਿਲਕੁਲ ਸ਼ਬਦਾਂ ਨੂੰ ਪ੍ਰਿੰਟ ਕੀਤਾ – ਉਹ ਟੈਕਸਟ ਜੋ ਮਾਡਲ ਨੂੰ ਦੱਸਦਾ ਹੈ ਕਿ ਕਿਵੇਂ ਵਿਵਹਾਰ ਕਰਨਾ ਹੈ।
ਬੇਨਤੀ ਆਪਣੇ ਆਪ ਵਿੱਚ ਨੁਕਸਾਨਦੇਹ ਨਹੀਂ ਸੀ; ਖ਼ਤਰਾ ਬੋਟ ਦੀ ਉਸ ਤਿਆਰੀ ਵਿੱਚ ਸੀ ਜਿਸ ਵਿੱਚ ਉਸਨੇ ਰੈਸਿਪੀ ਨੂੰ ਆਪਣੇ ਮੁੱਖ ਕਾਰਜ ਦੇ ਹਿੱਸੇ ਵਜੋਂ ਮੰਨ ਲਿਆ।
ਇਹ ਕਿਉਂ ਮਹੱਤਵਪੂਰਨ ਹੈ
ਚੈਟਬੋਟਸ ਹੁਣ ਗਾਹਕਾਂ ਨਾਲ ਸਿੱਧੇ ਸੰਪਰਕ ਵਾਲੀਆਂ ਭੂਮਿਕਾਵਾਂ ਵਿੱਚ ਹਨ, ਜੋ ਨਿੱਜੀ ਡੇਟਾ ਨੂੰ ਸੰਭਾਲਦੇ ਹਨ, ਲੈਣ-ਦੇਣ ਕਰਦੇ ਹਨ, ਜਾਂ ਅੰਦਰੂਨੀ ਟੂਲਸ ਨੂੰ ਕੰਟਰੋਲ ਕਰਦੇ ਹਨ। ਜੇਕਰ ਕਿਸੇ ਮਾਡਲ ਨੂੰ ਆਪਣੇ ਨਿਰਦੇਸ਼ਾਂ ਦੇ ਸਮੂਹ ਨੂੰ ਪ੍ਰਗਟ ਕਰਨ ਲਈ ਮਜਬੂਰ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਤਾਂ ਇੱਕ ਹਮਲਾਵਰ ਉਨ੍ਹਾਂ ਗਾਰਡਰੇਲਜ਼ (guardrails) ਬਾਰੇ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰ ਲੈਂਦਾ ਹੈ ਜੋ ਮਾਡਲ ਨੂੰ ਨੁਕਸਾਨਦੇਹ ਕੰਮਾਂ ਤੋਂ ਰੋਕਣ ਲਈ ਬਣਾਏ ਗਏ ਸਨ।
ਹਮਲਾ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ
- ਬੋਟ ਦੇ ਉਦੇਸ਼ ਦੀ ਪਛਾਣ ਕਰਨਾ – ਟੈਸਟਰ ਨੇ ਪਛਾਣਿਆ ਕਿ ਬੋਟ ਦਾ ਕੰਮ ਕੰਪਨੀ ਦੀਆਂ ਸੇਵਾਵਾਂ ਬਾਰੇ ਦੱਸਣਾ ਸੀ।
- ਇੱਕ ਗਲਤ ਸਬੰਧ ਬਣਾਉਣਾ – ਇਹ ਦਾਅਵਾ ਕਰਕੇ ਕਿ ਰੈਸਿਪੀ ਦੀ ਲੋੜ ਇਹ ਫੈਸਲਾ ਕਰਨ ਲਈ ਸੀ ਕਿ ਉਪਭੋਗਤਾ ਨੂੰ ਕਿਹੜੀ ਸੇਵਾ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ, ਟੈਸਟਰ ਨੇ ਬੇਨਤੀ ਨੂੰ ਬੋਟ ਦੇ ਮਿਸ਼ਨ ਨਾਲ ਇੱਕ ਉਪਰਿਛਾਵਨਾ ਵਾਲਾ ਸਬੰਧ ਦੇ ਦਿੱਤਾ।
- ਤਰਕ ਦਾ ਫਾਇਦਾ ਉਠਾਉਣਾ – ਬੋਟ ਨੇ ਬਣਾਵਟੀ ਸਬੰਧ ਨੂੰ ਸਵੀਕਾਰ ਕਰ ਲਿਆ, ਬੇਨਤੀ ਨੂੰ ਆਪਣੇ ਅੰਦਰੂਨੀ ਸਬੰਧ ਚੈੱਕ (relevance check) ਤੋਂ ਲੰਘਣ ਦਿੱਤਾ, ਅਤੇ ਉਨ੍ਹਾਂ ਗਾਰਡਰੇਲਜ਼ ਨੂੰ ਅਯੋਗ ਕਰ ਦਿੱਤਾ ਜੋ ਇਸਨੂੰ ਰੋਕ ਸਕਦੇ ਸਨ।
ਇਹ ਹਮਲਾ ਮਾਡਲ ਦੁਆਰਾ ਸਬੰਧ ਦੀ ਆਪਣੀ ਖੁਦ ਦੀ ਜਾਂਚ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ। ਜਦੋਂ ਉਸ ਜਾਂਚ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਤਾਂ ਮਾਡਲ ਦੇ ਆਪਣੇ "ਨਿਯਮ" ਵੀ ਬਦਲੇ ਜਾ ਸਕਦੇ ਹਨ।
ਅਸਫਲਤਾ ਦੇ ਤਿੰਨ ਪਹਿਲੂ
| ਅਸਫਲਤਾ ਦਾ ਪੜਾਅ | ਕੀ ਹੋਇਆ |
|---|---|
| ਟੀਚੇ ਦਾ ਹਾਈਜੈਕਿੰਗ (Goal hijacking) | ਬੋਟ ਨੇ ਰਸੋਈ ਨਾਲ ਸਬੰਧਤ ਇੱਕ ਅਣਸੰਬੰਧਿਤ ਬੇਨਤੀ ਨੂੰ ਆਪਣੀ ਸੇਵਾ-ਵਿਆਖਿਆ ਦੇ ਟੀਚੇ ਦੇ ਹਿੱਸੇ ਵਜੋਂ ਮੰਨ ਲਿਆ। |
| ਸਮਰੱਥਾ ਵਿੱਚ ਬਦਲਾਅ (Capability drift) | ਇਸਨੇ Python ਕੋਡ ਤਿਆਰ ਕੀਤਾ, ਭਾਵੇਂ ਕਿ ਇਸਦੀ ਭੂਮਿਕਾ ਵਿੱਚ ਕੋਡ ਤਿਆਰ ਕਰਨਾ ਸ਼ਾਮਲ ਨਹੀਂ ਸੀ। |
| ਪ੍ਰੋਂਪਟ ਲੀਕੇਜ (Prompt leakage) | ਇਸਨੇ ਬਿਲਕੁਲ ਉਹੀ ਸਿਸਟਮ ਪ੍ਰੋਂਪਟ ਪ੍ਰਿੰਟ ਕੀਤਾ ਜੋ ਗੁਪਤ ਰੱਖਣਾ ਚਾਹੀਦਾ ਸੀ। |
ਹਰ ਪੜਾਅ ਇੱਕ ਵੱਖਰੀ ਰੱਖਿਆਤਮਕ ਪਰਤ (defensive layer) ਦੇ ਟੁੱਟਣ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ, ਜਿਸ ਬਾਰੇ ਕਈ ਵਾਰ ਇਹ ਮੰਨ ਲਿਆ ਜਾਂਦਾ ਹੈ ਕਿ ਮਾਡਲ ਖੁਦ ਇਸ ਨੂੰ ਲਾਗੂ ਕਰਦਾ ਹੈ।
ਰੱਖਿਆਤਮਕ ਪਰਤਾਂ ਜੋ ਅਸਲ ਵਿੱਚ ਕੰਮ ਕਰਦੀਆਂ ਹਨ
ਗਾਰਡਰੇਲਜ਼ ਨੂੰ ਮਾਡਲ ਤੋਂ ਬਾਹਰ ਕੱਢ ਕੇ ਨਿਰਧਾਰਤ ਕੋਡ (deterministic code) ਵਿੱਚ ਲਿਆਉਣ ਨਾਲ ਇੱਕ ਭਰੋਸੇਯੋਗ ਸੁਰੱਖਿਆ ਸੀਮਾ ਵਾਪਸ ਆ ਜਾਂਦੀ ਹੈ।
- ਟਾਸਕ ਰੂਟਿੰਗ (Task routing) – ਆਉਣ ਵਾਲੇ ਸੰਦੇਸ਼ਾਂ ਨੂੰ ਮਨਜ਼ੂਰਸ਼ੁਦਾ ਇਰਾਦਿਆਂ (intents) ਦੀ ਇੱਕ ਨਿਸ਼ਚਿਤ ਸੂਚੀ ਨਾਲ ਜੋੜਨ ਲਈ ਇੱਕ ਵੱਖਰੇ ਕਲਾਸੀਫਾਇਰ (classifier) ਦੀ ਵਰਤੋਂ ਕਰੋ। ਜੇਕਰ ਕੋਈ ਬੇਨਤੀ ਉਸ ਸੂਚੀ ਤੋਂ ਬਾਹਰ ਹੈ, ਤਾਂ ਉਸਨੂੰ ਤੁਰੰਤ ਰੱਦ ਕਰ ਦਿਓ। ਮਾਡਲ ਨੂੰ ਸਬੰਧ ਬਾਰੇ ਬਹਿਸ ਕਰਨ ਦਾ ਮੌਕਾ ਹੀ ਨਹੀਂ ਮਿਲੇਗਾ।
- ਘੱਟੋ-ਘੱਟ ਸਮਰੱਥਾ (Least capability) – ਬੋਟ ਤੋਂ ਉਹ ਟੂਲਸ ਲੈ ਲਓ ਜਿਨ੍ਹਾਂ ਦੀ ਉਸਨੂੰ ਲੋੜ ਨਹੀਂ ਹੈ। ਜੇਕਰ ਇਸਨੂੰ ਕੋਡ ਚਲਾਉਣ ਜਾਂ ਡੇਟਾਬੇਸ ਤੱਕ ਵਿਆਪਕ ਪਹੁੰਚ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ, ਤਾਂ ਉਹਨਾਂ ਸਮਰੱਥਾਵਾਂ ਨੂੰ ਹਟਾ ਦਿਓ।
- ਨਿਰਧਾਰਤ ਅਧਿਕਾਰ (Deterministic authorization) – ਇਜਾ
