
يمسح قوائم مواد البرمجيات (SBOMs) للبحث عن الثغرات الأمنية.

bomber هو تطبيق يقوم بفحص قوائم مكونات البرمجيات (SBOMs) بحثًا عن الثغرات الأمنية.
لقد طلبت من بائع قائمة مكونات برمجيات (SBOM) لأحد منتجاته المغلقة المصدر، وقد زودك بها في ملف JSON... ماذا الآن؟
أول شيء سترغب في فعله هو معرفة ما إذا كان أي من المكونات المدرجة داخل قائمة المكونات يحتوي على ثغرات أمنية، ونوع التراخيص التي تمتلكها هذه المكونات. سيساعدك هذا في تحديد نوع المخاطرة التي سيتحملها استخدامك للمنتج.
العثور على الثغرات الأمنية ومعلومات الترخيص للمكونات المحددة في قائمة المكونات هو بالضبط ما صُمم bomber للقيام به. يمكن لـ bomber قراءة أي تنسيق CycloneDX قائم على JSON أو XML، أو تنسيق SPDX أو Syft بصيغة JSON، وإخبارك بسرعة إذا كان هناك أي ثغرات.
يمكن أن تكون البرمجيات إما مفتوحة المصدر أو مغلقة المصدر. يمكنك النظر إلى المكونات الخارجية التي ستجدها في Github، أو أي مستودع مصدر عام على أنها مفتوحة المصدر. من الناحية الفنية، البرمجيات التي تنشئها داخليًا في شركتك هي أيضًا مفتوحة المصدر - فهي ليست عامة، لكن فرقك الداخلية يمكنها رؤيتها. البرمجيات مغلقة المصدر يمكن أيضًا أن تكون داخلية، ولكن عادةً ما تكون هذه البرمجيات التي تشتريها من بائعين خارجيين.
يمكن للشركات استخدام أدوات SCA التي يوفرها بائعون مثل Github و Sonatype و Snyk وما إلى ذلك لفحص أي نوع من البرمجيات مفتوحة المصدر وتوفير بيانات الثغرات الأمنية - وحتى إنشاء قوائم مكونات في بعض الحالات. ما لا يمكنهم فعله (حتى الآن...) هو فحص البرمجيات مغلقة المصدر التي ليس لديك رؤية فيها. هذا هو المكان الذي تلعب فيه قوائم المكونات و bomber. توفر قوائم المكونات تكوين البرمجيات التي لا يمكنك الوصول إليها، ويحدد bomber ما إذا كان هناك أي شيء في قائمة المكونات به ثغرات.
لقد أنشأنا bomber لفحص قوائم المكونات مغلقة المصدر التي يتم توفيرها عند استلامها من البائعين. يمكنه أيضًا فحص قوائم المكونات مفتوحة المصدر، ومن الناحية الفنية يمكنك استخدام bomber كأداة SCA مفتوحة المصدر إذا أردت.
هناك عدد لا بأس به من تنسيقات قوائم المكونات المتاحة اليوم. يدعم bomber ما يلي:

