تكامل التعليمات البرمجية للنظام الأساسي

يتمثل أحد التحديات الهامة في تشغيل نظام معقد مثل Microsoft Azure في ضمان تشغيل البرامج المعتمدة فقط في النظام. يقدم البرنامج غير المصرح به العديد من المخاطر لأي عمل:

  • المخاطر الأمنية، مثل أدوات الهجوم المخصصة والبرامج الضارة المخصصة وبرامج الجهات الخارجية ذات الثغرات الأمنية المعروفة
  • مخاطر التوافق عندما لا يتم استخدام عملية إدارة التغيير المعتمدة لجلب برامج جديدة
  • مخاطر الجودة من البرامج المطورة خارجياً، والتي قد لا تفي بالمتطلبات التشغيلية للأعمال

في Azure، نواجه نفس التحدي وبتعقيد كبير. لدينا الآلاف من الخوادم التي تقوم بتشغيل البرامج التي تم تطويرها وصيانتها من قبل آلاف المهندسين. وهذا يمثل سطح هجوم كبير لا يمكن إدارته من خلال العمليات التجارية وحدها.

إضافة بوابة تخويل

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

تكامل التعليمات البرمجية كبوابة تخويل

تكامل التعليمات البرمجية هي خدمة على مستوى النواة أصبحت متوفرة بدءًا من Windows Server 2016. يمكن أن تطبق تكامل التعليمات البرمجية نهج تحكم تنفيذ صارمًا كلما تم تحميل برنامج تشغيل أو مكتبة مرتبطة ديناميكيا (DLL) أو تنفيذ ثنائي قابل للتنفيذ أو تشغيل برنامج نصي. توجد أنظمة مماثلة، مثل DM-Verity، لنظام Linux. يتكون نهج تكامل التعليمات البرمجية من مجموعة من مؤشرات التخويل، إما شهادات توقيع التعليمات البرمجية أو تجزئة ملف SHA256، والتي تتطابق مع النواة قبل تحميل أو تنفيذ ثنائي أو برنامج نصي.

تسمح تكامل التعليمات البرمجية لمسؤول النظام بتحديد نهج يخول الثنائيات والبرامج النصية التي تم توقيعها بواسطة شهادات معينة أو تطابق تجزئات SHA256 المحددة فقط. تفرض النواة هذا النهج عن طريق حظر تنفيذ كل ما لا يفي بنهج المجموعة.

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

عملية الإنشاء

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

الأمان أثناء التوزيع

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

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

الاستجابة للحدث

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

الخطوات التالية

تعرف على كيفية قيام Windows 10 باستخدام تكامل التعليمات البرمجية القابل للتكوين.

لمعرفة المزيد حول ما نقوم به لدفع تكامل النظام الأساسي وأمانه، راجع: