الملخص
- أفاد تقرير الحادث العام لـ CircleCI بأن طرفًا ثالثًا غير مصرح له استخدم برمجيات خبيثة على حاسوب مهندس في CircleCI لسرقة جلسة SSO مدعومة بـ 2FA صالحة، ثم تصعيد الوصول إلى مجموعة فرعية من أنظمة الإنتاج، وسرقة معلومات العملاء التي تضمنت متغيرات بيئية ورموزًا ومفاتيح.
- من كان لديه السيطرة العملية على حفظ أسرار العملاء، ومقاومة اختراق أجهزة الموظفين، وإلغاء الرموز، وكشف المتغيرات البيئية، وإبلاغ العملاء، وتوجيه التدوير، وإثبات أن حدود الثقة في CI أصبحت أكثر مرونة؟
- تتمثل قضية المساءلة في أن منصات CI تمتلك سلطة تشغيلية على بيانات الاعتماد الخاصة بالنشر حتى عندما ينتمي كود التطبيق الأساسي والحسابات السحابية وأنظمة الأعمال إلى العملاء.
- احتاج المطورون وفرق المنصات والمؤسسات والمستخدمون النهائيون وفرق الأمن والمدققون وأصحاب الموارد السحابية إلى دليل على أن تدوير أسرار العملاء قد اكتمل وأن التعرض المتكرر قد تم تقييده.
- تتناول هذه المقالة تقرير حادث CircleCI والتنبيه الأمني وإرشادات الدعم وتوثيق المنتج باعتبارها السجل العام الأساسي. تُستخدم GitHub و AWS و Google Cloud و CISA و NIST ووثائق تقنية أخرى لتقييم تصميم التحكم، وليس لادعاء أن تلك المنظمات توصلت إلى نتائج محددة بشأن الحادث ضد CircleCI.
لماذا هذه الحالة واردة في ملف المخاطر والمساءلة
ينتمي حادث CircleCI في يناير 2023 إلى ملف المخاطر والمساءلة لأن التكامل المستمر لم يعد مجرد راحة تطويرية هامشية. غالبًا ما تقع أنظمة CI بين كود المصدر وسجلات الحزم والحسابات السحابية وأنظمة النشر وأدوات التوقيع وبيئات الاختبار والبنية التحتية للتجهيز ومسارات الإصدار. قد تحمل المنصة التي تدير عمليات البناء أيضًا بيانات الاعتماد التي تسمح لتلك العمليات بجلب التبعيات الخاصة، ودفع صور الحاويات، ونشر البنية التحتية، ونشر الحزم، وافتراض أدوار سحابية، أو الاتصال بالخدمات الداخلية. عندما يخبر موفر CI كل عميل بتدوير الأسرار، يكون الحادث قد تجاوز من أمان البائع إلى المخاطر التشغيلية للعميل.
يبدأ السجل العام بتنبيه أمان CircleCI على source: circleci.com وتقرير الحادث اللاحق على source: circleci.com. قالت CircleCI إنها نبهت العملاء في 4 يناير 2023، وأوصت العملاء بتدوير أي أسرار مخزنة في CircleCI. ذكر تقرير الحادث أن المهاجم استخدم برمجيات خبيثة منتشرة على حاسوب مهندس في CircleCI، وسرق جلسة SSO صالحة مدعومة بـ 2FA، وانتحل شخصية الموظف، وصعد الوصول إلى مجموعة فرعية من أنظمة الإنتاج، وسرق معلومات العملاء في 22 ديسمبر 2022. تضمنت البيانات التي وصفتها CircleCI متغيرات بيئة العملاء ورموزًا ومفاتيح لأنظمة الطرف الثالث.
تجعل هذه الصياغة قضية المساءلة محددة. لم يكن القلق مجرد أن نقطة نهاية موظف البائع قد تم اختراقها. كان القلق أن مسار الموظف المخترق يمكن أن يصل إلى أسرار العملاء التي كانت مفيدة خارج CircleCI. قد تكون هذه الأسرار تابعة لموفري السحابة وأنظمة التحكم في الإصدار وسجلات الحزم وأهداف النشر والمشغلات ذاتية الاستضافة وواجهات برمجة التطبيقات ومخازن البيانات أو أنظمة الأعمال الداخلية. يمكن لـ CircleCI إلغاء بعض الرموز الصادرة عن المنصة وتدوير بعض عمليات التكامل مع الشركاء، لكنها لم تستطع تدوير كل بيانات اعتماد السحابة لكل عميل وأسرار التطبيقات ومفاتيح SSH ومفاتيح النشر ورموز السجل ومفاتيح API الخاصة بالخدمة.
مما اضطر العملاء إلى القيام بتمرين تصحيح موزع كبير.
توضح الحالة أيضًا اقتصاديات أدوات المطورين. يتم اعتماد منتجات CI لأنها تقلل تكلفة التنسيق وتوحيد سير عمل البناء وتسمح للفرق بالشحن بشكل أسرع. نفس المنطق الاقتصادي يركز حفظ الأسرار. بدلاً من أن يقوم كل فريق ببناء نظام نشر معزول، تضع الفرق بيانات الاعتماد داخل مستوى تحكم CI مشترك وتثق بالموفر لحقن تلك البيانات في اللحظة المناسبة. هذا فعال حتى يفشل نموذج الوصول الداخلي للموفر. ثم تصبح الكفاءة دائرة انفجار مشتركة: يجب على العديد من العملاء مقاطعة العمل الهندسي للعثور على الأسرار المخزنة في سير عمل CI وتدويرها والتحقق من صحتها.
تحليل المساءلة الضعيف سيلقي باللوم على حاسوب مصاب لأحد الموظفين ويتوقف عند هذا الحد. رفض تقرير CircleCI الخاص هذا الإطار المحدود، قائلاً إن الحادث الأمني هو فشل نظامي وأن مسؤولية المنظمة هي بناء ضمانات عبر نواقل الهجوم. هذا المبدأ محوري. المهاجم هو المسؤول عن الاختراق. تحكمت CircleCI في ضمانات نقطة نهاية الموظف وتصميم الوصول إلى الإنتاج وثقة الجلسة وتخزين أسرار العملاء وإلغاء الرموز والإفصاح عن الحادث وأدوات التصحيح. تحكم العملاء في الأنظمة النهائية التي تم تخزين بيانات اعتمادها في CircleCI. سيطر GitHub و Bitbucket و GitLab و AWS و Google Cloud وموفرو آخرون على أنظمة الرموز والتدقيق المنفصلة. تطلب الحادث التنسيق عبر جميعها.
حول الحادث أسرار العملاء إلى التزام إصلاح مشترك
تقرير حادث CircleCI مباشر بشكل غير معتاد بشأن جانب العميل من التعرض. قال إنه إذا قام العملاء بتخزين أسرار على المنصة خلال الفترة ذات الصلة، فيجب عليهم افتراض أن تلك الأسرار قد تم الوصول إليها واتخاذ خطوات التخفيف الموصى بها. وقال أيضًا إنه يجب على العملاء التحقق من وجود نشاط مشبوه في أنظمتهم بدءًا من 16 ديسمبر 2022 وحتى تاريخ الانتهاء من تدوير الأسرار بعد إفصاح CircleCI في 4 يناير. هذا حد عام قوي: لم تقل CircleCI فقط أن هناك احتمالية للتعرض؛ بل أخبرت العملاء بمعاملة الأسرار المخزنة على أنها مكشوفة لأغراض التصحيح.
الفرق مهم. سر CI ليس مثل كلمة مرور تُستخدم فقط لتسجيل الدخول إلى موفر CI. يمكن أن يكون بيانات اعتماد عاملة لنظام آخر. يمكن أن يحتوي متغير بيئة المشروع على عنوان URL لقاعدة بيانات، أو مفتاح وصول سحابي، أو رمز حزمة خاصة، أو سر توقيع webhook، أو متغير Terraform، أو بيانات اعتماد نشر، أو مفتاح API. يمكن مشاركة متغير سياق عبر العديد من المشاريع. يمكن لرمز المشغل ربط سعة تنفيذ ذاتية الاستضافة بالمنصة. يمكن لرمز OAuth ربط CircleCI بموفري التحكم في الإصدار. يمكن لمفاتيح SSH منح الوصول إلى المستودع أو الخادم. عندما تتعرض هذه الأسرار، يتم توزيع المخاطر النهائية عبر جميع الأنظمة التي قبلتها.
يساعد توثيق CircleCI الخاص في شرح السبب. يصف دليل متغيرات البيئة على source: circleci.com متغيرات البيئة كطريقة لتكوين المهام وحفظ الأسرار والمفاتيح الخاصة والسياقات. يصف توثيق السياقات على source: circleci.com متغيرات بيئة على مستوى المؤسسة يمكن حقنها في وقت التشغيل في المهام. تسرد مقالة الدعم لحادث 4 يناير على source: support.circleci.com فئات التدوير العملية: رموز OAuth، ورموز API للمشروع، ومتغيرات بيئة المشروع، ومتغيرات السياق، ورموز API للمستخدم، ومفاتيح SSH للمشروع، ورموز المشغل. توضح هذه القائمة الهدف الحقيقي للحوكمة. لم يكن على العميل أن يسأل عما إذا كانت كلمة مرور واحدة قد تعرضت؛ كان عليه جرد رسم بياني لثقة CI.
كان للرسم البياني للثقة طبقات ملكية متعددة. يمكن لـ CircleCI إلغاء رموز API للمشروع والشخصية التي تم إنشاؤها قبل قطع محدد. يمكنها العمل مع GitHub و Atlassian لتدوير رموز OAuth نيابة عن العملاء. يمكنها نشر إرشادات وأدوات لتحديد الأسرار المخزنة. ولكن كان لا بد من تدوير مفتاح وصول AWS الخاص بالعميل، أو كلمة مرور قاعدة البيانات، أو مفتاح التوقيع، أو رمز Kubernetes، أو مفتاح API SaaS تابع لجهة خارجية في النظام الذي يكرم هذا المفتاح بالفعل. لم تستطع CircleCI رؤية جميع الاستخدامات النهائية، ولم يستطع العملاء رؤية جميع الأدلة الجنائية الداخلية لـ CircleCI. لذلك كان الإصلاح مشتركًا: كان على CircleCI الإفصاح بسرعة كافية وتقديم تفاصيل كافية؛
كان على العملاء القيام بالتدوير ومراجعة السجلات الخاصة بهم.
لهذا السبب لا يمكن اختزال القضية إلى اختراق خاص للبائع. قال تقرير حادث CircleCI إن أقل من خمسة عملاء أبلغوا CircleCI عن وصول غير مصرح به إلى أنظمة الطرف الثالث نتيجة للحادث في وقت النشر. هذا حد مهم ولا ينبغي تضخيمه إلى ادعاءات غير مدعومة بأن جميع أنظمة العملاء قد تم اختراقها. في الوقت نفسه، قالت CircleCI أيضًا إنها لا تستطيع معرفة ما إذا كانت المفاتيح والرموز المسربة قد استخدمت ضد أنظمة الطرف الثالث لكل عميل. هذا عدم اليقين هو بالضبط سبب تحول تدوير الأسرار إلى اختبار المساءلة.
جلسة SSO مدعومة بـ 2FA مسروقة غيرت درس نقطة النهاية والهوية
ركزت الرواية العامة لـ CircleCI على البرمجيات الخبيثة، وليس على اختراق كلمة مرور بسيط. قالت الشركة إن المهاجم سرق جلسة SSO صالحة مدعومة بـ 2FA من حاسوب مهندس. هذا التمييز مهم لأنه يوضح لماذا يمكن أن تكون نصيحة "استخدم MFA" الكلاسيكية غير كاملة. يمكن للنظام أن يتطلب MFA عند تسجيل الدخول وما زال يفشل إذا تمت سرقة ملف تعريف ارتباط الجلسة أو رمز نقطة النهاية أو حالة المتصفح بعد المصادقة. بمجرد أن يحصل المهاجم على جلسة صالحة، ينتقل سؤال التحكم إلى حالة الجهاز، وربط الجلسة، ورفع الامتياز، وكشف الحالات الشاذة، وتجزئة الوصول إلى الإنتاج، ومدى سرعة استجابة الإجراءات غير العادية.
قالت CircleCI إن الموظف المستهدف كان لديه صلاحيات لإنشاء رموز وصول إلى الإنتاج كجزء من واجباته العادية. لا ينبغي قراءة هذه الحقيقة على أنها دليل على أن الموظف تصرف بإهمال. يجب قراءتها كدليل على أن الوصول إلى الإنتاج كان ضروريًا من الناحية التشغيلية لبعض وظائف الدعم أو الهندسة، وأن خطر سرقة الجلسة يجب أن يصمم حول العمل الحقيقي. لا يمكن لموفر CI حديث أن يفترض أن كل حساب موظف غير ضار بعد تسجيل الدخول. يحتاج إلى تقييد ما يمكن أن تفعله الجلسة المسروقة دون دليل جديد، أو مصادقة مرتبطة بالأجهزة، أو موافقة في الوقت المناسب، أو مسارات متميزة ذات امتيازات، ومراقبة السلوك غير المتسق مع الجهاز والدور.
وصف تقرير الحادث العديد من إجراءات الاستجابة التي تتوافق مع هذه الضوابط. أوقفت CircleCI وصول الموظف المخترق، وقيدت الوصول إلى الإنتاج لجميع الموظفين تقريبًا، ودورت المضيفات الإنتاجية التي يحتمل أن تكون مكشوفة، وألغت رموز API للمشروع والشخصية، وعملت مع الشركاء على تدوير رمز OAuth، وأضافت كشفًا وحظرًا لسلوك البرمجيات الخبيثة من خلال أدوات MDM ومكافحة الفيروسات، وأضافت مصادقة إضافية للموظفين الذين احتفظوا بالوصول إلى الإنتاج، ونفذت مراقبة وتنبيهًا لأنماط السلوك المحددة. تدعم هذه الخطوات ادعاء الشركة بأن الناقل المباشر قد تم إغلاقه، لكنها تظهر أيضًا عدد الطبقات التي تورطت في جلسة واحدة مسروقة.
يعزز بيئة المعايير الأوسع الدرس. تشرح صحيفة حقائق CISA حول MFA المقاومة للتصيد على source: cisa.gov لماذا تقاوم بعض طرق المصادقة التصيد وانتحال شخصية المدقق بشكل أفضل من رموز الاستخدام الواحد العادية. تميز إرشادات هوية NIST الرقمية على source: pages.nist.gov بين أدوات المصادقة الأقوى وضوابط الجلسة من الافتراضات الأضعف حول الحيازة. تشرح مواد FIDO Alliance حول مفاتيح المرور و FIDO2 على source: fidoalliance.org و source: fidoalliance.org نموذج المفتاح العام وراء المصادقة المقاومة للتصيد. هذه المستندات ليست نتائج ضد CircleCI. إنها مفردات التحكم لفهم لماذا لا تزال جلسة مدعومة بـ 2FA بحاجة إلى ضمانات إضافية ومرتبطة بالجهاز.
يخلق اختراق نقطة النهاية أيضًا تحديًا في الإفصاح. إذا سمع العميل أن حاسوب موظف قد أصيب، فقد يقلل من التأثير النهائي. إذا سمع أن مخازن بيانات الإنتاج التي تحتوي على أسرار العملاء قد سرقت، فقد يبالغ في التصحيح بافتراض أن كل نظام متكامل قد تم إساءة استخدامه. حاول تقرير CircleCI توفير الوسط: كان هناك تسريب لأسرار العملاء، يجب على العملاء افتراض أن الأسرار المخزنة قد تم الوصول إليها، ويجب على العملاء التحقيق في أنظمتهم الخاصة لأن CircleCI لم تستطع تحديد كل استخدام نهائي. هذه الدقة قيمة لأنها توائم المسؤولية مع الأدلة بدلاً من راحة العلاقات العامة.
كان يجب أن يكون التدوير قابلاً للاكتشاف ومختومًا بالوقت وقابلاً للتدقيق
تدوير الأسرار سهل القول وصعب الإثبات. في تطبيق صغير، قد يعرف الفريق العدد القليل من بيانات الاعتماد المستخدمة. في مؤسسة كبيرة، قد تكون أسرار CI متناثرة عبر المشاريع والسياقات والمستخدمين والمشغلات والانشاءات والمستودعات المعاد تسميتها والمشاريع المحذوفة وعمليات التكامل القديمة والرموز الشخصية ومفاتيح النشر وسجلات الحزم والأدوار السحابية والمتغيرات الخاصة بسير العمل. سؤال الإصلاح القابل للمساءلة هو ما إذا كان العميل يمكنه العثور على كل سر ربما تم تخزينه في CircleCI، وتدويره في النظام الذي يكرمه، وتحديث كل مهمة تابعة، والتحقق من أن بيانات الاعتماد القديمة لم تعد تعمل.
اعترفت استجابة CircleCI بهذه المشكلة العملية. أشار التنبيه الأمني العملاء إلى أداة CircleCI-Env-Inspector على source: github.com لاكتشاف الأسرار المخزنة. قالت CircleCI إنها أضافت حقلupdated_atإلى API السياقات حتى يتمكن العملاء من التحقق من التدوير الناجح لمتغيرات السياق. أضافت دعم توقيع SHA-256 لمفاتيح الخروج. جعلت سجلات التدقيق متاحة للعملاء المجانيين والمدفوعين أثناء الاستجابة. يصف توثيق API الخاص بها على source: circleci.com عمليات السياق ومتغيرات البيئة ذات الصلة بالأتمتة. يشرح توثيق سجل التدقيق على source: circleci.com كيف يمكن للمؤسسات استرداد بيانات التدقيق.
هذه ليست ميزات تجميلية. إنها تحول التعليمات الغامضة إلى سير عمل قابل للقياس. يمكن للعميل أن يسأل: أي المشاريع كانت بها متغيرات بيئة؛ أي السياقات كانت موجودة؛ أي المتغيرات لديها طوابع زمنية حديثة للتحديث؛ أي مفاتيح الخروج موجودة؛ أي المستخدمين أو المهام لمست الأسرار؛ أي رموز المشغل نشطة؛ أي الإنشاءات استخدمت سياقات عالية المخاطر بعد نافذة التعرض؛ وأي سجلات سحابية نهائية تظهر استخدام بيانات اعتماد قديمة بعد التدوير. بدون قابلية الاكتشاف والطوابع الزمنية، يكون التدوير مجرد ادعاء. معهم، يصبح دليلاً.
تظل المشكلة صعبة لأنه ليس كل سر مرئي بنفس الطريقة. بعض القيم مقنعة عمدًا أو غير قابلة للقراءة بعد الإدخال. هذه ممارسة تخزين جيدة، ولكنها تعني أن العملاء قد يرون فقط أسماء أو مواقع أو بيانات وصفية بدلاً من القيم الفعلية. يمكن لسر اسمهPROD_DEPLOY_KEYتوجيه التدوير، ولكن الاسم القديم أو المضلل يمكن أن يعقده. يمكن للمشاريع المعاد تسميتها والمستودعات المحذوفة إخفاء المتغيرات القديمة. يمكن للسياقات المشتركة أن تجعل سرًا واحدًا يؤثر على العديد من المهام. يمكن للمشغلات ذاتية الاستضافة إدخال مكان ثانٍ حيث يجب تغيير الرموز والتكوين المحلي.
يُظهر تحديث مارس 2023 لإرشادات دعم CircleCI، الذي قال إن أداة الاكتشاف تم تحديثها للعثور على أسرار غير مرئية في واجهة المستخدم، أن مشكلة الجرد استمرت بعد الإفصاح الأول.
احتج العملاء أيضًا إلى تدقيق خارج CircleCI. أدرج تقرير حادث CircleCI عناوين IP وموفري VPN وملفات خبيثة ومؤشرات سجل تدقيق GitHub مثلrepo.download_zip. يمكن أن تساعد هذه المعلومات العملاء في البحث في GitHub والسحابة والسجلات الداخلية. توثيق تطبيق OAuth الخاص بـ GitHub على source: docs.github.com ذو صلة لأن منح OAuth الواسعة يمكن أن تربط خدمة CI بالوصول إلى المستودع. يوفر توثيق سجل تدقيق المؤسسة على GitHub على source: docs.github.com مفردات لمراجعة أحداث المستودع. لذلك، كان الإصلاح من جانب العميل يجب أن يكون عبر الأنظمة، وليس مجرد تمرين إعدادات CircleCI.
تركز منصات CI سلطة النشر دون امتلاك النظام المنشور
أصعب ميزة حوكمة في هذا الحادث هي الانقسام بين الحفظ والعواقب. احتفظت CircleCI أو يمكنها الوصول إلى أسرار تنتمي إلى سير عمل العملاء، لكن عواقب استخدام تلك الأسرار ستحدث غالبًا في أنظمة العملاء. سينتج مفتاح AWS المسروق سجلات AWS. سينتج بيانات اعتماد قاعدة البيانات المسروقة سجلات قاعدة البيانات. سينتج رمز الحزمة المسروقة سجلات السجل. قد يؤثر سر webhook المسروق على التطبيق. يمكن لـ CircleCI رؤية التسريب من جانبها ولكن ليس بالضرورة السلوك الناتج في كل بيئة نهائية.
هذا يخلق مشكلة اعتماد سحابية كلاسيكية. اختار العميل استخدام منصة CI مُدارة لتجنب تشغيل جميع البنية التحتية للبناء بنفسه. أصبحت المنصة بعد ذلك مزود خدمة ذا صلة أمنية بسلطة نشر العميل. ظل العميل مسؤولاً عن تحديد الأسرار التي يجب تخزينها، وما إذا كان سيستخدم بيانات اعتماد ثابتة أو اتحادًا قصير الأجل، والمهام التي يمكنها الوصول إلى كل سياق، والأذونات السحابية الممنوحة، وما إذا كان سيتم الاحتفاظ بالسجلات النهائية. لكن الموفر تحكم في طبقة التخزين، والوصول الداخلي إلى الإنتاج، وامتيازات الموظفين، واكتشاف الحوادث، وتوقيت الإفصاح. لا يمكن لأي جانب إصلاح السلسلة الكاملة بمفرده.
لهذا السبب يهم إرشاد OIDC الخاص بـ CircleCI على source: circleci.com. يتيح OIDC للمهام تلقي رموز هوية قصيرة الأجل يمكن لموفري السحابة المتوافقين استبدالها ببيانات اعتماد مؤقتة، مما يقلل الحاجة إلى تخزين أسرار سحابية طويلة الأجل في CircleCI. يشرح توثيق AWS IAM حول موفري هوية OIDC على source: docs.aws.amazon.com وتوثيق اتحاد هوية العمل في Google Cloud على Google Cloud source جانب موفر السحابة من هذا النموذج. درس المساءلة ليس أن OIDC كان سيحل كل مسار في حادث 2023. إنه أن الأسرار طويلة الأجل المخزنة في منصة CI تخلق نصف قطر انفجار دائم، في حين أن بيانات الاعتماد الفيدرالية قصيرة الأجل يمكن أن تجعل التعرض المستقبلي أقل قيمة.
تتطابق ضوابط CircleCI الأخرى مع نفس المبدأ. يمكن لنطاقات IP على source: circleci.com مساعدة العملاء على تقييد الوصول الوارد إلى نطاقات خروج CircleCI المعروفة. يمكن لتقييد السياقات تقليل المهام التي ترى أي الأسرار. يظهر توثيق المشغل الذاتي، بما في ذلك إرشاد رمز المشغل على source: circleci.com، أن رموز المشغل لها نموذج حفظ خاص بها. يشير توثيق CircleCI حول استخدام تطبيق GitHub في مؤسسات OAuth على source: circleci.com إلى وصول أكثر تفصيلاً وقصرًا للتحكم في الإصدار مقارنة برموز OAuth الواسعة. يضيق كل تحكم جزءًا مختلفًا من رسم بياني الثقة.
الاحتكاك الاقتصادي حقيقي. يتطلب اعتماد OIDC عمل IAM سحابي، وسياسات الثقة، وتكوين المهام، وأحيانًا تغييرات التطبيق. يتطلب تقليل السياق إعادة تنظيم الأسرار من قبل فرق الهندسة وقبول راحة أقل. قد تكلف نطاقات IP أرصدة ولا تناسب بعض أنماط الشبكة. تستهلك مراجعة سجل التدقيق وقت الموظفين. يمكن أن يغير ترحيل تطبيق GitHub تدفقات ترخيص المستخدم. لكن الحادث أظهر التكلفة البديلة: تدوير طارئ عبر العديد من الفرق خلال نافذة عدم يقين حية. يجب أن يقارن ملف المخاطر الناضج التكلفة الثابتة للتكوين الآمن افتراضيًا مع التكلفة التخريبية للتنظيف بعد التعرض.
احتاج الإفصاح إلى مساعدة العملاء على التصرف دون المبالغة في اليقين
كان عبء اتصالات CircleCI صعبًا لأن العملاء احتاجوا إلى إجراء عاجل قبل اكتمال كل التفاصيل الجنائية. أعطى تنبيه 4 يناير الأولوية للتدوير الفوري. أضاف تقرير الحادث في 12 يناير مسار الهجوم والجدول الزمني وفئات البيانات وإجراءات الاستجابة وإرشادات التحقيق. من منظور المساءلة، هذا التسلسل دفاعي: عندما يعلم الموفر أن أسرار العملاء قد تكون مكشوفة، يمكن أن يزيد التأخير من الضرر النهائي. ومع ذلك، تخلق الإلحاح أيضًا ارتباكًا. سأل العملاء بالضبط ما الذي تعرض، وما إذا كانت الإنشاءات آمنة، وما هي النوافذ الزمنية للتحقيق، وما هي الأسرار التي يجب تدويرها.
عالج التقرير بعضًا من هذه الأسئلة بتصريحات صريحة. قالت CircleCI إن العملاء يمكنهم البناء بأمان بعد تصحيح المنصة. قالت إن أي شيء تم إدخاله في النظام بعد 5 يناير 2023 يمكن اعتباره آمنًا. قالت إن وصول طرف ثالث غير مصرح به شوهد في 19 ديسمبر 2022 وحدث تسريب البيانات في 22 ديسمبر 2022. أوصت بالتحقيق في الفترة من تاريخ الاختراق في 16 ديسمبر حتى اكتمال تدوير العميل. قالت إن أقل من خمسة عملاء أبلغوا CircleCI عن وصول غير مصرح به إلى أنظمة الطرف الثالث نتيجة للحادث في وقت النشر.
تقلل هذه التفاصيل من الغموض، لكنها لا تزيل كل مجهول. لا يسرد الدليل العام كل عميل متأثر، أو كل مفتاح مكشوف، أو كل مخزن بيانات تم الوصول إليه، أو كل نتيجة تدوير للعميل. لا يثبت بشكل مستقل أن كل بيانات اعتماد نهائية قد تم إلغاؤها. لا يُظهر التقرير الجنائي الخارجي الكامل. لا ينبغي للتحليل المسؤول ملء هذه الفجوات بالتكهنات. الاستنتاج الصحيح أضيق: أكدت CircleCI علنًا تسريب متغيرات بيئة العملاء والمفاتيح والرموز؛ وحثت العملاء على افتراض أن الأسرار المخزنة تم الوصول إليها؛ وأعطت جداول زمنية ومؤشرات؛ واعترفت بأنها لا تستطيع معرفة كل استخدام نهائي لتلك الأسرار.
هذا التوازن مهم لثقة العملاء. إذا قال الموفر القليل جدًا، لا يمكن للعملاء التصرف. إذا قال الكثير قبل نضج الأدلة، قد يتخذ العملاء قرارات سيئة أو يفقدون الثقة في التصحيحات اللاحقة. يُظهر إضافة CircleCI لأدوات العملاء وبيانات API الوصفية أيضًا أن الإفصاح ليس مجرد كلمات. يمكن للموفر جعل الاتصال أكثر قابلية للتنفيذ من خلال كشف السجلات والطوابع الزمنية والبرامج النصية والمؤشرات ونقاط النهاية المقروءة آليًا التي تتيح للعملاء تشغيل برامج الإصلاح الخاصة بهم.
يدعم الإرشاد التنظيمي والعام هذا النهج القائم على الأدلة. يؤكد برنامج CISA للتصميم الآمن افتراضيًا على source: cisa.gov على تقليل مخاطر العميل من خلال التصميم والمساءلة. يعطي إطار عمل NIST للأمن السيبراني على source: nist.gov دورة مفيدة من التحديد والحماية والكشف والاستجابة والاسترداد. في حالة CircleCI، الدورة ملموسة: تحديد الأسرار المخزنة، حماية المهام المستقبلية من خلال أقل امتياز وبيانات اعتماد قصيرة الأجل، كشف الاستخدام النهائي المشبوه، الاستجابة بالتدوير والإلغاء، والاسترداد بإثبات أن بيانات الاعتماد القديمة لم تعد تعمل.
كانت السيطرة العملية مشتركة، ولكن ليست متساوية
يجب توزيع المسؤولية في هذا الحادث حسب السيطرة العملية. قام المهاجم بالوصول غير المصرح به والتسريب. تحكمت CircleCI في بيئة المنصة، وضوابط نقطة نهاية الموظف، ونموذج الوصول إلى الإنتاج، وضمانات الجلسة، وهندسة التخزين والتشفير، وإلغاء الرموز حيث كانت الرموز صادرة عن المنصة، واتصالات العملاء، وأدوات التصحيح. تحكم العملاء في ما خزنوه في CircleCI، والامتياز المرتبط بتلك الأسرار، ومراجعة السجل النهائي، والتدوير داخل أنظمتهم السحابية والتطبيقية الخاصة. تحكم موفرو التحكم في الإصدار والسحابة في نماذج الرموز الخاصة بهم، وسجلات التدقيق، وميزات الهوية الفيدرالية، وآليات الإلغاء.
التوزيع غير متساوٍ. كان لدى CircleCI أقوى سيطرة على حدود المنصة الفاشلة. لم يتمكن العملاء من فحص حاسوب موظف CircleCI، أو نموذج جلسة الإنتاج، أو مضيفي الإنتاج الداخلي قبل الحادث. اعتمدوا على ضوابط CircleCI والإفصاح. هذا يجعل CircleCI الطرف المسؤول الأساسي عن فشل جانب الموفر وعن جعل تصحيح العميل ممكنًا. لا يزال العملاء مسؤولين عن خيارات نصف قطر الانفجار، خاصة تخزين بيانات اعتماد طويلة الأجل عالية الامتياز عندما كان الاتحاد قصير الأجل أو النطاقات الأضيق متاحة. لكن مسؤولية العميل لا تمحو مسؤولية الموفر عن الحفظ.
تظهر GitHub و Bitbucket و GitLab و AWS و Google Cloud في خريطة المساءلة لأن أسرار CI الخاصة بالعميل تشير إليها غالبًا. قال تقرير CircleCI إنه عمل مع GitHub و Atlassian على تدوير الرموز. يشرح توثيق GitHub سجلات التدقيق وضوابط OAuth. يشرح توثيق AWS و Google Cloud الهوية الفيدرالية. لا يُزعم في السجل العام أن هؤلاء الموفرين تسببوا في حادث CircleCI. إنهم جزء من النظام البيئي للإصلاح لأن العملاء اضطروا إلى استخدام ضوابطهم لتدوير أو إلغاء أو تدقيق أو إعادة تصميم بيانات الاعتماد.
يمكن لبائعي الأمان والتقارير الخارجية مساعدة العملاء في تفسير الحدث، لكن يجب أن يظلوا ثانويين. تحليل Snyk على source: snyk.io ومناقشة AppOmni على source: appomni.com أمثلة مفيدة للإرشاد الخارجي حول تدوير الأسرار ومخاطر SaaS. لا ينبغي أن تحل محل تقرير حادث CircleCI كمصدر للحقائق المؤكدة. أقوى سجل يجمع بين الإفصاح الأولي عن الحادث، وتوثيق المنصة، وتوثيق هوية السحابة، وسجلات جانب العميل.
درس الشراء للعميل مباشر. استبيان البائع الذي يسأل فقط عما إذا كان موفر CI يشفر الأسرار في حالة السكون غير كافٍ. في هذا الحادث، قالت CircleCI إن متغيرات البيئة كانت مشفرة في حالة السكون، ومع ذلك تمكن المهاجم من الحصول على بيانات من المخازن التي تضمنت أسرار العملاء. الأسئلة الأعمق هي حول من يمكنه فك تشفير الأسرار أو الوصول إليها في الإنتاج، وكيف يتم تقييد جلسات الموظفين، وما إذا كانت إجراءات الإنتاج المميزة تتطلب مصادقة إضافية، وما إذا كانت أسرار العملاء منفصلة حسب المستأجر والغرض، وما إذا كانت سجلات التدقيق تظهر الوصول إلى الأسرار، ومدى سرعة إلغاء الرموز الصادرة عن المنصة، وما هي الأدوات التي يتلقاها العملاء أثناء الحادث.
كيف يجب أن يبدو الإصلاح القابل للتحقق
يجب أن يكون للإصلاح القابل للتحقق بعد حادث سر CI عدة طبقات. الطبقة الأولى هي الاحتواء من جانب الموفر. يجب على الموفر إزالة وصول المهاجم، وتدوير المضيفات والمفاتيح الداخلية التي يحتمل أن تكون مكشوفة، وإبطال الجلسات المخترقة، وتقييد الوصول إلى الإنتاج، والتحقق من نتائجه بالسجلات والمحققين الخارجيين عند الاقتضاء. وصفت CircleCI علنًا العديد من هذه الإجراءات، بما في ذلك إيقاف الوصول، وتدوير مضيف الإنتاج، وإلغاء رمز API، وتدوير OAuth بمساعدة الشريك، وتحديثات كشف MDM ومكافحة الفيروسات، والمصادقة الإضافية، والمراقبة، ودعم الطرف الثالث.
الطبقة الثانية هي الجرد من جانب العميل. يحتاج العملاء إلى قائمة كاملة بمتغيرات بيئة المشروع، ومتغيرات السياق، ورموز API للمشروع، ورموز API الشخصية، ورموز المشغل، ومفاتيح SSH، ومنح OAuth، وغيرها من الأسرار المخزنة. يجب أن يتضمن الجرد الموقع والمالك ووقت آخر تحديث والامتياز والمهام التابعة والنظام النهائي. الأسماء وحدها ليست كافية إذا لم تستطع الفرق تحديد ما يصل إليه الرمز. كانت أداة الاكتشاف الخاصة بـ CircleCI، وتحديث API السياقات، وسجلات التدقيق، وإرشادات الدعم مهمة لأنها ساعدت العملاء في بناء هذه القائمة.
الطبقة الثالثة هي الإلغاء والتحقق النهائي. يجب إبطال السر الذي تم تدويره في النظام الذي يقبله. المهمة التي لا تزال ناجحة ببيانات الاعتماد القديمة ليست مُصلحة. يجب على العملاء التحقق من سجلات تدقيق السحابة، وسجلات التحكم في الإصدار، وسجلات قاعدة البيانات، وسجلات سجل الحزمة، وسجلات النشر، وسجلات webhook، وسجلات التطبيق بحثًا عن استخدام مشبوه خلال فترة التعرض. بيان CircleCI نفسه أنه لا يستطيع معرفة كل استخدام نهائي يعني أن سجلات العميل ليست اختيارية. إنها المكان الوحيد الذي سيكون فيه بعض سوء الاستخدام مرئيًا.
الطبقة الرابعة هي إعادة التصميم. يجب استبدال الأسرار طويلة الأجل حيثما أمكن ببيانات اعتماد فيدرالية قصيرة الأجل، و OIDC، وأذونات تطبيق GitHub محدودة النطاق، وسياقات ضيقة، وقيود الفرع والمشروع، وبيئات محمية، وموافقات نشر منفصلة. تتماشى خطة CircleCI لبدء التدوير الدوري التلقائي لرموز OAuth، والتحول من OAuth نحو تطبيقات GitHub، وتوسيع التنبيه، وتقليل ثقة الجلسة، وإضافة عوامل مصادقة، وإجراء تدوير وصول أكثر انتظامًا، وجعل الأذونات أكثر زوالًا مع هذه الطبقة. يجب أن يتوقع العملاء دليلاً على أن هذه الالتزامات غيرت المخاطر الافتراضية، وليس فقط لغة الحادث.
الطبقة الخامسة هي قابلية التدقيق. يجب أن يحصل العملاء على سجلات تظهر نشاط المنصة ذي الصلة بمؤسستهم. يجب على الموفرين توثيق الاحتفاظ، وتغطية الأحداث، وحدود التصدير، والقيود المستندة إلى الخطة. يُظهر إدخال سجل التغيير لشهر نوفمبر 2023 لـ CircleCI على source: circleci.com الذي يظهرcontext.secrets.accessedكحدث سجل تدقيق نوع التفاصيل التي يحتاجها العملاء: ليس فقط أن المهمة قد تم تشغيلها، ولكن أنه تم الوصول إلى سياق حساس. يمكن أن يخلق المزيد من تفاصيل السجل مقايضات الخصوصية والأمان، ولكن بدون دليل الحدث، لا يمكن للعملاء تقييم التعرض للأسرار بشكل مستقل.
الطبقة السادسة هي الحوكمة. لا ينبغي للموفر معاملة الحدث كحالة طوارئ لمرة واحدة. يجب عليه تحويل الحادث إلى سياسة: مراجعة دورية للأسرار، وصول إلى الإنتاج بأقل امتياز، مصادقة مميزة مرتبطة بالأجهزة أو مقاومة للتصيد، تدريبات اختراق نقطة النهاية، كتيبات إجراءات الحادث للعميل، الإعدادات الافتراضية للمنتج التي تثبط الأسرار طويلة الأجل، ودليل الشراء للمشترين المؤسسيين. يجب على العملاء تحويل الحدث إلى سياستهم الخاصة: لا تخزين بيانات اعتماد دائمة عالية الامتياز في CI عندما يكون الاتحاد متاحًا، وتقييد استخدام السياق، ومراجعة حفظ رمز المشغل، وتوثيق مالكي التدوير، واختبار إلغاء بيانات الاعتماد في حالات الطوارئ.
حدود الأدلة والمجهولات
يدعم الدليل العام عدة استنتاجات ثابتة. كشفت CircleCI عن حادث أمني في 4 يناير 2023. قال تقرير الحادث إن البرمجيات الخبيثة على حاسوب مهندس مكنت من سرقة جلسة SSO صالحة مدعومة بـ 2FA. قال إن المهاجم وصل إلى مجموعة فرعية من أنظمة الإنتاج وسرق معلومات العملاء في 22 ديسمبر 2022، بما في ذلك متغيرات البيئة والرموز والمفاتيح. أخبرت العملاء الذين خزنوا أسرارًا خلال الفترة ذات الصلة بافتراض أن تلك الأسرار قد تم الوصول إليها. ألغت أو دورت عدة فئات من الرموز وعملت مع الشركاء. قدمت إرشادات التحقيق والمؤشرات. صرحت بأن أقل من خمسة عملاء أبلغوا CircleCI عن وصول غير مصرح به إلى أنظمة الطرف الثالث اعتبارًا من التقرير.
لا يدعم الدليل العام بعض الادعاءات الأقوى. لا يثبت أن كل عميل CircleCI عانى من وصول نهائي غير مصرح به. لا يحدد كل سر مكشوف أو كل عميل. لا يوفر تقرير الطب الشرعي الكامل للطرف الثالث. لا يثبت أن جميع العملاء أكملوا التدوير. لا يُظهر كل ضوابط الوصول إلى الإنتاج الداخلي قبل أو بعد التصحيح. لا يثبت أن أنظمة العملاء كانت آمنة إذا فشل العميل في تدوير سر عالي الامتياز. هذه الحدود مهمة لأن تحليل المساءلة يفقد مصداقيته عندما يحول عدم اليقين إلى اتهام.
المجهولات المتبقية لا تزال ذات صلة بالحوكمة. كم عدد المؤسسات التي خزنت بيانات اعتماد عالية الامتياز؟ كم من الوقت كانت بعض الأسرار موجودة بدون تدوير؟ أي شرائح العملاء استخدمت OIDC بدلاً من المفاتيح الثابتة؟ كم عدد العملاء الذين لديهم سجلات نهائية كافية للتحقيق من 16 ديسمبر فصاعدًا؟ ما مدى سرعة إكمال العملاء للتدوير؟ أي الإعدادات الافتراضية لمنتج CircleCI تغيرت بشكل دائم بعد الحادث؟ أي إجراءات الموظفين المميزة تتطلب الآن دليلاً مرتبطًا بالأجهزة أو إضافيًا؟ لا يمكن للمقالات العامة الإجابة على كل ذلك. يمكن للمشترين المؤسسيين ويجب عليهم طلب الأدلة بموجب NDA، أو مراجعة الأمان، أو تقرير التدقيق، أو تقييم المشتريات.
أقوى درس هو أن التعرض لسر CI هو مشكلة اعتماد على الخدمة السحابية، وليس فقط مشكلة عمليات أمنية. يجب على موفر CI السحابي معاملة أسرار العملاء كسلطة مفوضة. يجب على العملاء معاملة كل سر CI كمسار إنتاج حي ما لم يقوموا بتقييده بطريقة أخرى. معيار الإصلاح ليس ما إذا كان الموفر ينشر تقريرًا واثقًا بعد الوفاة. إنه ما إذا كان كلا الجانبين يمكنهما إثبات أن حفظ الأسرار، والتدوير، وقابلية التدقيق، وتصميم بيانات الاعتماد المستقبلية قللت من فرصة أن يصبح نفس فشل جانب الموفر اختراقًا من جانب العميل.
لماذا لا يزال هذا مهمًا في عام 2026
لا يزال حادث CircleCI مهمًا في عام 2026 لأن أتمتة المطورين أصبحت أكثر امتيازًا، وليس أقل. تطلق أنظمة CI الآن تغييرات البنية التحتية كرمز، وإنشاء الحاويات، وموافقات النشر، وإصدارات الحزم، وتغييرات علامات الميزات، وعمليات فحص الأمان، ونشر النماذج، وإصدارات الجوال، وجمع أدلة الامتثال. يمكن لبيئة CI واحدة أن تحمل مفاتيح العديد من أنظمة الأعمال. مع اعتماد الفرق لمزيد من الأتمتة، يستمر الخط الفاصل بين إنتاجية المطور والسلطة التشغيلية في التلاشي.
يظهر الحادث أيضًا لماذا يجب إقران أتمتة الأمان بأتمتة المساءلة. لا يكفي أن توصي المنصة العملاء بتدوير الأسرار. إنها تحتاج إلى APIs وطوابع زمنية وسجلات وأدوات جرد ومؤشرات وإعدادات افتراضية للمنتج تتيح للعملاء التحقق من العمل. لا يكفي أن يقول العملاء إنهم قاموا بتدوير بيانات الاعتماد. إنهم بحاجة إلى خرائط التبعية والمالكين وعمليات التحقق من إبطال المفتاح القديم ومراجعة السجل النهائي. في حالة الطوارئ، الذاكرة اليدوية والمعرفة القبلية ليست ضوابط موثوقة.
بالنسبة لمجالس الإدارة والمديرين التنفيذيين، تعيد القضية صياغة مخاطر CI كمخاطر استمرارية الأعمال. يمكن لتمرين تدوير الأسرار تجميد عمليات النشر، وكسر عمليات التكامل، ومقاطعة عمليات الإيرادات، واستهلاك الاهتمام الهندسي. يمكن أن تسمح بيانات الاعتماد المفقودة بالوصول المتابع. يمكن أن يؤدي نقص السجلات إلى ترك القيادة غير قادرة على إخبار العملاء ما إذا كان الحادث قد انتهى. لذلك، الضرر الاقتصادي ليس فقط الاختراق الأصلي؛ إنه ضريبة عدم اليقين التي تفرضها ضعف الجرد وضعف دليل التدوير.
بالنسبة للبائعين، تشير القضية إلى الإعدادات الافتراضية الآمنة. يجب أن يكون OIDC سهل الاعتماد. يجب أن تكون السياقات سهلة التقييد. يجب أن تظهر سجلات التدقيق الوصول الحساس. يجب أن تكون عمليات تكامل تطبيق GitHub أسهل من مسارات OAuth الواسعة حيثما أمكن. يجب أن تكون رموز المشغل سهلة الجرد. يجب أن تولد الأسرار غير المستخدمة تحذيرات. يجب أن يكون وصول الموظفين إلى الإنتاج نادرًا وقصير الأجل وموثقًا بشدة. يجب أن يشمل التواصل بشأن الحادث مسارات العمل، وليس فقط البيانات.
بالنسبة للعملاء، تجادل القضية بتصميم بيانات اعتماد CI كما لو أن موفر CI يمكن أن يفشل يومًا ما. هذا لا يعني رفض CI السحابي. إنه يعني استخدام أقل امتياز، وبيانات اعتماد قصيرة الأجل، وبيئات منفصلة، وموافقات النشر، والاحتفاظ بالسجلات الخارجية، والتدريب على التدوير. إنه يعني معرفة الأسرار الموجودة في كل مشروع وسياق قبل حالة الطوارئ. إنه يعني معاملة CI كجزء من حدود الثقة في الإنتاج حتى عندما تسمى الإنشاءات "تطوير".
نتيجة المساءلة النهائية ضيقة ومستندة إلى الأدلة. أكدت CircleCI علنًا أن مهاجمًا سرق متغيرات بيئة العملاء والرموز والمفاتيح من مجموعة فرعية من الأنظمة بعد اختراق نقطة نهاية الموظف والجلسة. لا يثبت الدليل العام اختراقًا نهائيًا شاملاً. يثبت الدليل العام أن تدوير أسرار العميل أصبح عبء الإصلاح المركزي. جعل الحادث حقيقة هيكلية لـ CI السحابية مرئية: قد لا يمتلك الموفر تطبيق العميل، لكنه يمكنه الاحتفاظ ببيانات الاعتماد التي تسمح بتحرك ذلك التطبيق.
سجل المصادر
- تقرير حادث CircleCI:https://circleci.com/blog/jan-4-2023-incident-report/
- تنبيه أمان CircleCI وتعليمات التدوير:https://circleci.com/blog/january-4-2023-security-alert/
- مقالة دعم CircleCI حول تدوير الأسرار:https://support.circleci.com/hc/en-us/articles/11816211460891-Rotating-Secrets-for-January-4th-Incident
- توثيق متغيرات بيئة CircleCI:https://circleci.com/docs/guides/security/env-vars/
- توثيق سياقات CircleCI:https://circleci.com/docs/guides/security/contexts/
- توثيق OIDC من CircleCI:https://circleci.com/docs/guides/permissions-authentication/openid-connect-tokens/
- توثيق نطاقات IP لـ CircleCI:https://circleci.com/docs/guides/security/ip-ranges/
- توثيق سجلات تدقيق CircleCI:https://circleci.com/docs/guides/security/audit-logs/
- توثيق API v2 لـ CircleCI:https://circleci.com/docs/api/v2/
- مستودع CircleCI Env Inspector:https://github.com/CircleCI-Public/CircleCI-Env-Inspector
- أسئلة شائعة حول مشغل CircleCI:https://circleci.com/docs/guides/execution-runner/runner-faqs/
- توثيق استخدام تطبيق CircleCI GitHub في مؤسسة OAuth:https://circleci.com/docs/guides/integration/using-the-circleci-github-app-in-an-oauth-org/
- سجل تغيير الوصول إلى سياق سجل تدقيق CircleCI:https://circleci.com/changelog/audit-log-includes-context-accessed/
- توثيق ترخيص تطبيق OAuth في GitHub:https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps
- توثيق سجل تدقيق المؤسسة في GitHub:https://docs.github.com/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization
- توثيق موفر OIDC في AWS IAM:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html
- توثيق اتحاد هوية العمل في Google Cloud:https://cloud.google.com/iam/docs/workload-identity-federation
- صحيفة حقائق CISA حول MFA المقاومة للتصيد:https://www.cisa.gov/sites/default/files/2023-01/fact-sheet-implementing-phishing-resistant-mfa-508c.pdf
- CISA آمنة بالتصميم:https://www.cisa.gov/securebydesign
- إرشادات الهوية الرقمية NIST SP 800-63B:https://pages.nist.gov/800-63-4/sp800-63b.html
- إطار عمل NIST للأمن السيبراني:https://www.nist.gov/cyberframework
- نظرة عامة على مفاتيح المرور من FIDO Alliance:https://fidoalliance.org/passkeys/
- نظرة عامة على FIDO2:https://fidoalliance.org/fido2/
- تحليل Snyk لحادث تدوير أسرار CircleCI:https://snyk.io/blog/supply-chain-security-incident-circleci-secrets/
- تحليل AppOmni لحادث CircleCI:https://appomni.com/ao-labs/unpacking-preventing-circleci-data-breach/

