شرح واجهة برمجة تطبيقات وضع الحماية

تستند واجهة برمجة التطبيقات المعزولة (SAPI) إلى مشروع Sandbox2 المعروف. توضّح هذه الصفحة بنية تصميم SAPI والمفاهيم الأساسية.

نظرة عامة

تم تصميم SAPI لتزويد المطوّرين بأدوات لإعداد مكتبات C/C++ للتشغيل في بيئة معزولة، بالإضافة إلى واجهات برمجة التطبيقات اللازمة للتواصل مع الإصدار المعزول من مكتبات C/C++.

يوضّح هذا الرسم التخطيطي بنية مكتبة C/C++ في وضع الحماية ضمن SAPI:

مخطّط SAPI

توفّر SAPI أيضًا عناصر أساسية لمزامنة الذاكرة يدويًا وتلقائيًا (استنادًا إلى سمات المؤشر المخصّص) (المصفوفات والبِنى) بين مكتبات SAPI ورمز المضيف.

أخيرًا، يتيح واجهة برمجة تطبيقات عالية المستوى خاصة بالمعاملات مراقبة مكتبات SAPI وإعادة تشغيلها في حال تعذُّر عملها (على سبيل المثال، بسبب انتهاكات أمنية أو أعطال أو استنفاد الموارد).

Sandbox2

تم تطوير مشروع Sandbox2 المفتوح المصدر وصيانته من قِبل مهندسي أمان Google، وهو يمثّل تكنولوجيا الحماية الأساسية التي تستخدمها SAPI. يحتوي Sandbox2 على ثلاثة مكوّنات رئيسية، وهي سياسة Sandbox والمنفّذ وSandboxee.

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

تحدّد سياسة وضع الحماية بيئة التنفيذ المحظورة لـ "المكتبة المحميّة". ويتم تحقيق ذلك من خلال توضيح عمليات استدعاء النظام التي يمكن تنفيذها. تستخدم SAPI الآلية نفسها المستخدَمة في Sandbox2. لمزيد من المعلومات حول كيفية تصميم سياسة وضع الحماية وتحديدها، يُرجى الاطّلاع على قسم سياسة وضع الحماية وصفحة البدء في Sandbox2.

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

المكتبة المحمية

هذه هي مكتبة C/C++ التي تعمل في وضع الحماية وسيتم تنفيذها في بيئة وضع الحماية المقيد التي توفّرها Sandbox2. في النهاية، تعرض "المكتبة المعزولة" الوظائف المطلوبة التي يمكن أن يستهلكها رمز التطبيق المضيف.

تم إنشاء "المكتبة المحصورة في بيئة آمنة" باستخدام قاعدة الإنشاء sapi_library، والتي يمكنك فيها تحديد سياسة مخصّصة للبيئة الآمنة تحدّد بيئة التنفيذ المحظورة. استنادًا إلى المكتبة، قد تحتاج إلى كتابة رمز تغليف أو رمز تجريبي (راجِع libcurl)، ولكن ليس من المتوقّع أن تغيّر الرمز المصدر لمكتبة C/C++ أثناء إعداد إصدار SAPI.

كائن SAPI وRPC Stub

كائن SAPI هو كائن C++ يعرض واجهة برمجة التطبيقات الخاصة بـ "المكتبة المحصورة". تعيد توجيه الطلبات من رمز المضيف إلى رمز RPC، والذي يكون مضمّنًا في مكتبة SAPI مع المكتبة المحصورة في بيئة آمنة.

يتم إنشاء هذين العنصرَين تلقائيًا بواسطة نظام الإنشاء باستخدام قاعدة الإنشاء sapi_library(). تتوافق SAPI مع نظامَي إنشاء، هما Bazel من Google وCMake.

رمز المضيف

رمز المضيف هو ما ينفّذ المنطق الذي توفّره مكتبة SAPI. وهي التي تستهلك الإصدار غير المحمي من مكتبة C/C++. وبالتالي، يستدعي رمز المضيف الدوال التي تم تصديرها من مكتبة SAPI، مع تمرير البيانات إلى البيئة المعزولة وتلقّيها منها.

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

المفاهيم

قواعد إنشاء Bazel

يوفّر مشروع SAPI قاعدتَي إنشاء Bazel لتوفير بيئة معزولة لمكتبة C/C++:

  • sapi_library(): تنشئ جميع النواتج اللازمة لوضع مكتبة C/C++ في وضع الحماية كـ Sandboxee في Sandbox2. يمكن استخدام مخرجات عملية الإنشاء كعنصر تابع لقاعدة cc_binary() المستخدَمة لإنشاء الرمز الثنائي لرمز المضيف.
  • sapi_interface(): لإنشاء العنوان تلقائيًا الذي يمكن تضمينه في الرمز الثنائي لرمز المضيف.

للحصول على شرح أكثر تفصيلاً حول "قواعد الإنشاء"، يُرجى الاطّلاع على قواعد الإنشاء.

المتغيّرات

توفّر SAPI عددًا من الأنواع الخاصة، تُعرف باسم أنواع SAPI، وننصح باستخدامها في رمز المضيف. السبب الرئيسي وراء الحاجة إلى "أنواع واجهة برمجة التطبيقات الآمنة" هو عملية عزل الذاكرة بين "الرمز المضيف" و"المكتبة المحصورة في بيئة آمنة".

للحصول على شرح أكثر تفصيلاً حول هذا الموضوع ونظرة عامة على بعض أنواع SAPI الشائعة الاستخدام، يمكنك الاطّلاع على المتغيّرات.

المعاملات

كما هو موضّح أعلاه، يتم تمرير أي طلب لواجهة برمجة التطبيقات إلى "مكتبة تعمل في بيئة محصورة" عبر طبقة RPC. لتتمكّن من التعامل مع أي عطل في هذه الطبقة، عليك تنفيذ عملية معالجة الأخطاء المناسبة. يوفّر وحدة SAPI Transaction الآلية اللازمة للتأكّد من إكمال جميع عمليات طلب إحدى "المكتبات المحمية" بدون أي مشاكل على مستوى RPC، أو عرض خطأ ذي صلة.

للحصول على شرح أكثر تفصيلاً حول هذا الموضوع، يُرجى الاطّلاع على المعاملات.

الخطوات الأولى

اطّلِع على صفحة بدء الاستخدام لإعداد مشروعك الأول على Sandboxed API.