前段时间因为工作原因需要对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扫描同一份源代码结果差异较大。两个工具所针对的威胁类型(可参见上文风险类型项)不同,可结合起来使用,有助于更多地发现源代码问题。