
OpenSSF Scorecard - オープンソースのセキュリティ健全性指標
私たちは、オープンソースメンテナーがセキュリティのベストプラクティスを向上させること、そしてオープンソースの利用者が依存関係が安全かどうかを判断することを支援するためにスコアカードを作成しました。
スコアカードは、ソフトウェアセキュリティに関連する多数の重要なヒューリスティック("チェック")を評価し、各チェックに0~10のスコアを割り当てる自動化ツールです。これらのスコアを使用して、プロジェクトのセキュリティ体制を強化するために改善すべき具体的な領域を理解できます。また、依存関係がもたらすリスクを評価し、それらのリスクを受け入れるか、代替ソリューションを評価するか、メンテナーと協力して改善を行うかについて、情報に基づいた決定を下すことができます。
スコアカードのロゴのインスピレーション: "You passed! All D's ... and an A!"
オープンソースプロジェクトのセキュリティ体制に関する分析と信頼の決定を自動化する。
このデータを使用して、世界が依存する重要なプロジェクトのセキュリティ体制を積極的に改善する。
既存のポリシーに対する測定ツールとして機能する
OSS利用者が依存関係に特定の振る舞いを要求する場合、スコアカードを使用してそれらを測定できます。V5リリースでは、サポートされている分析があれば、構造化結果がその方法として見られます。X/10の集計スコアやY/10のメンテナンススコアに依存する代わりに、OSS利用者は依存しているリポジトリがアーカイブされていないこと(これはarchivedプローブでカバーされている)を確認したい場合があります。OpenSSFはプロジェクト向けのセキュリティベースラインでこのアプローチを採用しています。
すべてのプロジェクトが従うべき確定的なレポートや要件であること。
スコアカードは万能なソリューションであることを意図していません。結果を作成するすべてのステップには意見が反映されています。どのチェックを含めるか除外するか、各チェックの重要度、スコアの計算方法などです。チェック自体はヒューリスティックであり、誤検出と見逃しが存在します。
適用可能性、実現可能性、意見の問題など、スコアカードの結果に何を含め、何を除外するかについては多くの議論があります。異なる対象者は行動の異なるサブセットを気にするため、すべての人を満足させるスコアカードを作成することは不可能です。
特に集計スコアは、リポジトリがどの個別の行動を行っているか、行っていないかについて何も教えてくれません。多くのチェックスコアが単一のスコアに集約され、同じスコアに到達する方法は複数あります。新しいヒューリスティックを追加したり、既存のものを改良したりすると、これらのスコアは変化します。
スコアカードは、数千のプロジェクトでセキュリティメトリクスを監視および追跡するために実行されています。スコアカードを使用している主要なプロジェクトは次のとおりです。
スコアカードによって定期的にスキャンされているプロジェクトのスコアを表示するには、ウェブビューアーにアクセスしてください。以下のテンプレートリンク内のプレースホルダーテキスト(プラットフォーム、ユーザー/組織、リポジトリ名)を置き換えて、リポジトリのカスタムスコアカードリンクを生成することもできます。
https://scorecard.dev/viewer/?uri=<github_or_gitlab>.com/<user_name_or_org>/<repository_name>
例:
ウェブビューアーに含まれていないプロジェクトのスコアを表示するには、スコアカード CLI を使用してください。
直接の依存関係に基づいて判断された最も重要な100万のオープンソースプロジェクトに対して毎週スコアカードスキャンを実行し、結果を BigQuery 公開データセット で公開しています。
このデータは公開 BigQuery データセット openssf:scorecardcron.scorecard-v2 で利用可能です。最新の結果は BigQuery ビュー openssf:scorecardcron.scorecard-v2_latest で利用できます。
データは BigQuery Explorer を使用してクエリできます。[データを追加] > [名前でプロジェクトを選択] > 'openssf' と進みます。
たとえば、プロジェクトのスコアが時間とともにどのように変化したかに興味があるかもしれません。```sql
SELECT date, score FROM openssf.scorecardcron.scorecard-v2 WHERE repo.name="github.com/ossf/scorecard" ORDER BY date ASC
最新の結果をJSON形式でGoogle Cloud Storageに抽出するには、[`bq`](https://cloud.google.com/bigquery/docs/bq-command-line-tool) ツールを使用します:```
# Get the latest PARTITION_ID
bq query --nouse_legacy_sql 'SELECT partition_id FROM
openssf.scorecardcron.INFORMATION_SCHEMA.PARTITIONS WHERE table_name="scorecard-v2"
AND partition_id!="__NULL__" ORDER BY partition_id DESC
LIMIT 1'
# Extract to GCS
bq extract --destination_format=NEWLINE_DELIMITED_JSON
'openssf:scorecardcron.scorecard-v2$<partition_id>' gs://bucket-name/filename-*.json
チェック対象のプロジェクト一覧は、次のファイルにあります。
cron/internal/data/projects.csv
こちらのリポジトリ内のファイルにあります。さらに追跡してほしいプロジェクトがあれば、お気軽に
他のプロジェクトを含むプルリクエストをお送りください。現在、このリストは GitHub のみでホストされているプロジェクト から導出されています。近い将来、他のソース管理システムでホストされているプロジェクトも対象に拡大する予定です。
自分が所有する GitHub プロジェクトで Scorecard を使用する最も簡単な方法は、 Scorecard GitHub Action です。この Action は、リポジトリへの変更があるたびに実行され、メンテナーがリポジトリの Security タブで確認できるアラートを発行します。詳細については、Scorecard GitHub Action の インストール手順 をご覧ください。
OSS プロジェクトの事前計算されたスコアをクエリするには、REST API を使用します。
当社の 週次スキャン から計算されたスコアは、CI-Tests、Contributors、Dependency-Update-Tool チェックを省略しています。これは、それらを大規模に実行するための API コストが理由です。
API の結果は CDN でキャッシュされます(Fastly および同社の Fast Forward プログラムに感謝します)。新しい結果が利用可能になると、CDN から結果は削除されますが、古いデータに関する問題に気づいた場合は、Issue を開いてください。
プロジェクトを REST API で利用可能にするには、
publish_results: true
を Scorecard GitHub Action の設定で設定します。
REST API で提供されるデータは CDLA Permissive 2.0 の下でライセンスされています。
publish_results: true
を Scorecard GitHub Actions で有効にすると、メンテナーはリポジトリに Scorecard バッジを表示して、その努力をアピールできるようになります。このバッジは、リポジトリへの変更ごとに自動更新されます。詳細は、こちらの OSSF ブログ記事 をご覧ください。