1. 程式人生 > >程式碼審計--16--Fortify SCA

程式碼審計--16--Fortify SCA

1.1 Fortify SCA概述

1、Source Code Analysis 階段概述

Audit Workbench 會啟動 Fortify SCA“Scanning(掃描)”嚮導來掃描和分析原始碼。該向導整合了以下幾個分析階段:

轉換:使用原始碼建立中間檔案,原始碼與一個 Build ID相關聯,Build ID通常就是專案名稱。 掃描與分析:掃描中間檔案,分析程式碼,並將結果寫入一個Fortify Project Results(FPR)檔案。 校驗:確保所有原始檔均包含在掃描過程中,使用的是正確的規則包,且沒有報告重大錯誤。

2、安全編碼規則包概述

安全編碼規則包是 Fortify Software 安全研究小組多年軟體安全經驗的體現,並且經過其不斷努力改進而成。這些規則是通過對編碼理論和常用編碼實踐的研究,而取得的軟體安全知識的巨大積累,並且在 Fortify Software 安全研究小組的努力下不斷擴充套件和改進。每個安全編碼規則包均包含大量的規則,每個規則定義了一個被 source code analysis 檢測出的特定異常行為。

一旦檢測出安全問題,安全編碼規則包會提供有關問題的資訊,讓開發人員能夠計劃並實施修復工作,這樣比研究問題的安全細節更為有效。這些資訊包括關於問題類別的具體資訊、該問題會如何被攻擊者利用,以及開發人員如何確保程式碼不受此漏洞的威脅。

安全編碼規則包支援多種程式語言,也支援各種經過擴充套件的第三方庫和配置檔案。 有關當前安全編碼規則包的資訊,請參見《安全編碼規則包參考》。

3、開始頁面概述

開始頁面包含以下幾個區域:

Start New Project(啟動新專案):啟動原始碼掃描嚮導。 Custom Rules Editor(自定義規則編輯器):啟動用於建立和檢查安全規則或編碼實踐規則的工具,這些規則可針對您的原始碼進行自定義。 Open Project(開啟專案):

單擊某一專案名稱可開啟最近的專案;或使用“Open Project(開啟專案)”連結可定位到某一專案。

fortify\bin\AuditWorkbench.cmd 開始頁面: 在這裡插入圖片描述

4、審計介面概述

下圖顯示了“Auditing(審計)”介面中的 Webgoat FPR 檔案示例。

Audit Workbench 介面:

在這裡插入圖片描述

Audit Workbench 介面由以下幾個面板組成:

“Issues(問題)”面板 “Analysis Trace(分析跟蹤)”面板 “Project Summary(專案摘要)”面板 “Source Code Viewer(原始碼檢視器)”面板 “Function(函式)”面板 “Issue Auditing(問題審計)”面板

“Issues(問題)”面板

使用 Issues(問題)面板,您可以對希望審計的問題進行分組和選擇。該面板由下列元素組成:

“Filter Set(過濾器組)”下拉列表 “Folders(資料夾)”選項卡 Group by(分組方式) “Search(搜尋)”框

問題面板:

在這裡插入圖片描述

“Filter Set(過濾器組)”下拉列表

過濾器組控制著“Issue(問題)”面板的設定和顯示屬性。過濾器組是專案配置的一部分。您可以為每個專案自定義不同的過濾器組。每個專案均可具有唯一的過濾器組。

“Filter Set(過濾器組)”部分包含以下設定:

資料夾的名稱和顏色。要進行配置,請選擇 Tools(工具)- Project Configuration(專案配置)- Folder Settings(資料夾設定)。 問題列出的位置,以及是否列出。要進行配置,請選擇 Options(選項)- Show View(顯示檢視)- Filters(過濾器)。

注意:“Audit Guide Visibility Filters(審計指南可見性過濾器)”配置適用於整個專案。

