一烂翰、背景
在甲方做安全的同學(xué)可能會有一項代碼審計的工作,通常需要從gitlab把代碼拉取下來瘸羡,然后使用代碼審計工具進行掃描,然后對結(jié)果進行人工確認搓茬;
在這個流程中需要做的事情比較繁瑣犹赖,比如說gitlab如何配置token、如何自動化把代碼拉取到本地卷仑、如何調(diào)用fortify實現(xiàn)批量掃描等諸多繁瑣問題峻村。
本篇文章以甲方安全代碼安全建設(shè)為主線,分享如何讓代碼審計工具自動化掃描gitlab倉庫里的代碼锡凝。并且提供了一個便捷的實驗環(huán)境供大家測試粘昨。
本文實驗中調(diào)用了多款代碼審計工具(包含semgrep、fortify窜锯、墨菲张肾、河馬,其中fortify軟件屬于商業(yè)性質(zhì)锚扎,本文章無法提供該軟件吞瞪,如需自備此軟件并存放在主機/data/share/fortify目錄),完成試驗后可以看到各代碼審計工具的效果對比驾孔。
二芍秆、準備環(huán)境
為了方便大家,我把我的實驗gitlab地址直接共享出來助币,大家可以優(yōu)先使用此共享環(huán)境浪听。
URL:http://123.249.6.139:1880/
用戶名:root
密碼:qingtingtest
token:glpat-SMsSWy6xzB4x8B6rFryB
配置gitlab環(huán)境
為了真實模擬fortify掃描gitlab倉庫的代碼,我需要快速搭建一個gitlab倉庫眉菱,這里實驗docker的方式最為簡單迹栓,只需要執(zhí)行以下的命令
docker run --detach --hostname gitlab.thinkpad --publish 8443:443 --publish 880:80 --publish 222:22 --name gitlab --restart always --volume /data/gitlab/config:/etc/gitlab --volume /data/gitlab/logs:/var/log/gitlab --volume /data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
命令執(zhí)行之后,docker會自動拉取docker鏡像俭缓,并創(chuàng)建一個gitlab的容器克伊,服務(wù)啟動之后會隨機生成一個root用戶的密碼酥郭,可以通過以下命令查看root用戶的初始化密碼
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
命令執(zhí)行之后,可以在終端中看到如下所示密碼
Password: UnSoOs7l8YN6dYDQRP/1/dzpKswF7dq7fpyhKBey95A=
現(xiàn)在可以使用瀏覽器訪問gitlab的頁面愿吹,訪問地址是http://x.x.x.x:880/
不从,然后瀏覽器會自動跳轉(zhuǎn)到登錄頁面,如下圖所示
在登錄頁面犁跪,我們在用戶名處輸入root椿息,密碼處輸入剛才得到的密碼;登錄成功之后會自動跳轉(zhuǎn)到工作臺的首頁坷衍,如下圖所示寝优。
創(chuàng)建API訪問的token
為了讓fortify能夠訪問到gitlab倉庫的代碼,我們需要創(chuàng)建一個token枫耳,用于API訪問乏矾;在頭像位置展開下拉菜單,選擇preferences->Access Tokens ,填下相關(guān)參數(shù)迁杨,界面如下所示
創(chuàng)建完成钻心,把生成的token復(fù)制出來,后續(xù)要用到
glpat-ggjo6Z6aQXWCZ2FNJcsz
gitlab搭建完后铅协,默認里面有一個空項目捷沸,fortify無法掃除有價值的漏洞,為了方便測試警医,需要在新建項目的位置導(dǎo)入項目進去亿胸,打開URL地址
http://10.1.1.140:880/projects/new#import_project
,然后選擇Repository by URL
坯钦,然后填入一個可以被拉取的倉庫地址预皇,這里我提供一個供大家實驗,如下圖所示
https://gitee.com/songboy/QingScan
導(dǎo)入項目之后婉刀,gitlab會自動拉取代碼到服務(wù)器吟温,如下圖所示
三、配置參數(shù)
現(xiàn)在已經(jīng)有了gitlab的實驗環(huán)境突颊,可以正式開始做實驗鲁豪,首先打開蜻蜓的市場頁面,URL地址如下
http://qingting.starcross.cn/scenario/store
可能會提示要求登錄律秃,如果是首次進入蜻蜓安全控制臺爬橡,掃描登錄之后會自動注冊
然后需要在服務(wù)器執(zhí)行添加節(jié)點的shell命令,按照提示進行操作即可棒动,如下圖所示
現(xiàn)在回到市場頁面糙申,找到快速挖掘0day漏洞,在下方有個按鈕船惨,添加到工作流柜裸,如下圖所示
添加到工作流之后缕陕,會看到工作流的信息,這里可以把gitlab的配置信息填寫進去疙挺,需要點擊進入編排流程扛邑,如下圖所示
在編排工作流頁面,上方有一個設(shè)置全局變量的小圖標,按照提示配置必要參數(shù)铐然,如下圖所示
四蔬崩、運行程序
運行全局變量完成之后,可以右鍵點擊第一個節(jié)點搀暑,再次點估運行選項舱殿,就可以運行這個工作流,運行過程中節(jié)點狀態(tài)會發(fā)生變化
節(jié)點會按照自上而下運行险掀,運行過程中狀態(tài)圖標會一直旋轉(zhuǎn)沪袭,當運行完成時,可以看到成功的小圖標
運行完成之后樟氢,可以去數(shù)據(jù)中心查看運行結(jié)果冈绊,可以根據(jù)節(jié)點和任務(wù)ID等方式篩選,如下圖所示
我選中fortify代碼掃描節(jié)點埠啃,篩選出來的列表頁面如下所示
在列表頁面只展示了一小部分數(shù)據(jù)死宣,可以點擊查看按鈕,在詳情頁查看詳細的漏洞信息碴开,用于審計標注毅该,如下圖所示。
上面節(jié)點的代碼已經(jīng)在GitHub中開源潦牛,有需要的小伙伴也可以在GitHub
https://github.com/StarCrossPortal/QingTing