有效整合 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
查看全部
avatar-img
發表第一個留言支持創作者!
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
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
糟糕!本來妻子的全身痠痛,已經恢復七八成,昨天卻是”一波未平,一波又起”:突然發現其嚴重便秘,已經累積到第四天了,真是痛苦非常,不知道如何是好? 今天是妻子救狗自傷的第十天,身體疼痛昂陸續修復的同時,發現她可能救狗當時過度的緊張+備戰狀態,以致,不經意之間,便秘秘密來襲,如今也發現身體陸續完全恢復了
Thumbnail
啊!昨天一起共居的太太出事了:為搶救不小心掉落逃生梯的家狗,她奮不顧身的衝入家狗跌落的9階樓底,舉全身之力,抱起+上提回到自己的樓層。然後,就發現自己全身痠痛。回想,疫情以來她三次的意外,都是藉非侵入性的調理,度過難關!所以,值得思考物理性的傷害,與化學性的吃藥比較,是否優先以非侵入性的調理克服?
Thumbnail
在提供家長諮詢過程中,不乏有家長詢問:如何有效管控子女3C的使用,不致成癮影響學業?我認為要管控問題,就要先了解問題。這篇文章希望帶各位爸爸媽媽一起了解大量使用3C甚至3C成癮,會造成孩子哪些身心反應?讓我們一起了解問題,再對症下藥,使用「替代療法」根治3C成癮問題!  
Thumbnail
我們證明過一個懂得尊重的政府跟一群有素養的公民,才是最強的防疫措施,因為民主政府的決策機制比專斷的獨裁政府更有效,民主社會的公民自主性比專制社會的臣民更好。只要政府跟民間能通力合作與互相體諒,團結的我們依然可以再次度過難關。
有時我們理所當然的用過去自己學會國字的經驗,去帶領孩子學習國字時,會發現怎麼會跟我們預期的那麼不同,而忽略了現在的學習環境、學習態度甚至的評量方式的轉變,都反應到了學習的成效時,除了複製過去的方法,也許回到最早字的起源,從圖象到造字,不只從識字量來評量孩子的學習表現,而是進一步去建立孩子學習生字的習
Thumbnail
利用語言與他人溝通似乎是我們認為再平常不過的行為,但從課堂上可以知道,每個人的腦區分布不同,而在維尼克區負責「理解」,布羅卡區負責「產生有文法的語言」,所以可以知道這兩個腦區讓我們可以用語言產生文化,並且與他人有來有往的溝通。
Thumbnail
法蘿緹美甲是 SimplyBook.me 專案客戶,在合作半年後,很高興有機會能訪問經營者 Emily 為大家分享她的經營之道!Emily 在開業近九年的時間內,嘗試了各種不同的行銷方式,並透過數位工具整合,來簡化經營負擔,今天將從她的角度為出發,來聊聊她經年累月的經驗,相信也能幫助想踏入美業的經
Thumbnail
需求商品=必須購入的商品,希望改變現狀越強烈就能引起購買意願,毫不猶豫來自於高需求與高購買慾望!
Thumbnail
沒有防水的功能,擦再多的防曬乳都是無效的,因為汗水會把它帶走的~ 如果你不想一直擦防曬,只想擦一次就有全天有效防曬的效果,但又想擦起來很水潤, 不會讓肌膚感到乾燥? 那你一定要知道什麼是「水凝防禦膜技術」
Thumbnail
最近華航的兩次罷工談判,佔據了主流媒體的不少版面、在網路上也有鋪天蓋地的討論;談判的結果,是資方對於勞方的訴求照單全收。
Thumbnail
Hi 我是 VK~ 在 8 月底寫完〈探索 AI 時代的知識革命:NotebookLM 如何顛覆學習和創作流程?〉後,有機會在 INSIDE POSSIBE 分享兩次「和 NotebookLM 協作如何改變我學習和創作」的主題,剛好最近也有在許多地方聊到關於 NotebookLM 等 AI 工具
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
糟糕!本來妻子的全身痠痛,已經恢復七八成,昨天卻是”一波未平,一波又起”:突然發現其嚴重便秘,已經累積到第四天了,真是痛苦非常,不知道如何是好? 今天是妻子救狗自傷的第十天,身體疼痛昂陸續修復的同時,發現她可能救狗當時過度的緊張+備戰狀態,以致,不經意之間,便秘秘密來襲,如今也發現身體陸續完全恢復了
Thumbnail
啊!昨天一起共居的太太出事了:為搶救不小心掉落逃生梯的家狗,她奮不顧身的衝入家狗跌落的9階樓底,舉全身之力,抱起+上提回到自己的樓層。然後,就發現自己全身痠痛。回想,疫情以來她三次的意外,都是藉非侵入性的調理,度過難關!所以,值得思考物理性的傷害,與化學性的吃藥比較,是否優先以非侵入性的調理克服?
Thumbnail
在提供家長諮詢過程中,不乏有家長詢問:如何有效管控子女3C的使用,不致成癮影響學業?我認為要管控問題,就要先了解問題。這篇文章希望帶各位爸爸媽媽一起了解大量使用3C甚至3C成癮,會造成孩子哪些身心反應?讓我們一起了解問題,再對症下藥,使用「替代療法」根治3C成癮問題!  
Thumbnail
我們證明過一個懂得尊重的政府跟一群有素養的公民,才是最強的防疫措施,因為民主政府的決策機制比專斷的獨裁政府更有效,民主社會的公民自主性比專制社會的臣民更好。只要政府跟民間能通力合作與互相體諒,團結的我們依然可以再次度過難關。
有時我們理所當然的用過去自己學會國字的經驗,去帶領孩子學習國字時,會發現怎麼會跟我們預期的那麼不同,而忽略了現在的學習環境、學習態度甚至的評量方式的轉變,都反應到了學習的成效時,除了複製過去的方法,也許回到最早字的起源,從圖象到造字,不只從識字量來評量孩子的學習表現,而是進一步去建立孩子學習生字的習
Thumbnail
利用語言與他人溝通似乎是我們認為再平常不過的行為,但從課堂上可以知道,每個人的腦區分布不同,而在維尼克區負責「理解」,布羅卡區負責「產生有文法的語言」,所以可以知道這兩個腦區讓我們可以用語言產生文化,並且與他人有來有往的溝通。
Thumbnail
法蘿緹美甲是 SimplyBook.me 專案客戶,在合作半年後,很高興有機會能訪問經營者 Emily 為大家分享她的經營之道!Emily 在開業近九年的時間內,嘗試了各種不同的行銷方式,並透過數位工具整合,來簡化經營負擔,今天將從她的角度為出發,來聊聊她經年累月的經驗,相信也能幫助想踏入美業的經
Thumbnail
需求商品=必須購入的商品,希望改變現狀越強烈就能引起購買意願,毫不猶豫來自於高需求與高購買慾望!
Thumbnail
沒有防水的功能,擦再多的防曬乳都是無效的,因為汗水會把它帶走的~ 如果你不想一直擦防曬,只想擦一次就有全天有效防曬的效果,但又想擦起來很水潤, 不會讓肌膚感到乾燥? 那你一定要知道什麼是「水凝防禦膜技術」
Thumbnail
最近華航的兩次罷工談判,佔據了主流媒體的不少版面、在網路上也有鋪天蓋地的討論;談判的結果,是資方對於勞方的訴求照單全收。