Fortify Software 提供了預設過濾器組:Broad(廣泛)、Medium(普通)、Targeted(特定)和 Developer(開發人員)。“Filter Sets(過濾器組)”將問題按嚴重性歸類於“Hot(嚴重)”、“Warning(警告)”和“Info(資訊)”資料夾中。 所有過濾器組都具有相同的資料夾過濾器。

不同“Filter Sets(過濾器組)”中會顯示和隱藏不同的問題:

Broad(廣泛):使用最全面的規則組顯示問題。應使用該過濾器組來發現要審計的一組廣泛的安全問題。 Medium(普通):顯示了在產生結果(詳述潛在問題)和產生預期可能的漏洞組之間打破平衡的問題。 Targeted(特定):顯示在多種行業內及各種環境下經證實的具有高優先順序的問題類別。應使用這些過濾器組來發現一組有限的眾所周知的關鍵安全問題。 Developer(開發人員):顯示開發人員尤為關注的問題,如高準確性 bug。

“Folders(資料夾)”選項卡:

“Issues(問題)”面板上的選項卡稱為“資料夾”。使用“Project Configuration(專案配置)”,您可以自定義資料夾及其設定。因此,不同過濾器組和專案之間的資料夾數目、名稱、顏色和問題列表各不相同。

資料夾過濾器將問題歸類於各種資料夾中。如果某個問題與任何資料夾過濾器都不匹配,該問題將被列在預設資料夾中。可見性過濾器決定了某個問題是否顯示在列表中。

注意:選擇 Option(選項)- Show Suppressed(顯示已廢除項)、Show Hidden(顯示隱藏項)(顯示與可見性過濾器匹配的專案),以及 Show Removed(顯示刪除項)可顯示所有專案。

Group by(分組方式):

“Group by(分組方式)”選項用於將問題列表歸類到各個子資料夾中。選定的選項會應用於所有可見資料夾。使用 <none(無)> 選項,可列出資料夾中的所有專案而不進行任何分組。

使用 Audit Workbench,通過更改對分組進行歸類所依據的屬性、新增或刪除屬性以建立子分組,以及新增您自己的分組選項,您可以對現有分組進行自定義。

“Group by(分組方式)”設定適用於 Audit Workbench 例項。您可以將分組方式選項應用於任何利用 Audit Workbench 例項開啟的專案。

“Search(搜尋)”框:

使用 Search(搜尋)欄位,您可以限制資料夾中顯示的問題和搜尋特定的問題。有關搜尋功能的資訊,請參見使用搜索。

“Analysis Trace(分析跟蹤)”面板:

當您選擇某個問題後,Analysis Trace(分析跟蹤)面板會顯示相關的 trace output。通常情況下,這是一系列程序點,顯示了分析器是如何找到該問題的。對於資料流和控制流問題,這一系列點會以執行順序顯示。 例如,如果您選擇某個與可能被感染資料流相關的問題,Analysis Trace(分析跟蹤)面板會顯示這段原始碼中資料流的移動方向。

分析跟蹤面板

在這裡插入圖片描述

“Analysis Trace(分析跟蹤)”面板使用以下圖示來顯示本段原始碼中資料流的移動方式:

表 1:分析跟蹤圖示

在這裡插入圖片描述

“Project Summary(專案摘要)”面板:

“Project Summary(專案摘要)”面板提供了關於掃描的詳細資訊。

“Summary(摘要)”選項卡 “Certification(認證)”選項卡 “Build Information(Build 資訊)”選項卡 “Analysis Information(分析資訊)”選項卡

專案摘要面板

在這裡插入圖片描述

“Summary(摘要)”選項卡:

“Summary(摘要)”選項卡顯示了關於本專案的高階資訊。

“Certification(認證)”選項卡:

“Certification(認證)”選項卡顯示了結果認證狀態。結果認證用於檢查 FPR 檔案是否與 Fortify SCA 所生成的檔案一致。

“Build Information(Build 資訊)”選項卡:

“Build Information(Build 資訊)”選項卡顯示了以下 Fortify SCA 掃描資訊:

