設定程式碼掃描
GitHub Advanced Security for Azure DevOps 中的程式代碼掃描可讓您分析 Azure DevOps 存放庫中的程序代碼,以找出安全性弱點和編碼錯誤。 會以警示形式提出分析所識別的任何問題。 程式碼掃描會使用 CodeQL 識別弱點。
CodeQL 是由 GitHub 所開發的程式碼分析引擎,可讓安全性檢查自動化。 您可以使用 CodeQL 分析程式碼,並以程式碼掃描警示型態顯示結果。 如需有關 CodeQL 的更具體檔,請參閱 CodeQL 檔。
適用於 Azure DevOps 的 GitHub 進階安全性可與 Azure Repos 搭配運作。 若要搭配 GitHub 存放庫使用 GitHub 進階安全性,請參閱 GitHub 進階安全性。
先決條件
類別 | 需求 |
---|---|
許可 | - 若要檢視存放庫的所有警示摘要:存放庫的參與者 許可權。 - 若要關閉進階安全性中的警示:專案管理員 許可權。 - 若要管理進階安全性中的許可權:必須是 專案集合系統管理員 群組的成員或擁有 進階安全性: 管理設定 許可權設為 允許。 |
如需進階安全性許可權的詳細資訊,請參閱 管理進階安全性許可權。
程式碼掃描的更多設定
語言和查詢支援
GitHub 專家、安全性研究人員和社群參與者會撰寫和維護用於程式代碼掃描的預設 CodeQL 查詢。 查詢會定期更新,以改善分析並減少任何誤判結果。 查詢是 開放原始碼,因此您可以檢視並參與 github/codeql 存放庫中的查詢。
CodeQL 支援並使用下列語言識別碼:
語言 | 識別碼 | 選擇性替代識別碼(如果有的話) |
---|---|---|
C/C++ | c-cpp |
c 或 cpp |
C# | csharp |
|
去 | go |
|
Java/Kotlin | java-kotlin |
|
JavaScript/TypeScript | javascript |
|
Python | python |
|
紅寶石 | ruby |
|
Swift | swift |
提示
- 使用
c-cpp
來分析以 C、C++或兩者撰寫的程式代碼。 - 使用
java-kotlin
來分析以 Java、Kotlin 或兩者撰寫的程式代碼。 - 使用
javascript
來分析以 JavaScript、TypeScript 或兩者撰寫的程式代碼。
如需詳細資訊,請參閱 支援的語言和架構。
您可以在組建記錄檔中檢視 CodeQL 所執行的特定查詢和工作詳細數據。
程式碼掃描建置模式自訂
設定管線以進行掃描時,程式碼掃描支援兩種設置模式:
-
none
- CodeQL 資料庫是直接從程式代碼基底建立,而不需要建置程式代碼基底(支援所有解譯的語言,以及 C# 和 Java 也支援)。 -
manual
- 您可以定義用於工作流程中程式代碼基底的建置步驟(支援所有編譯的語言)。
如需不同建置模式的詳細資訊,包括每個建置模式優點的比較,請參閱 CodeQL程式碼掃描編譯的語言。
提示
建置模式 none
與其他解譯的語言搭配使用,例如 JavaScript、Python、Ruby。
如果針對 C#、Java,以及其他不支援建置模式 none
的已編譯語言指定建置模式 none
,管線工作就會失敗。
下列程式代碼顯示具有多種語言的有效組態範例,並 none
建置模式:
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# and Java, and JavaScript is an interpreted language
# and build mode `none` has no impact on JavaScript analysis
languages: 'csharp, java, javascript'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
下列程式代碼顯示具有多種語言和 none
建置模式之無效組態的範例:
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# but build mode `none` is NOT supported for Swift
# so this pipeline definition will result in a failed run
languages: 'csharp, swift'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
程式碼掃描警示
GitHub 進階安全性適用於 Azure DevOps 的程式代碼掃描警示包括依照存放庫的程式代碼掃描標識,提醒程式代碼層級上的應用程式弱點。
若要使用程式代碼掃描,您必須先設定 Azure DevOps 的 GitHub 進階安全性。
Azure DevOps 中 Repos 底下的 [進階安全性] 索引標籤是用來檢視程式代碼掃描警示的中樞。 選取 程式碼掃描 標籤來查看掃描警示。 您可以依分支、狀態、管線、規則類型和嚴重性進行篩選。 此時,警示中樞不會顯示在PR分支上完成掃描的警示。
如果重新命名管線或分支,則結果不會有任何影響,最多可能需要 24 小時才會顯示新名稱。
如果您選擇執行自定義 CodeQL 查詢,則根據預設,不會針對從不同查詢套件產生的警示個別篩選。 您可以依規則進行篩選,每個查詢各有不同。
如果您關閉存放庫的進階安全性,您會失去 [進階安全性] 索引標籤和建置工作中結果的存取權。 建置工作不會失敗,但當停用進階安全性時,透過此工作執行的任何建置結果會被隱藏且不會保留。
警示詳細資料
如需詳細資訊,包括修正指引,請選取警示。 每個警示都包含位置、描述、範例和嚴重性。
部分 | 說明 |
---|---|
位置 | 位置部分詳細說明 CodeQL 偵測到的特定弱點實例。 如果有多個違反相同規則的程式代碼實例,就會為每個不同的位置產生新的警示。 [位置] 卡片包含受影響代碼段的直接連結,因此您可以選取要導向至 Azure DevOps Web UI 的代碼段進行編輯。 |
描述 | 根據問題,CodeQL 工具會提供描述。 |
建議 | 建議的修正是針對指定程式代碼掃描警示的建議解決方案。 |
範例 | 範例區段顯示程式代碼中已識別弱點的簡化範例。 |
嚴重性 | 嚴重性層級可以是低、中、高或嚴重。 嚴重性分數是以所識別常見弱點列舉 (CWE) 的給定常見弱點評分系統 (CVSS) 分數為基礎。 在此 GitHub 部落格文章中深入瞭解嚴重性如何評分。 |
檢視存放庫的警示
具有存放庫參與者許可權的任何人都可以在 [Repos] 下的 [進階安全性] 索引卷標中檢視存放庫的所有警示摘要。 選取 程式碼掃描 索引標籤,以檢視所有秘密掃描警示。
若要顯示結果,程式代碼掃描工作必須先執行。 第一次掃描完成後,任何偵測到的弱點都會顯示在 [進階安全性] 索引卷標中。
根據預設,警示頁面會顯示存放庫預設分支的相依性掃描結果。
指定的警示狀態會反映預設分支和最新執行管線的狀態,即使警示存在於其他分支和管線上也一樣。
消除程式碼掃描警示
若要關閉警示,您需要適當的許可權。 根據預設,只有專案管理員可以關閉進階安全性警示。
若要關閉警示:
- 流覽至您想要關閉的警示,然後選擇該警示。
- 選取 [關閉警示] 下拉式清單。
- 如果尚未選取,請選取 [已接受風險] 或 [誤報] 作為關閉原因。
- 在 [批注] 文本框中新增選擇性批注。
- 選取 [ 關閉 ] 以提交並關閉警示。
- 警示狀態會從 [開啟] 變更為 [已關閉] ,並顯示關閉原因。
此動作會關閉所有分支的警示。 也會關閉包含相同弱點的其他分支。 先前關閉的任何警示都可以手動重新開啟。
管理拉取請求的程式碼掃描警示
如果在拉取請求中為新的程式碼變更建立警示,警示會在拉取請求的 [概觀] 頁籤的批註區段中回報為批註,並在 [進階安全性存放庫] 頁籤中顯示為警示。拉取請求分支有新的分支選擇器項目。
您可以檢閱受影響的程式代碼行、查看結果摘要,以及在概覽部分中解決註解。
若要關閉提取要求警示,您必須瀏覽至警示詳細檢視,以關閉警示並解決批註問題。 否則,只要變更批注狀態 (1) 即可解析批注,但不會關閉或修正基礎警示。
若要查看提取要求分支的整個結果集,請流覽至 [Repos>進階安全性],然後選取您的提取要求分支。 在註釋上選取 [顯示更多詳細數據 ],會將您導向 [進階安全性] 索引卷標的 [警示詳細數據] 檢視。
提示
只有在受影響的程式代碼行與提取要求的目標分支相比,提取要求差異完全是唯一的時,才會建立批注。