पाठ 21 / 28
मॉडल, Packages और Plugins dependencies के रूप में
मॉडल files और AI tooling पर सामान्य supply-chain स्वच्छता लागू करें।
आप दूसरों का कोड और डेटा चलाते हैं
LLM application कई तृतीय-पक्ष हिस्सों पर निर्भर है: hubs से डाउनलोड की मॉडल files, Python और JavaScript packages, datasets, agent plugins और MCP servers, prompt templates और container images। हर एक दुर्भावनापूर्ण या compromised हो सकता है। व्यावहारिक नियम: भरोसेमंद, सत्यापन-योग्य स्रोतों से डाउनलोड करें; संस्करण pin करें और hashes या हस्ताक्षर verify करें; dependencies scan करें; लोड होने पर कोड चला सकने वाले formats की जगह सुरक्षित serialisation formats (जैसे safetensors या सादा JSON) पसंद करें; अपरिचित मॉडल और tools sandbox में चलाएँ; तृतीय-पक्ष plugins और tools की माँगी अनुमतियों की समीक्षा करें; मिलते-जुलते नामों (typosquatting, AI सहायक द्वारा गढ़े package नामों समेत जिन्हें हमलावर पंजीकृत कर सकते हैं) से सावधान रहें; और उपयोग किए मॉडल, datasets व packages का licences सहित bill of materials रखें। मॉडल providers को vendors मानें: उनकी सुरक्षा और डेटा शर्तों की समीक्षा करें।
जो लोड करते हैं उस पर भरोसा करें; जो परोसते हैं उसे बाँधें
मॉडल, packages और plugins dependencies हैं; requests और tokens वे संसाधन हैं जिन्हें हमलावर जला सकता है।
अविश्वसनीय pickle लोड करना कोड चलाता है, चलाकर
मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया। यहाँ सारे हमले स्थानीय डेटा पर हानिरहित प्रदर्शन हैं, कोई असली system उपयोग नहीं हुआ। ऐसे object को unpickle करना जिसका __reduce__ print लौटाता है, लोड होने के दौरान वही call चलाता है; यहाँ यह हानिरहित print है, पर असली हमलावर कोई भी command चलाता। JSON, केवल-डेटा format, कोड नहीं चला सकता। इसीलिए अविश्वसनीय स्रोतों की pickle-आधारित मॉडल files ख़तरनाक हैं।
import pickle, json
class Payload: # a harmless stand-in for a malicious object
def __reduce__(self):
return (print, ("[!] code ran while LOADING the file",))
blob = pickle.dumps(Payload())
print("loading an untrusted pickle...")
pickle.loads(blob) # merely loading executes code
data = json.loads('{"weights": [0.1, 0.2]}') # data-only formats cannot run code on load
print("json loaded safely:", data)
Output:
loading an untrusted pickle...
[!] code ran while LOADING the file
json loaded safely: {'weights': [0.1, 0.2]}Bill of materials रखें
मॉडल, datasets और packages को संस्करण व licences सहित सूचीबद्ध करें ताकि एक के compromised होने पर जल्दी प्रतिक्रिया दे सकें।
त्वरित जाँच: अज्ञात स्रोत की pickle file लोड करना जोखिम भरा क्यों है?
- Pickle files हमेशा बहुत बड़ी होती हैं
- Unpickling लोड होने के दौरान मनमाना कोड चला सकता है
- Pickle संख्याएँ नहीं रख सकता
- यह सिर्फ़ प्रशिक्षण धीमा करता है
Answer
Unpickling लोड होने के दौरान मनमाना कोड चला सकता है — केवल-डेटा formats पसंद करें और किसी भी मॉडल file का स्रोत verify करें।