做甲方安全建設,SDL是一個離不開的話題,其中就包含程式碼審計工作,我從最開始使用編輯器自帶的查詢,到使用fortify工具,再到後來又覺得fortify的掃描太慢影響審計效率,再後來就想著把fortify整合到自己的業務系統中去
最近幾年安全行業發展的很快,以前少見的元件安全產品也多了起來,可以自定義掃描規則的semgrep,還有GitHub的以及codeQL產品,工具越來越多,如果還是之前的單個工具開啟模式效率也不會太高.所以想著乾脆做一個程式碼聚合的審計系統
專案地址: https://github.com/StarCrossPortal/swallow
整體開發思路
當我需要審計某一個專案的時候只需要將程式碼地址存放進去,然後這個系統就會自動下載程式碼,並呼叫各種程式碼審計工具進行掃描,並將結果儲存到系統中去.
這裡包含了部分內容,第一部分是底層程式碼掃描的實現,資料庫的設計,上層UI的展示
底層實現
swallow在開發之前我給他的定義是一個效率系統,因此他只是呼叫其他工具的結果,然後進行聚合展示.那麼我就需要考慮用那些工具了.
這裡我有四點需求,分別是汙點跟蹤,安全規則檢索,元件依賴漏洞,WebShell檢測
汙點跟蹤
首先說下汙點跟蹤,他需要了解我的程式引數接收位置,然後引數在什麼地方執行,滿足需求的這種產品並不多,知名的有fortify,checkmax,這裡我選擇了呼叫fortify程式碼審計系統.
規則檢索
一些結合業務方面的漏洞,可能需要編寫對應檢查規則,因此需要選擇一個比較容易自定義規則的程式碼掃描器,有兩種選擇 semgrep和CodeQL,個人認為semgrep更加簡單易用,因此選擇了它
元件漏洞
元件漏洞主要是解決了專案A依賴了專案B,專案B產生了漏洞的情況,現在市面上挺多這種工具,我選擇了墨菲.
WebShell
webshell 掃描主要是解決大量程式碼檔案裡可能存在木馬的情況,用的是河馬的webshell檢測工具
有了這四大工具,我基本就可以對程式碼進行比較全面的檢測了,但是資料的整體互動邏輯,以及資料格式我還需要梳理,為了簡化這個過程,我直接使用了蜻蜓平臺的編排系統,這樣我基本不用寫太多資料互動程式碼了,直接視覺化拖拽,然後關注每個節點的情況即可.
資料可以直接使用蜻蜓安全工作臺中的資料庫元件,滿足了資料的增刪改查
資料庫設計
資料庫設計我採用了最省事的辦法,首先我需要有一個表存放Git的倉庫地址,因此新建了一張git_add
表,另外系統還需要一些配置,因此新建了一張project_conf
表格,如下圖所示
現在需要考慮用到四個工具結果資料存放問題,因此我最開始新建了4張資料表,但後來發現5張表更加合適,如下圖所示
因為墨菲程式碼掃描方面,他的結果稍微需要區別一下,他的結構是一個二維陣列,這樣不利於資料庫檢索,因此我將墨菲的表結構一分為二,因此有兩個表結構
前端UI
前端UI本想採用element的UI框架,但這個專案只有我一個人開發,而且專案本身也比較簡單,直接套模板更加省事.
所以使用了bootstrap5 結合thinkPHP6 開發出來
效果圖如下所示
新增倉庫
安裝過程我就不講了,直接記錄如何使用,以及效果吧.
首先需要在倉庫列表,找到新增按鈕,將Git倉庫地址放進去,然後會自動新增到列表中
如上圖所示,可以一次性新增多個倉庫,每行一個倉庫地址就行了
檢視依賴漏洞
檢視WebShell
檢視依賴元件
作者: 湯青松
日期: 2023-04-03