Open source projectの重要度スコア算出アルゴリズム
概要
- 現在、さまざまな組織がオープンソース プロジェクトに依存している一方で、多くのプロジェクトは、それらを維持するための時間・リソース等に苦労している[4]
- 依存度の高いプロジェクトが必要なリソースを確実に入手できるようにするための最初のステップとして、Open Source Security Foundation(OpenSSF)のSecuring Critical Projects WGのメンバーがメンテナンスを行うcriticality_scoreというプロジェクト(リリースはGoogleで[4]、2023年1月の時点で最新versionが1.0.7。β版との記載あり)が存在する
- OpenSSF(https://openssf.org/)は、産業界で最も重要なオープンソースセキュリティイニシアチブおよびそれをサポートする個人・企業をまとめる業界横断的な組織であり、オープンソース エコシステムの参加者が高品質のソフトウェアを使用および共有し、セキュリティがプロアクティブかつ当然のこととして処理されるような未来を想定している。[2]
- Securing Critical Projects WG(Working Group)は、OpenSSFのWorking Groupの一つで、重要なオープンソースソフトウェアプロジェクトを特定し、それらを保護するというゴールを掲げている。[3]
- 上記のプロジェクトでオープンソースプロジェクトの重要度スコア(Criticality Score)を計算するアルゴリズムを公開している
- プロジェクトのゴールは下記の3点
- 全てのオープンソースプロジェクトに対する重要度スコアを生成する
- オープンソースコミュニティが依存する重要なプロジェクトのリストを作成する
- それらのデータを使用して、これらの重要なプロジェクトのセキュリティ体制を積極的に改善する
- プロジェクトのゴールは下記の3点
重要度スコア算出のためのアルゴリズム
- criticality_scoreではRob Pike氏のアルゴリズムが用いられていた
- 様々なパラメータ$S_{i}$に対して、ウエイト$\alpha_{i}$としきい値$T_{i}$を設定して下記の式で算出したスコアの和をとることで、重要度スコア$C_{project}$(重要度低 0 ~ 1 重要度高)を求める
\begin{align*}
C_{project} &= \frac{1}{\sum_{i} \alpha_{i}}\sum_{i} \alpha_{i} \frac{\log{(1+S_{i})}}{\log{(1+\max{(S_{i}, T_{i})})}}
\end{align*}
- パラメータ$S_{i}$とデフォルトのウエイト$\alpha_{i}$としきい値$T_{i}$は下記の通り
パラメータ $S_{i}$ | ウエイト $\alpha_{i}$ | しきい値 $T_{i}$ | パラメータの説明 | パラメータの使用理由 |
created_since | 1 | 120 | プロジェクト作成されてから経過した時間(月換算) | 長く続いているプロジェクトほど広く使われている可能性があり、重要とみることができる |
updated_since | -1 | 120 | プロジェクトが最終更新されてから経過した時間(月換算) | 最近メンテナンスされた(commitがあった)プロジェクトほど依存度が高くなり、重要とみることができる |
contributor_count | 2 | 5000 | (コミットをした)コントリビューター数 | コントリビューターの関与が多いほうが、重要とみることができる |
org_count | 1 | 10 | コントリビューターが所属する組織数 | 多くの組織が関与している方が、重要とみることができる |
commit_frequency | 1 | 1000 | 昨年の 1 週間あたりの平均commit数 | 昨年のcommit数が多いほうが(脆弱性に関して敏感である等の理由から)重要とみることができる |
recent_releases_count | 0.5 | 26 | 昨年のrelease数 | releaseが多いほうが、重要であるとみることができる(比較的インパクトが小さいパラメータ) |
closed_issues_count | 0.5 | 5000 | 過去 90 日間にクローズされたIssueの数 | クローズされたIssueが多いほうが、ユーザーの問題をクローズすることに重点が置かれていることを示している(コントリビューターに依存するため、比較的インパクトが小さいパラメータ) |
updated_issues_count | 0.5 | 5000 | 過去 90 日間に更新されたIssueの数 | コントリビューターの関与が高いことを示す(コントリビューターに依存するため、比較的インパクトが小さいパラメータ) |
comment_frequency | 1 | 15 | 過去 90 日間のIssueごとの平均コメント数 | ユーザーの活動が活発であり依存度が高いことを示す |
dependents_count | 2 | 500000 | commitメッセージ内のプロジェクトへのメンション数 | リポジトリがどれぐらい利用されているかを示す(パッケージの依存関係グラフを持たない C/C++を含むすべての言語で機能する。criticality_scoreでは、今後、パッケージの依存関係ツリーを追加する予定とのこと) |
ディスカッション
コメント一覧
まだ、コメントがありません