Fortify代码扫描工具
一、Fortify介紹? ? ?
?Fortify是一款強大的靜態代碼掃描分析工具,其發現代碼漏洞缺陷的能力十分強悍,主要是將代碼經過編譯,依托于其強大的內置規則庫來發現漏洞的。其次fortify SCA團隊在開發此商業工具時,也提供了自定義規則的接口,只要經過正版授權后,便可以在此基礎上自定義規則,來增強Fortify SCA的漏洞識別能力,同時經過自定義規則,也可以降低誤報,使靜態分析的準確度和高效性。
? ? ?默認情況下,Fortify SCA使用安裝的安全編碼規則包來檢查源代碼,并定義一系列可能出現的問題,如可被攻擊者李勇的安全漏洞和不良的編碼缺陷。
? ? 安全編碼規則中的規則分析受支持語言的核心和擴展的API包中的函數,并將分析結果記錄在Fortify SCA中。每一個問題的解釋包含了對問題的描述和建議的解決方案,一邊更好的解決程序中的漏洞和缺陷。也可以通過創建自定義規則包來準確地分析特定的應用程序,驗證專門的安全規則以及細化Fortify SCA所報告的問題。
二、編寫自定義規則原理
要編寫有效的自定義規則,就必須熟悉一直的安全漏洞類別和通常與他們相關的函數類型。深入理解各類經常出現在特定類型漏洞的函數,有利于在編寫自定義規則過程中能夠準確地找到與安全相關的函數。任何一門語言,都有其龐大的開源框架和lib庫。所以自定義規則,既要精通安全漏洞原理,又要熟練掌握一門或幾門開發語言,一般自定義規則用的比較多的語言有java、C/C++、PHP等。其次必須識別與安全相關的函數,并熟悉這些函數的特性以此來確定能夠體現各個函數具體行為和與之相關的漏洞類別的正確規則形式。一旦確定好了這種聯系,使用自定義規則編輯器來創建規則就相對簡單了。
三、自定義規則
1). 在fortify SCA安裝的bin目錄下找到打開自定義規則編輯器,CustomRulesEditor.cmd,如下圖所示:
2). 打開編輯器后,選擇File ——>Generate Rule,彈出規則向導框。
3). 自定義規則模板可以按照漏洞類型(Category)和規則類型(Rule Type)進行分類,不管是何種方式分類,這些模板大體上分為,數據污染源tainted規則,數據控制流規則,數據傳遞規則,以及漏洞缺陷爆發的sink規則。只要理解了這些規則模板,和開發語言的函數特征,建立規則就簡單了。
如下是fortify自定義規則向導中的規則選項:
1) Access Control: Database ?Validation Rule
定義驗證對數據庫中所存儲的信息的訪問權限的函數 (授權函數)。這個規則可以發現與未經授權的訪問相關的漏洞Alias Rule
在安全編碼規則包或自定義規則的范圍內定義核心和擴展API 所發現的能夠模擬其他函數行為的函數。
2) Allocation Rule
定義內存分配的函數。這個規則有助于跟蹤緩沖區大小并檢測 buffer overflow 漏洞
3) Buffer Overflow Detection Rules for 'scanf' Family of Functions
定義像 scanf() 家族函數一樣運行的函數。這些規則有助于跟蹤緩沖區大小并檢測 buffer overflow 漏洞
4) Buffer Overflow Detection Rules for 'sprintf' Family of Functions
定義像 sprintf() 家族函數一樣運行的函數。這個函數可以在格式化字符串中并置多個起始緩沖區,并將格式化字符串的多個內存單位復制到目標緩沖區。這個規則有助于跟蹤緩沖區大小并檢測 buffer overflow 漏洞
5) Buffer Overflow Detection Rules for 'strcat' Family of Functions
定義像 strcat() 家族函數一樣運行的函數。它在目標緩沖區的末端并置了多個起始緩沖區的內存單位。這些規則有助于跟蹤緩沖區大小并檢測 buffer overflow 漏洞
6) Buffer Overflow Detection Rules for 'strcpy' Family of Functions
定義像 strcpy() 家族函數一樣運行的函數。它可以將多個內存單位從起始緩沖區復制到目標緩沖區。這些規則有助于
跟蹤緩沖區大小并檢測 buffer overflow 漏洞
7) Cross-Site Scripting Sink Rule
定義在輸入參數沒有進行適當驗證的情況下有可能在瀏覽器中執行惡意代碼的函數
8) Cross-Site Scripting Source Rule
定義充當輸入源的函數,如果這樣的函數沒有經過適當的驗證,會導致瀏覽器執行惡意代碼。
9) Cross-Site Scripting Validation Rule
定義發送到網頁前需要進行適當的數據驗證的函數
10) Generic Pass-Through Rule
定義一個其輸入參數會和輸出參數交互數據的函數。
11) Generic Semantic Rule
定義可能出現的 dangerous function
12) Generic Sink Rule
定義在輸入參數沒有進行適當驗證的情況下有可能帶來多種安全漏洞風險的函數
13) Generic Source Rule
定義充當輸入源的函數,如果這樣的函數沒有經過適當的驗證,會導致多種安全漏洞。
14) Generic Validation Rule
定義能夠針對多種安全漏洞而進行適當驗證的函數
15) HTTP Response Splitting Sink Rule
定義在輸入參數沒有進行適當驗證的情況下有可能破壞 HTTP 響應頭文件的函數
16) HTTP Response Splitting Validation Rule
定義加入 HTTP 響應頭文件之前已進行適當的數據驗證的函數
17) Integer Overflow Sink Rule
定義易于發生 integer overflow 漏洞的函數,這種漏洞會在輸入參數驗證不當的情況下導致邏輯錯誤和 buffer overflow。
18) Log Forging Sink Rule
定義在輸入參數沒有進行適當驗證的情況下有可能向日志文件寫入惡意或偽造條目的函數
19) Pass-Through Rule that Indicates that Outgoing Value does not End with a Newline Character
定義未在輸出參數中附加換行符的參數
20) Pass-Through Rule that Indicates that Outgoing Value does not End with a Null Character
定義沒有適當地以 "\0" 結束輸出緩沖區的函數
21) Pass-Through Rule that Indicates that Outgoing Value Ends with a Newline Character
定義在輸出參數中附加換行符的參數
22) Pass-Through Rule that Indicates that Outgoing Value Ends with a Null Character
定義適當地以 "\0" 結束輸出緩沖區的函數
23) Pass-Through Rule that Indicates ?that Outgoing Value is ?Deobfuscated
定義充當去模糊化例程的函數
24) Pass-Through Rule that Indicates ?that Outgoing Value is not ?Numeric
定義處理輸入參數的函數,以使其輸出參數不為數字。
25) Pass-Through Rule that Indicates that Outgoing Value is Numeric
定義處理輸入參數的函數,以使其輸出參數為數字。
26) Pass-Through Rule that Indicates ?that Outgoing Value is Poorly ?Encrypted
定義對輸入參數所執行的加密方式較差的函數,如基于 64位的編碼。
27) Pass-Through Rule that Indicates ?that Outgoing Value Represents ?the Length of the String
定義輸出參數可以表示字符串長度的函數
28) Password Management Sink Rule
定義采用永遠不會被破譯或去模糊化的明文密碼作為參數的函數
29) Password Management: Weak Cryptography Sink Rule
定義采用加密方式較差的密碼作為參數的函數
30) PCI Violation Sink Rule
定義有可能將信用卡數據顯示給攻擊者的函數
31) PCI Violation Source Rule
定義將信用卡數據引入應用程序的函數
32) PCI Violation Validation Rule
定義信用卡數據顯示給攻擊者前可以對這些數據進行適當驗證的函數
33) Privacy Violation Sink Rule
定義在輸入參數處理不當的情況下由于向攻擊者顯示私人信 息而導致可能危及用戶隱私的函數
34) Privacy Violation Source Rule
定義作為私人數據源的函數,如果處理不當,會危害用戶隱私。
35) Privacy Violation Validation Rule
定義能適當處理私人數據且不會危及用戶隱私的函數。
36) SQL Injection Sink Rule
定義在輸入參數沒有進行適當驗證的情況下有可能執行惡意SQL 或對數據庫所存儲的數據提供未經授權的訪問權限的函數
37) SQL Injection Source Rule
定義充當輸入源的函數,如果這樣的函數沒有經過適當的驗證,會導致 SQL 被注入到數據庫查詢中。
38) SQL Injection Validation Rule
定義在利用數據進行 SQL 查詢之前能夠對這些數據進行適當驗證的函數
39) String Length Rule
定義能夠計算字符串長度的函數。這個規則有助于跟蹤字符串的長度,以便檢測 buffer overflow 漏洞。
40) String Termination Error Sink Rule
定義在輸入參數沒有適當地以 "\0" 結尾的情況下可能會容易導致 buffer overflow 漏洞
41) String Termination Error Source Rule
定義由于輸入數據源沒有適當地以 "\0" 結尾而容易導致buffer overflow 漏洞。
42) String Termination Error Validation Rule
定義適當地以 "\0" 結束緩沖區的函數。
43) System Information Leak Sink Rule
定義在輸入參數處理不當的情況下可能向攻擊者顯示有用的系統信息的函數
44) System Information Leak Source Rule
定義作為系統信息數據源的函數,如果處理不當,會向攻擊者泄漏有用的數據。
45) System Information Leak Validation Rule
定義能夠適當處理系統數據的函數
4) .選擇規則包語言,點擊next,然后填寫報名,類名,函數名
5). 點擊next,設置sink點
四. 運行自定義規則
需要將編寫好的自定義規則包放在Fortify SCA指定的文件夾下方可生效。默認一般是在${FortifyInstall}/Core/config/customrules/目錄下。你可以在${FortifyInstall}/Core/config/fortify-sca.properties進行配置自定義路徑
五、Fortify代碼掃描使用教程
1、進入Fortify安裝目錄,再進入bin目錄,雙擊auditworkbench.cmd啟動程序
2、打開掃描窗口,點擊Scan Java Project
3、選擇要掃描的項目目錄,點擊確定按鈕
4、彈出java代碼版本選擇窗口,選擇版本后,點擊OK
5、彈出審計向導窗口,點擊Scan按鈕開始掃描
6、掃描開始,等待掃描結束,等待時間根據項目大小而定,可能時間會很長
7、掃描結束后,顯示掃描結果。到此使用Fortify 17.10進行源代碼漏掃的方法就介紹完了。
初始fortify,還存在很多認知的不足,歡迎路過的伙伴們留言指正。。。望不吝賜教!!!
總結
以上是生活随笔為你收集整理的Fortify代码扫描工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习大数据看门的几本书
- 下一篇: APP 性能测试工具