पुराने सुरक्षा नियम काम करना क्यों बंद कर देते हैं
सुरक्षा की तीस साल पुरानी समझ मानती है कि कोड और डेटा अलग-अलग चीजें हैं। एजेंट्स दोनों को एक ही बर्तन में डालकर मिला देते हैं।
60 सेकंड में
पुराने सुरक्षा नियम काम करना क्यों बंद कर देते हैं
सुरक्षा की तीस साल पुरानी समझ मानती है कि कोड और डेटा अलग-अलग चीजें हैं। एजेंट्स दोनों को एक ही बर्तन में डालकर मिला देते हैं।
चार चीज़ें जो सचमुच बदल गईं
| पुरानी दुनिया | एजेंट की दुनिया | इससे नुकसान क्यों होता है |
|---|---|---|
| इनपुट डेटा है | इनपुट निर्देश हो सकता है | एजेंट द्वारा पढ़ा जाने वाला कोई भी टेक्स्ट एक संभावित कमांड हो सकता है |
| वही इनपुट, वही आउटपुट | वही इनपुट, अलग आउटपुट | आप टेस्टिंग करके सौ फीसदी पक्का नहीं हो सकते |
| परमिशन हर यूज़र के हिसाब से होती हैं | परमिशन हर एजेंट के हिसाब से होती हैं, और एजेंट्स कई यूज़र्स के लिए काम करते हैं | अगर एक एजेंट से छेड़छाड़ हो जाए, तो वह उन सभी चीज़ों तक पहुँच सकता है जिनका उस पर भरोसा किया गया था |
| हमलों के लिए तकनीकी कौशल की ज़रूरत होती है | हमले सीधी-सादी अंग्रेज़ी में लिखे जाते हैं | अब हमलावरों में कोई भी शामिल हो सकता है |
क्या अब भी काम करता है
- Least privilege — एजेंट को सिर्फ़ उतनी ही कम शक्तियाँ दें जिनसे काम हो सके।
- Sandboxing — जोखिम भरे कामों को ऐसी जगह चलाएं जहाँ से वे किसी कीमती चीज़ तक न पहुँच सकें।
- Logging and audit — जिसे आप देख नहीं सकते, उस पर आप कार्रवाई नहीं कर सकते।
- Approval gates — ऐसे कदम जिन्हें वापस नहीं पलटा जा सकता, उनकी पुष्टि कोई इंसान करता है।
- Rate and spend limits — एक बुरा घंटा कितना बुरा हो सकता है, इसकी एक सीमा तय करें।
और देखें और पढ़ें
लैब
वही हमला, दो बार: एक बार SQL के ख़िलाफ़, एक बार मॉडल के ख़िलाफ़।
समस्या
' OR 1=1 -- से इसे तोड़ें। अब इसे एक parameterised query से ठीक करें और साबित करें कि वही इनपुट हानिरहित है। फिर किसी LLM के लिए इसका समतुल्य करें — और ईमानदारी से लिखें कि आपका "समाधान" वास्तव में क्या हासिल करता है।import sqlite3
db = sqlite3.connect(":memory:")
db.execute("CREATE TABLE users (name TEXT, secret TEXT)")
db.execute("INSERT INTO users VALUES ('alice', 'flag-alice')")
def broken(name):
return db.execute(f"SELECT secret FROM users WHERE name = '{name}'").fetchall()
def fixed(name):
return db.execute("SELECT secret FROM users WHERE name = ?", (name,)).fetchall()आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1सटीक रूप से बताएं कि parameterised queries में ऐसा कौन सा गुण है जो किसी भी prompt तकनीक में नहीं है।दिखाएं
Q2कोई एक ऐसे विशेष token का प्रस्ताव रखता है जो गैर-भरोसेमंद क्षेत्रों को चिह्नित करता है, और मॉडल को ऐसे ट्रेन किया गया हो कि वह उनके अंदर के आदेशों का कभी पालन न करे। इसके पक्ष में सबसे मज़बूत तर्क दें, फिर इसकी ख़ामी बताएं।दिखाएं
अक्सर पूछे जाने वाले सवाल
क्या हम मॉडल को डेटा के अंदर मौजूद निर्देशों को अनदेखा करने के लिए ट्रेन नहीं कर सकते?
लोग कोशिश करते हैं, और इससे थोड़ा-बहुत फ़ायदा भी होता है। लेकिन मॉडल की मुख्य खूबी ही प्राकृतिक भाषा में लिखे निर्देशों का पालन करना है, और हमलावर भी उसी भाषा में लिखता है जिसमें आप लिखते हैं। ट्रेनिंग से सफलता की दर कम ज़रूर होती है; लेकिन यह शून्य नहीं होती, और जो सुरक्षा उपाय "अक्सर काम करते हैं", वे असली सुरक्षा उपाय नहीं होते।
क्या यह बिल्कुल SQL injection जैसा ही है?
ढांचा एक जैसा है; लेकिन समाधान वैसा नहीं है। SQL injection का एक असली समाधान है — parameterised queries से कन्फ्यूज़न होना बनावट के स्तर पर ही नामुमकिन हो जाता है। कोई parameterised prompt नहीं होता। यही वजह है कि यह समस्या अब भी अनसुलझी है।
तो क्या एजेंट्स का इस्तेमाल करना ही असुरक्षित है?
नहीं — लापरवाही से उनका इस्तेमाल करना असुरक्षित है। कई सारे एजेंट्स प्रोडक्शन में सुरक्षित तरीके से चल रहे हैं। वे सीमित अनुमतियों के साथ, sandboxes में, जोखिम भरे कदमों पर इंसानों की निगरानी के साथ, और ऐसे logs के साथ चलते हैं जिन्हें कोई वास्तव में पढ़ता है।
जब कोई एजेंट नुकसान पहुँचाता है तो ज़िम्मेदार कौन होता है?
कानूनी तौर पर यह अभी तय हो रहा है, लेकिन व्यावहारिक रूप से: आप हैं। वह ऑपरेटर जिसने इसे डिप्लॉय किया, इसकी परमिशन तय कीं और approval gate को छोड़ दिया। बचाव के तौर पर "यह AI ने किया" कभी काम नहीं आया।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।