如何將 Semgrep 整合到 GitLab Pipeline 以進行 SAST 掃描

更新於 發佈於 閱讀時間約 4 分鐘

CI/CD Pipeline 中,SAST(Static Application Security Testing)是一種重要的安全檢查步驟,可以幫助開發人員及早發現程式碼中的潛在安全漏洞。Semgrep 是一款功能強大的 SAST 工具,可以掃描程式碼並檢查各種安全問題,例如寫死的密碼、SQL Injection。

本文將介紹如何將 Semgrep 整合到 GitLab Pipeline 以進行 SAST 掃描。


整合步驟

  1. 在 Semgrep Cloud Platform 建立 Project。
  2. 建立 Semgrep App Token。(只需要 1 個,讓 GitLab 有權限將掃描結果送到 Semgrep Cloud Platform)
  3. GitLab CI/CD Pipeline 加入以下 Job:
    semgrep:
    image: returntocorp/semgrep
    stage: test
    script: semgrep ci
    rules:
    - if: $CI_PIPELINE_SOURCE == "web" # allow triggering a scan manually from the gitlab UI
    - if: $CI_MERGE_REQUEST_IID # This rule triggers Semgrep if the scan is part of a merge request review process. The $CI_MERGE_REQUEST_IID variable holds the ID of the associated merge request, indicating its involvement.
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # This rule triggers Semgrep if the scan is run on the default branch (likely master or main). The $CI_COMMIT_BRANCH variable specifies the branch where the commit is being pushed, and comparing it to the $CI_DEFAULT_BRANCH variable checks for alignment.
    variables:
    SEMGREP_APP_TOKEN: $SEMGREP_APP_TOKEN
    # To configure MR comments on gitlab.com, see <https://semgrep.dev/docs/semgrep-cloud-platform/gitlab-mr-comments/#enabling-gitlab-merge-request-comments>
    GITLAB_TOKEN: $PAT
  4. 建立 GitLab Access Token,必須要有 api 權限。(Semgrep Cloud Platform 才可以將報告送到 GitLab Merge Request)
  5. 在 GitLab Pipeline 加上 SEMGREP_APP_TOKEN, PAT 變數。
  6. 到 Semgrep Cloud Platform | Rules | Policy,將全部的規則的 Mode 都改為 Comment。
  7. 加上 .semgrepignore,排除不需要掃描的目錄。
    • # Common large paths
      node_modules/
      build/
      dist/
      vendor/
      .env/
      .venv/
      .tox/
      *.min.js
      .npm/
      .yarn/

      # Common test paths
      test/
      tests/
      *_test.go

      # Semgrep rules folder
      .semgrep

      # Semgrep-action log folder
      .semgrep_logs/


使用心得

將 Semgrep 整合到 GitLab Pipeline 後,可以將 SAST 掃描完全整合到開發工作流程中。在 Merge Request 中,開發人員可以直接看到掃描報告,並根據報告中的資訊及早修正程式碼中的安全漏洞。

以下是使用 Semgrep 的一些心得:

  • 整合過程簡單,只需幾個步驟即可完成。
  • 掃描速度快,可以快速發現程式碼中的安全漏洞。
  • 報告詳細,可以幫助開發人員快速理解安全漏洞的風險。


