GH-500 數位教科書 開啟互動版

D5:安全營運:最佳做法、優先順序與修復

D5-O1 理解弱點脈絡與修復框架

弱點資料的三個名詞

GitHub Advisory Database

Advisory 以 Open Source Vulnerability(OSV)格式的 JSON 檔發布。Global security advisory 分三類:

類型 來源與特性 是否產生 Dependabot 警示
GitHub-reviewed 對應到支援生態系中的套件,經 GitHub 審查有效性,含完整描述與生態系、套件資訊 會
Unreviewed 直接從 National Vulnerability Database feed 自動發布,未檢查有效性或完整性 不會
Malware 關於惡意開源套件,自動從 npm 安全團隊與 OpenSSF Malicious Packages 儲存庫發布 一般警示不會;啟用 malware alerts 後,偵測到惡意軟體時才產生

修復流程(端到端)

以 code scanning 為例:警示出現 → 評估(影響、資料流、嚴重度)→ 指派給負責人 → 修復(手動、Copilot Autofix 或 agentic autofix)→ pull request 觸發重新分析 → 合併後警示關閉;不需修復者以記錄的原因關閉。Dependabot 警示則是:advisory 或 dependency graph 變動 → 警示 → security update pull request → 合併後警示關閉。細節見 D3 與 D4。

判斷練習

情境: 團隊看到某則 advisory 的 EPSS 為 90.534%(第 95 百分位),主管問「這是不是代表有 90% 的專案受影響」。

解析: 不是。EPSS 是這個弱點在未來 30 天內被利用的機率,不是受影響專案的比例;第 95 百分位表示 95% 的已模型化弱點比它更不可能被利用。

來源:GitHub Advisory Database(GH500-DOC-44)、Global security advisories(GH500-DOC-45)、Code scanning alerts(GH500-DOC-31);2026-11-02 已對照抓下的頁面段落;其餘為整理,備考前請讀來源原文。

D5-O2 大規模排定與管理安全工作

Security campaigns

Security campaigns 把一組警示分享給開發者,一起消化安全待辦。可用條件:啟用 Secret Protection 或 Code Security 的 GitHub Team 組織。用途包含改善公司安全態勢、以一組相關的 code scanning 警示強化開發者訓練、確保 secret 警示在修復目標內解決、促進安全團隊與開發者共同擁有警示,並讓開發者清楚知道最緊急的是哪些。

屬性 Code campaign Secret campaign(公開預覽)
可納入的警示 僅預設分支 —
開發者通知需要 對 repository 有寫入權限 對警示清單有檢視權限
指派可能提權 頁面未說明 是(暫時提高,取消指派即撤銷)
自動修復 Copilot Autofix —

警示可指派給有寫入權限的使用者;GitHub 在被指派與警示被關閉時通知。Code scanning 可用 REST API 指派/取消指派並依指派者篩選,另有 webhook 通知指派與取消。

嚴重度與修復規則

可用 ruleset 把 code scanning 結果變成合併條件(見 D4):設定 Require code scanning results,為每個必要工具選擇警示等級(None、Errors、Errors and Warnings、All)與安全警示等級(None、Critical、High or higher、Medium or higher、All)。建立者為組織擁有者、security manager,以及具 admin 角色的成員;也可用 REST API 建立含 code_scanning 規則的 ruleset。

自動關閉與記錄

判斷練習

情境: 資安主管想建立一個 campaign,一次納入 1,500 則 code scanning 警示。

解析: 一個 campaign 的警示不得超過 1000 則;要調整篩選條件縮小範圍,或拆成多個 campaign。

來源:About security campaigns(GH500-DOC-09)、Creating and managing security campaigns(GH500-DOC-46)、Set code scanning merge protection(GH500-DOC-47)、Delegated alert dismissal(GH500-DOC-11)、Resolving code scanning alerts(GH500-DOC-39);2026-11-02 已對照抓下的頁面段落;其餘為整理,備考前請讀來源原文。

D5-O3 自訂並最佳化安全偵測

依組織風險調整偵測

