有效整合 Semgrep Supply Chain 來識別和預防安全隱患

閱讀時間約 5 分鐘

Semgrep Supply Chain 掃描 C# 需要 packages.lock.json。但是預設的專案並不會有此檔案,可以用以下方式建立:

dotnet restore -p:RestorePackagesWithLockFile=True

或是在 OS 設定環境變數(RestorePackagesWithLockFile = True),然後執行 dotnet restore。

在 GitLab Pipeline 可以這樣寫:

stages:
- PreTest
- Test

lockFile:
image: mcr.microsoft.com/dotnet/sdk:8.0.201-jammy
stage: PreTest
script:
- dotnet restore -p:RestorePackagesWithLockFile=True
artifacts:
paths:
- ./**/packages.lock.json
expire_in: 1 week

semgrep:
image: returntocorp/semgrep
stage: Test
dependencies:
- lockFile
script: semgrep ci
rules:
- if: $CI_PIPELINE_SOURCE == "web" # allow triggering a scan manually from the gitlab UI
- if: $CI_MERGE_REQUEST_IID
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
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

packages.lock.json 是什麼?

預設 C# Project 使用的 Package 都是寫在 .csproj,用 [PackageReference] 描述,參考如下:

...
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Serilog" Version="3.1.1" />
</ItemGroup>
...

每次建制(Build)專案的時候會執行 dotnet restore,會根據 PackageReference 找出 Project 需要的 Packages。注意上述的說明,是每次 Build Project 的時候,重新找出全部的 Packages。所以這「可能」發生相同的程式,一年前執行和現在執行取到不同的 Package,造成得到不同的結果。

packages.lock.json 就是要解決這個問題,確保每一次都一定抓到相同的 Packages。

為什麼 dotnet restore 會抓到不同的 packages

以下情況造成 dotnet restore 結果找出不同的 Packages 集合:

  1. nuget.config mismatch: 不同的 OS 上有不同的 nuget.config,造成下載到不同版本的 packages。
  2. Intermediate versions:
    1. Day 1,<PackageReference Include="My.Sample.Lib" Version="4.0.0"/> Nuget 上有 4.1.0, 4.2.0, 4.3.0,dotnet restore 取得 4.1.0。
    2. Day 2,4.0.0 發佈到 Nuget。這時候執行 dotnet restore 會取得 4.0.0。
  3. Package deletion: 如同 2. 的描述,當找不到對應的版本時,dotnet restore 會找最接近的版本,這也就導致抓到不同版本的 package。(Nuget.org 不允許刪除 package;但是 GitLab Package Registry 可以刪除)
  4. Floating versions: <PackageReference Include="My.Sample.Lib" Version="4.*"/> 這會抓取 4.x 的最新版本,造成 dotnet restore 會抓取到不同版本。
  5. Package content mismatch: 相同的版本號,但是 Package 內容卻不同。這可能發生 Nuget.config 有 2 個以上的來源,都有相同 Package、版本號,這造成 dotnet restore 抓到不同的版本。

Reference

https://devblogs.microsoft.com/nuget/enable-repeatable-package-restores-using-a-lock-file/