Build 詳細資訊,如 Build ID、掃描的檔案數、掃描日期,可能會與檔案的轉換日期不相同 掃描的檔案列表,包括檔案大小和時間戳 Java 類路徑

“Analysis Information(分析資訊)”選項卡:

“Analysis Information(分析資訊)”選項卡顯示了 Fortify SCA 的版本、計算機詳細資訊以及執行掃描的使用者。 “Analysis Information(分析資訊)”子選項卡包含以下資訊:

規則包:列出了用於掃描原始碼的規則包,包括每個規則包的名稱、ID 和版本號。 屬性:顯示 Fortify SCA 屬性檔案的設定 命令列引數:顯示用來分析專案的命令列選項 警告:列出了分析期間發生的所有錯誤和警告

“Source Code Viewer(原始碼檢視器)”面板:

“Source Code Viewer(原始碼檢視器)”面板顯示了與在“Issues(問題)”面板中選擇的問題相關聯的程式碼段。如果“Analysis Trace(分析跟蹤)”面板中的多個節點代表一個問題,則“Source Code Viewer(原始碼檢視器)”面板會顯示與所選節點相關聯的程式碼。

在“Source Code Viewer(原始碼檢視器)”面板中,您可以使用程式碼輔助功能建立自定義規則和新問題,如下所示:

要為某個函式建立規則,請將游標放在該函式中,單擊滑鼠右鍵,然後選擇 Write Rule for This Function(為此函式編寫規則)。 要建立新問題,請將游標放在該函式中,單擊滑鼠右鍵,然後選擇 Create New Issue(建立新問題)。

“Function(函式)”面板:

Function(函式)面板顯示了專案中的函式/方法列表。使用“Function(函式)”面板可找出該函式在原始碼中的位置,瞭解函式是否應用和匹配某個規則,以及編寫和驗證自定義規則。

“Function(函式)”面板具有以下選項:

Show(顯示):確定顯示在該列表中的函式。 Group by(分組方式):將函式歸類到各個包和類中,顯示層次結構或直接顯示所有函式而不進行分組。 Include unused functions(包括未使用的函式):顯示原始碼中的每個函式。預設情況下,列表中不會包含未使用的函式。 Legend(圖例):顯示一個用於解釋各個列表圖示的視窗。函式旁邊的圖示顏色指明該函式是否應用了規則,如下所示: --------紅色:未應用任何規則 --------藍色:可以應用規則,但沒有匹配的規則 --------綠色:可以應用規則,並且有匹配的規則 Search(搜尋):僅限於顯示那些包含您輸入的字串的函式。該欄位不區分大小寫,如果該欄位為空,將顯示所選組中的所有函式。

函式面板

在這裡插入圖片描述

右鍵單擊某個函式可顯示以下選項:

Open Declaration(開啟宣告):顯示該函式在原始碼中宣告的位置。 Find Usages(查詢用法):建立函式所應用於的檔案位置的列表。會在“Audit(審計)”面板中會開啟“Search(搜尋)”選項卡,其中顯示它所在的檔名稱。 Generate Rule for Function(為此函式生成規則):啟動“Custom Rules(自定義規則)”嚮導來編寫將應用於該函式的規則。 Show Matched Rule(顯示匹配的規則):列出了與該函式相匹配的所有規則所屬規則包的規則 ID 和檔名。

“Issue Auditing(問題審計)”面板:

“Issue Auditing(問題審計)”面板在以下一組選項卡中提供了有關各問題的詳細資訊:

Summary(摘要) Details(詳細資訊) Recommendations(建議) History(歷史記錄) Diagram(圖示) Filter(過濾器)

注意:使用 Options(選項)- Show View(顯示檢視)選單可顯示或隱藏“Issue Auditing(問題審計)”面板中的選項卡。

Summary(摘要):

Summary(摘要)選項卡顯示了關於當前所選問題的以下資訊:

問題審計面板中的摘要選項卡

在這裡插入圖片描述

下表描述了“Summary(摘要)”面板中的各個選項:

