قانون عدم نوشتن به پایین
قانون عدم نوشتن به پایین پایه و اساس مدل حفاظت داده Triggerfish است. این یک قانون ثابت و غیرقابل پیکربندی است که برای هر نشست، هر کانال و هر عامل اعمال میشود — بدون استثنا و بدون لغو LLM.
قانون: دادهها فقط میتوانند به کانالها و گیرندگانی با سطح طبقهبندی مساوی یا بالاتر جریان یابند.
این قانون واحد از کل دستهای از سناریوهای نشت داده جلوگیری میکند، از اشتراکگذاری تصادفی بیش از حد تا حملات پیچیده تزریق prompt طراحیشده برای استخراج اطلاعات حساس.
نحوه جریان طبقهبندی
Triggerfish از چهار سطح طبقهبندی استفاده میکند (از بالاترین به پایینترین):
دادهای که در یک سطح مشخص طبقهبندی شده میتواند به آن سطح یا هر سطحی بالاتر از آن جریان یابد. هرگز نمیتواند به پایین جریان یابد. این قانون عدم نوشتن به پایین است.
قانون عدم نوشتن به پایین ثابت و غیرقابل پیکربندی است. نمیتواند توسط مدیران تخفیف یابد، توسط قوانین سیاست لغو شود، یا توسط LLM دور زده شود. این پایه معماری است که تمام کنترلهای امنیتی دیگر بر آن بنا شدهاند. :::
طبقهبندی مؤثر
هنگامی که دادهها قرار است از سیستم خارج شوند، Triggerfish طبقهبندی مؤثر مقصد را محاسبه میکند:
EFFECTIVE_CLASSIFICATION = min(channel_classification, recipient_classification)هم کانال و هم گیرنده باید در سطح طبقهبندی داده یا بالاتر باشند. اگر هر یک از آنها پایینتر باشد، خروجی مسدود میشود.
| کانال | گیرنده | طبقهبندی مؤثر |
|---|---|---|
| INTERNAL (Slack) | INTERNAL (همکار) | INTERNAL |
| INTERNAL (Slack) | EXTERNAL (فروشنده) | PUBLIC |
| CONFIDENTIAL (Slack) | INTERNAL (همکار) | INTERNAL |
| CONFIDENTIAL (Email) | EXTERNAL (مخاطب شخصی) | PUBLIC |
کانال CONFIDENTIAL با گیرنده EXTERNAL طبقهبندی مؤثر PUBLIC دارد. اگر نشست به هر دادهای بالاتر از PUBLIC دسترسی پیدا کرده باشد، خروجی مسدود میشود. :::
مثال واقعی
در اینجا سناریویی مشخص آمده که قانون عدم نوشتن به پایین را در عمل نشان میدهد.
کاربر: «پایپلاین Salesforce من را بررسی کن»
عامل: [دسترسی به Salesforce با توکن تفویضشده کاربر]
[دادههای Salesforce با طبقهبندی CONFIDENTIAL]
[Taint نشست به CONFIDENTIAL بالا میرود]
«۳ معامله این هفته بسته میشوند با مجموع ۲٫۱ میلیون دلار...»
کاربر: «به همسرم پیام بفرست که امشب دیر میآیم»
لایه سیاست: مسدود شد
- Taint نشست: CONFIDENTIAL
- گیرنده (همسر): EXTERNAL
- طبقهبندی مؤثر: PUBLIC
- CONFIDENTIAL > PUBLIC --> نقض عدم نوشتن به پایین
عامل: «نمیتوانم در این نشست به مخاطبان خارجی پیام بفرستم
زیرا به دادههای محرمانه دسترسی پیدا کردیم.
-> بازنشانی نشست و ارسال پیام
-> لغو»کاربر به دادههای Salesforce (با طبقهبندی CONFIDENTIAL) دسترسی پیدا کرد که کل نشست را آلوده کرد. وقتی سپس تلاش کرد به یک مخاطب خارجی (طبقهبندی مؤثر PUBLIC) پیام بفرستد، لایه سیاست خروجی را مسدود کرد زیرا دادههای CONFIDENTIAL نمیتوانند به مقصد PUBLIC جریان یابند.
پیام عامل به همسر («امشب دیر میآیم») خودش حاوی دادههای Salesforce نیست. اما نشست توسط دسترسی قبلی به Salesforce آلوده شده و کل زمینه نشست — از جمله هر چیزی که LLM ممکن است از پاسخ Salesforce حفظ کرده باشد — میتواند بر خروجی تأثیر بگذارد. قانون عدم نوشتن به پایین از کل این دسته نشت زمینه جلوگیری میکند. :::
آنچه کاربر میبیند
وقتی قانون عدم نوشتن به پایین یک اقدام را مسدود میکند، کاربر یک پیام واضح و قابل اقدام دریافت میکند. Triggerfish دو حالت پاسخ ارائه میدهد:
پیشفرض (مشخص):
نمیتوانم دادههای محرمانه را به کانال عمومی بفرستم.
-> بازنشانی نشست و ارسال پیام
-> لغوآموزشی (قابل فعالسازی از طریق پیکربندی):
نمیتوانم دادههای محرمانه را به کانال عمومی بفرستم.
چرا: این نشست به Salesforce (CONFIDENTIAL) دسترسی پیدا کرد.
واتساپ شخصی با طبقهبندی PUBLIC است.
دادهها فقط میتوانند به طبقهبندی مساوی یا بالاتر جریان یابند.
گزینهها:
- بازنشانی نشست و ارسال پیام
- از مدیر بخواهید کانال واتساپ را بازطبقهبندی کند
- اطلاعات بیشتر: https://trigger.fish/security/no-write-downدر هر دو حالت، گزینههای واضحی به کاربر ارائه میشود. هرگز در مورد اتفاق افتاده یا کاری که میتواند انجام دهد سردرگم نمیماند.
بازنشانی نشست
وقتی کاربر «بازنشانی نشست و ارسال پیام» را انتخاب میکند، Triggerfish یک بازنشانی کامل انجام میدهد:
۱. Taint نشست به PUBLIC پاک میشود ۲. کل تاریخچه مکالمه پاک میشود (برای جلوگیری از نشت زمینه) ۳. اقدام درخواستشده در برابر نشست تازه مجدداً ارزیابی میشود ۴. اگر اقدام اکنون مجاز باشد (داده PUBLIC به کانال PUBLIC)، ادامه مییابد
امنیت بازنشانی نشست هم Taint و تاریخچه مکالمه را پاک میکند. این اختیاری نیست. اگر فقط برچسب Taint پاک شود در حالی که زمینه مکالمه باقی بماند، LLM همچنان میتواند به اطلاعات طبقهبندیشده از پیامهای قبلی ارجاع دهد و هدف بازنشانی را خنثی کند. :::
نحوه عملکرد اجرا
قانون عدم نوشتن به پایین در Hook PRE_OUTPUT اجرا میشود — آخرین نقطه اجرایی قبل از خروج هر دادهای از سیستم. این Hook بهعنوان کد همزمان و قطعی اجرا میشود:
typescript
// منطق اجرای سادهشده
function preOutputHook(context: HookContext): HookResult {
const sessionTaint = getSessionTaint(context.sessionId);
const channelClassification = getChannelClassification(context.channelId);
const recipientClassification = getRecipientClassification(
context.recipientId,
);
const effectiveClassification = min(
channelClassification,
recipientClassification,
);
if (sessionTaint > effectiveClassification) {
return {
decision: "BLOCK",
reason: `Session taint (${sessionTaint}) exceeds effective ` +
`classification (${effectiveClassification})`,
};
}
return { decision: "ALLOW", reason: "Classification check passed" };
}این کد:
- قطعی است — ورودیهای یکسان همیشه تصمیم یکسانی تولید میکنند
- همزمان است — Hook قبل از ارسال هر خروجی تکمیل میشود
- غیرقابل جعل است — LLM نمیتواند بر تصمیم Hook تأثیر بگذارد
- ثبتشده است — هر اجرا با زمینه کامل ثبت میشود
Taint نشست و افزایش
Taint نشست بالاترین سطح طبقهبندی دادههایی که در طول نشست دسترسی یافتهاند را ردیابی میکند. از دو قانون سختگیرانه پیروی میکند:
۱. فقط افزایش — Taint میتواند در یک نشست افزایش یابد، هرگز کاهش نمییابد ۲. خودکار — Taint توسط Hook POST_TOOL_RESPONSE هرگاه دادهای وارد نشست شود بهروز میشود
| اقدام | Taint قبل | Taint بعد |
|---|---|---|
| دسترسی به API آبوهوا (PUBLIC) | PUBLIC | PUBLIC |
| دسترسی به ویکی داخلی (INTERNAL) | PUBLIC | INTERNAL |
| دسترسی به Salesforce (CONFIDENTIAL) | INTERNAL | CONFIDENTIAL |
| دسترسی مجدد به API آبوهوا (PUBLIC) | CONFIDENTIAL | CONFIDENTIAL (بدون تغییر) |
وقتی نشستی به CONFIDENTIAL برسد، CONFIDENTIAL باقی میماند تا کاربر صراحتاً بازنشانی کند. هیچ کاهش خودکار، هیچ مهلت زمانی و هیچ راهی برای LLM برای پایین آوردن Taint وجود ندارد.
چرا این قانون ثابت است
قانون عدم نوشتن به پایین قابل پیکربندی نیست زیرا قابل پیکربندی کردن آن کل مدل امنیتی را تضعیف میکند. اگر مدیری بتواند استثنایی ایجاد کند — «اجازه بده دادههای CONFIDENTIAL برای این یکپارچهسازی به کانالهای PUBLIC جریان یابند» — آن استثنا به سطح حمله تبدیل میشود.
هر کنترل امنیتی دیگری در Triggerfish بر این فرض بنا شده که قانون عدم نوشتن به پایین مطلق است. Taint نشست، نسب داده، سقفهای تفویض عامل و ثبت بازرسی همگی به آن وابستهاند. قابل پیکربندی کردن آن مستلزم بازاندیشی کل معماری خواهد بود.
مدیران میتوانند سطوح طبقهبندی تعیینشده به کانالها، گیرندگان و یکپارچهسازیها را پیکربندی کنند. این روش صحیح تنظیم جریان داده است: اگر کانالی باید دادههای با طبقهبندی بالاتر دریافت کند، کانال را در سطح بالاتری طبقهبندی کنید. خود قانون ثابت باقی میماند؛ ورودیهای قانون قابل پیکربندی هستند. :::
صفحات مرتبط
- طراحی امنیتمحور — مروری بر معماری امنیتی
- هویت و احراز هویت — نحوه برقراری هویت کانال
- بازرسی و انطباق — نحوه ثبت اقدامات مسدودشده
- معماری: Taint و نشستها — جزئیات مکانیزم Taint نشست
