美文网首页
Jenkins、Sonarqube和MobSF三驾马车实现CI/

Jenkins、Sonarqube和MobSF三驾马车实现CI/

作者: 天上飘的是浮云 | 来源:发表于2020-11-21 10:57 被阅读0次

  今天,天气转凉。无法外出浪荡,只得心血来潮码码码~

  今天我们要探讨下几个问题,Jenkins应该如何和SonarQube和MobSF来配合完成代码静态检测,实现应用打包并完成MobSF应用包检测来达到持续集成,说得漂亮点CI/CD(装点B)

一、Jenkins、SonarQube和MobSF骚骚引荐一哈

Jenkins:

Jenkins大叔长这样

Jenkins其实是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

SonarQube:


SonarQube是一个代码质量管理的开源平台,用于管理源代码质量。它通过插件的形式可以支持包括Java、C#、C/C++、JS等等二十多种开发语言的代码质量管理和检测。

MobSF:


移动安全框架 (MobSF) 是一个智能化、一体化的开源移动应用(Android / iOS)自动测试框架,能够对以上两种移动应用进行静态和动态分析(动态分析目前暂时只支持Android)。它可以有效、快速地对应用APK 和IPA文件 及压缩的源代码进行审计分析。同时,MobSF 也能够通过其API Fuzzer功能模块,对 Web API 的安全性进行检测,如收集信息,分析安全头部信息,识别移动API 的具体漏洞,如XXE、SSRF、路径遍历,IDOR以及其他的与会话和API调用速率限制有关的逻辑问题。

二、先瞅瞅Jenkins、SonarQube和MobSF怎么个合作方式

第一种方式,是GitLab、Jenkins和SonarQube、MobSF合作


App CI/CD workflow 1.png

第二种方式,是GitLab、SonarQube、MobSF和其他第三方CI/CD服务商合作,当然它是要收费的


App CI/CD workflow 2.png

三、如何在Jenkins打包Job中配置SonarQube

3.1 初始化操作

最简单的你看这篇文章最起码的Jenkins得部署好吧,Jenkins 应用打包服务Job弄好了吧?,SonarQube部署好了吧?如果没有请度娘下安装部署教程,都部署好了再来看看这篇文章。不然你也不会呀,操作得一步步整~

3.2 首先我们需要在SonarQube端生成User Token

先登录SonarQube服务器,然后My Account -> Security -> User Access Token,这就生成了SonarQube的用户Token,请复制保存好,因为只出现一次!!! 如图3.2

图3.2.png
3.3 在Jenkins端安装插件Sonar-Scanner

路线图为:Manage Jenkins > Manage Plugins > Available搜索Sonar-Scanner,安装并重启Jenkins。如图3.3


图3.3.png
3.4 将前面生成的SonarQube用户Token,加入到Jenkins

路线图为:Jenkins > Credentials > System > Global Credentials > Add Credentials
如图3.4


图3.4.png
3.5 在Jenkins上添加SonarQube Server

路线图:Manage Jenkins > Configure System > SonarQube Servers


图3.5.png
3.6 为Jenkins添加Sonar-Scanner

路线图: Manage Jenkins > Global Tool Configuration > SonarQube Scanner > Add SonarQube-Scanner


图3.6.png
3.7 然后在已经存在的打包Job中进行配置

首先,在Jenkins Dashboard主页选取你需要进行SonarQube配置的Job,为其配置在Build Triggers Model中允许GitLab通过webhook调起该Job
如果找不到该项,请安装GitLab plugin、GitLab API Plugin、GitLab Merge Request Builder、GitLab Authentication,如图3.7.1


图3.7.1.png

然后,在Job配置中的Build Model添加SonarQube Scanner,如图3.7.2


图3.7.2.png
3.8 在GitLab端允许Webhook勾子

路线图:GitLab端选择要配置的Project > Settings > Integrations
如图3.8.1


图3.8.1.png

注意:
这里的问题是:GitLab仓库在公用网络,而基本上Jenkins我们一般部署在办公室本地网络,可能GitLab不能通过Webhook调起Jenkins Job。可能需要网管介入配合。

配置好Webhook后,你可以测试它,webhook是否成功,如图3.8.2,图3.8.3


图3.8.2.png 图3.8.3.png
3.9 最后我们就可以Build Jenkins Job了,看是否我们配置成功了

现在我们有两种方式构建Jenkins Job: 手动点击Build Now和Gitlab Webhook。 构建完成后我们可以看到SonarQube扫码结果,也可以点击进入SonarQube网页看具体信息。如图3.9


