LLM প্রম্পট ইনজেকশন এবং গার্ডরেল সিকিউরিটি
LLM-এর নির্দেশাবলী (instructions) এবং ডেটার মধ্যে কোনো কঠোর সীমানা নেই। কনটেক্সট উইন্ডোর সবকিছুই টোকেনের একটি অবিচ্ছিন্ন প্রবাহ। প্রম্পট ইনজেকশন তখনই ঘটে যখন আক্রমণকারীর ডেটা নির্দেশাবলী হিসেবে কাজ করে। আপনি শুধুমাত্র ফিল্টারিংয়ের মাধ্যমে নিরাপদ হতে পারবেন না। আপনাকে 'defense-in-depth' বা বহুমুখী প্রতিরক্ষা ব্যবস্থার মাধ্যমে এটি মোকাবিলা করতে হবে।
সাধারণ প্রতিরক্ষা ব্যবস্থার ব্যর্থতা:
- কিওয়ার্ড ব্লকলিস্ট (Keyword Blocklists): আক্রমণকারীরা এগুলো এড়াতে সমার্থক শব্দ, বানান ভুল বা ভিন্ন ভাষা ব্যবহার করে। স্ট্রিং ফিল্টার করলে প্রকৃত উদ্দেশ্য (intent) ফিল্টার করা সম্ভব হয় না।
- আউটপুট রিডাকশন (Output Redaction): আক্রমণকারীরা গোপন তথ্যগুলোকে খণ্ডিত বা এনকোড করতে পারে যাতে সাধারণ স্ট্রিং ম্যাচিং ব্যর্থ হয়।
- LLM জাজ (LLM Judges): একটি আলাদা মডেলকে সোশ্যাল ইঞ্জিনিয়ারিংয়ের মাধ্যমে এমনভাবে প্রভাবিত করা যেতে পারে যাতে সে কোনো গোপন তথ্যকে ক্ষতিকারক মনে না করে।
- হিউম্যান রিভিউ (Human Review): মানুষ রেন্ডার করা টেক্সট দেখে, র (raw) বাইট নয়। তারা ASCII স্মাগলিংয়ে ব্যবহৃত লুকানো ক্যারেক্টারগুলো দেখতে পায় না।
ASCII Smuggling একটি বড় হুমকি। এটি নির্দেশাবলী লুকানোর জন্য Unicode Tags বা zero-width spaces-এর মতো অদৃশ্য ক্যারেক্টার ব্যবহার করে। মডেল এগুলো পড়তে পারে, কিন্তু মানুষ কিছুই দেখতে পায় না। এটি ইমেল বা ক্যালেন্ডারের মাধ্যমে আইডেন্টিটি স্পুফিং এবং ডেটা এক্সফিল্ট্রেশন (data exfiltration) করতে সাহায্য করে।
আপনার অ্যাপ্লিকেশন কীভাবে রক্ষা করবেন:
- র (raw) পেলোড স্যানিটাইজ করুন: মডেলে পৌঁছানোর আগেই কন্ট্রোল ক্যারেক্টার এবং zero-width ক্যারেক্টারগুলো সরিয়ে ফেলুন।
- অ্যালাউলিস্ট (allowlists) ব্যবহার করুন: ক্ষতিকারক ক্যারেক্টার খোঁজার পরিবর্তে আপনার প্রয়োজনীয় নির্দিষ্ট Unicode ক্যাটাগরিগুলো নির্ধারণ করে দিন।
- ডেটা নরমালাইজ করুন: সমস্ত ইনপুটের জন্য NFKC-normalization ব্যবহার করুন।
- গোপন তথ্য কমিয়ে আনুন: মডেলের প্রয়োজন না থাকলে কনটেক্সট উইন্ডোতে সংবেদনশীল ডেটা রাখবেন না।
- RAG-কে অনির্ভরযোগ্য হিসেবে গণ্য করুন: মডেলের জন্য রিট্রিভ করা যেকোনো ডকুমেন্টকে সম্ভাব্য ইনজেকশন ভেক্টর হিসেবে ধরে নিন।
- অ্যানোমালি বা অস্বাভাবিকতা লক্ষ্য করুন: যেসব ইনপুটের দৃশ্যমান দৈর্ঘ্য এবং র (raw) কোড-পয়েন্ট গণনার মধ্যে পার্থক্য রয়েছে, সেগুলোকে ফ্ল্যাগ করুন।
সিকিউরিটি কেবল একটি মডেলের ত্রুটি নয়, এটি একটি পাইপলাইন ত্রুটি। এর সমাধান আপনার অ্যাপ্লিকেশন কোডের মধ্যেই রয়েছে।
Source: https://dev.to/geekaara/llm-prompt-injection-guardrail-security-glm
Optional learning community: https://t.me/GyaanSetuAi