用Fortify SCA分析代码漏洞
http://www.cnblogs.com/hyddd/archive/2009/02/23/1396790.html
?
hyddd原創(chuàng),轉(zhuǎn)載請(qǐng)說(shuō)明。上次介紹了用FindBugs輔助分析代碼漏洞,這次換了一個(gè)工具:Fortify SCA Demo 4.0.0。Fortify是一個(gè)在安全方面挺出名的公司,這里就不多說(shuō)了。先介紹一下主角:Fortify SCA Demo 4.0.0,雖然現(xiàn)在不知道Fortify SCA的版本是多少,但可以肯定的是,Fortify SCA Demo 4.0.0是一個(gè)比較舊的Fortify SCA分析器了,并且還是Demo版的,所以無(wú)論是界面還是功能上都是比較簡(jiǎn)陋的。由于Fortify SCA不是開(kāi)源的工具,這里就不提供下載了,大家可以上Fortify主頁(yè)申請(qǐng):>。
這次演示的是用Fortify SCA靜態(tài)分析Java代碼,和FindBugs不同的是Fortify SCA還可以靜態(tài)分析C/C++,.NET和PL/SQL等代碼。
一.Fortify SCA靜態(tài)分析原理
由于我不是寫(xiě)這個(gè)東東的人,并且接觸這個(gè)工具時(shí)間也有限,所以對(duì)它的工作原理認(rèn)知比較淺,很多是通過(guò)它的說(shuō)明文檔得來(lái)的。
Fortify SCA靜態(tài)分析分兩個(gè)階段:
1.Translation:
把各種語(yǔ)言的源代碼轉(zhuǎn)為一種統(tǒng)一的中間語(yǔ)言代碼。
2.Analysis:
根據(jù)中間代碼分析代碼漏洞,并得出報(bào)告。
Fortify有很多個(gè)語(yǔ)言轉(zhuǎn)換器,但核心的靜態(tài)分析引擎只有一套。
二.Fortify SCA的使用
先看看Fortify SCA Demo 4.0.0的目錄:
這個(gè)是Fortify SCA Demo 4.0.0的目錄,這里主要有兩個(gè)文件:auditworkbench.cmd和sourceanalyzer.exe,auditworkbench.cmd是查看靜態(tài)分析報(bào)告的工具,sourceanalyzer.exe是靜態(tài)代碼分析器。這里我們還看到了一個(gè)FindBugs的目錄,這是因?yàn)檫@個(gè)版本的Fortify集成了此功能,你可以通過(guò)傳參給sourceanalyzer.exe調(diào)用FindBugs(但我一般不這么做,可以直接使用FindBugs的話(huà),為什么還要通過(guò)sourceanalyzer.exe調(diào)呢?)。
開(kāi)始掃描靜態(tài)分析,首先CMD進(jìn)入Java源代碼目錄,然后“H:\Fortify\sourceanalyzer.exe -classpath "**/*.jar" -f test.fpr .”,在當(dāng)前目錄得到結(jié)果報(bào)告test.fpr。
用auditworkbench打開(kāi)test.fpr,效果如下圖:
這里auditworkbench主要分4部分:
1.左上(Issues):是警告分類(lèi),這里Fortify分了3了,嚴(yán)重程度由高至低分別是:hot,warning,info。下面是本次掃描的問(wèn)題列表,雙擊即可定位問(wèn)題代碼。
2.右上:源代碼。雙擊問(wèn)題列表即可自動(dòng)定位代碼。
3.左下(analysis trace):問(wèn)題處的Trace信息,告訴你問(wèn)題出現(xiàn)在哪里文件第幾行。
4.右下(details):問(wèn)題的詳細(xì)說(shuō)明,還有示范代碼。
OK,現(xiàn)在看看其他地方,比如:menubar(Options)-->Show View-->Other,你會(huì)看到下圖:
這里我看到了一個(gè)很像eclipse管理插件的窗口,噢,難道.....OK,讓我看看再找找Fortify的目錄看看,找到了這個(gè)東西:
這里發(fā)現(xiàn)Fortify SCA真的是一個(gè)Eclipse插件,不過(guò)當(dāng)我興沖沖地把這個(gè)插件放進(jìn)myeclipse插件庫(kù)并重啟后,發(fā)現(xiàn)這個(gè)不能識(shí)別:<,好像還是差了點(diǎn)東西,這個(gè)以后研究。
這個(gè)工具還有很多功能,但暫且先寫(xiě)這多。
三.Fortify SCA Demo 4.0.0與FindBugs(1.3.7.20081230)對(duì)比
今天試著對(duì)同一份代碼進(jìn)行靜態(tài)掃描,發(fā)現(xiàn)FindBugs找到的問(wèn)題種類(lèi),數(shù)量都比Fortify SCA Demo 4.0.0多很多:
FindBugs發(fā)現(xiàn)問(wèn)題種類(lèi)有:20多種
Fortify SCA Demo 4.0.0發(fā)現(xiàn)問(wèn)題種類(lèi):5種
在分析發(fā)現(xiàn)問(wèn)題后,發(fā)現(xiàn)了一個(gè)有趣現(xiàn)象,Fortify SCA Demo 4.0.0和FindBugs發(fā)現(xiàn)的BUG類(lèi)型是完全不同,可以說(shuō)是互補(bǔ)的!其中,FindBugs發(fā)現(xiàn)的問(wèn)題相對(duì)比較重要!但FindBugs只是針對(duì)Java代碼的靜態(tài)分析器,而Fortify SCA則支持更多的語(yǔ)言,并且Fortify SCA對(duì)發(fā)現(xiàn)問(wèn)題的解釋相對(duì)比較清晰。
導(dǎo)致這個(gè)問(wèn)題的原因可能是:Fortify SCA Demo 4.0.0這個(gè)版本比較老,并且是試用版,規(guī)則庫(kù)和靜態(tài)分析引擎都不全......如果是最新的Fortify SCA商業(yè)版,應(yīng)該是不錯(cuò),8個(gè)分析不同類(lèi)型問(wèn)題的靜態(tài)分析引擎,龐大的規(guī)則庫(kù).......可是俺這種窮人還沒(méi)機(jī)會(huì)試:<
對(duì)比兩個(gè)Java靜態(tài)分析工具,Fortify SCA Demo 4.0.0和FindBugs(1.3.7.20081230),使用FindBugs是不錯(cuò)的選擇,它相對(duì)比較強(qiáng)些,但如果可以?xún)蓚€(gè)都用當(dāng)然效果更好:>
四.Fortify SCA的Bug類(lèi)型及解釋說(shuō)明
雖然Fortify SCA對(duì)問(wèn)題已經(jīng)有比較清晰的說(shuō)明,但是還是決定自己總結(jié),這樣會(huì)更加清晰。(相關(guān)問(wèn)題解釋說(shuō)明稍后補(bǔ)上)
Hot:
//...
Warning:
[Structural]Erroneous String Compare
[Structural]System Information Leak:HTML Comment in JSP
[Semantic]System Information Leak
[Data Flow]System Information Leak
[Data Flow]Denial of Servie
[Control Flow]Null Dereference
[Control Flow]Unreleased Resource
[Control Flow]Missing Check for Null Parmater
Info:
[Structural]Poor Logging Practice:User of a System Output Stream
[Structural]Poor Error Handing:Empty Catch Block
[Structural]Poor Error Handing:Overly Broad Catch
[Structural]Poor Error Handing:Overly Broad Throws
[Structural]J2EE Bad Practices:Leftover Debug Code
[Structural]Dead Code:Unused Method
[Semantic]Insecure Randomness
[Semantic]Denial of Service
[Semantic]SQL Injection
?
//...
?
五.參考文檔:
1.Fortify規(guī)則庫(kù):http://www.fortify.com/vulncat/zh_CN/vulncat/index.html
2.相關(guān)資源:http://baixar.agox.net/gratis/Fortify-2-2-5.htm
作者:hyddd
出處:http://www.cnblogs.com/hyddd/
本文版權(quán)歸作者所有,歡迎轉(zhuǎn)載,演繹或用于商業(yè)目的,但是必須說(shuō)明本文出處(包含鏈接)。
總結(jié)
以上是生活随笔為你收集整理的用Fortify SCA分析代码漏洞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: svn switch 导致个别文件swi
- 下一篇: 常见漏洞类型汇总