图3.9.png
3.10 最后给大家提供一下配置参考,怕大家看不懂或者不想听偶废话,想听听原班

人马的废话呢
应该是要搭梯子的:https://digitalave.github.io/spring/2020/05/09/GitLab-Integration-with-Jenkins.html

四、Jenkins配置MobSF安装包检测服务Job

4.1 首要条件

旧事重提,请在本地部署好MobSF,网上都有教程,这里不提了~

4.2 我们需要在Jenkins中新建一个Pipeline项目

路线图:Jenkins > New Item > Pipeline

如图4.2


图4.2.png
4.3 在Pipeline项目配置中添加Custom Parameter

Default Value: 描述的是APK构建后的目录,也就是我们从哪里获取安装包

如图4.3


图4.3.png
4.4 在Pipeline项目配置Build Triggers中设置该Job的依赖工程

PS: 啥意思呢? 就是配置这个MobSF服务该在哪个阶段被执行,我们是设置在Jenkins打包完成后,在调起MobSF检测服务Job

如图4.4


图4.4.png
4.5 在Pipeline项目配置中添加脚本

填入Pipeline Script,他将在我们配置的安装包目录中查找应用安装包,然后上传到MobSF,再开启安装包扫码操作,最后下载扫码结果PDF到你设置的文件目录

如图4.5


图4.5.png
Pipeline Script 脚本如下:
import java.text.SimpleDateFormat

pipeline {
    agent any

    stages{
        stage('Analysis') {
            steps {
                script {
                    dir(INPUT_LOCATION) {
                        files = findFiles(glob: '*-release.apk')
                    }
                    echo 'Test Script files'
                    files.each { f ->
                        def TASK_COLLECTION = [:]
                        TASK_COLLECTION["MOBSF"] =  {
                            //上传应用包到MobSF
                            def AUTH_KEY = '**********your REST API Key'
                            upload_cmd = "curl -F 'file=@${env.INPUT_LOCATION}${f}' http://localhost:8000/api/v1/upload -H 'Authorization:${AUTH_KEY}'"
                            upload_result = sh label: 'Upload Binary', returnStdout: true, script: upload_cmd

                            def response_map = readJSON text: upload_result
                            def app_type = response_map["scan_type"]
                            sh "echo  $app_type"
                            def app_hash = response_map["hash"]
                            sh "echo  $app_hash"
                            def app_name = response_map["file_name"]
                            sh "echo  $app_name"

                            //分析扫描检测应用包
                            scan_start_cmd = "curl -X POST --url http://localhost:8000/api/v1/scan --data 'scan_type=${app_type}&file_name=${app_name}&hash=${app_hash}' -H 'Authorization:${AUTH_KEY}'"
                            sh label: 'Start Scan of Binary', returnStdout: true, script: scan_start_cmd

                            def dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH:mm")
                            def date = new Date()
                            def time =dateFormat.format(date)

                            //下载检测结果pdf到制定目录
                            scan_download_report="curl -# -o ${env.INPUT_LOCATION}/MobSF_Report_${time}.pdf -X POST --url http://localhost:8000/api/v1/download_pdf --data 'hash=${app_hash}' -H 'Authorization:${AUTH_KEY}'"
                            report_text = sh label: 'Start Scan of Download Report', returnStdout: true, script: scan_download_report
                            sh "echo $report_text"
                        }
                        parallel(TASK_COLLECTION)
                    }
                }
            }
        }
    }
}

这里在脚本里有一些比如说上传应用包到MobSF,启动MobSF扫描检测和下载检测结果等脚本命令我们其实可以在MobSF页面端可以看到,一般路径在:https://localhost:8000 > API DOCS。大家可以在页面上找到相关命令,如图4.5

图4.5
4.6 我们构建MobSF Pipeline Job之后就会得到结果

如图4.6所示


图4.6.png
4.7 最后还是丢给大家一个连接吧

配置参考连接:https://riis.com/blog/pentesting_at_scale/

五、结语

持续集成、持续交付也是软件开发中的重要一环,如此的部署和配置,以及Jenkins、SonarQube、MobSF一起联调合作的配置也是需要了解和掌握的。

希望如果对你有点帮助的话,请不要吝啬你的赞,它将激励偶继续码字~

申明:禁用于商业用途,如若转载,请附带原文链接。https://www.jianshu.com/p/622a5d4f0dad蟹蟹~

相关文章

网友评论

      本文标题:Jenkins、Sonarqube和MobSF三驾马车实现CI/

      本文链接:https://www.haomeiwen.com/subject/ecvsiktx.html