النقطة العمياء في قياس أمن الوكلاء
معظم قياس أمن الوكلاء يُبنى حول المحتوى. تُفحص الـ prompts بحثًا عن سلاسل الحقن، وتُفتّش وسائط الأدوات بحثًا عن الأسرار، وتُرشّح ردود النموذج بحثًا عن انتهاكات السياسة. هذا عمل مفيد، وهو أيضًا ناقص بطريقة يسهل تفويتها: يمكن أن يكون الطلب بريئًا تمامًا في حمولته وعدائيًا في وجهته وتوقيته. الحمولة تقول GET /. الوجهة تقول إن هذا الوكيل لم يخاطب ذلك المضيف من قبل قط، وإنه المضيف الجديد الرابع عشر في الدقيقة الأخيرة.
قوائم السماح لكل نداء لا تلتقط التسلسل. إذا كان الوكيل مسموحًا له بالوصول إلى المضيف A والمضيف B والمضيف C، فإن كل نداء فردي يمر. الاستغلال ليس أي نداء بمفرده. الاستغلال هو A، ثم B، ثم C، بهذا الترتيب، خلال نافذة قصيرة، حيث يعيد A رمزًا يقبله B، ويعيد B محدد موقع يحلّه C. كل قفزة مصرّح بها. أما العبور فليس كذلك. فحص المحتوى لا يستطيع رؤية هذا لأن المحتوى سليم. شكل حركة المرور هو الهجوم.
هذه هي الفجوة التي وُجد سجل الخروج لسدّها.
ما الذي يسجّله سجل الخروج
سجل الخروج هو سجل إضافي فقط (append-only) لكل حدث شبكي صادر ينتجه الوكيل، يُكتب عند النقطة التي يُنشأ فيها الاتصال فعليًا. وحدة التسجيل هي الوجهة، لا الرسالة.
لكل حدث، ينبغي للسجل أن يلتقط كحد أدنى:

- هوية الوجهة: اسم المضيف، أو قيمة SNI، أو المعرّف الذي استخدمه العميل فعليًا لمخاطبة النظير
- العنوان المحلول: عنوان IP الذي حُلّ إليه الاسم في تلك اللحظة، وهذا مهم لأن DNS مستوى تحكم يمكن توجيه الوكيل عبره
- البروتوكول والمنفذ: HTTPS، DNS، SMTP، TCP الخام، والمنفذ المستخدم فعليًا
- طابع زمني لأول ظهور لكل تشغيل: ليس فقط متى وقع هذا الحدث، بل هل ظهرت هذه الوجهة في هذا التشغيل من قبل
- هوية التشغيل والوكيل: أي وكيل، أي تنفيذ، أي مهمة أب أنشأته
السجل لكل تشغيل، والتشغيل هو النطاق المهم. الوجهة الطبيعية لعامل استيعاب طويل الأمد تكون جديدة لوكيل تخطيط قصير الأمد. الكاردينالية والnovelty لا تكون ذات معنى إلا مقابل التشغيل الذي تنتمي إليه.
إشارتان مشتقتان تنبعان من هذا السجل شبه مجانًا:
- كاردينالية الوجهات لكل تشغيل. كم وجهة متمايزة لمسها هذا التشغيل؟ وكيل تخطيط يصل عادةً إلى ثلاث خدمات داخلية ثم يصل فجأة إلى أربعين ليس بالضرورة مخترقًا، لكنه لم يعد يتصرف كمتخطّط.
- الnovelty مقابل خط الأساس. كم من هذه الوجهات جديد نسبةً إلى ما وصل إليه هذا الوكيل، في هذه البيئة، تاريخيًا؟ الnovelty هو الإشارة الأحدّ لأنه محدود وقابل للمقارنة عبر التشغيلات.
يجب الاحتفاظ بالمحاولات المرفوضة، لا إسقاطها. الاتصال المحجوب هو السطر الأعلى قيمة في السجل: إنه وكيل يحاول صراحةً الذهاب إلى مكان تحظره السياسة، وهو يخبرك بالنية حتى عندما صمد الإنفاذ. إسقاط المرفوضات لإبقاء السجل نظيفًا يزيل بالضبط الدليل الذي يحتاجه المحقق.
نقاط الإنفاذ
السجل موثوق بقدر النقطة التي يُكتب عندها. إذا كتب إطار عمل الوكيل سجل خروجه بنفسه، فالسجل ادّعاء من الوكيل عن سلوكه الخاص. هذا جيد لتصحيح الأخطاء وعديم الفائدة للأمن.
يجب أن ينتهي الخروج عند proxy لا يستطيع الوكيل تجاوزه ببيانات اعتماده الخاصة. عمليًا يعني هذا أن بيئة تشغيل الوكيل لا تملك مسارًا إلى الخارج إلا عبر forward proxy أو بوابة خروج، وأن بيانات الاعتماد التي يحملها الوكيل صالحة فقط عند تلك البوابة. إذا استطاع الوكيل الو

