ما مدى ثقتك بما يحدث بالفعل داخل خط أنابيب CI/CD الخاص بك؟ العناصر التي يجب عليك تأمينها، وكيف

جميع المشاركات

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

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

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

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

إتقان فن CI/CD: العناصر الأساسية التي لا يمكنك تجاهلها

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

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

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

إحدى الطرق لتجنب معدات الوقاية الشخصية هي التحقق من أن ملف تعليمات خط الأنابيب لم يتم تعديله. يمكنك التوقيع على الملف بشكل مشفر وإضافة التحقق من التوقيع كخطوة أولى في كل مسار. الأداة التي يمكنك استخدامها للتوقيع والتحقق من الملفات هي فالينت، وهي أداة نشرتها شركة Scribe Security. مهما كانت أداة التحقق من التوقيع التي ستستخدمها في نهاية المطاف، فإن الفكرة هي التأكد من بقاء سلامة ملف التعليمات الخاص بك سليمة.  

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

صورة لتسمم ذاكرة التخزين المؤقت لـ GitHub

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

مفاتيح SSH - مفتاح SSH هو بيانات اعتماد الوصول لبروتوكول شبكة SSH (الغلاف الآمن). يتم استخدام بروتوكول الشبكة هذا للاتصال عن بعد بين الأجهزة الموجودة على شبكة شبكة مفتوحة غير آمنة. يتم استخدام SSH لنقل الملفات عن بعد وإدارة الشبكة والوصول إلى نظام التشغيل عن بعد. باستخدام مفاتيح SSH، على سبيل المثال، يمكنك الاتصال بـ GitHub دون تقديم اسم المستخدم ورمز الوصول الشخصي الخاص بك في كل زيارة. يمكنك أيضًا استخدام مفتاح SSH لتوقيع الالتزامات. يمكنك أيضًا توصيل التطبيقات الأخرى بـ GitHub الخاص بك باستخدام مفاتيح SSH مثل BitBucket GitLab

للحفاظ على أمان الحساب، يجب عليك مراجعة قائمة مفاتيح SSH بانتظام وإلغاء/حذف أي مفاتيح غير صالحة أو تم اختراقها. بالنسبة إلى GitHub، يمكنك العثور على قائمة مفاتيح SSH الخاصة بك في الصفحة التالية:
استخدم إعدادات > مفاتيح SSH و GPG

صورة مفاتيح SSH

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

مصدر SLSA كسجل خط أنابيب غير قابل للتغيير - SLSA يرمز هذا المصطلح إلى مستويات سلسلة التوريد لعناصر البرمجيات، وهو إطار عمل تم تطويره بواسطة Google وشركاء الصناعة الآخرين للمساعدة في تحسين أمان وسلامة سلاسل توريد البرامج.

تحدد SLSA مجموعة من أربعة مستويات، يمثل كل منها مستوى أعلى من الثقة والضمان في سلسلة توريد البرامج. كل مستوى يمثل زيادة متزايدة في متطلبات الأمان. أحد المتطلبات المهمة هو الحاجة إلى مصدر الملف. بالنسبة لإطار SLSA، 

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

إحدى الأدوات التي تسمح لك بإنشاء مصدر SLSA في خط الأنابيب الخاص بك لمجموعة كبيرة ومتنوعة من أنظمة SCM هي فالينت (نعم، نفس الأداة من Scribe - إنها أداة متعددة الاستخدامات للغاية). سيوضح لك الرابط كيفية توصيل Valint بخط أنابيب GitHub الخاص بك لإنشاء مصدر SLSA لكل إنشاء يتم تشغيله على خط الأنابيب هذا. يمكنك لاحقًا الوصول إلى كل ملف مصدر والتحقق منه لمعرفة ما إذا حدث أي شيء غير متوقع أو غير متوقع. إليك مقتطف من ملف المصدر هذا:

صورة مصدر slsa إلى

ملف المصدر هو مجرد ملف JSON ولكن نظرًا لعدم وجود أدوات آلية لقراءة ملفات المصدر (حتى الآن)، فإن مهمة قراءتها وتفسيرها تقع على عاتقك.  

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

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

مرة أخرى، الحل هو التوقيع المشفر مهما كانت القطعة الأثرية النهائية التي ينتجها خط الأنابيب والسماح للمستخدم النهائي بالتحقق من هذا التوقيع.   

منذ أن ذكرت بالفعل فالينت سأقترح استخدام المصدر المفتوح علامة Sigstore. تهدف Cosign إلى تسهيل التوقيع عن طريق إزالة الحاجة إلى البنية التحتية الرئيسية. فهو يسمح للمستخدم باستخدام هويته التي تم التحقق منها عبر الإنترنت (مثل Google أو GitHub أو Microsoft أو AWS) كمفتاح. يمكنك استخدام Cosign للتوقيع والتحقق من الصور مما يجعلها مثالية للتوقيع والتحقق لاحقًا من الصورة النهائية المضمنة لخط الأنابيب.
سواء اخترت استخدام Valint أو Cosign، فإن السماح للمستخدمين بالتحقق من توقيع التشفير على القطعة الأثرية النهائية الخاصة بك للتأكد من أنهم يحصلون على ما كنت تنوي تقديمه بالضبط هي فكرة أنا متأكد من أن معظم المستخدمين النهائيين سيقدرونها. 

أمن خطوط الأنابيب في المستقبل

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

مهما كانت أدوات خطوط الأنابيب أو البنية التحتية التي تستخدمها، تأكد من إبقاء أعينك مفتوحة على احتمال حدوث اختراق. لا تثق أبدًا بشكل أعمى في أي نظام يخبرك بأنه آمن تمامًا.  

وبالنظر إلى التهديد المتزايد المتمثل في سرقة الهوية، والتصيد الاحتيالي، والأشكال الأخرى لتزييف الوصول المشروع، فإننا نشعر أن آلية التحقق من التوقيع هي أداة جيدة ومتعددة الاستخدامات في صندوق أدواتك الرقمية.
سواء كنت بحاجة إلى التوقيع على صورة أو ملف أو مجلد، فإنني أدعوك لإلقاء نظرة فاحصة على Valint من Scribe Security كأداة متكاملة لتلبية هذه الاحتياجات.  

راية

يتم تقديم هذا المحتوى إليك بواسطة Scribe Security، وهي شركة رائدة في مجال توفير حلول أمان سلسلة توريد البرامج الشاملة - حيث توفر أحدث الأمان لعناصر التعليمات البرمجية وعمليات تطوير التعليمات البرمجية وتسليمها عبر سلاسل توريد البرامج. تعرف على المزيد.