近 期 使 用 和 研 究 了 几 个 常 用 的 代 码 安 全 审 计 的 I D E 开 发 工 具 的 插 件:
Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
基于字节码分析,大量使用数据流分析技术,侧重运行时错误检测,如空指针引用等
Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。
我们还可以自己配置检查规则(做哪些检查,不做哪些检查),也可以自己来实现独有的校验规则(用户自定义特定的bug模式需要继承它的接口,编写自己的校验类,属于高级技巧)。
SpotBugs是Findbugs的继任者(Findbugs已经不再维护),用于对Java代码进行静态分析,查找相关的漏洞,SpotBugs比Findbugs拥有更多的校验规则。
SpotBugs 需要当前的JDK环境为 1.8以上,但可以对1.0~1.9的代码来进行检查。SpotBugs是对.class文件进行扫描的,所以工程必须成功完成编译并生成.class文件。可以通过如下方式使用Spotbugs:Ant、Maven、Gradle、Eclipse
SpotBugs是可扩展的,可以通过插件添加新的检测器
spotbugs主要包括10大类bug:
目前SpotBugs 3.1.3 自带检测器,其中有90余种Bad practice,155余种Correctness,9种Experimental, 2种 Internationalization,17种Malicious code vulnerability,46种Multithreaded correctness,4种 Bogus random noise,37种Performance,11种 Security,87种Dodgy。
1、Bad practice(90余种)不良的实践,违反常识性的或者必要的代码惯例,比如重写了equals却没有重写hashcode。
2、Correctness (150余种) 此处的代码有可能在运行时导致错误,与预期不符,比如空指针错误。
3、Experimental(9种)spotbugs在此处不适用,大概是匹配模式不太适用于此处。
4、Internationalization(2种)原文是:code flaws having to do with internationalization and locale,没有遇到过类似的错误。
5、Malicious code vulnerability(17种)代码具有被恶意代码攻击的风险。比如返回一个可变类型引用并保存在对象字段中。
6、Multithreaded correctness(46种)线程安全,比如可能造成死锁的代码。
7、Bogus random noise(4种)并不是软件中的实际错误。
8、Performance(37种)性能不好的代码,比如在迭代中使用“+”连接字符串。
9、Security(11种)使用了不安全的外部输入,可能导致远程控制的漏洞。
10、Dodgy(87种)导致自身混乱的代码
可以提升扫描效率,不进行所有规则的扫描,重点选择top10关注的规则进行分析,设置如下:
还可以添加插件,
如Find Security Bugs 是SpotsBug的插件,
他主要用来做web和android应用的代码安全测试。目前可以检测出 141 种不同类型的安全漏洞。它支持大量的使用主流的框架和库的代码检测,如包括 Spring-MVC,Struts,Tapestry等,并可以与 IDE 集成,可用于 Eclipse,IntelliJ,Android Studio 和 NetBeans 中的 findbug并提供命令行接口以便用于 maven 和 ant,支持与 Jenkins 和 SonarQube 等系统进行持续集成。针对检测同的漏洞进行了 OWASP TOP 10 和 CWE 覆盖分类并提供了修复参考。
常用的安全检测项如下图所示,我们只需要在IDE中配置的对应列进行匹配勾选即可。
更偏代码质量方面,但是也会包含一些代码安全方面的规则
SonarLint 是一个免费的开源IDE 扩展,可识别并帮助您在编写代码时解决质量和安全问题。像拼写检查器一样,SonarLint 会显示缺陷并提供实时反馈和清晰的修复指导,以便从一开始就提供干净的代码。
可以直接 ctrl +shift+s对当前文件扫描质量
或者右键文件夹对整个包或者模块项目全部质量扫描
在扫描过后下面会有提示
像下面这些头部显示的图标就是有问题有严重的有不严重的,bug检测出来是一个小虫,如果是漏洞问题会显示一个锁。
也选择和禁用某些规则: