منع الهروب من البيئة المعزولة
احظر الوصول إلى مكتبة debug وإساءة استخدام rawget/rawset وتسرّب Upvalues
منع الهروب من البيئة المعزولة درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
مشكلة الهروب
حتى مع استخدام بيئة قائمة على القائمة البيضاء، قد يجد المهاجمون المبدعون طرقًا للوصول إلى البيئة العامة الحقيقية. يغطي هذا الدرس مسارات الهروب المعروفة وكيفية إغلاقها.
استغلال metatable السلاسل النصية
تمتلك السلاسل النصية في Lua metatable مشتركة تكشف مكتبة السلاسل النصية. ويمكن للشيفرة المعزولة استخدام سلسلة نصية للحصول على مرجع إلى string.rep، ومن ثم الوصول إلى مكتبات أخرى.
-- Escape vector (before patching):
local s = "hello"
local getenv = s.rep -- reaches string library
-- Fix: use setmetatable on all sandboxed strings (not practical)
-- Better fix: override debug.getmetatable in the sandboxالحظر عبر rawget/rawset
إذا كان rawget موجودًا في بيئة العزل، فيمكن للشيفرة استخدامه لتجاوز قيود __index والقراءة مباشرةً من الجداول الحقيقية.
-- Fix: exclude rawget, rawset, rawequal, rawlen from the sandbox envالوصول إلى مكتبة debug
يمكن لمكتبة debug قراءة أي upvalue وتعديله، بما في ذلك _ENV. استبعدها تمامًا من بيئة العزل.
جدول package.loaded
إذا كان require أو package متاحًا، يمكن للتعليمات البرمجية المعزولة الوصول إلى الوحدات المحمّلة مسبقًا، بما فيها os وio.
-- Fix: exclude require and package from the sandbox envالكوروتينات والاستئناف
يمكن استخدام كوروتين معزول يستأنفه المضيف لاستخراج الحالة. استخدم coroutine.wrap بحذر، ولا تستأنف الكوروتينات المعزولة بامتيازات مرتفعة.
استكشاف Upvalues
من دون مكتبة debug، لا تستطيع التعليمات البرمجية المعزولة استكشاف upvalues. ولكن إذا أُدرجت debug.getupvalue عن طريق الخطأ، فيمكن استخدامها للوصول إلى _G.
__newindex في safeEnv
أضف __newindex إلى metatable الخاصة ببيئة العزل لمنع التعليمات البرمجية المعزولة من إنشاء متغيرات عامة جديدة تحجب المتغيرات الآمنة.
setmetatable(safeEnv, {
__newindex = function(_, k, v)
-- allow only whitelisted keys or reject
error("Global assignment not allowed: " .. k)
end
})وكيل لمكتبة math
بدلًا من تمرير جدول math الحقيقي، الذي يشترك في metatable مع المكتبة القياسية، أنشئ نسخة سطحية تحتوي على الدوال المطلوبة فقط.
اختبار آلي لمحاولات الخروج
حافظ على مجموعة اختبارات fuzzing تجرّب أنماط الخروج المعروفة ضد بيئة العزل. شغّلها عند كل تغيير في تعليمات برمجية العزل.
الدفاع متعدد الطبقات
لا توجد بيئة عزل مثالية. اجمع بين وسائل الدفاع: بيئة مقيّدة + حدود للتعليمات + حدود للذاكرة + عزل للعمليات على مستوى نظام التشغيل، مثل عملية فرعية أو حاوية منفصلة.
العزل على مستوى نظام التشغيل
لتحقيق أقصى قدر من الأمان، شغّل Lua في عملية فرعية مع قيود على مستوى نظام التشغيل: seccomp في Linux، أو App Sandbox في macOS، أو Docker مع نظام ملفات للقراءة فقط.
سؤال حول الخروج من بيئة العزل
لماذا يجب استبعاد rawget من بيئة العزل؟
مراجعة: منع الخروج من بيئة العزل
استبعد debug وrawget/rawset وpackage وrequire وload من بيئة العزل. احمِ بيئة العزل باستخدام __newindex. انسخ جداول المكتبات بدلًا من الإشارة إلى الجداول الأصلية. أضف عزلًا على مستوى نظام التشغيل لتحقيق أقصى قدر من الأمان.
الأسئلة الشائعة
هل درس «منع الهروب من البيئة المعزولة» مجاني؟
نعم — نص درس «منع الهروب من البيئة المعزولة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «منع الهروب من البيئة المعزولة»؟
احظر الوصول إلى مكتبة debug وإساءة استخدام rawget/rawset وتسرّب Upvalues تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «منع الهروب من البيئة المعزولة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- نموذج _ENV في Lua 5.2 وما بعده
- إنشاء بيئة معزولة مقيّدة
- منع الهروب من البيئة المعزولة
- حدود الموارد وأدوات القياس