使用 Horusec 對程式碼安全性進行掃描

Horusec 是一套開源的程式碼靜態分析工具,他可以幫助我們對程式碼進行安全性掃描,並且支援許多常見的語言,功能非常強大。

安裝 Horusec

Horusec 支援各個平台,也很容易安裝,可以直接參考文件說明。

Horusec 有內建的源碼掃描工具,同時也整合了許多其他家的開源掃描工具,給我們更全面的掃描結果,而這些掃描工具都通通整合到獨立的 Docker images 了,因此建議無論如何在掃描的機器上都把 Docker 安裝起來,以取得最完整掃描結果。

開始使用 Horusec 進行掃描

透過 CLI 指令,可以輕鬆的對某個目錄價所有支援的程式碼進行掃描

horusec start -p .

如果是直接使用 docker image 掃描的話,除了 volume mapping 要對應好外,由於 horusec 還會另外拉很多 image 下來掃描,所也需要加上 docker.sock 對應,另外加上 -P 參數,代表要掃的專案不是在 container 內:

docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/src horuszup/horusec-cli:latest horusec start -p /src -P $(pwd)

輸出掃描結果

Horusec 預設為將所有掃描結果都輸出到 console 上,我們可以使用 -O 指定輸出目錄,也可以使用 -o 指定輸出格式,目前支援的格式有 "text"|"json"|"sarif"|"sonarqube"

horusec start -p . -O report.sarif -o sarif

排除掃描目錄

由於 Horusec 是指定一個目錄後,會自動找出目錄下所有支援的檔案進行掃描,因此許多放在目錄內的第三方套件等檔案也會被掃描到像是前端的 node_modules 或是 .NET 的 BinObj 目錄等,這些在靜態分析時是不會希望被掃描的(否則你會發現掃出的弱點比你寫的程式碼都還要多,也會浪費許多掃描時間),這時候我們可以使用 -i 指定要排除的目錄,支援 glob pattern,並且可以使用 , 隔開多個路徑,例如:

horusec start -p . -i "**/node_modules/**, **/bin/**, **/obj/**"

不使用 Docker

Horusec 預設會針對支援的檔案內容拉一些其他工具下來掃描,這些工具都是以 Docker image 的方式提供,因此如果你不想使用 Docker,可以使用 -D 參數,這樣就不會去拉 Docker image 了:

horusec start -p . -D true

掃出弱點時報錯

如果希望在掃出弱點時,直接報錯,可以使用 -e 參數,在 CI 時,就可以將有弱點視為 CI 不通過。

horusec start -p . -e

設定 timeout 時間

預設的 timeout 時間為 600 秒(10 分鐘),如果你的專案掃描時間會,可以使用 -t 參數來設定:

horusec start -p . -t 1200

VSCode 套件

Horusec 提供了一個 Visual Studio Code 的套件,讓我們可以直接在 Visual Studio Code 進行掃描,省去記憶指令的麻煩。

我們還可以透過套件來根據問題選擇修復或是排除,我們可以在掃描出來的弱點上點擊右鍵,選擇「False Positive」,代表這個弱點視誤判;也可以選擇「Risk Accept」,代表我接受了這個弱點的風險,不進行修復。

選擇完後,會將相關設定存在 horusec-config.json 中,之後再掃描時,可以加上 --config-file-path=path/to/horusec-config.json,就可以自動忽略掉我們選擇的弱點。

本日小結

Horusec 功能真的非常強大,支援的語言也多,就是掃描速度長久了一點,和容易掃描出一堆弱點,改都改不完,有興趣的朋友可以拿自己的專案出來掃看看,邊掃邊學習,讓自己未來的程式更加安全 💪。

相關資源

如果您覺得我的文章有幫助,歡迎免費成為 LikeCoin 會員,幫我的文章拍手 5 次表示支持!