شرح Sandbox2

يعتمد تصميم Sandbox2 على التكنولوجيات المعروفة والراسخة، وإطار عمل السياسة، والعمليتَين: مُنفّذ وضع الحماية وSandboxee.

التكنولوجيات ذات الصلة

تتناول الأقسام التالية التقنيات التي تنشئ الطبقة الأساسية في Sandbox2.

مساحات اسم نظام التشغيل Linux

مساحات الاسم في Linux هي محاولة لتوفير محاكاة افتراضية على مستوى نظام التشغيل. بينما يتم تشغيل مساحات مستخدمين متعددة على ما يبدو بشكل مستقل عن بعضها البعض، إلا أنها تشترك في مثيل نواة واحد. يستخدم Sandbox2 الأنواع التالية من مساحات الاسم:

  • التواصل البيني للعمليات (IPC)
  • الشبكة (ما لم يتم إيقافها صراحةً من خلال الاتصال بـ PolicyBuilder::AllowUnrestrictedNetworking())
  • تحميل (باستخدام عرض مخصص لشجرة نظام الملفات)
  • معرِّف PID
  • المستخدم (ما لم يتم إيقافه صراحةً من خلال الاتصال بـ PolicyBuilder::AllowUnsafeKeepCapabilities())
  • UTS

اقرأ المزيد عن مساحات الاسم في Linux على ويكيبيديا أو في صفحة الدليل ذات الصلة.

التواصل البيني للعمليات (IPC)

يسمح Sandbox2 بتبادل البيانات العشوائية بين تنفيذ Sandbox التنفيذية وSandboxee غير الموثوق بها. وهو يتيح استخدام رسائل "Type-Length-Value" (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 على ويكيبيديا أو على صفحة الرجل ذات الصلة.

سياسة وضع الحماية

تعتبر سياسة وضع الحماية الجزء الأكثر أهمية في وضع الحماية، لأنها تحدد الإجراءات التي يمكن لمستخدم الحماية تنفيذها أو لا يمكنه تنفيذها. هناك جزءان لسياسة وضع الحماية:

  • سياسة Syscall
  • إعداد مساحة الاسم

السياسة التلقائية لطلب النظام

تحظر السياسة الافتراضية مكالمات النظم التي تكون دومًا خطيرة ولها الأولوية على السياسة الموسعة التي يوفرها المستخدم.

سياسة الاتصال النظامي الموسَّع

يمكن إنشاء سياسة مكالمات النظام الموسعة باستخدام فئة PolicyBuilder. تحدِّد هذه الفئة عددًا من القواعد الملائمة (مثل AllowStaticStartup وAllowDynamicStartup وAllowOpen) التي يمكن استخدامها لتحسين سهولة قراءة سياستك.

إذا كنت تريد تقييد استدعاءات النظام أو اشتراط قواعد أكثر تعقيدًا، يمكنك تحديد وحدات ماكرو BPF الأولية باستخدام AddPolicyOnSyscall وAddPolicyOnSyscalls. يستخدم مثال crc4 هذه الآلية لحظر الوسيطات لاستدعاءات النظام read وwrite وclose.

بشكل عام، كلما زادت صرامة سياسة وضع الحماية، كان ذلك أفضل لأنّ السياسة ستحصر استغلال أي ثغرة أمنية واردة في الرمز البرمجي. إذا كنت قادرًا على التحديد الدقيق لاستدعاءات النظام والوسيطات المطلوبة للتشغيل العادي للبرنامج، فسيتم أيضًا تقييد أي مهاجم يستغل ثغرة في تنفيذ التعليمات البرمجية إلى الحدود نفسها.

يمكن لسياسة وضع الحماية المحدودة للغاية منع جميع مكالمات النظام باستثناء عمليات القراءة والكتابة باستخدام أدوات وصف ملفات الإدخال والإخراج القياسية. وداخل وضع الحماية هذا، يمكن لبرنامج أن يأخذ مدخلات ويعالجها ويعيد المخرجات. ومع ذلك، إذا كانت العملية ستحاول إجراء أي استدعاء نظام آخر، سيتم إنهاؤها بسبب انتهاك إحدى السياسات. وبالتالي، إذا تعرضت هذه العملية للخطر (تنفيذ رمز من مستخدم ضار)، لا يمكن أن تفعل أي شيء أكثر شناعة من إنتاج مخرجات سيئة (يظل على مسؤول التنفيذ والجهات الأخرى التعامل معها بشكل صحيح).

إعداد مساحة الاسم

ويتم أيضًا استخدام كائن PolicyBuilder لإعداد عرض فردي لنظام الملفات في Sandboxee. يمكن ربط الملفات الفردية (AddFile / AddFileAt) والأدلة الكاملة (AddDirectory / AddDirectoryAt) بالإضافة إلى مساحة التخزين المؤقتة (AddTmpfs) في بيئة Sandboxee. بالإضافة إلى ذلك، يمكن استخدام AddLibrariesForBinary لربط جميع المكتبات اللازمة تلقائيًا من خلال الملف التنفيذي المحدد والمرتبط ديناميكيًا.

علامات سطر الأوامر

يمكن إيقاف أي سياسة من سياسات Sandbox2 عن طريق تحديد إحدى علامات سطر الأوامر التالية. هذه العلامات معدّة لأغراض الاختبار (مثلاً، أثناء تحسين سياسة Extended Syscall).

  • --sandbox2_danger_danger_permit_all
  • --sandbox2_danger_danger_permit_all_and_log

أداة تنفيذ وضع الحماية

منفذ وضع الحماية عبارة عن عملية لا تستخدم نفسها في وضع الحماية. إنها عملية تتبُّع مسارات التتبُّع التي ترتبط بـ Sandboxee. يعمل تنفيذ وضع الحماية أيضًا على إعداد وتشغيل مثيل Monitor الذي يتتبّع مستخدم Sandboxee وتوفير معلومات الحالة.

يتيح "وضع الحماية 2" ثلاثة أوضاع تنفيذ: الوضع المستقل، وخادم Sandbox2 Fork، وخادم الشوكة المخصّص. إذا كنت تستخدم خادم شوكية، يتم إنشاء Sandboxee كعملية فرعية من Sandbox Executor. ويتم شرح هذه الأوضاع بالتفصيل هنا.

لاعب الحماية

وضع الحماية هي العملية التي يتم تشغيلها في البيئة المحدودة ووضع الحماية التي تم تحديدها من خلال سياسة وضع الحماية. يُرسِل مسؤول تنفيذ وضع الحماية السياسة إلى Sandboxee من خلال IPC. وبعد ذلك، يطبِّق المستخدم Sandbox السياسة. سيؤدي أي انتهاك للسياسة إلى إنهاء العملية، ما لم يتم ضبط خلاف ذلك (يُرجى الاطّلاع على سياسة وضع الحماية).