静态代码分析:开发工具中的安全检查插件(FindbugsSpotBugs等)
2024-7-8 21:56:51 Author: www.freebuf.com(查看原文) 阅读量:2 收藏

近 期 使 用 和 研 究 了 几 个 常 用 的 代 码 安 全 审 计 的 I D E 开 发 工 具 的 插 件:

Findbugs

Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。

基于字节码分析,大量使用数据流分析技术,侧重运行时错误检测,如空指针引用等

Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。

我们还可以自己配置检查规则(做哪些检查,不做哪些检查),也可以自己来实现独有的校验规则(用户自定义特定的bug模式需要继承它的接口,编写自己的校验类,属于高级技巧)。

SpotBugs

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

1717661909_666170d581caf451a4169.png!small?1717661910438

目前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关注的规则进行分析,设置如下:

1717661925_666170e5a45b757e0c501.png!small?1717661926338

还可以添加插件,

如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 覆盖分类并提供了修复参考。

1717662547_66617353168c5a8fb675d.png!small?1717662548199

常用的安全检测项如下图所示,我们只需要在IDE中配置的对应列进行匹配勾选即可。

1717720406_66625556067d11f07892f.png!small?1717720407955

SonarLint

更偏代码质量方面,但是也会包含一些代码安全方面的规则

SonarLint 是一个免费的开源IDE 扩展,可识别并帮助您在编写代码时解决质量和安全问题。像拼写检查器一样,SonarLint 会显示缺陷并提供实时反馈和清晰的修复指导,以便从一开始就提供干净的代码。

可以直接 ctrl +shift+s对当前文件扫描质量
或者右键文件夹对整个包或者模块项目全部质量扫描

1717661966_6661710e7ef1e8314b980.png!small?1717661967990

在扫描过后下面会有提示
像下面这些头部显示的图标就是有问题有严重的有不严重的,bug检测出来是一个小虫,如果是漏洞问题会显示一个锁。

1717661977_6661711979c0971cf3991.png!small?1717661978434

也选择和禁用某些规则:

1717661998_6661712e2b9100510366f.png!small?1717661999113


文章来源: https://www.freebuf.com/articles/web/402940.html
如有侵权请联系:admin#unsafe.sh