專注於 C#, DevOps 的工程師
留言0
查看全部
發表第一個留言支持創作者!
Semgrep 是一個功能強大的 SAST 工具,可以幫助開發人員早期發現程式碼中的安全問題,本文介紹如何將 Semgrep 整合到 GitLab Pipeline 以進行 SAST 掃描。
說明 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
Semgrep 是一個功能強大的 SAST 工具,可以幫助開發人員早期發現程式碼中的安全問題,本文介紹如何將 Semgrep 整合到 GitLab Pipeline 以進行 SAST 掃描。
說明 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
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
糟糕!本來妻子的全身痠痛,已經恢復七八成,昨天卻是”一波未平,一波又起”:突然發現其嚴重便秘,已經累積到第四天了,真是痛苦非常,不知道如何是好? 今天是妻子救狗自傷的第十天,身體疼痛昂陸續修復的同時,發現她可能救狗當時過度的緊張+備戰狀態,以致,不經意之間,便秘秘密來襲,如今也發現身體陸續完全恢復了
Thumbnail
啊!昨天一起共居的太太出事了:為搶救不小心掉落逃生梯的家狗,她奮不顧身的衝入家狗跌落的9階樓底,舉全身之力,抱起+上提回到自己的樓層。然後,就發現自己全身痠痛。回想,疫情以來她三次的意外,都是藉非侵入性的調理,度過難關!所以,值得思考物理性的傷害,與化學性的吃藥比較,是否優先以非侵入性的調理克服?
Thumbnail
在提供家長諮詢過程中,不乏有家長詢問:如何有效管控子女3C的使用,不致成癮影響學業?我認為要管控問題,就要先了解問題。這篇文章希望帶各位爸爸媽媽一起了解大量使用3C甚至3C成癮,會造成孩子哪些身心反應?讓我們一起了解問題,再對症下藥,使用「替代療法」根治3C成癮問題!  
Thumbnail
我們證明過一個懂得尊重的政府跟一群有素養的公民,才是最強的防疫措施,因為民主政府的決策機制比專斷的獨裁政府更有效,民主社會的公民自主性比專制社會的臣民更好。只要政府跟民間能通力合作與互相體諒,團結的我們依然可以再次度過難關。
有時我們理所當然的用過去自己學會國字的經驗,去帶領孩子學習國字時,會發現怎麼會跟我們預期的那麼不同,而忽略了現在的學習環境、學習態度甚至的評量方式的轉變,都反應到了學習的成效時,除了複製過去的方法,也許回到最早字的起源,從圖象到造字,不只從識字量來評量孩子的學習表現,而是進一步去建立孩子學習生字的習
Thumbnail
利用語言與他人溝通似乎是我們認為再平常不過的行為,但從課堂上可以知道,每個人的腦區分布不同,而在維尼克區負責「理解」,布羅卡區負責「產生有文法的語言」,所以可以知道這兩個腦區讓我們可以用語言產生文化,並且與他人有來有往的溝通。
Thumbnail
法蘿緹美甲是 SimplyBook.me 專案客戶,在合作半年後,很高興有機會能訪問經營者 Emily 為大家分享她的經營之道!Emily 在開業近九年的時間內,嘗試了各種不同的行銷方式,並透過數位工具整合,來簡化經營負擔,今天將從她的角度為出發,來聊聊她經年累月的經驗,相信也能幫助想踏入美業的經
Thumbnail
需求商品=必須購入的商品,希望改變現狀越強烈就能引起購買意願,毫不猶豫來自於高需求與高購買慾望!
Thumbnail
沒有防水的功能,擦再多的防曬乳都是無效的,因為汗水會把它帶走的~ 如果你不想一直擦防曬,只想擦一次就有全天有效防曬的效果,但又想擦起來很水潤, 不會讓肌膚感到乾燥? 那你一定要知道什麼是「水凝防禦膜技術」
Thumbnail
最近華航的兩次罷工談判,佔據了主流媒體的不少版面、在網路上也有鋪天蓋地的討論;談判的結果,是資方對於勞方的訴求照單全收。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
糟糕!本來妻子的全身痠痛,已經恢復七八成,昨天卻是”一波未平,一波又起”:突然發現其嚴重便秘,已經累積到第四天了,真是痛苦非常,不知道如何是好? 今天是妻子救狗自傷的第十天,身體疼痛昂陸續修復的同時,發現她可能救狗當時過度的緊張+備戰狀態,以致,不經意之間,便秘秘密來襲,如今也發現身體陸續完全恢復了
Thumbnail
啊!昨天一起共居的太太出事了:為搶救不小心掉落逃生梯的家狗,她奮不顧身的衝入家狗跌落的9階樓底,舉全身之力,抱起+上提回到自己的樓層。然後,就發現自己全身痠痛。回想,疫情以來她三次的意外,都是藉非侵入性的調理,度過難關!所以,值得思考物理性的傷害,與化學性的吃藥比較,是否優先以非侵入性的調理克服?
Thumbnail
在提供家長諮詢過程中,不乏有家長詢問:如何有效管控子女3C的使用,不致成癮影響學業?我認為要管控問題,就要先了解問題。這篇文章希望帶各位爸爸媽媽一起了解大量使用3C甚至3C成癮,會造成孩子哪些身心反應?讓我們一起了解問題,再對症下藥,使用「替代療法」根治3C成癮問題!  
Thumbnail
我們證明過一個懂得尊重的政府跟一群有素養的公民,才是最強的防疫措施,因為民主政府的決策機制比專斷的獨裁政府更有效,民主社會的公民自主性比專制社會的臣民更好。只要政府跟民間能通力合作與互相體諒,團結的我們依然可以再次度過難關。
有時我們理所當然的用過去自己學會國字的經驗,去帶領孩子學習國字時,會發現怎麼會跟我們預期的那麼不同,而忽略了現在的學習環境、學習態度甚至的評量方式的轉變,都反應到了學習的成效時,除了複製過去的方法,也許回到最早字的起源,從圖象到造字,不只從識字量來評量孩子的學習表現,而是進一步去建立孩子學習生字的習
Thumbnail
利用語言與他人溝通似乎是我們認為再平常不過的行為,但從課堂上可以知道,每個人的腦區分布不同,而在維尼克區負責「理解」,布羅卡區負責「產生有文法的語言」,所以可以知道這兩個腦區讓我們可以用語言產生文化,並且與他人有來有往的溝通。
Thumbnail
法蘿緹美甲是 SimplyBook.me 專案客戶,在合作半年後,很高興有機會能訪問經營者 Emily 為大家分享她的經營之道!Emily 在開業近九年的時間內,嘗試了各種不同的行銷方式,並透過數位工具整合,來簡化經營負擔,今天將從她的角度為出發,來聊聊她經年累月的經驗,相信也能幫助想踏入美業的經
Thumbnail
需求商品=必須購入的商品,希望改變現狀越強烈就能引起購買意願,毫不猶豫來自於高需求與高購買慾望!
Thumbnail
沒有防水的功能,擦再多的防曬乳都是無效的,因為汗水會把它帶走的~ 如果你不想一直擦防曬,只想擦一次就有全天有效防曬的效果,但又想擦起來很水潤, 不會讓肌膚感到乾燥? 那你一定要知道什麼是「水凝防禦膜技術」
Thumbnail
最近華航的兩次罷工談判,佔據了主流媒體的不少版面、在網路上也有鋪天蓋地的討論;談判的結果,是資方對於勞方的訴求照單全收。