التباس التبعيات هجوم على سلسلة الإمداد يستغل سلوك أدوات البناء ومديري الحزم في استدعاء الحزم. فعندما تكون بيئة التطوير مهيأة لاستدعاء الحزم من السجلات العامة (npm وPyPI وMaven Central) ومن السجلات الخاصة أو الداخلية معًا، يفضّل كثير من مديري الحزم، افتراضيًا أو بسبب سوء التهيئة، حزمةً عامة برقم إصدار أعلى على حزمة خاصة تحمل الاسم نفسه برقم إصدار أدنى. والمهاجم الذي يتعرف على اسم حزمة داخلية، من خلال إعلانات الوظائف أو مستودعات GitHub أو رسائل الخطأ أو الوثائق، يستطيع نشر حزمة خبيثة بذلك الاسم في السجل العام برقم إصدار أعلى. فيستدعي نظام البناء الإصدار العام، وينفّذ شيفرة المهاجم، ويقع الاختراق أثناء تثبيت روتيني للتبعيات لا من خلال أي ثغرة في البرمجيات نفسها.
آلية الاكتشاف هي المرحلة الأولى من الهجوم. إذ يتعرف المهاجمون على أسماء الحزم الداخلية عبر قنوات متعددة: إعلانات الوظائف التي تشير إلى أُطر الأدوات الداخلية، ومستودعات GitHub العامة التي تظهر فيها أسماء الحزم الداخلية في ملفات التهيئة، ورسائل الخطأ التي تتضمن أسماء الحزم حين لا يُعثر على الحزم الداخلية، والوثائق التي تشير إلى الأدوات الداخلية، ومساهمات الموظفين في المشاريع مفتوحة المصدر التي تكشف أعراف تسمية الحزم الداخلية. فاسم الحزمة ليس سرًا، إذ يوجد في ملفات البناء ووثائق التهيئة والذاكرة المؤسسية لفريق التطوير. ومعاملته على أنه سري ليس دفاعًا مجديًا.
آلية أولوية الاستدعاء هي الثغرة التقنية. فمديرو الحزم مثل npm وpip وMaven مصممون لاستدعاء أعلى إصدار من الحزمة يطابق نطاق الإصدارات المحدد. وعندما تكون السجلات العامة والخاصة مهيأة معًا، تفحص كثير من التطبيقات السجلات العامة وتطبّق قواعد أسبقية الإصدارات التي تسمح لحزمة عامة ذات رقم إصدار أعلى بأن تحل محل حزمة خاصة تحمل الاسم نفسه. وهذا السلوك قابل للتهيئة، إذ يمكن فرض أولوية السجل الخاص، لكنه ليس الإعداد الافتراضي في كثير من البيئات الشائعة.
لماذا يهم هذا
يهم التباس التبعيات ممارسي TPRM لأنه هجوم على سلسلة الإمداد قد يكون مورّدوك معرّضين له، ولا سيما موردو البرمجيات ومزودو أدوات التطوير الذين يستخدمون سجلات حزم داخلية إلى جانب التبعيات العامة. فالمورّد الذي تكون بيئة البناء لديه معرّضة لالتباس التبعيات قد يتعرض خط البناء لديه للاختراق دون أي استغلال تقليدي للثغرات، فينتج مخرجات برمجية تحتوي على شيفرة المهاجم لكنها تجتاز مراجعة الشيفرة والفحص الأمني المعتادين.
- عدم تقييم قابلية تعرض بيئة البناء لدى المورّد لالتباس التبعيات
- عدم إدراج تهيئة أولوية السجل الخاص في الأسئلة الأمنية الموجهة للمورّد
- عدم تقييم انكشاف أسماء الحزم الداخلية في المصادر العامة
- عدم إدراج تهيئة استدعاء التبعيات في نطاق تقييم TPRM
- عدم تقييم مسارات الهجوم في مرحلة البناء إلى جانب أمن وقت التشغيل
كيف تبدو الممارسة الجيدة
تقيّم برامج أمن سلسلة إمداد البرمجيات الناضجة تهيئة بيئة البناء لدى المورّد بحثًا عن ثغرات التباس التبعيات، وتحديدًا ما إذا كانت أولوية السجل الخاص مفروضة، وما إذا كانت أسماء الحزم الداخلية محجوزة في السجلات العامة، وما إذا كانت بيئات البناء مهيأة لرفض الحزم الواردة من مصادر غير متوقعة.
- فرض أولوية السجل الخاص: استدعاء الحزم الخاصة قبل العامة
- حجز أسماء الحزم الداخلية في السجلات العامة كإجراء وقائي
- عزل بيئة البناء: تقييد الوصول إلى الشبكة أثناء عمليات البناء
- التحقق من سلامة الحزم: التحقق من البصمة لجميع الحزم المستدعاة
- تدقيق استدعاء التبعيات: مراجعة تهيئة الاستدعاء من السجلات
الأدوات
رصد التباس التبعيات: Confused، وProtect من Socket.dev لاختبار التباس التبعيات
تستطيع أدوات اختبار التباس التبعيات تحديد أسماء الحزم الداخلية غير المسجلة في السجلات العامة، والتي تشكّل أهدافًا محتملة لهجمات التباس التبعيات. وبالنسبة لممارسي TPRM، فإن السؤال عمّا إذا كان الموردون قد اختبروا مدى إتاحة أسماء حزمهم الداخلية في السجلات العامة وحجزوها وقائيًا يمثل سؤالًا محددًا عن الحد من التباس التبعيات.
تحديات الحوكمة
يتمثل تحدي الحوكمة في التباس التبعيات في تعقيد التهيئة. فالتهيئة الصحيحة لأولوية السجلات في مديري الحزم عبر جميع بيئات التطوير وخطوط CI/CD ومحطات عمل المطورين تتطلب سياسة وإنفاذًا مقصودين، إذ كثيرًا ما تكون التهيئة الافتراضية غير آمنة. والحل على مستوى الحوكمة هو معايير صريحة لتهيئة السجلات تُطبَّق باتساق في جميع بيئات البناء.
- افرض أولوية السجل الخاص في جميع إعدادات مديري الحزم
- احجز أسماء الحزم الداخلية في السجلات العامة وقائيًا
- دقّق تهيئة السجلات في جميع بيئات البناء
- اختبر التباس التبعيات باستخدام أدوات الرصد الآلي
- أدرج استدعاء التبعيات في تقييم أمن البناء لدى المورّد
إذا كنت فريقًا صغيرًا
اطرح على أهم موردي البرمجيات لديك سؤالًا واحدًا لا يتناوله استبيانهم الأمني المعتاد: هل تستخدمون سجلات حزم خاصة إلى جانب السجلات العامة، وإن كان كذلك، فكيف تضمنون أن أنظمة البناء لديكم تستدعي الحزم من السجلات الخاصة أولًا لمنع التباس التبعيات؟ فالمورّد الذي يستخدم السجلات العامة والخاصة معًا دون فرض صريح لأولوية السجل الخاص معرّض لهذا الهجوم. واسأل عمّا إذا كانوا قد تحققوا من أن أسماء حزمهم الداخلية غير مسجلة لدى أطراف ثالثة في السجلات العامة.
- اسأل عمّا إذا كان المورّد يستخدم سجلات خاصة وعامة، وعن تهيئة أولوية الاستدعاء
- اسأل عمّا إذا كانت أسماء الحزم الداخلية قد حُجزت في السجلات العامة
- اسأل عن اختبار التباس التبعيات في بيئة البناء
- أدرج تهيئة السجلات في تقييم أمن البناء
ما الذي ينبغي اشتراطه
اسأل مباشرةً:
«هل تستخدمون سجلات حزم خاصة إلى جانب السجلات العامة في بيئة البناء لديكم؟ وكيف تضمنون استدعاء الحزم الخاصة بأولوية لمنع هجمات التباس التبعيات التي تحل فيها حزمة عامة بإصدار أعلى محل حزمكم الداخلية؟»
ما تتوقعه دليلًا
- توثيق تهيئة أولوية السجلات
- حجز أسماء الحزم الداخلية في السجلات العامة
- نتائج اختبار التباس التبعيات
- عزل بيئة البناء عن الوصول إلى الشبكات الخارجية
المورّد الذي يؤكد اتباع ممارسات بناء آمنة ينبغي أن يُسأل تحديدًا عن الحد من التباس التبعيات. فأمن بيئة البناء يشمل تهيئة السجلات، لا مراجعة الشيفرة والتحليل الثابت فحسب.
كيف تُثبت ذلك
- تدقيق تهيئة أولوية السجلات
- التحقق من حجز أسماء الحزم الداخلية
- سجلات اختبار التباس التبعيات
- معايير تهيئة بيئة البناء
الخلاصة الرئيسية
اسم الحزمة الداخلية: في إعلان وظيفة. السجل العام: سجّل المهاجم الاسم نفسه بإصدار أعلى. نظام البناء: استدعى الحزمة العامة. 23 تطبيقًا: نُفّذت شيفرة المهاجم أثناء تثبيت التبعيات. لم تُستغل أي ثغرة، ولم يُتجاوز أي مراجعة للشيفرة. فعلت آلية الاستدعاء ما هُيئت لفعله. ويمنع ذلك فرضُ أولوية السجل الخاص، إذ تُستدعى الحزمة الخاصة أولًا بصرف النظر عن رقم الإصدار. ويمنعه حجز الأسماء في السجلات العامة، إذ لا يستطيع المهاجم تسجيل حزمة بالاسم الذي تملكه المؤسسة بالفعل. وكلاهما قرار تهيئة، لا إصلاح شامل للبنية.