我們創建記分卡是為了幫助開源維護者改善他們的安全最佳實踐,並幫助開源消費者判斷他們的依賴項是否安全。
記分卡是一種自動化工具,可評估與軟體安全相關的許多重要啟發式方法(「檢查」),並為每個檢查分配 0-10 分。您可以使用這些分數來了解需要改進的特定領域,以加強專案的安全狀況。您還可以評估依賴項引入的風險,並就接受這些風險、評估替代解決方案或與維護人員合作進行改進做出明智的決定。
記分卡標誌的靈感來源:“你通過了!全是 D…還有 A!”
自動對開源專案的安全狀況進行分析並信任決策。
使用這些數據主動改善世界所依賴的關鍵項目的安全狀況。
扮演現有政策的衡量工具
如果 OSS 使用者需要其依賴項的某些行為,則可以使用記分卡來衡量這些行為。在 V5 版本中,如果有支援的分析,我們將結構化結果視為實現此目的的方法。 OSS 用戶可能希望確保他們所依賴的儲存庫沒有被歸檔(這由archived
探針覆蓋),而不是依賴 X/10 的總分或 Y/10 的維護分數。 OpenSSF 採用此方法及其自己的專案安全基準。
成為所有項目都應遵循的明確報告或要求。
記分卡並不是萬能的解決方案。得出結果的每一步都是主觀的:包括或排除哪些檢查、每項檢查的重要性以及如何計算分數。檢查本身是啟發式的;有假陽性和假陰性。
無論是出於適用性、可行性或觀點問題,記分卡結果包含或排除的內容都會引發大量討論。創建一個讓所有人都滿意的記分卡是不可能的,因為不同的受眾會關心不同的行為子集。
特別是,聚合分數無法告訴您儲存庫正在執行或未執行的個人行為。許多檢查分數會匯總為一個分數,並且有多種方法可以達到相同的分數。當我們添加新的啟發式或改進現有的啟發式時,這些分數會改變。
記分卡已在數千個項目中運行,以監控和追蹤安全指標。使用記分卡的著名項目包括:
若要查看記分卡定期掃描的項目的分數,請導覽至網路檢視器。您還可以替換以下範本連結中的佔位符文字(平台、使用者/組織和儲存庫名稱),以產生儲存庫的自訂記分卡連結: https://scorecard.dev/viewer/?uri=<github_or_gitlab>.com/<user_name_or_org>/<repository_name>
例如:
若要查看未包含在 Web 檢視器中的項目的分數,請使用記分卡 CLI。
我們每週對 100 萬個最關鍵的開源專案進行一次記分卡掃描,根據其直接依賴關係進行判斷,並將結果發佈在 BigQuery 公共資料集中。
此資料可在公用 BigQuery 資料集openssf:scorecardcron.scorecard-v2
中找到。最新結果可在 BigQuery 視圖openssf:scorecardcron.scorecard-v2_latest
中找到。
您可以使用 BigQuery Explorer 查詢數據,方法是導航至「新增資料」>「按名稱為項目加註星標」>「openssf」。例如,您可能對項目的分數隨時間的變化感興趣:
SELECT date , score FROM ` openssf.scorecardcron.scorecard-v2 ` WHERE repo . name = " github.com/ossf/scorecard " ORDER BY date ASC
您可以使用bq
工具將最新結果以 JSON 格式提取到 Google Cloud 儲存空間:
# 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
檔案中找到。如果您希望我們追蹤更多訊息,請隨時與其他人一起發送 Pull 請求。目前,此清單僅源自 GitHub 上託管的專案。我們確實計劃在不久的將來擴展它們,以適應其他來源控制系統上託管的專案。
在您擁有的 GitHub 專案上使用記分卡的最簡單方法是使用記分卡 GitHub 操作。該操作會在任何儲存庫變更時運行,並發出維護人員可以在儲存庫的安全性標籤中查看的警報。有關更多信息,請參閱記分卡 GitHub Action 安裝說明。
如需查詢OSS專案預算分數,請使用REST API。
若要讓您的專案能夠在 REST API 上使用,請在記分卡 GitHub 操作設定中設定publish_results: true
。
REST API 提供的資料已根據 CDLA Permissive 2.0 授權。
在記分卡 GitHub Actions 中啟用publish_results: true
還允許維護人員在其儲存庫上顯示記分卡徽章以展示他們的辛勤工作。此徽章還會針對對儲存庫所做的每次變更自動更新。請參閱此 OSSF 博文以了解更多詳細資訊。
要在專案的儲存庫中包含徽章,只需將以下標記新增至自述文件:
[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/{owner}/{repo}/badge)](https://scorecard.dev/viewer/?uri=github.com/{owner}/{repo})
若要對不屬於您的專案執行記分卡掃描,請使用命令列介面安裝選項。
平台:目前,Scorecard 支援 OSX 和 Linux 平台。如果您使用的是 Windows 作業系統,您可能會遇到問題。歡迎為支援 Windows 做出貢獻。
語言:您必須安裝 GoLang 才能執行 Scorecard (https://golang.org/doc/install)
scorecard
可作為 Docker 容器使用:
docker pull gcr.io/openssf/scorecard:stable
若要使用特定的記分卡版本(例如 v3.2.1),請執行:
docker pull gcr.io/openssf/scorecard:v3.2.1
要將記分卡作為獨立安裝:
造訪我們的最新版本頁面並下載適合您的作業系統的正確 zip 檔案。
將二進位檔案新增至您的GOPATH/bin
目錄(如有必要,請使用go env GOPATH
來識別您的目錄)。
我們在發布過程中使用 OpenSSF 的 slsa-framework/slsa-github-generator 產生 SLSA3 簽章。若要驗證發布二進位檔案:
attestation.intoto.jsonl
。slsa-verifier -artifact-path < the-zip > -provenance attestation.intoto.jsonl -source github.com/ossf/scorecard -tag < the-tag >
套件管理器 | 支援的發行版 | 命令 |
---|---|---|
尼克 | 尼克斯作業系統 | nix-shell -p nixpkgs.scorecard |
AUR 助手 | 架構Linux | 使用 AUR 助手安裝scorecard |
自製 | macOS 或 Linux | brew install scorecard |
GitHub 對未經身份驗證的請求施加 API 速率限制。為了避免這些限制,您必須在運行記分卡之前驗證您的請求。有兩種方法可以對您的請求進行身份驗證:建立 GitHub 個人存取令牌,或建立 GitHub 應用程式安裝。
public_repo
範圍。根據您的平台,使用下列指令在名為GITHUB_AUTH_TOKEN
、 GITHUB_TOKEN
、 GH_AUTH_TOKEN
或GH_TOKEN
的環境變數中設定令牌。 # For posix platforms, e.g. linux, mac:
export GITHUB_AUTH_TOKEN= < your access token >
# Multiple tokens can be provided separated by comma to be utilized
# in a round robin fashion.
export GITHUB_AUTH_TOKEN= < your access token 1> , < your access token 2>
# For windows:
set GITHUB_AUTH_TOKEN= < your access token >
set GITHUB_AUTH_TOKEN= < your access token 1> , < your access token 2>
或者
set
或export
)使用下面的三個環境變數。 GITHUB_APP_KEY_PATH=<path to the key file on disk>
GITHUB_APP_INSTALLATION_ID=<installation id>
GITHUB_APP_ID=<app id>
這些變數可以從 GitHub 開發者設定頁面取得。
記分卡可以只使用一個參數來運行,即目標儲存庫的 URL:
$ scorecard --repo=github.com/ossf-tests/scorecard-check-branch-protection-e2e
Starting [CII-Best-Practices]
Starting [Fuzzing]
Starting [Pinned-Dependencies]
Starting [CI-Tests]
Starting [Maintained]
Starting [Packaging]
Starting [SAST]
Starting [Dependency-Update-Tool]
Starting [Token-Permissions]
Starting [Security-Policy]
Starting [Signed-Releases]
Starting [Binary-Artifacts]
Starting [Branch-Protection]
Starting [Code-Review]
Starting [Contributors]
Starting [Vulnerabilities]
Finished [CI-Tests]
Finished [Maintained]
Finished [Packaging]
Finished [SAST]
Finished [Signed-Releases]
Finished [Binary-Artifacts]
Finished [Branch-Protection]
Finished [Code-Review]
Finished [Contributors]
Finished [Dependency-Update-Tool]
Finished [Token-Permissions]
Finished [Security-Policy]
Finished [Vulnerabilities]
Finished [CII-Best-Practices]
Finished [Fuzzing]
Finished [Pinned-Dependencies]
RESULTS
-------
Aggregate score: 7.9 / 10
Check scores:
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| SCORE | NAME | REASON | DOCUMENTATION/REMEDIATION |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 10 / 10 | Binary-Artifacts | no binaries found in the repo | github.com/ossf/scorecard/blob/main/docs/checks.md#binary-artifacts |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 9 / 10 | Branch-Protection | branch protection is not | github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection |
| | | maximal on development and all | |
| | | release branches | |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| ? | CI-Tests | no pull request found | github.com/ossf/scorecard/blob/main/docs/checks.md#ci-tests |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 0 / 10 | CII-Best-Practices | no badge found | github.com/ossf/scorecard/blob/main/docs/checks.md#cii-best-practices |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 10 / 10 | Code-Review | branch protection for default | github.com/ossf/scorecard/blob/main/docs/checks.md#code-review |
| | | branch is enabled | |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 0 / 10 | Contributors | 0 different companies found -- | github.com/ossf/scorecard/blob/main/docs/checks.md#contributors |
| | | score normalized to 0 | |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 0 / 10 | Dependency-Update-Tool | no update tool detected | github.com/ossf/scorecard/blob/main/docs/checks.md#dependency-update-tool |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 0 / 10 | Fuzzing | project is not fuzzed in | github.com/ossf/scorecard/blob/main/docs/checks.md#fuzzing |
| | | OSS-Fuzz | |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 1 / 10 | Maintained | 2 commit(s) found in the last | github.com/ossf/scorecard/blob/main/docs/checks.md#maintained |
| | | 90 days -- score normalized to | |
| | | 1 | |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| ? | Packaging | no published package detected | github.com/ossf/scorecard/blob/main/docs/checks.md#packaging |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 8 / 10 | Pinned-Dependencies | unpinned dependencies detected | github.com/ossf/scorecard/blob/main/docs/checks.md#pinned-dependencies |
| | | -- score normalized to 8 | |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 0 / 10 | SAST | no SAST tool detected | github.com/ossf/scorecard/blob/main/docs/checks.md#sast |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 0 / 10 | Security-Policy | security policy file not | github.com/ossf/scorecard/blob/main/docs/checks.md#security-policy |
| | | detected | |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| ? | Signed-Releases | no releases found | github.com/ossf/scorecard/blob/main/docs/checks.md#signed-releases |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 10 / 10 | Token-Permissions | tokens are read-only in GitHub | github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions |
| | | workflows | |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
| 10 / 10 | Vulnerabilities | no vulnerabilities detected | github.com/ossf/scorecard/blob/main/docs/checks.md#vulnerabilities |
| --------- | ------------------------ | -------------------------------- | --------------------------------------------------------------------------- |
GITHUB_AUTH_TOKEN
必須設定為有效令牌
docker run -e GITHUB_AUTH_TOKEN=token gcr.io/openssf/scorecard:stable --show-details --repo=https://github.com/ossf/scorecard
若要使用特定的記分卡版本(例如 v3.2.1),請執行:
docker run -e GITHUB_AUTH_TOKEN=token gcr.io/openssf/scorecard:v3.2.1 --show-details --repo=https://github.com/ossf/scorecard
有關檢查失敗原因的更多詳細信息,請使用--show-details
選項:
./scorecard --repo=github.com/ossf-tests/scorecard-check-branch-protection-e2e --checks Branch-Protection --show-details
Starting [Pinned-Dependencies]
Finished [Pinned-Dependencies]
RESULTS
-------
|---------|------------------------|--------------------------------|--------------------------------|---------------------------------------------------------------------------|
| SCORE | NAME | REASON | DETAILS | DOCUMENTATION/REMEDIATION |
|---------|------------------------|--------------------------------|--------------------------------|---------------------------------------------------------------------------|
| 9 / 10 | Branch-Protection | branch protection is not | Info: 'force pushes' disabled | github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection |
| | | maximal on development and all | on branch 'main' Info: 'allow | |
| | | release branches | deletion' disabled on branch | |
| | | | 'main' Info: linear history | |
| | | | enabled on branch 'main' Info: | |
| | | | strict status check enabled | |
| | | | on branch 'main' Warn: status | |
| | | | checks for merging have no | |
| | | | specific status to check on | |
| | | | branch 'main' Info: number | |
| | | | of required reviewers is 2 | |
| | | | on branch 'main' Info: Stale | |
| | | | review dismissal enabled on | |
| | | | branch 'main' Info: Owner | |
| | | | review required on branch | |
| | | | 'main' Info: 'administrator' | |
| | | | PRs need reviews before being | |
| | | | merged on branch 'main' | |
|---------|------------------------|--------------------------------|--------------------------------|---------------------------------------------------------------------------|
維護者註釋允許維護者添加上下文以與記分卡檢查結果一起顯示。當記分卡對專案安全實務的評估不完整時,註釋可以為使用者提供附加資訊。若要查看每個檢查的維護者註釋,請使用--show-annotations
選項。
有關可用註釋或如何進行註釋的更多信息,請參閱配置文件。
要在 GitLab 儲存庫上執行 Scorecard,您必須建立具有下列權限的 GitLab 存取權杖:
read_api
read_user
read_repository
您可以透過設定GITLAB_AUTH_TOKEN
環境變數在 GitLab 儲存庫上執行 Scorecard:
export GITLAB_AUTH_TOKEN=glpat-xxxx
scorecard --repo gitlab.com/ < org > / < project > / < subproject >
有關在 GitLab CI/CD 中使用記分卡的範例,請參閱此處。
雖然我們專注於 GitLab.com 支持,但 Scorecard 也適用於自架的 GitLab 安裝。如果您的平台託管在子網域(例如gitlab.foo.com
),則記分卡應該可以開箱即用。如果您的平台託管在某個 slug 上(例如foo.com/bar/
),您將需要設定GL_HOST
環境變數。
export GITLAB_AUTH_TOKEN=glpat-xxxx
export GL_HOST=foo.com/bar
scorecard --repo foo.com/bar/ < org > / < project >
若要使用 GitHub Enterprise 主機github.corp.com
,請使用GH_HOST
環境變數。
# Set the GitHub Enterprise host without https prefix or slash with relevant authentication token
export GH_HOST=github.corp.com
export GITHUB_AUTH_TOKEN=token
scorecard --repo=github.corp.com/org/repo
# OR without github host url
scorecard --repo=org/repo
對於--npm
、 --pypi
、 --rubygems
或--nuget
生態系統中的項目,您可以選擇使用套件管理器執行 Scorecard。提供套件名稱以對相應的 GitHub 原始程式碼執行檢查。
例如, --npm=angular
。
若要僅執行特定檢查,請新增--checks
參數和檢查名稱清單。
例如, --checks=CI-Tests,Code-Review
。
目前支援的格式是default
(text) 和json
。
這些可以用--format
標誌指定。例如, --format=json
。
預設情況下,以下檢查都是針對目標項目執行的:
姓名 | 描述 | 風險等級 | 需要令牌 | 亞搏體育appGitLab支持 | 筆記 |
---|---|---|---|---|---|
二進位工件 | 該項目是否沒有簽入的二進位檔案? | 高的 | 帕特,GITHUB_TOKEN | 支援 | |
分支保護 | 該項目是否使用分支保護? | 高的 | PAT ( repo 或repo> public_repo ), GITHUB_TOKEN | 支持(見註) | 某些設定僅受維護者 PAT 支持 |
CI 測試 | 該專案是否在 CI 中執行測試,例如 GitHub Actions、Prow? | 低的 | 帕特,GITHUB_TOKEN | 支援 | |
CII-最佳實踐 | 該專案是否獲得了 OpenSSF(以前稱為 CII)最佳實踐徽章(合格、銀牌或金牌)? | 低的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
程式碼審查 | 項目實踐代碼合併前是否進行程式碼審查? | 高的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
貢獻者 | 該計畫是否有來自至少兩個不同組織的貢獻者? | 低的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
危險工作流程 | 該專案是否避免了 GitHub Action 工作流程中危險的編碼模式? | 批判的 | 帕特,GITHUB_TOKEN | 不支援 | |
依賴關係更新工具 | 該專案是否使用工具來幫助更新其依賴項? | 高的 | 帕特,GITHUB_TOKEN | 不支援 | |
模糊測試 | 專案是否使用模糊測試工具,例如 OSS-Fuzz、QuickCheck 或 fast-check? | 中等的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
執照 | 該項目是否申報許可證? | 低的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
維護 | 該專案是否至少已運行 90 天並維護? | 高的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
固定依賴項 | 專案是否聲明並固定依賴項? | 中等的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
包裝 | 該專案是否從 CI/CD 建立和發布官方包,例如 GitHub Publishing ? | 中等的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
科學技術協會 | 該專案是否使用靜態程式碼分析工具,例如 CodeQL、LGTM(已棄用)、SonarCloud? | 中等的 | 帕特,GITHUB_TOKEN | 不支援 | |
安全策略 | 該項目是否包含安全策略? | 中等的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
簽名發布 | 該項目是否以加密方式簽署版本? | 高的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
令牌權限 | 該專案是否將 GitHub 工作流程令牌聲明為唯讀? | 高的 | 帕特,GITHUB_TOKEN | 不支援 | |
漏洞 | 該專案是否存在未修復的漏洞?使用OSV服務。 | 高的 | 帕特,GITHUB_TOKEN | 正在驗證 | |
網路鉤子 | 儲存庫中定義的 Webhook 是否具有配置為驗證請求來源的令牌? | 批判的 | 維護者 PAT ( admin: repo_hook 或admin> read:repo_hook doc | 實驗性的 |
要查看有關每項檢查、其評分標準和補救步驟的詳細信息,請查看檢查文件頁面。
有關入門時應使用的檢查指南,請參閱記分卡檢查初學者指南。
登入網站或應用程式時,雙重認證 (2FA) 增加了額外的安全層。如果您的密碼因需要第二種形式的身份驗證(例如透過簡訊或身份驗證應用程式發送代碼,或觸摸實體安全金鑰)而受到洩露,2FA 可以保護您的帳戶。
我們強烈建議您在任何可用的重要帳戶上啟用 2FA。 2FA 不是記分卡檢查,因為 GitHub 和 GitLab 不會公開有關使用者帳戶的資料。可以說,這些資料應該始終保持私密性,因為沒有 2FA 的帳戶非常容易受到攻擊。
儘管這不是官方檢查,但我們敦促所有專案維護者啟用 2FA,以保護他們的專案免受損害。
按照配置雙重認證中所述的步驟進行操作
如果可能,請使用:
最後一個選項是使用簡訊。請注意:使用 SMS 的 2FA 容易受到 SIM 交換攻擊。
每個單獨的檢查都會傳回 0 到 10 的分數,其中 10 代表可能的最佳分數。記分卡還產生一個總分,這是按風險加權的各個檢查的基於權重的平均值。
請參閱目前記分卡檢查列表,以了解每項檢查的風險等級。
如果您遇到看似錯誤的問題,請使用 GitHub 問題追蹤系統。在提交問題之前,請搜尋現有問題以查看您的問題是否已被涵蓋。
在貢獻之前,請遵守我們的行為準則。
有關如何為專案做出貢獻的指導,請參閱貢獻文件。
如果您想新增支票,請參閱此處的指南。
如果您想加入記分卡社群或有想要討論的想法,我們將在 OSSF 最佳實踐工作小組會議中討論該專案。
人工製品 | 關聯 |
---|---|
記分卡開發論壇 | ossf-記分卡-dev@ |
記分卡公告論壇 | ossf-記分卡-公告@ |
社區會議 VC | Zoom 會議鏈接 |
社區會議日曆 | 適合亞太地區的雙週週四下午 1:00-2:00 太平洋地區(OSSF 公共日曆) 視訊通話:LFX Zoom 歐洲、中東和非洲地區友善太平洋地區每 4 個週一上午 7:00-8:00(OSSF 公共日曆) 視訊通話:LFX Zoom |
會議記錄 | 筆記 |
鬆弛通道 | #記分卡 |
維護者列在 CODEOWNERS 文件中。
若要報告安全性問題,請按照此處的說明進行操作。
適合亞太地區的雙週週四下午 1:00-2:00 太平洋地區(OSSF 公共日曆)
視訊通話:LFX 變焦
歐洲、中東和非洲地區友善太平洋地區每 4 個週一上午 7:00-8:00(OSSF 公共日曆)
視訊通話:LFX 變焦
您可以在此處查看議程和會議記錄。
請參閱常見問題解答,以了解有關記分卡的常見問題。