يدعم bomber مصادر متعددة لمعلومات الثغرات الأمنية. نسمي هؤلاء المزودين. حاليًا، يستخدم bomber OSV كمزود افتراضي، ولكن يمكنك أيضًا استخدام قاعدة بيانات استشارات Github، أو فهرس Sonatype OSS، أو Snyk.
في الوقت الحالي، يرجى ملاحظة أن OSV مجاني ولا يتطلب أي بيانات اعتماد لاستخدامه، فهرس Sonatype OSS مجاني ولكنه يتطلب منك التسجيل والحصول على رمز مميز، ودعم Snyk يتطلب ترخيص Snyk.
بالإضافة إلى البيانات التي يجمعها bomber من المزودين، فإنه أيضًا يثري بيانات الثغرات بمعلومات إضافية مثل احتمالات الاستغلال.
يرجى ملاحظة أن كل مزود يدعم أنظمة بيئية مختلفة، لذلك إذا لم ترَ أي ثغرات في أحدهم، جرب الآخر. النظام البيئي هو ببساطة مدير الحزم، أو نوع الحزمة. تتضمن الأمثلة rpm و npm و gems وما إلى ذلك. من المهم أن تفهم أن كل مزود قد يبلغ عن ثغرات مختلفة. إذا كنت في شك، انظر إلى عدد قليل منهم.
إذا لم يجد bomber أي ثغرات، فهذا لا يعني أنه لا توجد أي منها. كل ما يعنيه هو أن المزود المستخدم لم يكتشف أيًا منها، أو أنه لا يدعم النظام البيئي. بعض المزودين لديهم ثغرات تعود بدون معلومات عن الخطورة. في هذه الحالة، سيتم إدراج الخطورة على أنها "غير محددة"
يمكن العثور على وثائق المزود لـ bomber في:
يمكنك استخدام Homebrew لتثبيت bomber باستخدام ما يلي:
brew tap devops-kung-fu/homebrew-tap
brew install devops-kung-fu/homebrew-tap/bomber
إذا لم يكن لديك Homebrew، فلا يزال بإمكانك تنزيل أحدث إصدار (مثال: bomber_0.4.1_darwin_all.tar.gz)، واستخراج الملفات من الأرشيف، واستخدام البرنامج الثنائي bomber.
إذا كنت ترغب، يمكنك نقل البرنامج الثنائي bomber إلى دليل /usr/local/bin أو أي مكان في مسارك.
لتثبيت bomber، قم بتنزيل أحدث إصدار لمنصتك وقم بالتثبيت محليًا. على سبيل المثال، قم بتثبيت bomber على أوبونتو:
dpkg -i bomber_0.5.0_linux_arm64.deb
يمكنك إما فحص مجلد كامل من قوائم المكونات أو قائمة مكونات فردية باستخدام bomber. bomber لا يهتم إذا كان لديك تنسيقات متعددة في مجلد واحد. سيقوم بفرز كل شيء لك.
لاحظ أن المخرجات الافتراضية لـ bomber تكون إلى STDOUT. خيارات الإخراج بتنسيق HTML أو JSON موصوفة لاحقًا في هذا المستند.
# باستخدام OSV (المزود الافتراضي) الذي لا يتطلب أي بيانات اعتماد
bomber scan cyclonedx.sbom.json
# باستخدام مزود يتطلب بيانات اعتماد (ossindex)
bomber scan --provider=xxx --username=xxx --token=xxx [sbom.json]
إذا وجد المزود ثغرات، سترى مخرجات مشابهة لما يلي:

إذا لم يُرجع المزود أي ثغرات، سترى رسالة تقول أنه لم يتم العثور على أي ثغرات.
ملحوظة: مجرد أن المزود لم يجد أي ثغرات باستخدام مزود محدد لا يعني أنه لا توجد ثغرات. يرجى تجربة المزودين الآخرين الذين يدعمهم bomber.
هذا مفيد عندما تتلقى قوائم مكونات متعددة من بائع لنفس المنتج. أو ربما تريد معرفة ما هي الثغرات الموجودة في مؤسستك بأكملها. سيجد فحص المجلد جميع المكونات، ويزيل التكرارات، ثم يفحصها بحثًا عن الثغرات.
# فحص مجلد من قوائم المكونات (الأمر التالي سيقوم بفحص مجلد في مجلدك الحالي باسم "sboms")
bomber scan --provider=xxx --username=xxx --token=xxx ./sboms
سترى نتيجة مشابهة لما سينتج عن فحص قائمة مكونات واحدة.
bomber يخرج البيانات بثلاثة تنسيقات مفيدة. افتراضيًا، يتم عرض المخرجات في سطر الأوامر. للحصول على تقارير محسّنة، يمكنك الإخراج بتنسيق HTML باستخدام العلم --output=html. للإخراج بتنسيق JSON، استخدم العلم --output=json. استخدم مواصفات الإخراج المفصولة بفواصل للحصول على مخرجات بتنسيقات متعددة --output=html,stdout,json.
إذا كنت ترغب في إنشاء تقرير قابل للقراءة مع معلومات مفصلة عن الثغرات، يمكنك استخدام العلم --output لحفظ تقرير إلى ملف HTML.
مثال الأمر:
bomber scan bad-bom.json --output=html
سيؤدي هذا إلى حفظ ملف في مجلدك الحالي بالتنسيق "YYYY-MM-DD-HH-MM-SS-bomber-results.html". إذا فتحت هذا الملف في متصفح ويب، سترى مخرجات مثل التالي:

