
Calcule un score de criticité pour les projets open source à partir des métriques du dépôt, des contributeurs et des dépendances afin de prioriser les améliorations de sécurité.
Ce projet est maintenu par des membres du Securing Critical Projects WG.
Générer un score de criticité pour chaque projet open source.
Créer une liste de projets critiques dont dépend la communauté open source.
Utiliser ces données pour améliorer de manière proactive la posture de sécurité de ces projets critiques.
Le score de criticité d'un projet définit l'influence et l'importance d'un projet. C'est un nombre compris entre 0 (moins critique) et 1 (plus critique). Il est basé sur l' algorithme de Rob Pike :
Nous utilisons les paramètres par défaut suivants pour dériver le score de criticité d'un projet open source :
REMARQUE :
$ 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
Le score peut être modifié en utilisant le paramètre -scoring-config et en fournissant
un fichier de configuration différent pour spécifier comment le score est calculé.
Par défaut, la configuration original_pike.yml est utilisée pour calculer le score.
Cependant, d'autres fichiers de configuration peuvent être fournis pour produire des scores différents. Voir
config/scorer pour plus d'informations.
N'hésitez pas à copier l'une des configurations et à ajuster les poids et les seuils selon vos besoins.
Avant d'exécuter le score de criticité, vous devez :
GITHUB_AUTH_TOKEN.
Cela permet d'éviter les
limites de débit de l'API
de GitHub avec des requêtes non authentifiées.# For posix platforms, e.g. linux, mac:
export GITHUB_AUTH_TOKEN=<your access token>
# For windows:
set GITHUB_AUTH_TOKEN=<your access token>
Il existe actuellement trois formats : text, json et csv. D'autres pourraient être ajoutés à l'avenir.
Ils peuvent être spécifiés avec le paramètre -format.
Le projet score de criticité comprend également d'autres commandes pour générer et travailler avec les données du score de criticité.
enumerate_github :
un outil pour collecter avec précision un ensemble de dépôts GitHub avec un nombre minimal d'étoilescollect_signals :
un worker pour collecter des signaux bruts à grande échelle en tirant parti de
l'infrastructure du projet Scorecard.scorer :
un outil pour recalculer les scores de criticité à partir d'un fichier CSV d'entrée.Si vous souhaitez voir une liste de projets critiques avec leur score de criticité,
nous les publions au format csv et dans un ensemble de données BigQuery.
Ces données sont générées à l'aide d'une instance de production du projet score de criticité exécuté dans GCP. Les détails de son déploiement se trouvent dans le répertoire infra.
REMARQUE : Actuellement, ces listes sont dérivées uniquement de projets hébergés sur GitHub. Nous prévoyons de les étendre dans un avenir proche pour prendre en compte les projets hébergés sur d'autres systèmes de contrôle de version.
Les données sont disponibles sur Google Cloud Storage et peuvent être téléchargées via :
gsutil : gsutil ls gs://ossf-criticality-score/Ces données sont disponibles dans l'ensemble de données BigQuery public.
Avec un compte GCP, vous pouvez exécuter des requêtes sur les données. Par exemple, voici une requête qui renvoie les 100 premiers dépôts par score :
SELECT repo.url, default_score
FROM `openssf.criticality_score_cron.criticality-score-v0-latest`
ORDER BY default_score DESC
LIMIT 100;
Si vous souhaitez vous impliquer ou si vous avez des idées à discuter, nous parlons de ce projet lors des réunions du Securing Critical Projects WG.
Consultez le Calendrier communautaire pour le calendrier et les invitations aux réunions.
Consultez la documentation Contributing pour savoir comment contribuer.
| Paramètre (Si) | Poids (αi) | Seuil maximal (Ti) | Description | Justification |
|---|
| created_since | 1 | 120 | Temps écoulé depuis la création du projet (en mois) | Un projet plus ancien a plus de chances d'être largement utilisé ou d'être une dépendance. |
| updated_since | -1 | 120 | Temps écoulé depuis la dernière mise à jour du projet (en mois) | Les projets non maintenus sans commits récents ont moins de chances d'être utilisés comme dépendances. |
| contributor_count | 2 | 5000 | Nombre de contributeurs du projet (avec des commits) | L'implication de différents contributeurs indique l'importance du projet. |
| org_count | 1 | 10 | Nombre d'organisations distinctes auxquelles appartiennent les contributeurs | Indique une dépendance inter-organisations. |
| commit_frequency | 1 | 1000 | Nombre moyen de commits par semaine au cours de la dernière année | Un turnover de code plus élevé indique légèrement l'importance du projet. De plus, une plus grande susceptibilité aux vulnérabilités. |
| recent_releases_count | 0.5 | 26 | Nombre de versions publiées au cours de la dernière année | Des versions fréquentes indiquent une dépendance des utilisateurs. Poids plus faible car ce n'est pas toujours utilisé. |
| closed_issues_count | 0.5 | 5000 | Nombre de problèmes clôturés au cours des 90 derniers jours | Indique une implication élevée des contributeurs et une attention portée à la résolution des problèmes des utilisateurs. Poids plus faible car cela dépend des contributeurs du projet. |
| updated_issues_count | 0.5 | 5000 | Nombre de problèmes mis à jour au cours des 90 derniers jours | Indique une implication élevée des contributeurs. Poids plus faible car cela dépend des contributeurs du projet. |
| comment_frequency | 1 | 15 | Nombre moyen de commentaires par problème au cours des 90 derniers jours | Indique une activité et une dépendance élevées des utilisateurs. |
| dependents_count | 2 | 500000 | Nombre de mentions du projet dans les messages de commit | Indique l'utilisation du dépôt, généralement dans les mises à jour de versions. Ce paramètre fonctionne dans tous les langages, y compris C/C++ qui n'ont pas de graphe de dépendances de paquets (bien que sommaire). Prévision d'ajouter des arbres de dépendances de paquets dans un avenir proche. |