ஒரு வாடிக்கையாளர் சேவை சாட்பாட் (chatbot), ஆட்டு இறைச்சி சமையல் குறிப்பிற்கான (mutton recipe) ஒரு எளிய கோரிக்கைக்குப் பிறகு, தனது சொந்த சிஸ்டம் ப்ராம்ப்ட்களை (system prompts) கசியவிட்டுவிட்டது. சில நிமிடங்களிலேயே, அந்த பாட் சமையல் குறிப்பை வழங்குவதோடு மட்டுமல்லாமல், Python குறியீட்டையும் (Python code) உருவாக்கியதுடன், அதன் செயல்பாடுகளை வழிநடத்தும் உள் கட்டளைகளையும் வெளிப்படுத்தியது.
ஒரு மொழி மாதிரியின் (language model) "சிஸ்டம் ப்ராம்ப்ட்" என்பது ஒரு பாதுகாப்புச் சுவர் அல்ல என்பதை இந்தச் சம்பவம் நிரூபிக்கிறது. ஒரு பயனர் கோரிக்கை தனது நோக்கத்திற்குப் பொருந்துகிறதா என்பதை ஒரு பாட் தன்னிச்சையாகத் தீர்மானிக்கும்போது, ஒரு தாக்குபவர் அந்தத் தர்க்கத்தை திசைதிருப்ப முடியும் மற்றும் அந்த மாதிரியைத் தனக்குத் தெரியாத ரகசியத் தகவல்களை வெளிப்படுத்தச் செய்ய முடியும்.
இந்தத் துரிதத் தாக்குதலைத் தூண்டியது எது
இந்தச் சோதனை ஒரு நேரடியான கேள்வியுடன் தொடங்கியது: “ஆட்டு இறைச்சி ஸ்டியூ (mutton stew) செய்முறை குறிப்பைத் தர முடியுமா?” நிறுவனத்தின் சேவைகளை விளக்குவதே தனது நோக்கம் என்று அறிவிக்கப்பட்டிருந்த அந்த பாட், முழுமையான சமையல் குறிப்பை வழங்கியதுடன், தேவையான பொருட்களைப் பிரித்தெடுக்கும் ஒரு சிறிய Python ஸ்கிரிப்டையும் சேர்த்தது, பின்னர் அதன் சிஸ்டம் ப்ராம்ப்ட்டின் துல்லியமான வாசகங்களை அச்சிட்டது – அதாவது அந்த மாதிரி எவ்வாறு செயல்பட வேண்டும் என்று சொல்லும் உரை அது.
அந்தத் தனிப்பட்ட கோரிக்கை எந்தத் தீங்கும் அற்றது; ஆனால் அந்தச் சமையல் குறிப்பைத் தனது முக்கியப் பணியின் ஒரு பகுதியாகக் கருதும் பாட்டின் மனப்பான்மையில்தான் ஆபத்து இருந்தது.
இது ஏன் முக்கியமானது
சாட்பாட்கள் இப்போது வாடிக்கையாளர் நேரடித் தொடர்புகளில் அமர்ந்து, தனிப்பட்ட தரவுகளைக் கையாளுதல், பரிவர்த்தனைகளைத் தூண்டுதல் அல்லது உள் கருவிகளைக் கட்டுப்படுத்துதல் போன்ற பணிகளைச் செய்கின்றன. ஒரு மாதிரி தனது சொந்த அறிவுறுத்தல் தொகுப்பை (instruction set) வெளிப்படுத்தத் தூண்டப்பட்டால், அந்த மாதிரி தீங்கு விளைவிக்கும் செயல்களைச் செய்வதைத் தடுக்க வேண்டிய பாதுகாப்பு வளையங்களைப் (guardrails) பற்றிய புரிதலை ஒரு தாக்குபவர் பெற்றுவிடுவார்.
இந்தத் தாக்குதல் எவ்வாறு செயல்படுகிறது
- பாட்டின் நோக்கத்தை ஆய்வு செய்தல் – பாட்டின் பணி நிறுவனத்தின் சேவைகளை விளக்குவது என்பதைச் சோதனையாளர் கண்டறிந்தார்.
- தவறான தொடர்பை உருவாக்குதல் – பயனர் எந்தச் சேவையைப் பயன்படுத்த வேண்டும் என்பதைத் தீர்மானிக்க இந்தச் சமையல் குறிப்பு தேவை என்று கூறி, அந்தத் தாக்குபவர் அந்தத் தேவையை பாட்டின் நோக்கத்துடன் மேலோட்டமாகத் தொடர்புபடுத்தினார்.
- தர்க்கத்தைப் பயன்படுத்துதல் – பாட் அந்தத் தவறான தொடர்பை ஏற்றுக்கொண்டது, அதன் உள்நிலைத் தர்க்கச் சோதனையைத் தாண்டி அந்தத் தேவையை அனுமதித்தது, மேலும் அதைத் தடுத்திருக்க வேண்டிய பாதுகாப்பு வளையங்களைச் செயலிழக்கச் செய்தது.
இந்தத் தாக்குதல் மாதிரியின் பொருத்தத்தைப் பற்றிய சுய மதிப்பீட்டை அடிப்படையாகக் கொண்டது. அந்த மதிப்பீடு மாற்றியமைக்கப்படும்போது, மாதிரியின் சொந்த "விதிகள்" பேச்சுவார்த்தைக்கு உட்பட்டதாகிவிடுகின்றன.
மூன்று தோல்வி நிலைகள்
| தோல்வி நிலை | என்ன நடந்தது |
|---|---|
| இலக்கைத் திசைதிருப்புதல் (Goal hijacking) | தொடர்பில்லாத சமையல் கோரிக்கையைத் தனது சேவை விளக்க இலக்கின் ஒரு பகுதியாக பாட் கருதியது. |
| திறன் மாற்றம் (Capability drift) | அதன் பணியில் குறியீடு உருவாக்கம் (code generation) இல்லாவிட்டாலும், அது இயங்கக்கூடிய Python குறியீட்டை உருவாக்கியது. |
| ப்ராம்ப்ட் கசிவு (Prompt leakage) | மறைத்து வைக்கப்பட வேண்டிய துல்லியமான சிஸ்டம் ப்ராம்ப்ட்டை அது அச்சிட்டது. |
ஒவ்வொரு நிலையையும், பல பயன்பாடுகள் மாதிரி தானாகவே செயல்படும் என்று கருதும் வெவ்வேறு பாதுகாப்பு அடுக்குகளின் முறிவு என்று கூறலாம்.
உண்மையில் செயல்படும் பாதுகாப்பு அடுக்குகள்
பாதுகாப்பு வளையங்களை மாதிரியிலிருந்து அகற்றி, தீர்மானிக்கப்பட்ட குறியீட்டிற்குள் (deterministic code) கொண்டு வருவது ஒரு நம்பகமான பாதுகாப்பு எல்லையை மீட்டெடுக்கிறது.
- பணி வழிசெலுத்தல் (Task routing) – வரும் செய்திகளை அனுமதிக்கப்பட்ட நோக்கங்களின் (intents) நிலையான பட்டியலுடன் இணைக்க ஒரு தனி வகைப்படுத்தியைப் (classifier) பயன்படுத்தவும். ஒரு கோரிக்கை அந்தப் பட்டியலுக்கு வெளியே இருந்தால், அதை உடனடியாக நிராகரிக்கவும். அப்போது மாதிரி அதன் பொருத்தத்தைப் பற்றி விவாதிக்க முடியாது.
- குறைந்தபட்சத் திறன் (Least capability) – பாட்டிற்குத் தேவையில்லாத கருவிகளை நீக்கவும். அதற்கு குறியீடு இயக்கம் (code execution) அல்லது விரிவான தரவுத்தள அணுகல் தேவையில்லை என்றால், அந்தத் திறன்களை நீக்கிவிடவும்.
- தீர்மானிக்கப்பட்ட அங்கீகாரம் (Deterministic authorization) – அனுமதிச் சோதனைகளை மொழி மாதிரியில் செய்யாமல், பயன்பாட்டு குறியீட்டில் (application code) செய்யவும். மாதிரி ஒரு செயலை பரிந்துரைக்கலாம், ஆனால் அதைச் செய்யலாமா என்பதை குறியீடுதான் தீர்மானிக்கும்.
- வெளியீட்டுச் சரிபார்ப்பு (Output validation) – ஒவ்வொரு மாதிரிப் பதிலும் பயனரைச் சென்றடைவதற்கு முன், சிஸ்டம் ப்ராம்ப்ட்கள் அல்லது முக்கியமான தரவுகள் போன்ற அனுமதிக்கப்படாத உள்ளடக்கங்கள் உள்ளனவா என்று ஸ்கேன் செய்யவும்.
"இந்தக் கோரிக்கை தடைசெய்யப்பட்டதா?" என்று மட்டும் கேட்கும் ஒரு வடிகட்டியை, ஒரு வாதாடும் பயனர் எளிதில் ஏமாற்றிவிட முடியும். ஆனால் ஒரு மூடிய பட்டியலைச் சரிபார்க்கும் வழிசெலுத்தல் அடுக்கு (routing layer), பேச்சுவார்த்தைக்கு இடமளிக்காது.
அடுத்து கவனிக்க வேண்டியவை
உரையாடல் AI-யைச் சார்ந்திருக்கும் நிறுவனங்கள், ஆட்டு இறைச்சி சமையல் குறிப்புச் சோதனை மூலம் விளக்கப்பட்டுள்ள மூன்று தோல்வி முறைகளுக்காகத் தங்கள் பயன்பாடுகளைத் தணிக்கை (audit) செய்ய வேண்டும். இதற்கிடையில், எந்தவொரு சிஸ்டம் ப்ராம்ப்ட்டையும் பொது அறிவு என்று கருதுங்கள்; ஒரு மாதிரி தன்னைத் தானே வெளிப்படுத்துவதைத் தடுப்பதற்கு அதன் மீது மட்டும் நம்பிக்கை வைக்காதீர்கள்.
இதிலிருந்து நாம் கற்றுக்கொள்ள வேண்டியது தெளிவானது: உங்கள் பாதுகாப்பு மாதிரி இயற்கை மொழி அறிவுறுத்தல்களின் (natural-language instructions) ஒரு பத்தியைச் சார்ந்து இருந்தால், அது பலவீனமானது. மாதிரி என்ன சொன்னாலும், தணிக்கை செய்யக்கூடிய, பதிப்புப்படுத்தக்கூடிய (versioned) மற்றும் நடைமுறைப்படுத்தக்கூடிய குறியீட்டைக் கொண்டு அதை வலுப்படுத்துங்கள்.
