
Calcola un punteggio di criticità per progetti open source basandosi su metriche di repository, contributori e dipendenze, per dare priorità ai miglioramenti di sicurezza.
Questo progetto è mantenuto dai membri del Securing Critical Projects WG.
Generare un punteggio di criticità per ogni progetto open source.
Creare un elenco di progetti critici da cui dipende la comunità open source.
Usare questi dati per migliorare in modo proattivo la postura di sicurezza di questi progetti critici.
Il punteggio di criticità di un progetto definisce l'influenza e l'importanza di un progetto. È un numero compreso tra 0 (meno critico) e 1 (più critico). Si basa sul seguente algoritmo di Rob Pike:
Utilizziamo i seguenti parametri predefiniti per ricavare il punteggio di criticità di un progetto open source:
NOTA:
$ 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
Il punteggio può essere modificato utilizzando il parametro -scoring-config e fornendo
un file di configurazione diverso per specificare come viene calcolato il punteggio.
Di default, per calcolare il punteggio viene utilizzata la configurazione original_pike.yml.
Tuttavia, è possibile fornire altri file di configurazione per produrre punteggi diversi. Vedi
config/scorer per maggiori informazioni.
Sentiti libero di copiare una delle configurazioni e di modificare pesi e soglie in base alle tue esigenze.
Prima di eseguire criticality score, devi:
GITHUB_AUTH_TOKEN.
Questo aiuta a evitare i
limiti di frequenza dell'API
di GitHub con richieste non autenticate.# For posix platforms, e.g. linux, mac:
export GITHUB_AUTH_TOKEN=<your access token>
# For windows:
set GITHUB_AUTH_TOKEN=<your access token>
Ci sono attualmente tre formati: text, json e csv. Altri potrebbero essere aggiunti in futuro.
Questi possono essere specificati con il flag -format.
Il progetto criticality score ha anche altri comandi per generare e lavorare con i dati del punteggio di criticità.
enumerate_github:
uno strumento per raccogliere con precisione un insieme di repository GitHub con un numero minimo di stellecollect_signals:
un worker per raccogliere segnali grezzi su larga scala sfruttando
l'infrastruttura del progetto Scorecard.scorer:
uno strumento per ricalcolare i punteggi di criticità basandosi su un file CSV di input.Se sei interessato a vedere un elenco di progetti critici con il loro punteggio
di criticità, li pubblichiamo in formato csv e in un dataset BigQuery.
Questi dati sono generati utilizzando un'istanza di produzione del progetto criticality score in esecuzione su GCP. I dettagli su come viene distribuita si trovano nella directory infra.
NOTA: attualmente questi elenchi sono derivati SOLO da progetti ospitati su GitHub. Prevediamo di ampliarli nel prossimo futuro per includere progetti ospitati su altri sistemi di controllo versione.
I dati sono disponibili su Google Cloud Storage e possono essere scaricati tramite:
gsutil: gsutil ls gs://ossf-criticality-score/Questi dati sono disponibili nel dataset BigQuery pubblico.
Con un account GCP puoi eseguire query sui dati. Ad esempio, ecco una query che restituisce i primi 100 repository per punteggio:
SELECT repo.url, default_score
FROM `openssf.criticality_score_cron.criticality-score-v0-latest`
ORDER BY default_score DESC
LIMIT 100;
Se vuoi partecipare o hai idee di cui vorresti parlare, discutiamo di questo progetto nelle riunioni del Securing Critical Projects WG.
Consulta il Calendario della comunità per il programma e gli inviti alle riunioni.
Consulta la documentazione Contributing per indicazioni su come contribuire.
| Parametro (Si) | Peso (αi) | Soglia massima (Ti) | Descrizione | Motivazione |
|---|
| created_since | 1 | 120 | Tempo trascorso dalla creazione del progetto (in mesi) | Un progetto più vecchio ha maggiori probabilità di essere ampiamente utilizzato o di essere una dipendenza. |
| updated_since | -1 | 120 | Tempo trascorso dall'ultimo aggiornamento del progetto (in mesi) | I progetti non mantenuti senza commit recenti hanno maggiori probabilità di essere meno utilizzati. |
| contributor_count | 2 | 5000 | Numero di contributori del progetto (con commit) | Il coinvolgimento di più contributori indica l'importanza del progetto. |
| org_count | 1 | 10 | Numero di organizzazioni distinte a cui appartengono i contributori | Indica dipendenza tra organizzazioni. |
| commit_frequency | 1 | 1000 | Numero medio di commit a settimana nell'ultimo anno | Una maggiore attività di modifica del codice indica in parte l'importanza del progetto. Inoltre, maggiore suscettibilità alle vulnerabilità. |
| recent_releases_count | 0.5 | 26 | Numero di release nell'ultimo anno | Release frequenti indicano dipendenza degli utenti. Peso inferiore perché non sempre utilizzato. |
| closed_issues_count | 0.5 | 5000 | Numero di issue chiuse negli ultimi 90 giorni | Indica un elevato coinvolgimento dei contributori e l'attenzione alla chiusura delle issue degli utenti. Peso inferiore perché dipende dai contributori del progetto. |
| updated_issues_count | 0.5 | 5000 | Numero di issue aggiornate negli ultimi 90 giorni | Indica un elevato coinvolgimento dei contributori. Peso inferiore perché dipende dai contributori del progetto. |
| comment_frequency | 1 | 15 | Numero medio di commenti per issue negli ultimi 90 giorni | Indica un'elevata attività e dipendenza degli utenti. |
| dependents_count | 2 | 500000 | Numero di menzioni del progetto nei messaggi di commit | Indica l'uso del repository, di solito negli aggiornamenti di versione. Questo parametro funziona in tutti i linguaggi, inclusi C/C++ che non hanno grafi di dipendenza dei pacchetti (anche se in modo un po' rozzo). Si prevede di aggiungere gli alberi di dipendenza dei pacchetti nel prossimo futuro. |