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点
      • 全てのオープンソースプロジェクトに対する重要度スコアを生成する
      • オープンソースコミュニティが依存する重要なプロジェクトのリストを作成する
      • それらのデータを使用して、これらの重要なプロジェクトのセキュリティ体制を積極的に改善する

重要度スコア算出のためのアルゴリズム

\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_since1120プロジェクト作成されてから経過した時間(月換算)長く続いているプロジェクトほど広く使われている可能性があり、重要とみることができる
updated_since-1120プロジェクトが最終更新されてから経過した時間(月換算)最近メンテナンスされた(commitがあった)プロジェクトほど依存度が高くなり、重要とみることができる
contributor_count25000(コミットをした)コントリビューター数コントリビューターの関与が多いほうが、重要とみることができる
org_count110コントリビューターが所属する組織数多くの組織が関与している方が、重要とみることができる
commit_frequency11000昨年の 1 週間あたりの平均commit数昨年のcommit数が多いほうが(脆弱性に関して敏感である等の理由から)重要とみることができる
recent_releases_count0.526昨年のrelease数releaseが多いほうが、重要であるとみることができる(比較的インパクトが小さいパラメータ)
closed_issues_count0.55000過去 90 日間にクローズされたIssueの数クローズされたIssueが多いほうが、ユーザーの問題をクローズすることに重点が置かれていることを示している(コントリビューターに依存するため、比較的インパクトが小さいパラメータ)
updated_issues_count0.55000過去 90 日間に更新されたIssueの数コントリビューターの関与が高いことを示す(コントリビューターに依存するため、比較的インパクトが小さいパラメータ)
comment_frequency115過去 90 日間のIssueごとの平均コメント数ユーザーの活動が活発であり依存度が高いことを示す
dependents_count2500000commitメッセージ内のプロジェクトへのメンション数リポジトリがどれぐらい利用されているかを示す(パッケージの依存関係グラフを持たない C/C++を含むすべての言語で機能する。criticality_scoreでは、今後、パッケージの依存関係ツリーを追加する予定とのこと)
重要度スコア算出のためのパラメータ

参考

  1. https://github.com/ossf/criticality_score
  2. https://openssf.org/about/
  3. https://github.com/ossf/wg-securing-critical-projects
  4. https://www.i-programmer.info/news/136-open-source/14220-taking-open-source-criticality-seriously.html

項目調査まとめOSS

Posted by ttnt