一、说明
最近要找一款代码审计工具,Fortify SCA太贵,VisualCodeGrepper不太好用。在freebuf上看到可用sonarqube来建代码自动化扫描系统所以也来试一试。
直接安装没启起来,懒得分析填接用了docker装。
二、安装
sonarqube扫描是c/s模式,sonarqube自己是服务器装在kali上,sonarqube scanner是扫描客户端装在哪都可以,我这里装在windows机上。
2.1 服务端安装docker
docker安装可参考:
2.2 服务端sonarqube安装
docker search sonarqube
docker pull sonarqube
docker run -d -p 9000:9000 -p 9092:9092 sonarqube
docker ps
2.3 客户端安装sonarqube scanner
下载页面:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
我这里是windows,自己下自己系统对应的版本。
下载后直接解压,然后将其bin目录加到path环境变量即可。
三、sonarqube界面
3.1 登录sonarqube
启动时我们做了映射,所以访问装在的主机的9000端口即可进入sonarqube。我这里是http://10.10.16.92:9000/。
点击左上角的Log in进行登录,默认用户名密码admin/admin
首次登录会进入项目创建向导,我们后续自己创建,这里直接跳过
要退出,点击右上角的A标志即会出现“Log Out”菜单
3.2 sonarqube菜单介绍
sonarqube进入后主要有以下6项菜单:
Projects----项目菜单,登录后默认进入项面。所谓项目和eclipse等上的项目是类似的意思,由于在上边我们直接跳过所以现在还没有任何项目。
Issues----扫描到的问题列表。
Rules----sonarqube对各语言使用的扫描规则说明。我们自己并不能对规则进行增删改,也可能只是社区版没有。
Quality Profiles----扫描规则集合,这里的profile和awvs等的profile是类似的意思。我们自己也不能对规则集进行增删改,也可能只是社区版没有。
Quality Gates----似乎是扫描策略说明,不是很了解不过也没什么配置项。
Administration----管理员菜单项。只有当登录用户为管理员时才会显示,包括基本配置、账号管理、项目管理、系统信息和插件管理等四大子项。
四、创建扫描项目
4.1 创建项目
Name感觉只是为了方便记用的,Key才是相当于项目id,扫描要用到的也是key。
4.2 创建token
在弹出的对话框中,随便输一个token名称然后点击Generate生成真正的token即可(所谓token名称应该是token的种子)
点击Copy复制和保存token后边扫描需要用。这里的token和restful的access token是类似的。
由于之后再也不会显示所以要注意保存。当然如果真忘了重新生成一个token即可。
4.3 进行扫描
这里以dvwa为例。客户端进到dvwa解压目录,执行以下命令进行扫描。
sonar-scanner.bat----前面sonarqube scanner的bin目录下的脚本,我们已加path环境变量。
-Dsonar.projectKey----指定上边4.1设定的项目key。改成自己的。
-Dsonar.sources----要扫描的文件夹。改成自己的。
-Dsonar.host.url----sonarqube的url。改成自己的。
-Dsonar.login----指定的是上边4.2生成的token。改成自己的。
sonar-scanner.bat -Dsonar.projectKey=phpkey -Dsonar.sources=. -Dsonar.host.url=http://10.10.6.92:9000 -Dsonar.login=fd71c19d46683bbd847fa450579b096f79b22593
扫描成功类似如下图:
对于java项目要求是使用maven和gradle的项目,但用maven+webgoat来试一直报错;然后直接使用类似上边的命令可以成功进行扫描。
但完全直接用会报ERROR: Please provide compiled classes of your project with sonar.java.binaries property错误,需要多加“-Dsonar.java.binaries=.”参数(什么用没搞清楚)
4.4 扫描结果查看
回到projects主菜单即可看到本次扫描的结果总览
切换到Issues菜单即可查看具体问题
可点击右边的各种过滤条件进行过滤
点击问题后的“...”,在下方会出现问题的具体说明(其实就是Rules的说明)
五、总结
开始的时候很奇怪,为什么所有文档----包括官方自己----一直把sonarqube叫做“代码质量管理工具”,而不叫代码审计工具。使用下来看主要是以下三个原因
首先,sonarqube的规则很多是针对编码风格的(比如某个字符串如果出现多次就要求你定义一个变量而不是反复写这个字符串)而不是针么漏洞的。
其次,sonarqube说是开源免费的但其实免费版本只有Java/C#/Python/PHP/Go/JavaScript的插件(插件的本质是规则)c/c++/oc/sql等的扫描插件收费版才支持。(造成的结果就是免费版注入类漏洞都报不了)
再次,即便是收费版本其代码审计能力感觉也只能是超过VCG,上下文分析还是达不到Fortify SCA的水平。