專注於 C#, DevOps 的工程師
留言
avatar-img
留言分享你的想法!
說明 Dockerfile 的 ENTRYPOINT、CMD 指令。
Docker network 會影響 Container: 是否可以透過網路存取其它的 Container。 是否可以存取網際網路(Internet)。 是否可以存取實體網路(Physical Network)。 Docker bridg
CI/CD Pipeline 是一連串自動化步驟,可以測試軟體,部屬應用程式。但實際上到底要做什麼事情呢?可以從 GitLab 的 Auto DevOps 了解。 Auto Dependency Scanning 掃描第三方函式庫的安全性漏洞。參考下圖: 如果是 .NET 6 可以用以下指令掃描:
Prometheus 提供 PromQL 讓我們對 metrics 查詢,可以查出最近 1 小時內的請求成功率,最近 30 分鐘內的請求延遲等等的資訊,下面用範例說明。 Request Per Second 此範例查詢「每秒的請求數量」,我用 Traefik 當作範例說明。 這幫我們得出以下結果:
API Gateway 是什麼? 參考上圖,API Gateway 是一個程式,位於 Client 和 Microservice 之間。當伺服器架構採用這種設計後,會有以下優點: 架構彈性 - 當伺服器架構需要調整的時候,Client 不需要調整(前提是 API 維持不變)。 IP Listing
我發現從統計學、電子、電腦繪圖的角度來看取樣,在說法上有點不同,但我認為大致上的概念是相同的。 資料實在是「太多了」,沒辦法拿這麼多的資料處理,但我們可以降低資料的數量,但和原本的資料大致上差不多,我們就可以做分析,得到我們想要的結果。 Reference:
說明 Dockerfile 的 ENTRYPOINT、CMD 指令。
Docker network 會影響 Container: 是否可以透過網路存取其它的 Container。 是否可以存取網際網路(Internet)。 是否可以存取實體網路(Physical Network)。 Docker bridg
CI/CD Pipeline 是一連串自動化步驟,可以測試軟體,部屬應用程式。但實際上到底要做什麼事情呢?可以從 GitLab 的 Auto DevOps 了解。 Auto Dependency Scanning 掃描第三方函式庫的安全性漏洞。參考下圖: 如果是 .NET 6 可以用以下指令掃描:
Prometheus 提供 PromQL 讓我們對 metrics 查詢,可以查出最近 1 小時內的請求成功率,最近 30 分鐘內的請求延遲等等的資訊,下面用範例說明。 Request Per Second 此範例查詢「每秒的請求數量」,我用 Traefik 當作範例說明。 這幫我們得出以下結果:
API Gateway 是什麼? 參考上圖,API Gateway 是一個程式,位於 Client 和 Microservice 之間。當伺服器架構採用這種設計後,會有以下優點: 架構彈性 - 當伺服器架構需要調整的時候,Client 不需要調整(前提是 API 維持不變)。 IP Listing
我發現從統計學、電子、電腦繪圖的角度來看取樣,在說法上有點不同,但我認為大致上的概念是相同的。 資料實在是「太多了」,沒辦法拿這麼多的資料處理,但我們可以降低資料的數量,但和原本的資料大致上差不多,我們就可以做分析,得到我們想要的結果。 Reference:
你可能也想看
Google News 追蹤
Thumbnail
當我們談到職涯發展時,許多人認為專注在單一領域才能成為專家,獲得穩定的升遷與機會。然而,當今職場環境已經不同於以往,「斜槓」與「跨域」不再是混亂的象徵,反而可能是你的最大優勢。對於擁有多元經歷的職場人士來說,如何包裝自己的背景,使其成為個人品牌的亮點,是關鍵的突破點。
Thumbnail
這是一個創意豐富的過程,沒有唯一的正確方法,每一步都充滿了個人創造性。利用科技與藝術的結合,可以探索出許多有趣和獨特的音樂創作方式。 將一幅畫轉成一首歌曲,這是一個非常有趣的概念,也充滿了創意。目前,雖然還沒有直接將畫作轉換成音樂的技術,但我們可以透過以下幾種方式來實現類似的效果。 一幅畫轉成一
隨著加密貨幣市場的快速發展,越來越多的投資者將虛擬貨幣納入資產配置中,以期在提高回報的同時有效分散風險。本文將探討如何合理地將虛擬貨幣融入到資產配置中,並分析與之相關的風險與挑戰。 一、資產配置的基本原則 資產配置的核心目的是在不同的投資標的中分散風險,以便在不同市場環境中保持資本的
Thumbnail
如何將業力變為助力:成功的三個關鍵 今天瀚哥和大家聊聊成功這個話題。雖然成功學這個詞早已被講得爛大街,但瀚哥希望能帶來一些新的視角,幫助大家在自己的道路上找到屬於自己的成功。今天的分享靈感部分來自史蒂芬·柯維的經典著作《與成功有約》,這本書提出了非常實用的成功框架,我會用我的方式和大家解讀這些原則
Thumbnail
本篇文章會介紹三款實用的工具,並教你如何運用 OCR (Optical Character Recognition,光學字元辨識) 技術,輕鬆將圖片中的文字轉換成可編輯的文字!
今天學習Git Command-Line Syntax [1] 。 Git command的 convention 為: `git [switches] <command> [<args>]` 而每一個部分的基本解釋是: - `git` 是 Git 命令的開頭 - `[s
Windows : 下載Git (git-scm.com)並按照指示安裝。 安裝完成後,你可以通過運行以下命令來確認安裝是否成功: git --version 初次設定GIT 接下來就是按照初次設定git,會需要配置你的用戶名和電子郵件地址,這些信息將被記錄在您提交的每個變更中。 git
Thumbnail
本篇文章介紹如何使用Git Bash進行版本控制操作,包括創建repository、查看狀態、歷程以及加入暫存和提交暫存等操作。透過基本的Git指令,您可以更深入地瞭解Git工具的使用方法。
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
※ 需要做版本備份時: git init:初始化此資料夾,由git 開始追蹤版本控制。 git add:將檔案加入到暫存區。 git commit:把暫存區的內容提交到儲存庫。 git status:查看目前所有檔案的狀態。 git log:查看過去所有commit的記錄。 ※ 需要做修
Thumbnail
當我們談到職涯發展時,許多人認為專注在單一領域才能成為專家,獲得穩定的升遷與機會。然而,當今職場環境已經不同於以往,「斜槓」與「跨域」不再是混亂的象徵,反而可能是你的最大優勢。對於擁有多元經歷的職場人士來說,如何包裝自己的背景,使其成為個人品牌的亮點,是關鍵的突破點。
Thumbnail
這是一個創意豐富的過程,沒有唯一的正確方法,每一步都充滿了個人創造性。利用科技與藝術的結合,可以探索出許多有趣和獨特的音樂創作方式。 將一幅畫轉成一首歌曲,這是一個非常有趣的概念,也充滿了創意。目前,雖然還沒有直接將畫作轉換成音樂的技術,但我們可以透過以下幾種方式來實現類似的效果。 一幅畫轉成一
隨著加密貨幣市場的快速發展,越來越多的投資者將虛擬貨幣納入資產配置中,以期在提高回報的同時有效分散風險。本文將探討如何合理地將虛擬貨幣融入到資產配置中,並分析與之相關的風險與挑戰。 一、資產配置的基本原則 資產配置的核心目的是在不同的投資標的中分散風險,以便在不同市場環境中保持資本的
Thumbnail
如何將業力變為助力:成功的三個關鍵 今天瀚哥和大家聊聊成功這個話題。雖然成功學這個詞早已被講得爛大街,但瀚哥希望能帶來一些新的視角,幫助大家在自己的道路上找到屬於自己的成功。今天的分享靈感部分來自史蒂芬·柯維的經典著作《與成功有約》,這本書提出了非常實用的成功框架,我會用我的方式和大家解讀這些原則
Thumbnail
本篇文章會介紹三款實用的工具,並教你如何運用 OCR (Optical Character Recognition,光學字元辨識) 技術,輕鬆將圖片中的文字轉換成可編輯的文字!
今天學習Git Command-Line Syntax [1] 。 Git command的 convention 為: `git [switches] <command> [<args>]` 而每一個部分的基本解釋是: - `git` 是 Git 命令的開頭 - `[s
Windows : 下載Git (git-scm.com)並按照指示安裝。 安裝完成後,你可以通過運行以下命令來確認安裝是否成功: git --version 初次設定GIT 接下來就是按照初次設定git,會需要配置你的用戶名和電子郵件地址,這些信息將被記錄在您提交的每個變更中。 git
Thumbnail
本篇文章介紹如何使用Git Bash進行版本控制操作,包括創建repository、查看狀態、歷程以及加入暫存和提交暫存等操作。透過基本的Git指令,您可以更深入地瞭解Git工具的使用方法。
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
※ 需要做版本備份時: git init:初始化此資料夾,由git 開始追蹤版本控制。 git add:將檔案加入到暫存區。 git commit:把暫存區的內容提交到儲存庫。 git status:查看目前所有檔案的狀態。 git log:查看過去所有commit的記錄。 ※ 需要做修