源码安全扫描工具较多,既有开源的,比如SpotBugs、FindSecurityBugs,也有商业的,例如Fortify、Checkmarx等。更过关于开源工具的信息可以查看OWASP提供的信息。本文主要介绍如何通过SpotBugs进行源码安全扫描。
要进行源码安全扫描,可以有四种途径:
第一种:本地IDE工具上安装SpotBugs插件进行扫描
第二种:在构建工具配置信息上引入SpotBugs插件进行扫描
第三种:在SonarQube上安装SpotBug进行扫描,可集成到CI上
第四种:在云工具上进行静态安全扫描。
本文主要介绍前面三种方式。在开始介绍具体如何进行扫描前,我们先来看看几个容易混淆的概念。
FindBugs和SpotBugs区别:FindBugs早于SpotBugs发布,但目前已经不再维护,SpotBugs晚于FindBugs发布,但目前社区维护比较热,实际上SpotBugs继承了原来FindBugs的的规则,可以看成SpotBugs替代了FindBugs。
FindSecurityBugs: FindSecurityBugs是FindBugs中的一个插件,扩展了安全扫描规则,当然,现在也是SpotBugs下的一个插件,因为SpotBugs替代了FindBugs。
FindBugsSonarQube插件:SonarQube上提供的FindBugs插件并不是前面提到的已经不再维护的开源工具FindBugs,而是SpotBugs。且SonarQube上的FindBugs插件已经默认集成了FindSecurityBugs插件中的扩展Rule,即如果选用SonarQube进行静态安全扫描,只需安装FindBugs插件即可开始扫描。
上面介绍了几个容易混淆的名词后,接下来就详细介绍如何一步一步实现代码静态代码安全扫描。
IDE工具上安装SpotBugs插件
1.IDE上安装SpotBugs插件(setting菜单下,安装SpotBugs插件)
2.添加FindSeurityBugs插件(setting菜单下,检索SpotBugs,添加插件,可以离线添加,也可以直接在IDE上添加)
3.添加完成后,重启IDE,安装的插件生效。打开需要扫描的项目,点击右键,会显示SpotBugs的菜单,这里选择扫描整个项目。
4.扫描完成后,在IDE上会显示扫描结果,例如测试代码中存在SQL注入被扫描出来了。
构建工具上引入SpotBugs插件进行扫描,项目选用的构建工具是Gradle
1.build.gralde 文件中引入spotbugs插件,依赖中增加FindSecurityBugs,具体配置信息如下
SpotBugs和findsecbugs-plugin的版本信息Matrix图,可查看官网列表信息,注意版本匹配,不然可能扫描过程中会遇到其他异常。
2.在被扫描项目根目录下执行gradle build命令,会看到build失败,因为该项目扫描到了漏洞,所以会build失败。根据提示信息在项目目录的build/reports目录下,打开html格式的报告,可查看具体的漏洞信息。
SonarQube上安装SpotBug进行扫描
1.安装SonarQube,安装完成后启动Sonar服务,服务默认端口是9000,打开sonar服务后,在Administration菜单下的Marketplace菜单下,检索并安装FindBugs插件。
2.安装完成后,如果要进行Sonar扫描有两种方式,一种是安装SonarScan进行扫描,另外一种是在构建工具配置文件上引入sonar插件进行扫描。接下来讲介绍2种扫描方式。
2.1:在扫描前,都需要在sonar上创建项目,在sonar服务上的Project菜单上,手动创建一个项目,创建完成后,安装SonarScaner,安装完成后,即可通过SonarScaner命令进行sonar扫描。
2.2 sonar-scaner命令,命令中传入projectKey和projectName,也就是在sonar服务上创建项目时输入的项目名称,还需传入登陆sonar服务的用户名和密码。
另外,还需要通过sonar.java.binaries参数传入被扫描项目编译后的二进制文件,以java项目为例,也就是classes文件。如果是maven作为构建工具,二进制文件通常在target/classes目录下,本文使用gradle作为构建工具,二进制文件在build/classes目录下。
需要注意的是:二进制文件目录要到包名目录上层。比如,该项目项目源代码包名是com.tw.appsec101.在给sonar传递二进制文件路径时需要设置成build/classes/java/main。如果该参数传递错误,findbugs无法完成扫描。
2.3:执行完sonarscan扫描命令后,进入sonar服务器,可查看到具体扫描到的漏洞。
3.除通过安装sonarscan进行扫描外,还可以在构建工具的配置文件中引入sonar插件进行扫描。
build.gradle中配置信息增加org.sonarqube插件,执行gradle扫描命令
gradle sonarqube -Dsonar.projectKey=demo -Dsonar.host.url=http://localhost:9000 -Dsonar.login=ef1c6d2c3631c12202fc2f782223a6513d5fc63e
这里的token信息是在sonar服务上创建project时生成的token,作用和前面传入用户名、密码的效果一样。执行gradle sonarqube命令后,即可在sonar服务上查看扫描结果。
另外,采用sonar扫描的方式,可以很好的CI流水线结合,因为扫描结果都在sonar服务器上,可供团队随时查看。
最后,代码静态扫描有很多优势,可在部署前就快速检测代码是否存在安全漏洞,但同时静态代码扫描工具仅能分析一些简单类型的漏洞,具体能扫描出哪些漏洞,可以查看扫描工具的rule。安全测试还需结合多方面手段进行全方位的测试才行。
Sonar上查看安全扫描插件的rule,可以知道具体可以扫描哪些安全漏洞。文章来源:https://www.toymoban.com/news/detail-457435.html
文章来源地址https://www.toymoban.com/news/detail-457435.html
到了这里,关于源码安全扫描的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!