بالنظر إلى هذه الطوبولوجيا، تتبع ثلاث خصائص:
- تُكتب السجلات عند الproxy، لا في إطار عمل الوكيل. الproxy يرى الاتصال لأنه هو الاتصال. لا يوجد مسار كود في الوكيل يمكنه تخطي السجل.
- تقيّم السياسة التسلسل والكاردينالية، لا عضوية اسم المضيف فقط. قاعدة تقول "المضيف A مسموح" هي اختبار عضوية. قاعدة تقول "المضيف A مسموح، لكن فقط قبل المضيف B، ولا يزيد أبدًا عن N وجهة متمايزة في نافذة خمس دقائق" هي اختبار تسلسل. الثانية هي ما يلتقط الحركة الجانبية.
- DNS داخل المحيط. الحلّ حدث خروج. الوكيل الذي لا يستطيع فتح اتصال TCP بمضيف يتحكم به المهاجم يمكنه مع ذلك تسريب البيانات عبر استعلام DNS إذا لم يكن الحلّ ممرّرًا عبر proxy ومسجّلًا.
آلية ملموسة تعمل: يحتفظ الproxy بمجموعة وجهات لكل تشغيل في الذاكرة، مفتاحها معرّف التشغيل. عند كل اتصال يتحقق من العضوية، ثم يتحقق من الكاردينالية مقابل عتبة، ثم يتحقق من الانتقال مقابل آلة حالة صغيرة للوجهات السابقة المسموح بها. إذا فشل أي تحقق، يُرفض الاتصال ويُكتب حدث رفض بالسياق الكامل. آلة الحالة صغيرة لأنها لا تحتاج إلى نمذجة كل ما قد يفعله الوكيل؛ بل تحتاج إلى نمذجة الانتقالات القليلة التي قد تدل على العبور.
المقايضات التشغيلية
عتبات الnovelty تحتاج خطوط أساس لكل بيئة وإلا ستنبّه باستمرار. بيئة staging يُعاد فيها نشر الوكلاء يوميًا ستنتج novelty في كل تشغيل تقريبًا إذا حُسب خط الأساس عالميًا. يجب تحديد نطاق خطوط الأساس لكل بيئة، ولكل دور وكيل، ويُفضّل لكل جيل نشر، ويجب إعادة حسابها مع تغيّر النظام. عتبة صحيحة في الإنتاج ستكون ضجيجًا في staging والعكس صحيح. لا يوجد رقم واحد؛ بل يوجد التزام صيانة.
تسجيل الوجهات أرخص من تسجيل الحمولات ويصمد أمام التشفير. سجل الوجهة صغير: اسم، عنوان، منفذ، طابع زمني، نتيجة. لا ينمو مع حجم الرد، ولا يتطلب اعتراض TLS، ويبقى ذا معنى عندما تكون الحمولة مشفّرة من الطرف إلى الطرف. هذه هي الحجة العملية للسجل: يمنحك إشارة أمنية في الجزء الوحيد من حركة المرور الذي يمكنك مراقبته دائمًا، دون كلفة فحص المحتوى وتعرضه القانوني.
الحد الصادق هو أن السجل يخبرك إلى أين ذهب الوكيل لا ما أنجزه هناك. وجهة مصرّح بها تمامًا يمكن أن تكون مع ذلك المكان الذي تغادر منه البيانات. السجل يضيّق البحث؛ لا يحل محل فحص المحتوى، ولا يحل محل الحكم البشري في تقرير أي الوجهات الجديدة مشروعة. ما يفعله هو جعل العبور مرئيًا، وهو الجزء الذي لم يكن فحص المحتوى ليراه قط.
للفرق التي تبني أنظمة وكلاء، التسلسل العملي هو: ضع الخروج خلف proxy لا يستطيع الوكيل تجاوزه، واكتب السجل عند الproxy، واحتفظ بالمرفوضات، وقيّم التسلسل والكاردينالية لا العضوية وحدها. الأدوات صغيرة. وفجوة التغطية التي يسدّها ليست كذلك.
