前段時間因為工作原因需要對java源代碼進行掃描,現結合使用經驗對靜態代碼掃描工具Fortify SCA與FindBugs進行一個簡單的對比。
一、Fortify SCA
Fortify SCA是由全球領先的軟件安全產品解決方案供應商Fortify Software開發,致力於幫助客戶在軟件開發生命周期中建立安全機制,杜絕軟件安全漏洞,避免經濟上和聲譽上的損失。
掃描原理:FortifySCA首先通過調用語言的編譯器或者解釋器把前端的語言代碼(Java、C、C++等源代碼)轉換成一種中間媒體文件NST(Normal Syntax Trcc),將其源代碼之間的調用關系、執行環境、上下文等分析清楚。然后通過匹配所有規則庫中的漏洞,若發現存在漏洞就抓取出來,顯示在Fortify SCA掃描結果中。
風險類型:參考CWE、OWASP
是否收費:收費
支持語言:Java,JSP,C#,C,C++,PHP,VB.NET,ASP.NET,COBOL,ColdFusion,Transact-SQL,PL/SQL,JavaScript/Ajax,Classic,ASP,VBScript,VB6
支持系統:Windows、Linux、Mac OS
安裝方式:IDE插件(Eclipse、VS、WSAD、RAD)、命令行
分析頁面:
報告格式:PDF
二、FindBugs
FindBugs是由馬里蘭大學提供的一款開源靜態代碼分析軟件。
掃描原理:Findbugs檢查類或者JAR 文件,將字節碼與一組缺陷模式進行對比以發現可能的問題。Findbugs自帶檢測器,其中有60余種Bad practice,80余種Correctness,1種 Internationalization,12種Malicious code vulnerability,27種Multithreaded correctness,23種Performance,43種Dodgy。我們還可以自己配置檢查規則(做哪些檢查,不做哪些檢查),也可以自己來實現獨有的校驗規則(用戶自定義特定的bug模式需要繼承它的接口,編寫自己的校驗類,屬於高級技巧)。
風險類型:
·Bad practice 常見代碼錯誤,用於靜態代碼檢查時進行缺陷模式匹配
·Correctness 可能導致錯誤的代碼,如空指針引用等
·Dodgy code 糟糕的代碼
·Experimental 實驗
·Internationalization 國際化相關問題
·Malicious code vulnerility 惡意的代碼漏洞
·Multithreaded correctness 多線程問題
·Performance 性能問題
是否收費:免費
支持語言:Java
使用方式:IDE插件(Eclipse、NetBeans、Intellij IEDA)、GUI
支持系統:Windows、Linux
分析頁面:
報告格式:XML
使用Fortify SCA與FindBugs掃描同一份源代碼結果差異較大。兩個工具所針對的威脅類型(可參見上文風險類型項)不同,可結合起來使用,有助於更多地發現源代碼問題。