元素 描述
問題 顯示問題的位置,包括檔名和行號
Custom Tags
(自定義標籤) 區域 顯示審計員可以作為問題屬性新增的值的下拉列表。例如,預設情況下,“Analysis(分析)”標籤提供了以下值:- Not an issue(不是問題) - Reliability issue(可靠性問題)- Unknown(未知)- Suspicious(可疑)注意:自定義標籤即專案設定,可選擇“Tools(工具)- Project Configuration(專案配置)”來更改標籤值。
Suppress Issue(廢除問題) 更改嚴重級別以廢除和刪除導航樹中的問題。
File Bug(報告 bug) 提供訪問 bug 跟蹤系統(如 Bugzilla)的途徑。
Comments(註釋) 向註釋欄位中追加有關問題的其他資訊。
規則資訊 顯示用於描述問題的資訊,如所屬類別和領域。
更多資訊 開啟 Details(詳細資訊)選項卡。
Recommendations(建議) 開啟 Recommendations(建議)選項卡。

Details(詳細資訊):

Details(詳細資訊)選項卡提供了有關所選問題的詳細說明,並提供了用於解決該問題的指導方針。每項說明均包括下表中所述的部分或全部欄目。

元素 描述
Abstract(概要) 對問題的概要描述
Explanation(解釋) 關於會在哪些情況下發生此類問題的描述,同時還包括該漏洞的討論、通常與該漏洞相關聯的程式碼結構、該漏洞的利用方式,以及潛在的衍生攻擊型別
例項 ID 問題的唯一識別符
規則 ID 標識用於發現問題的主要規則
SCA Confidence(SCA 可信度) 一個由 Fortify SCA 生成的衡量指標
+ 最大化選項卡

Recommendations(建議)

“Recommendations(建議)”選項卡包含有關如何避免引發該漏洞或修改該漏洞方法的建議與示例。

元素 描述
Recommendations(建議) 關於如何解決問題的資訊
Tips(提示) 提供普通或者難以審計的情況的示例,給出了有關如何識別特定問題的提示
References(參考資訊) 參考相關資訊
+ 最大化選項卡

History(歷史記錄)

顯示完整的審計操作列表,其中包括以下詳細資訊:日期和時間、執行審計的計算機以及修正該問題的使用者名稱稱。

Diagram(圖示)

“Diagram(圖示)”選項卡形象地說明了在“Issues(問題)”面板上所選問題的節點執行順序、呼叫深度以及表示式型別。

SQL Injection 問題資料流圖示示例

在這裡插入圖片描述

“Diagram(圖示)”選項卡顯示了與規則型別相關的資訊,如下所示:

資料流規則:縱軸顯示執行順序。跟蹤會從頂部第一個呼叫感染源的函式開始,然後追蹤對該 source(藍色節點)的呼叫情況,並在 sink(紅色節點)處結束跟蹤。在圖示中,也會標記 source (src) 和 sink 結點。縱軸上的紅 X 表示這個被呼叫的函式已結束執行。

橫軸顯示呼叫深度。用一條線顯示控制權的傳遞方向。如果控制權傳遞時攜帶有被感染資料的變數,該線條是為紅色;如果沒有被感染資料,則該線條為黑色。

對於其他所有規則:縱軸顯示執行順序。

每個節點的表示式型別用以下圖示之一表示:

在這裡插入圖片描述

Filter(過濾器)

“Filter(過濾器)”選項卡顯示了所選過濾器組中的所有過濾器。

過濾器選項卡中的選項

元素 描述
Filter 顯示所選過濾器組中所配置的可見性過濾器和資料夾過濾器的列表。 右鍵單擊某個過濾器可顯示與該過濾器匹配的問題,也可啟用或禁用該過濾器。
If 顯示過濾器條件。 第一個下拉列表顯示了問題屬性的列表,第二個下拉列表指定了屬性的匹配方式,而第三個列表是過濾器所匹配的值。
Then 指示過濾器的型別,其中,“hide” 表示可見性過濾器,“folder” 表示資料夾過濾器。