
Calcula una puntuación de criticidad para proyectos de código abierto a partir de métricas de repositorio, contribuyentes y dependencias para priorizar mejoras de seguridad.
Este proyecto es mantenido por miembros del Securing Critical Projects WG.
Generar una puntuación de criticidad para cada proyecto de código abierto.
Crear una lista de proyectos críticos de los que depende la comunidad de código abierto.
Usar estos datos para mejorar de forma proactiva la postura de seguridad de estos proyectos críticos.
La puntuación de criticidad de un proyecto define la influencia e importancia de un proyecto. Es un número entre 0 (menos crítico) y 1 (más crítico). Se basa en el siguiente algoritmo de Rob Pike:
Usamos los siguientes parámetros predeterminados para derivar la puntuación de criticidad de un proyecto de código abierto:
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
La puntuación se puede cambiar usando el parámetro -scoring-config y proporcionando
un archivo de configuración diferente para especificar cómo se calcula la puntuación.
Por defecto, la configuración original_pike.yml se utiliza para calcular la puntuación.
Sin embargo, se pueden proporcionar otros archivos de configuración para obtener puntuaciones diferentes. Consulta
config/scorer para más información.
Siéntete libre de copiar una de las configuraciones y ajustar los pesos y umbrales según tus necesidades.
Antes de ejecutar la puntuación de criticidad, necesitas:
GITHUB_AUTH_TOKEN.
Esto ayuda a evitar los
límites de tasa de la API
de GitHub con solicitudes no autenticadas.# For posix platforms, e.g. linux, mac:
export GITHUB_AUTH_TOKEN=<your access token>
# For windows:
set GITHUB_AUTH_TOKEN=<your access token>
Actualmente hay tres formatos: text, json y csv. Otros pueden añadirse en el futuro.
Estos pueden especificarse con la opción -format.
El proyecto de puntuación de criticidad también tiene otros comandos para generar y trabajar con datos de puntuación de criticidad.
enumerate_github:
una herramienta para recopilar con precisión un conjunto de repositorios de GitHub con un número mínimo de estrellascollect_signals:
un worker para recopilar señales brutas a gran escala aprovechando la
infraestructura del proyecto Scorecard.scorer:
una herramienta para recalcular puntuaciones de criticidad basándose en un archivo CSV de entrada.Si te interesa ver una lista de proyectos críticos con su puntuación
de criticidad, los publicamos en formato csv y en un conjunto de datos de BigQuery.
Estos datos se generan mediante una instancia de producción del proyecto de puntuación de criticidad que se ejecuta en GCP. Los detalles de cómo se implementa se encuentran en el directorio infra.
NOTA: Actualmente, estas listas se derivan únicamente de proyectos alojados en GitHub. Tenemos previsto ampliarlas en un futuro cercano para incluir proyectos alojados en otros sistemas de control de versiones.
Los datos están disponibles en Google Cloud Storage y pueden descargarse mediante:
gsutil: gsutil ls gs://ossf-criticality-score/Estos datos están disponibles en el conjunto de datos público de BigQuery.
Con una cuenta de GCP puedes ejecutar consultas sobre los datos. Por ejemplo, esta consulta devuelve los 100 repositorios principales por puntuación:
SELECT repo.url, default_score
FROM `openssf.criticality_score_cron.criticality-score-v0-latest`
ORDER BY default_score DESC
LIMIT 100;
Si quieres participar o tienes ideas que te gustaría comentar, analizamos este proyecto en las reuniones del Securing Critical Projects WG.
Consulta el Calendario de la comunidad para ver el cronograma y las invitaciones a las reuniones.
Consulta la documentación de Contribuciones para obtener orientación sobre cómo contribuir.
| Parámetro (Si) | Peso (αi) | Umbral máximo (Ti) | Descripción | Justificación |
|---|
| created_since | 1 | 120 | Tiempo desde que se creó el proyecto (en meses) | Un proyecto más antiguo tiene más probabilidades de ser ampliamente utilizado o de que se dependa de él. |
| updated_since | -1 | 120 | Tiempo desde la última actualización del proyecto (en meses) | Los proyectos sin mantenimiento y sin commits recientes tienen más probabilidades de que se dependa menos de ellos. |
| contributor_count | 2 | 5000 | Número de contribuyentes del proyecto (con commits) | La participación de diferentes contribuyentes indica la importancia del proyecto. |
| org_count | 1 | 10 | Número de organizaciones distintas a las que pertenecen los contribuyentes | Indica dependencia entre organizaciones. |
| commit_frequency | 1 | 1000 | Número medio de commits por semana en el último año | Una mayor rotación de código indica ligeramente la importancia del proyecto. También, mayor susceptibilidad a vulnerabilidades. |
| recent_releases_count | 0.5 | 26 | Número de versiones publicadas en el último año | Las versiones frecuentes indican dependencia de los usuarios. Peso menor porque no siempre se utiliza. |
| closed_issues_count | 0.5 | 5000 | Número de incidencias cerradas en los últimos 90 días | Indica una alta participación de los contribuyentes y su enfoque en cerrar incidencias de los usuarios. Peso menor porque depende de los contribuyentes del proyecto. |
| updated_issues_count | 0.5 | 5000 | Número de incidencias actualizadas en los últimos 90 días | Indica una alta participación de los contribuyentes. Peso menor porque depende de los contribuyentes del proyecto. |
| comment_frequency | 1 | 15 | Número medio de comentarios por incidencia en los últimos 90 días | Indica una alta actividad y dependencia de los usuarios. |
| dependents_count | 2 | 500000 | Número de menciones del proyecto en los mensajes de commit | Indica el uso del repositorio, normalmente en actualizaciones de versiones. Este parámetro funciona en todos los lenguajes, incluidos C/C++, que no tienen grafos de dependencias de paquetes (aunque sea de forma un tanto improvisada). Se planea añadir árboles de dependencias de paquetes en un futuro cercano. |