
Calcula uma pontuação de criticalidade para projetos de código aberto a partir de métricas de repositório, contribuidores e dependências para priorizar melhorias de segurança.
Este projeto é mantido por membros do Securing Critical Projects WG.
Gerar uma pontuação de criticalidade para cada projeto de código aberto.
Criar uma lista de projetos críticos dos quais a comunidade de código aberto depende.
Usar esses dados para melhorar proativamente a postura de segurança desses projetos críticos.
A pontuação de criticalidade de um projeto define a influência e a importância de um projeto. É um número entre 0 (menos crítico) e 1 (mais crítico). Baseia-se no seguinte algoritmo por Rob Pike:
Usamos os seguintes parâmetros padrão para derivar a pontuação de criticalidade de um projeto de código aberto:
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
A pontuação pode ser alterada usando o parâmetro -scoring-config e fornecendo
um arquivo de configuração diferente para especificar como a pontuação é calculada.
Por padrão, a configuração original_pike.yml é usada para calcular a pontuação.
No entanto, outros arquivos de configuração podem ser fornecidos para produzir pontuações diferentes. Consulte
config/scorer para mais informações.
Sinta-se à vontade para copiar uma das configurações e ajustar os pesos e os limites máximos de acordo com suas necessidades.
Antes de executar o criticality score, você precisa:
GITHUB_AUTH_TOKEN.
Isso ajuda a evitar os
limites de taxa da API
do GitHub para requisições não autenticadas.# For posix platforms, e.g. linux, mac:
export GITHUB_AUTH_TOKEN=<your access token>
# For windows:
set GITHUB_AUTH_TOKEN=<your access token>
Atualmente há três formatos: text, json e csv. Outros podem ser adicionados no futuro.
Eles podem ser especificados com a flag -format.
O projeto criticality score também possui outros comandos para gerar e trabalhar com dados de pontuação de criticalidade.
enumerate_github:
uma ferramenta para coletar com precisão um conjunto de repositórios do GitHub com um número mínimo de estrelascollect_signals:
um worker para coletar sinais brutos em escala, aproveitando a
infraestrutura do projeto Scorecard.scorer:
uma ferramenta para recalcular pontuações de criticalidade com base em um arquivo CSV de entrada.Se você tiver interesse em ver uma lista de projetos críticos com suas pontuações
de criticalidade, nós as publicamos em formato csv e em um dataset do BigQuery.
Esses dados são gerados por uma instância de produção do projeto criticality score executada no GCP. Detalhes sobre como isso é implantado podem ser encontrados no diretório infra.
NOTA: Atualmente, essas listas são derivadas apenas de projetos hospedados no GitHub. Pretendemos expandi-las em um futuro próximo para incluir projetos hospedados em outros sistemas de controle de versão.
Os dados estão disponíveis no Google Cloud Storage e podem ser baixados por meio de:
gsutil: gsutil ls gs://ossf-criticality-score/Esses dados estão disponíveis no dataset público do BigQuery.
Com uma conta GCP, você pode executar consultas sobre os dados. Por exemplo, esta é uma consulta que retorna os 100 principais repositórios por pontuação:
SELECT repo.url, default_score
FROM `openssf.criticality_score_cron.criticality-score-v0-latest`
ORDER BY default_score DESC
LIMIT 100;
Se quiser participar ou tiver ideias sobre as quais gostaria de conversar, discutimos este projeto nas reuniões do Securing Critical Projects WG.
Consulte o Calendário da Comunidade para ver a programação e os convites para as reuniões.
Consulte a documentação Contributing para obter orientações sobre como contribuir.
| Parâmetro (Si) | Peso (αi) | Limite máximo (Ti) | Descrição | Justificativa |
|---|
| created_since | 1 | 120 | Tempo desde a criação do projeto (em meses) | Projetos mais antigos têm maior chance de serem amplamente utilizados ou de servirem como dependência. |
| updated_since | -1 | 120 | Tempo desde a última atualização do projeto (em meses) | Projetos não mantidos, sem commits recentes, têm maior chance de serem menos utilizados como dependência. |
| contributor_count | 2 | 5000 | Número de colaboradores do projeto (com commits) | O envolvimento de diferentes colaboradores indica a importância do projeto. |
| org_count | 1 | 10 | Número de organizações distintas às quais os colaboradores pertencem | Indica dependência entre organizações. |
| commit_frequency | 1 | 1000 | Número médio de commits por semana no último ano | Maior rotatividade de código indica levemente a importância do projeto. Além disso, maior suscetibilidade a vulnerabilidades. |
| recent_releases_count | 0.5 | 26 | Número de versões lançadas no último ano | Lançamentos frequentes indicam dependência dos usuários. Peso menor, pois nem sempre é utilizado. |
| closed_issues_count | 0.5 | 5000 | Número de issues encerradas nos últimos 90 dias | Indica alto envolvimento dos colaboradores e foco em resolver issues dos usuários. Peso menor, pois depende dos colaboradores do projeto. |
| updated_issues_count | 0.5 | 5000 | Número de issues atualizadas nos últimos 90 dias | Indica alto envolvimento dos colaboradores. Peso menor, pois depende dos colaboradores do projeto. |
| comment_frequency | 1 | 15 | Número médio de comentários por issue nos últimos 90 dias | Indica alta atividade e dependência dos usuários. |
| dependents_count | 2 | 500000 | Número de menções ao projeto em mensagens de commit | Indica o uso do repositório, geralmente em atualizações de versão. Este parâmetro funciona em todas as linguagens, incluindo C/C++, que não possuem grafos de dependência de pacotes (embora seja uma solução improvisada). Há planos de adicionar árvores de dependência de pacotes em um futuro próximo. |