這次演示的是用Fortify SCA靜態分析Java代碼,和FindBugs不同的是Fortify SCA還可以靜態分析C/C++,.NET和PL/SQL等代碼。
一.Fortify SCA靜態分析原理
由於我不是寫這個東東的人,並且接觸這個工具時間也有限,所以對它的工作原理認知比較淺,很多是通過它的說明文檔得來的。
Fortify SCA靜態分析分兩個階段:
1.Translation:
把各種語言的源代碼轉爲一種統一的中間語言代碼。
2.Analysis:
根據中間代碼分析代碼漏洞,並得出報告。
Fortify有很多個語言轉換器,但核心的靜態分析引擎只有一套。
二.Fortify SCA的使用
先看看Fortify SCA Demo 4.0.0的目錄:
這個是Fortify SCA Demo 4.0.0的目錄,這裏主要有兩個文件:auditworkbench.cmd和sourceanalyzer.exe,auditworkbench.cmd是查看靜態分析報告的工具,sourceanalyzer.exe是靜態代碼分析器。這裏我們還看到了一個FindBugs的目錄,這是因爲這個版本的Fortify集成了此功能,你可以通過傳參給sourceanalyzer.exe調用FindBugs(但我一般不這麼做,可以直接使用FindBugs的話,爲什麼還要通過sourceanalyzer.exe調呢?)。
開始掃描靜態分析,首先CMD進入Java源代碼目錄,然後“H:\Fortify\sourceanalyzer.exe -classpath "**/*.jar" -f test.fpr .”,在當前目錄得到結果報告test.fpr。
用auditworkbench打開test.fpr,效果如下圖:
這裏auditworkbench主要分4部分:
1.左上(Issues):是警告分類,這裏Fortify分了3了,嚴重程度由高至低分別是:hot,warning,info。下面是本次掃描的問題列表,雙擊即可定位問題代碼。
2.右上:源代碼。雙擊問題列表即可自動定位代碼。
3.左下(analysis trace):問題處的Trace信息,告訴你問題出現在哪裏文件第幾行。
4.右下(details):問題的詳細說明,還有示範代碼。
OK,現在看看其他地方,比如:menubar(Options)-->Show View-->Other,你會看到下圖:
這裏我看到了一個很像eclipse管理插件的窗口,噢,難道.....OK,讓我看看再找找Fortify的目錄看看,找到了這個東西:
這裏發現Fortify SCA真的是一個Eclipse插件,不過當我興沖沖地把這個插件放進myeclipse插件庫並重啓後,發現這個不能識別:<,好像還是差了點東西,這個以後研究。
這個工具還有很多功能,但暫且先寫這多。
三.Fortify SCA Demo 4.0.0與FindBugs(1.3.7.20081230)對比
今天試着對同一份代碼進行靜態掃描,發現FindBugs找到的問題種類,數量都比Fortify SCA Demo 4.0.0多很多:
FindBugs發現問題種類有:20多種
Fortify SCA Demo 4.0.0發現問題種類:5種
在分析發現問題後,發現了一個有趣現象,Fortify SCA Demo 4.0.0和FindBugs發現的BUG類型是完全不同,可以說是互補的!其中,FindBugs發現的問題相對比較重要!但FindBugs只是針對Java代碼的靜態分析器,而Fortify SCA則支持更多的語言,並且Fortify SCA對發現問題的解釋相對比較清晰。
導致這個問題的原因可能是:Fortify SCA Demo 4.0.0這個版本比較老,並且是試用版,規則庫和靜態分析引擎都不全......如果是最新的Fortify SCA商業版,應該是不錯,8個分析不同類型問題的靜態分析引擎,龐大的規則庫.......可是俺這種窮人還沒機會試:<
對比兩個Java靜態分析工具,Fortify SCA Demo 4.0.0和FindBugs(1.3.7.20081230),使用FindBugs是不錯的選擇,它相對比較強些,但如果可以兩個都用當然效果更好:>
四.Fortify SCA的Bug類型及解釋說明
雖然Fortify SCA對問題已經有比較清晰的說明,但是還是決定自己總結,這樣會更加清晰。(相關問題解釋說明稍後補上)
Hot:
//...