手段 用途與限制
選 query suite default(精確度高)、security-extended(更多、精確度稍低)可用於 default setup;security-and-quality 與自訂 suite 需要 advanced setup。組織擁有者與 security manager 可為組織推薦 default setup 的 query suite
自訂 CodeQL 查詢 偵測專屬於應用程式架構或框架的弱點、強制組織規範;只能在 advanced setup 或外部 CI 執行
Repository properties github-codeql-extra-queries 為組織內所有相關分析加入額外查詢,不必修改個別 workflow 或改用 advanced setup;github-codeql-config-file 套用設定檔;套用到所有 setup 類型
語言與 threat model default setup 可選擇分析的語言、threat model(公開預覽,僅 Java/Kotlin 與 C#)與 CodeQL model pack
自訂 secret 樣式 定義 repository、組織或企業層級的自訂樣式;先 dry run 檢視誤判再發佈(見 D2)

調整前先在一個測試 repository 驗證:第一次設定屬性時,先在組織建立但不設值,改在測試 repository 設值並驗證後再推廣。

取捨

查詢集越寬,誤報越多、審查負擔越重;越窄則漏報風險越高。選擇應回應組織的風險輪廓與審查能力,而不是一律選最完整的。官方對各 suite 的描述是「precision 與 severity 的差異」,沒有給出「應該選哪一個」的規則;本節對此不做更具體的建議。

判斷練習

情境: 組織有 300 個 repository 使用 default setup,想為全部加上一組公司自訂的 CodeQL 查詢,但不想逐一改成 advanced setup。

解析: 在組織建立並設定 github-codeql-extra-queries repository property。它套用到所有 setup 類型,不必修改個別 workflow。

來源:Repository properties for code scanning(GH500-DOC-36)、CodeQL query suites(GH500-DOC-28)、Custom CodeQL queries(GH500-DOC-29)、Defining custom patterns for secret scanning(GH500-DOC-05);2026-11-02 已對照抓下的頁面段落;其餘為整理,備考前請讀來源原文。

D5-O4 跨角色協作並落實治理

Security manager

組織層級角色,組織擁有者可指派給任何成員或團隊,用來給資安人員「最少所需」的權限。權限:所有 repository 的讀取權限;所有安全警示的寫入權限;在組織與 repository 層級設定安全功能(含啟用或停用 GitHub Advanced Security 功能)的能力。擁有 security overview 等額外功能(需要 Secret Protection、Code Security 或 Advanced Security)。若團隊持有此角色,對團隊與特定 repository 有 admin 權限的人可以變更團隊的存取層級,但不能移除存取。也可建立自訂安全角色(例如只管理 secret scanning 結果與繞過請求,或合併稽核日誌權限)。

委派機制

機制 作用
委派繞過 push protection 授予特定個人、角色、團隊繞過權限(被擋的 commit 可放行);授予特定對象豁免(完全略過 push protection,宜用於遷移機器人、服務帳號);其他貢獻者的繞過請求進入審查,請求 7 天後過期。適用於在 GitHub 上建立、編輯與上傳的檔案
委派警示關閉 限制誰能直接關閉警示;寫入權限者須請求,擁有者與 security manager 審查(見 O2)
自訂角色 讓非擁有者、非 security manager 的成員回應關閉請求並直接關閉警示;自訂組織角色需要審查並略過警示關閉請求的組織權限,以及檢視、關閉與重新開啟警示的 repository 權限(repository 權限加入自訂組織角色目前是公開預覽)

一律可繞過 push protection 的人: 組織擁有者、security manager、繞過名單中的團隊/預設角色/自訂角色的成員,以及被指派具「審查並管理 secret scanning 繞過請求」細部權限之自訂角色的使用者。委派繞過可用於啟用 Secret Protection 的 GitHub Team 組織 repository。

警示所有權與協作

跨套件的 ruleset 與政策

Rulesets 是一組命名規則,控制人如何與分支和標籤互動。與安全相關的規則包括:要求 workflow 通過(用於強制 dependency review,D3)、要求 code scanning 結果(D4),以及企業層級的授權合規政策。

判斷練習

情境: 組織想讓一個遷移機器人帳號的推送完全不被 push protection 阻擋,同時讓一般開發者被擋時能提出繞過請求。

解析: 對機器人授予豁免(exemption);對一般開發者啟用委派繞過的審查流程,請求 7 天後過期。

來源:Managing security managers in your organization(GH500-DOC-10)、About delegated bypass for push protection(GH500-DOC-04)、Delegated alert dismissal(GH500-DOC-11)、About security campaigns(GH500-DOC-09);2026-11-02 已對照抓下的頁面段落;其餘為整理,備考前請讀來源原文。

D5-O5 左移並強化預防性安全

在變更進入預設分支或 repository 之前就攔下問題,是預防導向的做法。對照 GitHub 的功能:

階段 功能 做法
推送時 Push protection 在推送時阻擋 secret,讓開發者在來源處修正(D2)
開 pull request Code scanning 結果以檢查與註解呈現,高嚴重度預設使檢查失敗(D4)
開 pull request Dependency review 顯示相依性變動與弱點,action 預設在發現有弱點的套件時失敗(D3)
合併前 Rulesets 合併保護 要求 workflow 通過、要求 code scanning 結果,在不符時阻擋合併(D3、D4)
合併後 Security campaigns、Dependabot security updates 處理已累積的警示與已知弱點(事後處理)

判斷練習

情境: 團隊只依賴每週的 Dependabot 警示處理相依性風險,想「左移」。

解析: Dependabot 警示是事後處理已在相依性中的弱點;要在引入前攔下,使用 dependency review(pull request 層)並用 ruleset 要求 dependency review workflow 通過才能合併。

來源:About push protection(GH500-DOC-02)、Dependency review(GH500-DOC-15)、Code scanning merge protection(GH500-DOC-33)、GitHub security features(GH500-DOC-07);2026-11-02 已對照抓下的頁面段落;其餘為整理,備考前請讀來源原文。