يمكن لـ bomber إخراج بيانات الثغرات بتنسيق JSON باستخدام العلم --output. المخرجات الافتراضية هي إلى STDOUT. هناك قدر كبير من المعلومات الإضافية في مخرجات JSON أكثر مما يتم عرضه في الطرفية. ستتمكن من رؤية وصف الحزمة والغرض منها، واسم الثغرة، وملخص للثغرة، والمزيد.

مثال الأمر:
bomber scan bad-bom.json --output=json > filename.json
يدعم bomber أيضًا الإخراج بتنسيق Markdown. هذا مشابه جدًا لمخرجات HTML، لكنه ينقل التنسيق إلى محرك عرض Markdown، مثل GitHub. يتم حفظ المخرجات إلى ملف بالتنسيق "YYYY-MM-DD-HH-MM-SS-bomber-results.md".
مثال الأمر:
bomber scan bad-bom.json --output=md
إذا لزم الأمر، يمكنك استخدام العلم --ignore-file لتحميل قائمة بـ CVEs لتجاهلها في مخرجات الثغرات. يجب أن تكون هذه القائمة بتنسيق محدد حيث يتم إدخال كل CVE لتجاهله في سطر منفصل مشابه لما يلي:
CVE-2022-31163
CVE-2022-23520
يوجد ملف مثال bomber.ignore هنا
لاستخدام ملف bomber.ignore، استخدم الصيغة التالية:
bomber --ignore-file=bomber.ignore scan bom.json
يمكنك ضبط مستوى الخطورة باستخدام العلم --severity لإرجاع خطورات ثغرات محددة. على سبيل المثال، إذا قمت بتعيين --severity=moderate، فسيتم إرجاع الثغرات ذات خطورة MODERATE أو أعلى فقط.
على سبيل المثال، الأمر التالي سيعيد فقط الثغرات العالية والحرجة.
bomber --severity=high scan bom.json
bomber لديه القدرة على إثراء بيانات الثغرات التي يحصل عليها من المزودين. أول "مُثري" قمنا بتنفيذه هو لـ EPSS
ملحوظة: لم يعد تسجيل EPSS افتراضيًا في bomber 0.5.0 وما فوق. لإظهار درجات EPSS، تأكد من استخدام العلم --enrich=epss.
EPSS يرمز إلى نظام تسجيل التنبؤ بالاستغلال وهو إطار يتنبأ باحتمالية استغلال ثغرة أمنية. غالبًا ما يستخدم EPSS للمساعدة في تحديد الثغرات عالية المخاطر لتحديد أولويات المعالجة.
يستخدم EPSS نسبة مئوية للاحتمالية. لذا إذا رأيت 94، فإن الدرجة تحاول أن تقول أن تلك الثغرة لديها احتمالية استغلال بنسبة 94%. ومن المنطقي أن الثغرة ذات الدرجة مثل 94 هي شيء يستحق اهتمامًا فوريًا، بينما الثغرة ذات الدرجة مثل 20 تستحق أولوية أقل.
إذا كنت ترغب، يمكنك تعيين متغيرين للبيئة لتخزين بيانات اعتمادك، وعدم الحاجة إلى كتابتها في سطر الأوامر. تحقق من معلومات متغيرات البيئة لاحقًا في ملف README هذا.
إذا كنت تستخدم bomber في خطوط أنابيب CI/CD الخاصة بك، يمكنك القيام بأمر واحد متكامل مع Syft لإنشاء وفحص قائمة مكونات بحثًا عن الثغرات. للقيام بذلك، يمكنك فعل شيء مثل الأمر التالي:
# تأكد من تضمين الحرف - في نهاية الأمر. هذا يؤدي إلى تشغيل bomber للقراءة من STDIN
syft packages . -o cyclonedx-json | bomber scan --provider ossindex --output json -
ينشئ هذا الأمر قائمة مكونات، ويوجهها إلى bomber، وينتج النتائج بتنسيق JSON.
إذا كنت لا تريد إدخال بيانات الاعتماد في كل مرة، يمكنك إضافة ما يلي إلى ملف .bashrc أو .bash_profile
export BOMBER_PROVIDER_USERNAME={{اسم مستخدم OSS Index الخاص بك}}
export BOMBER_PROVIDER_TOKEN={{رمز API الخاص بـ OSS Index الخاص بك}}
باستخدام العلم --exitcode، سيتم الإرجاع برمز خروج يمثل أعلى خطورة ثغرة تم العثور عليها. بدون هذا العلم، يمكنك توقع رمز خروج 0 للنجاح، أو 1 إذا تمت مصادفة خطأ.
بافتراض عدم وجود خطأ، سيتم إرجاع القيم التالية بواسطة bomber عند استخدام --exitcode
| الخطورة | رمز الإرجاع |
|---|---|
| غير محددة (هذه حالة حيث يقدم لنا المزود شيئًا غريبًا، أو لا معلومات) | 10 |
| منخفضة | 11 |
| متوسطة | 12 |
| عالية |
يحتوي bomber الآن على ميزة تجريبية تثري وصف الثغرات في مخرجات html. تأخذ هذه الميزة ثغرة وتغير الوصف إلى شيء أكثر قابلية للفهم لمستخدم غير تقني.
ملحوظة: هذه الميزة في حالة تجريبية رئيسية في هذا الوقت. إنها بطيئة للغاية، والمخرجات ليست منسقة بشكل جيد.
لاستخدام هذه الميزة، ستحتاج إلى توفير مفتاح API الخاص بـ OpenAI. يمكنك إما تمرير هذا المفتاح إلى CLI باستخدام --openai-api-key={{مفتاح API الخاص بـ OpenAI}} أو إضافة متغير بيئة:
export OPENAI_API_KEY={{مفتاح API الخاص بـ OpenAI الخاص بك}}
بعد تعيين مفتاح API الخاص بـ OpenAI، يمكنك تعيين علامة الإخراج على النحو التالي:
bomber scan --output ai [sbom.json]
إذا كنت ترغب في تجربة bomber، ستجد مجموعة مختارة من قوائم المكونات الاختبارية في مجلد test.
--license. إذا كنت بحاجة إلى معلومات الترخيص، تأكد من طلبها مع قائمة المكونات.bomber إلى إرسال PURL واحد في كل مرة للحصول على الثغرات، لذا في قائمة مكونات كبيرة سيستغرق بعض الوقت. سنراقب ذلك.إذا كنت ترغب في المساهمة في تطوير bomber، يرجى الرجوع إلى ملف CONTRIBUTING.md في هذا المستودع. يرجى قراءة ملف CODE_OF_CONDUCT.md قبل المساهمة.
يستخدم bomber Syft لإنشاء قائمة مكونات برمجيات في كل مرة يلتزم فيها مطور كود بهذا المستودع (طالما يتم استخدام Hookz وتمت تهيئته في دليل العمل). تتوفر معلومات أكثر عن CycloneDX هنا.
قائمة مكونات CycloneDX الحالية لـ bomber متاحة هنا.
شكرًا للرعاة والداعمين لـ bomber

شكر كبير لأصدقائنا في ZERO على شعار bomber.
شكرًا لـ Sonatype لتوفير أداة رائعة مثل فهرس Sonatype OSS.
شكر جزيل لأصدقائنا ومساهمينا في bomber في Snyk لإنشاء مزود، وبرمجة معالجة قائمة مكونات من STDIN. أنتم رائعون.
وصف EPSS مأخوذ من فريق Nucleus. شكرًا لكم!
| 13 |
| حرجة | 14 |