
リポジトリ、コントリビューター、依存関係のメトリクスからオープンソースプロジェクトの重要度スコアを算出し、セキュリティ改善の優先順位付けを行います。
このプロジェクトは、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年間の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 を参照してください。
必要に応じて設定の1つをコピーし、重みとしきい値を調整してください。
criticality score を実行する前に、以下を行う必要があります:
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 の3つのフォーマットがあります。将来、他のフォーマットが追加される可能性があります。
これらは -format フラグで指定できます。
criticality score プロジェクトには、criticality score データを生成・操作するための他のコマンドもあります。
enumerate_github:
最小スター数を持つ GitHub リポジトリのセットを正確に収集するためのツールcollect_signals:
Scorecard プロジェクトのインフラストラクチャを活用して、生シグナルを大規模に収集するワーカー。scorer:
入力CSVファイルに基づいて criticality score を再計算するためのツール。重要度スコア付きの重要プロジェクトのリストを確認したい場合は、csv 形式と BigQuery データセットで公開しています。
このデータは、GCP で稼働する criticality score プロジェクトの本番インスタンスを使用して生成されています。デプロイ方法の詳細は 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 ミーティングでこのプロジェクトについて議論しています。
スケジュールとミーティング招待については、Community Calendar をご覧ください。
コントリビューションの方法については、Contributing ドキュメントをご覧ください。