الشيء الذي تتحقق منه ليس هو الشيء الذي يتم تشغيله
لقد لفتت أداة جديدة الأنظار مؤخرًا. فهي تعمل كواجهة أمام أوامر مثل curl وتعرض لك النص البرمجي (script) قبل تشغيله، كما تسلط الضوء على الأجزاء الخطيرة. هذه الأداة مفيدة، لكنها تغفل عن المشكلة الجوهرية.
المشكلة ليست في ما إذا كانت البايتات (bytes) تبدو خبيثة، بل تكمن المشكلة في أن رابط URL يمكنه تقديم نص برمجي معين اليوم، ونص آخر مختلف غدًا. فعملية التحقق الخاصة بك تنطبق فقط على لحظة زمنية واحدة.
يطلق خبراء الأنظمة على هذه الظاهرة اسم TOCTOU، وهي اختصار لـ "time-of-check to time-of-use" (وقت التحقق مقابل وقت الاستخدام). فأنت تتحقق من ملف ما، ثم يقوم شخص ما باستبداله قبل أن تفتحه. كان تحققك صحيحًا، لكنه كان صحيحًا بشأن شيء لم يعد موجودًا.
تزيد وكلاء الذكاء الاصطناعي (AI agents) من هذا الخطر بشكل كبير، حيث يقوم الوكلاء بإجراء عمليات التحقق باستمرار.
- يقوم الوكيل بإرسال طلب (ping) إلى رابط URL ويعتبر الاستجابة الناجحة علامة على الأمان.
- يقرأ الوكيل ملفًا شخصيًا ويعتبر التصريح حقيقة واقعة.
- يرى الوكيل توقيعًا ويفترض أن البايتات الدقيقة التي أوشك على تشغيلها هي نفسها التي تم توقيعها.
كل عملية تحقق تربط الثقة بلحظة زمنية أو قناة معينة. ثم يتصرف الوكيل بناءً على شيء لاحق (downstream) لم تغطّه عملية التحقق أبدًا.
على سبيل المثال، قد يقوم الوكيل بالتحقق من ملف تعريف الأداة (tool manifest) ويخزن النتيجة مؤقتًا. إذا تغيرت نقطة النهاية (endpoint) قبل أن يستدعي الوكيل الأداة، فسيقوم الوكيل بتشغيل الإصدار الخاطئ. لقد نجحت عملية التحقق، لكنها نجحت لملف تعريف لم يعد الوكيل يستخدمه.
محاولة إصلاح ذلك عبر زيادة شدة الفحص لا تجدي نفعًا؛ فالمزيد من القواعد لا يؤدي إلا إلى تضييق النافذة الزمنية، لكنه لا يغلقها. فلا يزال بإمكان المنتج تقديم أثر (artifact) مختلف في أجزاء من الثانية بين عملية الفحص وعملية التنفيذ.
لإصلاح ذلك، توقف عن التحقق من اللحظة. ابدأ بالتحقق من الأثر (artifact).
اربط قراراتك بكائن غير قابل للتغيير (immutable object) بدلاً من عملية جلب (fetch).
- لا توافق على رابط URL.
- وافق على هاش (hash) محتوى محدد.
- والأفضل من ذلك، وافق على هاش وقّعه مفتاح موثوق.
هذا يغير السؤال من "هل هذا النص مخيف؟" إلى "هل هذا هو الأثر الدقيق الذي ضمنه المفتاح؟". إذا لم يتطابق الهاش، فإنك ترفضه. لا مجال للنقاش هنا.
يجعل هذا النهج عملية التحقق قابلة للنقل أيضًا؛ حيث يمكن لطرف ثالث أخذ نفس الهاش والتوقيع للتحقق من النتيجة بنفسه. هذه خاصية للكائن، وليست خاصية مرتبطة بتوقيت عملك.
استخدم هذين السؤالين لاختبار أي عملية تحقق:
- هل عملية التحقق مرتبطة بالأثر (artifact) المستخدم بدقة، أم بلحظة ووعد؟
- هل يمكن لشخص غريب إعادة تشغيل الفحص والوصول إلى نفس النتيجة؟
إذا كانت الإجابة على السؤال الأول هي "لحظة"، فإن عملية التحقق لها تاريخ انتهاء صلاحية. وإذا كانت الإجابة على السؤال الثاني هي "لا"، فأنت لا تملك توثيقاً، بل تملك مجرد شهادة.
معظم عمليات التحقق الحالية من الوكلاء (agents) هي مجرد شهادة. عبارات مثل "نجحت عملية المصافحة (handshake)" أو "كان الفحص نظيفاً" هي عبارات صحيحة عن لحظة معينة، لكنها لا ترتبط بالبايتات (bytes) التي تعمل فعلياً.
يعمل الوكلاء آلاف المرات دون إشراف بشري. إذا لم تربط الثقة بالأثار (artifacts)، فإن السلسلة بأكملها سترث أضعف وأقدم عملية فحص.
لست بحاجة إلى تقنية جديدة لإصلاح ذلك. فعنونة المحتوى (Content addressing) والتوقيعات الرقمية (digital signatures) موجودة منذ عقود. كل ما تحتاجه هو توجيهها نحو الشيء الصحيح: البايتات الدقيقة التي يتم تنفيذها، وليس الطلب الذي جلبها.
قبل أن تثق في عملية فحص، اكتشف ما الذي ترتبط به. إذا كانت ترتبط بلحظة، فقد انتهت صلاحيتها بالفعل.
المصدر: https://dev.to/anp2network/the-thing-you-verified-is-not-the-thing-that-runs-hnl
مجتمع تعليمي اختياري: https://t.me/GyaanSetuAi