
يحسب درجة حرجة للمشاريع مفتوحة المصدر من مقاييس المستودع والمساهمين والتبعيات لتحديد أولويات التحسينات الأمنية.
تتم صيانة هذا المشروع من قبل أعضاء الفريق العامل لتأمين المشاريع الحرجة.
توليد درجة حرجية لكل مشروع مفتوح المصدر.
إنشاء قائمة بالمشاريع الحرجة التي يعتمد عليها مجتمع المصادر المفتوحة.
استخدام هذه البيانات لتحسين الوضع الأمني لهذه المشاريع الحرجة بشكل استباقي.
تحدد درجة الحرجية للمشروع مدى تأثيره وأهميته. وهي رقم يتراوح بين 0 (الأقل حرجية) و1 (الأكثر حرجية). وهي مبنية على الخوارزمية التالية من إعداد روب بايك:
نستخدم المعاملات الافتراضية التالية لاستخلاص درجة الحرجية لمشروع مفتوح المصدر:
| المعامل (Si) | الوزن (αi) | الحد الأقصى (Ti) | الوصف | المبرر |
|---|---|---|---|---|
| created_since | 1 | 120 | الوقت المنقضي منذ إنشاء المشروع (بالأشهر) | المشروع الأقدم لديه احتمالية أعلى لكونه مستخدمًا على نطاق واسع أو معتمدًا عليه. |
| updated_since | -1 | 120 | الوقت المنقضي منذ آخر تحديث للمشروع (بالأشهر) | المشاريع غير المُصانة التي لا تحتوي على التزامات (commits) حديثة لديها احتمالية أعلى لكونها أقل اعتمادًا عليها. |
| contributor_count | 2 | 5000 | عدد المساهمين في المشروع (من لديهم commits) | مشاركة مساهمين مختلفين تشير إلى أهمية المشروع. |
| org_count | 1 | 10 | عدد المؤسسات الفريدة التي ينتمي إليها المساهمون | يشير إلى الاعتماد عبر المؤسسات. |
| commit_frequency | 1 | 1000 | متوسط عدد الالتزامات (commits) أسبوعيًا خلال العام الماضي | ارتفاع معدل تغيير الكود (code churn) يشير بشكل طفيف إلى أهمية المشروع. كما أنه يزيد من قابلية التعرض للثغرات الأمنية. |
| recent_releases_count | 0.5 | 26 | عدد الإصدارات (releases) خلال العام الماضي | الإصدارات المتكررة تشير إلى اعتماد المستخدمين عليها. الوزن أقل لأن هذا لا يُستخدم دائمًا. |
| closed_issues_count | 0.5 | 5000 | عدد المشكلات (issues) التي أُغلقت خلال آخر 90 يومًا | يشير إلى مشاركة عالية من المساهمين وتركيزًا على إغلاق مشكلات المستخدمين. الوزن أقل لأنه يعتمد على مساهمي المشروع. |
| updated_issues_count | 0.5 | 5000 | عدد المشكلات (issues) التي حُدّثت خلال آخر 90 يومًا | يشير إلى مشاركة عالية من المساهمين. الوزن أقل لأنه يعتمد على مساهمي المشروع. |
| comment_frequency | 1 | 15 | متوسط عدد التعليقات لكل مشكلة (issue) خلال آخر 90 يومًا | يشير إلى نشاط واعتماد مرتفع من المستخدمين. |
| dependents_count | 2 | 500000 | عدد مرات ذكر المشروع في رسائل الالتزامات (commit messages) | يشير إلى استخدام المستودع، عادةً في ترقيات الإصدارات. يعمل هذا المعامل عبر جميع اللغات، بما في ذلك C/C++ التي لا تحتوي على رسوم بيانية لتبعيات الحزم (على الرغم من أن الطريقة ترقيعية إلى حد ما). نخطط لإضافة أشجار تبعيات الحزم في المستقبل القريب. |
ملاحظة:
$ go install github.com/ossf/criticality_score/v2/cmd/criticality_score@latest
$ export GITHUB_TOKEN=... # requires a GitHub token to work
$ gcloud auth login --update-adc # optional, add -depsdev-disable to skip
$ criticality_score -gcp-project-id=[your projectID] https://github.com/kubernetes/kubernetes
repo.name: kubernetes
repo.url: https://github.com/kubernetes/kubernetes
repo.language: Go
repo.license: Apache License 2.0
legacy.created_since: 87
legacy.updated_since: 0
legacy.contributor_count: 3999
legacy.watchers_count: 79583
legacy.org_count: 5
legacy.commit_frequency: 97.2
legacy.recent_releases_count: 70
legacy.updated_issues_count: 5395
legacy.closed_issues_count: 3062
legacy.comment_frequency: 5.5
legacy.dependents_count: 454393
default_score: 0.99107
يمكن تغيير الدرجة باستخدام معامل -scoring-config وتزويد
ملف إعدادات مختلف لتحديد كيفية حساب الدرجة.
بشكل افتراضي، يُستخدم إعداد original_pike.yml لحساب الدرجة.
ومع ذلك، يمكن تزويد ملفات إعدادات أخرى لإنتاج درجات مختلفة. راجع
config/scorer لمزيد من التفاصيل.
لا تتردد في نسخ أحد الإعدادات وتعديل الأوزان والحدود القصوى لتناسب احتياجاتك.
قبل تشغيل criticality score، يجب عليك:
GITHUB_AUTH_TOKEN.
يساعد هذا في تجنب
حدود معدل طلبات واجهة برمجة التطبيقات
الخاصة بـ GitHub مع الطلبات غير المصادق عليها.# For posix platforms, e.g. linux, mac:
export GITHUB_AUTH_TOKEN=<your access token>
# For windows:
set GITHUB_AUTH_TOKEN=<your access token>
توجد ثلاثة تنسيقات حاليًا: text وjson وcsv. وقد تُضاف تنسيقات أخرى في المستقبل.
يمكن تحديدها باستخدام الخيار -format.
يحتوي مشروع criticality score أيضًا على أوامر أخرى لتوليد بيانات درجة الحرجية والتعامل معها.
enumerate_github:
أداة لجمع مجموعة من مستودعات GitHub بدقة بحد أدنى من النجومcollect_signals:
عامل (worker) لجمع الإشارات الأولية على نطاق واسع من خلال الاستفادة من
البنية التحتية لـ مشروع Scorecard.scorer:
أداة لإعادة حساب درجات الحرجية استنادًا إلى ملف CSV مُدخل.إذا كنت مهتمًا برؤية قائمة بالمشاريع الحرجة مع درجات الحرجية الخاصة بها،
فإننا ننشرها بتنسيق csv وكمجموعة بيانات BigQuery.
يتم توليد هذه البيانات باستخدام نسخة إنتاجية من مشروع criticality score يعمل على GCP. يمكن العثور على تفاصيل حول كيفية نشرها في دليل infra.
ملاحظة: حاليًا، تُشتق هذه القوائم من المشاريع المستضافة على GitHub فقط. ونخطط لتوسيعها في المستقبل القريب لتشمل المشاريع المستضافة على أنظمة التحكم بالمصادر الأخرى.
البيانات متاحة على Google Cloud Storage ويمكن تنزيلها عبر:
gsutil: gsutil ls gs://ossf-criticality-score/تتوفر هذه البيانات في مجموعة بيانات BigQuery العامة.
باستخدام حساب GCP يمكنك تشغيل استعلامات عبر البيانات. على سبيل المثال، إليك استعلام يعرض أفضل 100 مستودع حسب الدرجة:
SELECT repo.url, default_score
FROM `openssf.criticality_score_cron.criticality-score-v0-latest`
ORDER BY default_score DESC
LIMIT 100;
إذا كنت ترغب في المشاركة أو لديك أفكار ترغب في مناقشتها، فإننا نناقش هذا المشروع في اجتماعات الفريق العامل لتأمين المشاريع الحرجة.
راجع التقويم المجتمعي للاطلاع على الجدول الزمني ودعوات الاجتماعات.
راجع وثائق المساهمة للحصول على إرشادات حول كيفية المساهمة.