GitLab結(jié)合fortify實現(xiàn)自動化代碼掃描實踐
一、背景
在甲方做安全的同學可能會有一項代碼審計的工作,通常需要從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的容器,服務啟動之后會隨機生成一個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復制出來,后續(xù)要用到

glpat-ggjo6Z6aQXWCZ2FNJcsz
gitlab搭建完后,默認里面有一個空項目,fortify無法掃除有價值的漏洞,為了方便測試,需要在新建項目的位置導入項目進去,打開URL地址http://10.1.1.140:880/projects/new#import_project
,然后選擇Repository by URL
,然后填入一個可以被拉取的倉庫地址,這里我提供一個供大家實驗,如下圖所示
https://gitee.com/songboy/QingScan

導入項目之后,gitlab會自動拉取代碼到服務器,如下圖所示

三、配置參數(shù)
現(xiàn)在已經(jīng)有了gitlab的實驗環(huán)境,可以正式開始做實驗,首先打開蜻蜓的市場頁面,URL地址如下
http://qingting.starcross.cn/scenario/store
可能會提示要求登錄,如果是首次進入蜻蜓安全控制臺,掃描登錄之后會自動注冊
然后需要在服務器執(zhí)行添加節(jié)點的shell命令,按照提示進行操作即可,如下圖所示

現(xiàn)在回到市場頁面,找到快速挖掘0day漏洞,在下方有個按鈕,添加到工作流,如下圖所示

添加到工作流之后,會看到工作流的信息,這里可以把gitlab的配置信息填寫進去,需要點擊進入編排流程,如下圖所示

在編排工作流頁面,上方有一個設(shè)置全局變量的小圖標,按照提示配置必要參數(shù),如下圖所示

四、運行程序
運行全局變量完成之后,可以右鍵點擊第一個節(jié)點,再次點估運行選項,就可以運行這個工作流,運行過程中節(jié)點狀態(tài)會發(fā)生變化

節(jié)點會按照自上而下運行,運行過程中狀態(tài)圖標會一直旋轉(zhuǎn),當運行完成時,可以看到成功的小圖標

運行完成之后,可以去數(shù)據(jù)中心查看運行結(jié)果,可以根據(jù)節(jié)點和任務ID等方式篩選,如下圖所示

我選中fortify代碼掃描節(jié)點,篩選出來的列表頁面如下所示

在列表頁面只展示了一小部分數(shù)據(jù),可以點擊查看按鈕,在詳情頁查看詳細的漏洞信息,用于審計標注,如下圖所示。

上面節(jié)點的代碼已經(jīng)在GitHub中開源,有需要的小伙伴也可以在GitHub
https://github.com/StarCrossPortal/QingTing
GitHub地址:https://github.com/StarCrossPortal/QingTing