من المخطط نقل آلية عزل التعهد إلى Linux

أعلن مؤلف مكتبة Cosmopolitan C القياسية ومنصة Redbean مؤخرًا عن تنفيذ آلية العزل pledge() لنظام Linux.

تتيح لك أداة "pledge"، التي طُوّرت في الأصل من قِبل مشروع OpenBSD ، منع التطبيقات بشكل انتقائي من الوصول إلى استدعاءات النظام غير المستخدمة (عن طريق إنشاء قائمة بيضاء لاستدعاءات النظام الخاصة بالتطبيق ومنع الاستدعاءات الأخرى). وعلى عكس آليات التحكم في الوصول إلى استدعاءات النظام المتوفرة في لينكس، مثل "seccomp"، صُممت "pledge" منذ البداية لتكون سهلة الاستخدام قدر الإمكان.

أظهرت المبادرة غير الناجحة لعزل التطبيقات في بيئة OpenBSD الأساسية باستخدام آلية systrace أن العزل على مستوى مكالمات النظام الفردية معقد للغاية ويستغرق وقتًا طويلاً.

وبدلاً من ذلك، تم اقتراح التعهد، الذي سمح بإنشاء قواعد العزل دون الخوض في التفاصيل والتلاعب بفئات الوصول المعدة مسبقاً.

على سبيل المثال ، الفئات المعروضة هي stdio (الإدخال / الإخراج) ، rpath (قراءة الملفات فقط) ، wpath (كتابة الملفات) ، cpath (إنشاء الملفات) ، tmppath (العمل مع الملفات المؤقتة) ، إنت (شبكة المقابس) ، يونكس (مقابس يونكس) ) ، ونظام أسماء النطاقات (تحليل DNS) ، و getpw (الوصول للقراءة إلى قاعدة بيانات المستخدم) ، و ioctl (استدعاء ioctl) ، و proc (التحكم في العملية) ، و exec (عمليات بدء التشغيل) ، والمعرف (التحكم في الأذونات).

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

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

التعهد هو مثل الفاكهة المحرمة التي نتوق إليها جميعًا عندما يقول رئيسنا إنه يجب علينا استخدام أشياء مثل Linux. لماذا هذا مهم؟ ذلك لأن التعهد () يجعل الأمن مفهومًا في الواقع. لم يكن لدى لينكس أبدًا طبقة من الأمان يمكن لمجرد البشر فهمها.

اتبع مطورو منفذ التعهد لنظام لينكس نهج FreeBSD ، وبدلاً من إجراء تغييرات على الكود، قاموا بإعداد أداة إضافية من موقع pledge.com تتيح لك تطبيق قيود دون تعديل كود تطبيقك. على سبيل المثال، لتشغيل أداة curl مع إمكانية الوصول فقط إلى فئات استدعاء النظام stdio وrpath وinet وthreadstdio، ما عليك سوى تشغيل الأمر التالي: `./pledge.com -p 'stdio rpath inet thread' curl http://example.com`.

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

كان هناك عدد قليل من المطورين في الماضي حاولوا ذلك. لن أذكر أسماء ، لأن معظم هذه المشاريع لم تكتمل أبدًا. عندما يتعلق الأمر بـ SECOMP ، تشرح البرامج التعليمية عبر الإنترنت فقط كيفية إدراج مكالمات النظام في القائمة البيضاء ، لذلك يفقد معظم الأشخاص الاهتمام قبل معرفة كيفية تصفية الحجج. كان للمشاريع التي تقدمت أيضًا بعض الإغفالات مثل السماح بتغيير البتات setuid / setgid / sticky. لذلك ، لا ينبغي استخدام أي من البدائل الحالية. أعتقد أن هذا الجهد يقربنا من الحصول على تعهد () أكثر من أي وقت مضى.

لا يتطلب التنفيذ أي تغييرات في kernel: يتم ترجمة قيود الأداة إلى قواعد SECCOMP BPF ومعالجتها باستخدام آلية عزل مكالمات النظام الأصلي في Linux. على سبيل المثال ، استدعاء الوعد ("stdio rpath" ، 0) سيتحول إلى مرشح BPF

وأخيرًا، إذا كنت مهتمًا بمعرفة المزيد، يمكنك العثور على التفاصيل في الرابط التالي.


أضف كمصدر مفضل في جوجل