يستند تصميم Sandbox2 إلى تكنولوجيات معروفة ومثبتة وإطار عمل للسياسات وعمليتَين هما: Sandbox Executor وSandboxee.
التقنيات المعنية
تتناول الأقسام التالية التكنولوجيات التي تشكّل الطبقة الأساسية في Sandbox2.
مساحات الاسم في Linux
مساحات الاسم في Linux هي محاولة لتوفير محاكاة افتراضية على مستوى نظام التشغيل. على الرغم من أنّ مساحات المستخدمين المتعددة تعمل بشكل مستقل على ما يبدو عن بعضها البعض، إلا أنّها تشترك في نسخة واحدة من النواة. تستخدم Sandbox2 الأنواع التالية من مساحات الأسماء:
- التواصل البيني للعمليات (IPC)
- الشبكة (ما لم يتم إيقافها بشكل صريح من خلال طلب
PolicyBuilder::AllowUnrestrictedNetworking()
) - التحميل (باستخدام طريقة عرض مخصّصة لشجرة نظام الملفات)
- PID
- المستخدم
- UTS
يمكنك الاطّلاع على مزيد من المعلومات حول مساحات أسماء Linux على ويكيبيديا أو على صفحة الدليل ذات الصلة.
التواصل البيني للعمليات (IPC)
تتيح Sandbox2 تبادل بيانات عشوائية بين Sandbox Executor وSandboxee غير الموثوق به. يتيح هذا البروتوكول رسائل النوع والطول والقيمة (TLV)، وتمرير واصفات الملفات، وتبادُل بيانات الاعتماد من خلال الرموز المميزة والمقابض.
Seccomp-BPF
تعتمد Sandbox2 على seccomp-bpf، وهي إضافة إلى "وضع الحوسبة الآمنة" (seccomp) تتيح استخدام قواعد Berkeley Packet Filter (BPF) لفلترة استدعاءات النظام.
seccomp هي إحدى ميزات نواة Linux التي تقصر مكالمات النظام التي يمكن أن يجريها أحد العمليات على exit
وsigreturn
وread
وwrite
فقط. إذا حاولت عملية تنفيذ استدعاء نظام آخر، سيتم إنهاؤها. يتيح ملحق seccomp-bpf
مرونة أكبر من seccomp. بدلاً من السماح بمجموعة ثابتة من استدعاءات النظام،
ينفّذ seccomp-bpf برنامج BPF على بيانات استدعاء النظام، واستنادًا إلى
قيمة الإرجاع الخاصة بالبرنامج، يمكنه تنفيذ استدعاء النظام أو تخطّيه وعرض
قيمة وهمية أو إنهاء العملية أو إنشاء إشارة أو إرسال إشعار إلى أداة التتبُّع.
Ptrace
يوفّر استدعاء نظام ptrace (تتبُّع العمليات) وظيفة تتيح لعملية التتبُّع مراقبة تنفيذ عملية التتبُّع والتحكّم فيه. يتمتع برنامج التتبُّع بالتحكّم الكامل في البرنامج الذي يتم تتبُّعه بعد ربطهما. يمكنك الاطّلاع على مزيد من المعلومات حول ptrace على ويكيبيديا أو في صفحة الدليل المرتبطة بها.
سياسة وضع الحماية
سياسة Sandbox هي الجزء الأكثر أهمية في بيئة الاختبار المعزولة، لأنّها تحدّد الإجراءات التي يمكن لـ Sandboxee تنفيذها وتلك التي لا يمكنه تنفيذها. تتألف سياسة وضع الحماية من جزأين:
- سياسة استدعاء النظام
- إعداد مساحة الاسم
سياسة استدعاء النظام التلقائية
تحظر السياسة التلقائية استدعاءات النظام التي تكون خطيرة دائمًا، كما أنّها تحظى بالأولوية على السياسة الموسّعة التي يقدّمها المستخدم.
Extended Syscall Policy
يمكن إنشاء سياسة syscall الموسّعة باستخدام فئة
PolicyBuilder
الخاصة بنا. يحدّد هذا الصف عددًا من قواعد التسهيل (مثل AllowStaticStartup
وAllowDynamicStartup
وAllowOpen
) التي يمكن استخدامها لتحسين إمكانية قراءة سياستك.
إذا أردت فرض قيود إضافية على استدعاءات النظام أو طلب قواعد أكثر تعقيدًا، يمكنك تحديد وحدات ماكرو BPF الأولية باستخدام AddPolicyOnSyscall
وAddPolicyOnSyscalls
. يستفيد مثال crc4 من هذه الآلية لتقييد وسيطات استدعاءات النظام read
وwrite
وclose
.
بشكل عام، كلما كانت "سياسة وضع الحماية" أكثر صرامة، كان ذلك أفضل لأنّ السياسة ستحدّ من استغلال أي ثغرة أمنية في الرمز. إذا كان بإمكانك تحديد عمليات استدعاء النظام والوسيطات المطلوبة لتشغيل البرنامج بشكل طبيعي، سيتم أيضًا فرض القيود نفسها على أي مهاجم يستغل ثغرة أمنية في تنفيذ الرمز البرمجي.
يمكن أن تمنع "سياسة وضع الحماية" الصارمة جدًا جميع طلبات النظام باستثناء عمليات القراءة والكتابة على واصفات ملفات الإدخال والإخراج العادية. داخل وضع الحماية هذا، يمكن للبرنامج تلقّي الإدخال ومعالجته وعرض الناتج. ومع ذلك، إذا حاولت العملية إجراء أي استدعاء نظام آخر، سيتم إنهاؤها بسبب انتهاك السياسة. وبالتالي، إذا تم اختراق العملية (تنفيذ الرمز البرمجي من قِبل مستخدم ضار)، لن تتمكّن من فعل أي شيء أكثر ضررًا من إنتاج ناتج سيئ (الذي لا يزال على المنفّذ وغيره التعامل معه بشكل صحيح).
إعداد مساحة الاسم
يُستخدَم عنصر PolicyBuilder أيضًا لإعداد العرض الفردي لنظام الملفات في Sandboxee. يمكن ربط الملفات الفردية (AddFile
/ AddFileAt
) والأدلة الكاملة (AddDirectory
/ AddDirectoryAt
) ومساحة التخزين المؤقتة (AddTmpfs
) ببيئة Sandboxee. بالإضافة إلى ذلك، يمكن استخدام AddLibrariesForBinary
لربط جميع المكتبات المطلوبة تلقائيًا بالتنفيذية المرتبطة ديناميكيًا المحدّدة.
علامات سطر الأوامر
يمكن إيقاف أي سياسة من سياسات Sandbox2 من خلال تحديد إحدى علامات سطر الأوامر التالية. هذه العلامات مخصّصة لأغراض الاختبار (مثل تحسين "سياسة استدعاءات النظام الموسّعة").
--sandbox2_danger_danger_permit_all
--sandbox2_danger_danger_permit_all_and_log
Sandbox Executor
Sandbox Executor هي عملية لا يتم وضعها في وضع الحماية. وهي عملية تتبُّع ptrace التي يتم ربطها بـ Sandboxee (عملية تتبُّع ptrace). يُعدّ برنامج Sandbox Executor أيضًا مثيلاً من Monitor ويشغّله، وهو يتتبّع Sandboxee ويقدّم معلومات الحالة.
تتيح Sandbox2 ثلاثة أوضاع تنفيذ: وضع "التنفيذ المستقل" ووضع "خادم Forkserver في Sandbox2" ووضع "خادم Forkserver المخصّص". في حال استخدام forkserver، يتم إنشاء Sandboxee كعملية فرعية من Sandbox Executor. يمكنك الاطّلاع على شرح مفصّل لهذه الأوضاع هنا.
Sandboxee
Sandboxee هي العملية التي يتم تنفيذها في البيئة المحصورة التي تم تحديدها من خلال سياسة وضع الحماية. يرسل Sandbox Executor السياسة إلى Sandboxee عبر IPC. بعد ذلك، يطبّق Sandboxee السياسة. سيؤدي أي انتهاك للسياسة إلى إنهاء العملية، ما لم يتم ضبط الإعدادات على خلاف ذلك (راجِع سياسة وضع الحماية).