靜態(tài)代碼掃描領(lǐng)域風(fēng)起云涌十余載,各個(gè)掃描工具擁躉眾多,其中Facebook開源的Infer異軍突起,獨(dú)領(lǐng)風(fēng)騷。然而360火線作為新的入場(chǎng)者憑什么能夠擊敗Infer?是真有實(shí)力還是噱頭吹捧?
Facebook 開源靜態(tài)分析工具Infer
Infer是?Facebook 旗下開源的靜態(tài)分析工具,至今已在Github上獲得6700+ Star。Infer可以掃描JAVA、Objective-C和 C/C++ 代碼,擅長(zhǎng)資源泄漏以及空指針的檢測(cè)。
360火線(FireLine)
360火線(Fireline)是360公司技術(shù)委員會(huì)牽頭,Web平臺(tái)部Qtest團(tuán)隊(duì)開發(fā)的一款免費(fèi)靜態(tài)代碼分析工具。主要針對(duì)移動(dòng)端Android產(chǎn)品進(jìn)行靜態(tài)代碼分析。其最為突出的優(yōu)點(diǎn)就是資源泄漏問題的全面檢測(cè)。同時(shí),火線與360信息安全部門合作,推出了一系列針對(duì)移動(dòng)端安全漏洞的檢測(cè)規(guī)則。360火線提供免費(fèi)使用,掃描速度快,并支持Android Studio插件,Jenkins插件,Gradle部署等多種集成方式。
火線目前是360公司發(fā)布流程中必不可少的環(huán)節(jié),在每次代碼編譯審核時(shí)提供靜態(tài)代碼分析檢測(cè),為代碼審計(jì)人員、開發(fā)人員分別提供審核和修改代碼的依據(jù)。目前火線在360發(fā)布流程中已累計(jì)運(yùn)行超過500天,掃描文件數(shù)2千萬+,掃描代碼量超過45億行。火線最近推出的Android Studio插件360 Fireline Plugin下載量已達(dá)到4000+。
火線擁有四大類規(guī)則,分別為安全類,內(nèi)存類,日志類,基礎(chǔ)類。
?安全類:根據(jù)360信息安全部門最權(quán)威的SDL專門定制,每一條SDL都有真實(shí)的攻擊案例
?內(nèi)存類:各種資源關(guān)閉類問題檢測(cè)(本次評(píng)測(cè)的重點(diǎn))
?日志類:檢測(cè)日志輸出敏感信息內(nèi)容的規(guī)則
?基礎(chǔ)類:規(guī)范類、代碼風(fēng)格類、復(fù)雜度檢查規(guī)則
(詳見官網(wǎng):http://magic.#)
火線如何擊敗 Facebook Infer
火線針對(duì)資源關(guān)閉的深入研究
綜合國(guó)內(nèi)外靜態(tài)代碼分析現(xiàn)狀以及結(jié)合業(yè)務(wù)中常見代碼問題,并走訪、咨詢過多位業(yè)內(nèi)資深技術(shù)專家,我們發(fā)現(xiàn)資源泄漏問題是開發(fā)者非常關(guān)注但又會(huì)經(jīng)常疏漏的難題。
隨著對(duì)資源泄漏問題逐步深入的研究中我們發(fā)現(xiàn),目前市面上開源的靜態(tài)代碼掃描產(chǎn)品都無法給出令人滿意的解決方案。即使是目前熱度最高的Infer,針對(duì)資源關(guān)閉問題的掃描也有一個(gè)致命的缺陷,即無法正確識(shí)別出跨類跨方法以及第三方關(guān)閉類關(guān)閉資源對(duì)象的復(fù)雜場(chǎng)景。
于是火線團(tuán)隊(duì)針對(duì)資源泄漏問題進(jìn)行了深度的研究(點(diǎn)擊查看研究結(jié)果相關(guān)文章鏈接),采用了新的解決方案,不僅能夠正確識(shí)別幾十種不同資源泄漏問題場(chǎng)景,并且針對(duì)跨類跨方法的追蹤檢測(cè)有了重大突破。
我們梳理了30種資源泄漏場(chǎng)景,通過測(cè)試項(xiàng)目TestCasesProject(https://github.com/ariesliu/TestCasesProject),對(duì)Infer和火線這兩種種靜態(tài)代碼分析工具的掃描結(jié)果做橫向?qū)Ρ确治觥?/p>
靜態(tài)代碼分析工具測(cè)評(píng)維度
誤報(bào)率和有效率是靜態(tài)代碼分析工具非常關(guān)鍵的指標(biāo),因此本次測(cè)評(píng)主要從以下幾個(gè)維度分析各個(gè)工具的利弊:命中BUG、相似代碼誤報(bào)、漏測(cè)BUG、缺少規(guī)則。本次評(píng)測(cè)結(jié)果圖標(biāo)示意如下表所示:
靜態(tài)分析工具掃描結(jié)果分析
1、資源泄漏類問題
針對(duì)資源泄漏問題,兩種靜態(tài)分析工具的檢測(cè)結(jié)果,如下表所示:
【點(diǎn)擊圖片查看高清大圖】
【問題描述詳情請(qǐng)見測(cè)試項(xiàng)目TestCasesProject源碼】
數(shù)據(jù)統(tǒng)計(jì)結(jié)果如下表:
從上表中數(shù)據(jù)結(jié)果分析可得,火線針對(duì)30種場(chǎng)景全部正確命中,檢出率100%。Infer的bug有效數(shù)表現(xiàn)不錯(cuò),但是面對(duì)這30種復(fù)雜場(chǎng)景,誤報(bào)率較高。
經(jīng)分析Infer誤報(bào)的測(cè)試用例,發(fā)現(xiàn)Infer對(duì)跨類跨文件資源關(guān)閉方式以及無需關(guān)閉的資源對(duì)象無法做出正確檢測(cè)。而火線可以良好的檢測(cè)所有資源關(guān)閉方式以及對(duì)無需關(guān)閉的資源對(duì)象進(jìn)行有效過濾。
2.其他類規(guī)則
除了針對(duì)資源泄漏問題檢測(cè)做了深入研究外,火線還定制了獨(dú)有的日志和移動(dòng)端的安全類規(guī)則,以幫助開發(fā)人員規(guī)避代碼中存在的安全風(fēng)險(xiǎn)。(詳見官網(wǎng):http://magic.#)
【點(diǎn)擊圖片查看高清大圖】
從上表中數(shù)據(jù)結(jié)果分析可得,火線獨(dú)有的安全規(guī)則和代碼規(guī)范規(guī)則具有很強(qiáng)的壁壘優(yōu)勢(shì),同時(shí)Infer在空指針檢測(cè)上的表現(xiàn)有待提高。
總結(jié)
綜合以上對(duì)比結(jié)果,可以明顯的看出360火線在列舉的各個(gè)方面都有非常大的領(lǐng)先優(yōu)勢(shì)。但是作為靜態(tài)代碼掃描領(lǐng)域的新產(chǎn)品,我們深知還有很長(zhǎng)的路要走。360火線目前深耕Android代碼檢測(cè),并已率先支持Kotlin語言掃描。大家在使用過程中有任何問題和建議,歡迎反饋到火線郵箱(g-qtest-fankui@#)。我們會(huì)持續(xù)不斷地優(yōu)化改進(jìn)360火線,以幫助大家更快更好的發(fā)現(xiàn)和解決代碼質(zhì)量問題。
附錄:
火線與市面上開源的靜態(tài)代碼掃描工具:Infer、PMD、Findbugs、Sonar的橫向?qū)Ρ葓D。
【點(diǎn)擊圖片查看高清大圖】