Jenkins、Sonarqube和MobSF三驾马车实现CI/CD(持续集成,持续交付)

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

  今天我们要探讨下几个问题,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蟹蟹~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容