
저장소, 기여자 및 종속성 메트릭을 기반으로 오픈소스 프로젝트의 중요도 점수를 계산하여 보안 개선의 우선순위를 정합니다.
이 프로젝트는 Securing Critical Projects WG의 멤버들이 유지관리합니다.
모든 오픈소스 프로젝트에 대한 중요도 점수를 생성합니다.
오픈소스 커뮤니티가 의존하는 중요 프로젝트 목록을 만듭니다.
이 데이터를 사용하여 이러한 중요 프로젝트의 보안 상태를 사전에 개선합니다.
프로젝트의 중요도 점수는 프로젝트의 영향력과 중요성을 정의합니다. 0 (최소 중요) 에서 1 (최대 중요) 사이의 숫자이며, Rob Pike가 작성한 다음 알고리즘을 기반으로 합니다:
오픈소스 프로젝트의 중요도 점수를 산출하기 위해 다음과 같은 기본 매개변수를 사용합니다:
| 매개변수 (Si) | 가중치 (αi) | 최대 임계값 (Ti) | 설명 | 근거 |
|---|---|---|---|---|
| created_since | 1 | 120 | 프로젝트가 생성된 이후의 시간(개월) | 오래된 프로젝트일수록 널리 사용되거나 의존될 가능성이 높습니다. |
| updated_since | -1 | 120 | 프로젝트가 마지막으로 업데이트된 이후의 시간(개월) | 최근 커밋이 없는 유지관리되지 않는 프로젝트는 의존도가 낮을 가능성이 높습니다. |
| contributor_count | 2 | 5000 | 프로젝트 기여자 수(커밋 포함) | 다양한 기여자의 참여는 프로젝트의 중요성을 나타냅니다. |
| org_count | 1 | 10 | 기여자가 속한 고유 조직 수 | 조직 간 의존성을 나타냅니다. |
| commit_frequency | 1 | 1000 | 지난 1년간 주당 평균 커밋 수 | 코드 변경량이 많을수록 프로젝트 중요성을 어느 정도 나타냅니다. 또한 취약점에 더 취약할 가능성이 높습니다. |
| recent_releases_count | 0.5 | 26 | 지난 1년간 릴리스 수 | 빈번한 릴리스는 사용자 의존성을 나타냅니다. 항상 사용되는 것은 아니므로 가중치가 낮습니다. |
| closed_issues_count | 0.5 | 5000 | 지난 90일간 종료된 이슈 수 | 높은 기여자 참여와 사용자 이슈 종료에 대한 집중도를 나타냅니다. 프로젝트 기여자에 의존하므로 가중치가 낮습니다. |
| updated_issues_count | 0.5 | 5000 | 지난 90일간 업데이트된 이슈 수 | 높은 기여자 참여를 나타냅니다. 프로젝트 기여자에 의존하므로 가중치가 낮습니다. |
| comment_frequency | 1 | 15 | 지난 90일간 이슈당 평균 댓글 수 | 높은 사용자 활동과 의존도를 나타냅니다. |
| dependents_count | 2 | 500000 | 커밋 메시지에서 프로젝트가 언급된 횟수 | 저장소 사용을 나타내며, 일반적으로 버전 업데이트에서 나타납니다. 이 매개변수는 패키지 의존성 그래프가 없는 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를 참조하세요.
구성 중 하나를 복사하여 필요에 맞게 가중치와 임계값을 조정해도 좋습니다.
중요도 점수를 실행하기 전에 다음이 필요합니다:
GITHUB_AUTH_TOKEN에 설정해야 합니다.
이렇게 하면 인증되지 않은 요청으로 인한 GitHub의
API 속도 제한을 피할 수 있습니다.# 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 플래그로 지정할 수 있습니다.
중요도 점수 프로젝트에는 중요도 점수 데이터를 생성하고 처리하기 위한 다른 명령도 있습니다.
enumerate_github:
최소 별점 수를 기준으로 GitHub 저장소 집합을 정확하게 수집하는 도구collect_signals:
Scorecard 프로젝트의 인프라를 활용하여
대규모로 원시 신호를 수집하는 워커scorer:
입력 CSV 파일을 기반으로 중요도 점수를 다시 계산하는 도구중요도 점수가 포함된 중요 프로젝트 목록을 확인하고 싶다면, csv 형식과 BigQuery 데이터셋으로 공개하고 있습니다.
이 데이터는 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;
참여하고 싶거나 논의하고 싶은 아이디어가 있다면, Securing Critical Projects WG 회의에서 이 프로젝트에 대해 논의합니다.
일정과 회의 초대장은 커뮤니티 캘린더에서 확인하세요.
기여 방법에 대한 지침은 Contributing 문서를 참조하세요.