Ref: https://security.googleblog.com/2021/06/introducing-slsa-end-to-end-framework.html
今天要探討的是一個由 Google Blog 於上個月所推廣的軟體安全性框架,該框架名為 SLSA,全名則是 Supply Chain Levels for Software Artifacts,中文部分我不知道該怎麼翻譯才可以精準達到意思,所以建議就唸英文就好了。
該框架的目的是希望於整個軟體生產鏈中能夠進一步的去提升且確保所有產物的完整性(Integrity 這個詞該怎麼翻呢..)。
文章中用了一個很簡易的流程來清楚的解釋到底何謂 Software Supply Chain 以及整個流程中可能會有什麼問題。
Software Supply Chain 一個範例譬如
1. 開發者撰寫程式碼,並且提交到遠方的 SCM Repository
2. SCM Repo 因為程式碼改變,所以觸發相關的 CI/CD 流程
3. CI/CD 建置結束後則需要打包整個程式碼,產生最後的 Package.
4. 產生後的 Packet 則可以正式上場使用
文章認為上述的流程中有兩個不同類別的安全性問題,分別是
1. Source Integrity
2. Build Integrity.
Source Integrity 這邊主要是針對 Source Code 相關的問題,譬如
1. 開發者是否有意的故意塞入一些會不懷好意的程式碼到 SCM Repo 內。
範例: Linux Hypocrite commits, 之前美國某大學研究團隊基於研究嘗試上傳一些不太好的程式碼而影響的討論風波
2. SCM 的管理平台是否可能被惡意攻擊
範例: PHP 事件: 之前自架的 PHP Git Server 被攻擊者惡意攻擊並且塞入兩筆不懷好意的 Commit
而 Build Integrity 本身則是有更多不同的面向,譬如
1. SCM 觸發 CI/CD 過程是否有可能有問題
範例: Webmin 事件,攻擊者去修改團隊的建置系統去使用沒有被 SCM 所記錄的修改檔案。
2. CI/CD 建置系統本身被攻擊
範例: SolarWinds 事件,攻擊者攻破建置系統去安裝一些軟體來修改整的建置流程
3. CI/CD 建置過程中引用到錯誤的 Dependency
4. 攻擊者上傳一些惡意產物到應該只有 CI/CD 系統才可以存取的場所。
... 等
目前來說, SLSA 還處於非常早期階段,經由業界的共識來思考每個領域有什麼好的措施與指引來避免與偵測系統是否被攻破。其最終目標狀態是希望能夠根據環境自動產生出一套可整合到系統中的產物,並且最後可以給出 SLSA 憑證來給平台或是建置後的 Package。
對 SLSA 這個專案有興趣看看的請參考原始連結,內容不長但是頗有趣的
「git修改commit」的推薦目錄:
- 關於git修改commit 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於git修改commit 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於git修改commit 在 Kewang 的資訊進化論 Facebook 的最讚貼文
- 關於git修改commit 在 Git 更改舊的commit 訊息 - SoarLin 的評價
- 關於git修改commit 在 更改提交消息- GitHub 文档 的評價
- 關於git修改commit 在 git - How do I modify a specific commit? - Stack Overflow 的評價
- 關於git修改commit 在 Web ctf github 的評價
git修改commit 在 矽谷牛的耕田筆記 Facebook 的精選貼文
本篇文章探討的也是資安系列問題,而這次的目標主角則是 MAC 系統上廣為流傳的 Homebrew 系統。
結論:
作者透過觀察 Homebrew 的 Github Action 流程,成功得上傳一個會列印一行的程式碼到 iterm2 套件中,讓所有安裝的使用者都會於 Terminal 上看到一行作者客製化的訊息。
本次的漏洞是作者刻意從 Homebrew 的 Vulnerability Disclosure Program 專案中去嘗試尋找可能的問題,所有的操作都有跟官方專案的人探討過流程,並且一切的 PoC 都是單純證明該攻擊的可行性,所以有興趣研究的人請遵循一樣的想法去做,不要認真的想攻擊。
原因:
1. Homebrew 透過 Github Action 執行 CI/CD 動作
2. Homebrew 撰寫了一個自動合併 Pull Request 的 Action
3. CI 內會透過一個Ruby的 Git Diff 第三方函式庫來驗證,只要符合下列條件就可以自動合併
- Modifying only 1 file
- Not moving/creating/deleting file
- Target filepath matches \ACasks/[^/]+\.rb\Z
- Line count of deletions/additions are same
- All deletions/additions matches /\A[+-]\s*version "([^"]+)"\Z/ or - -\A[+-]\s*sha256 "[0-9a-f]{64}"\Z
- No changes to format of versions (e.g. 1.2.3 => 2.3.4)
作者一開始想要從該規則下手,找尋有沒有可能塞入惡意攻擊並且騙過系統讓其自動合併,然而這些規則看起來沒有什麼太多問題,於是作者轉往其他領域去找尋問題,其中一個想法就是到底該 Ruby 的 Git Diff 是如何實作,也許從實作下手更有辦法去欺騙這一切。
很順利的是,作者真的於該函式庫中找到問題,對於一個 Git Diff 的結果來說,該函式庫會透過 +++ "?b/(.*) 這樣的正規表達式來判別檔案路徑的資訊而並非程式修改內容,譬如下列 diff
```
diff --git a/source file path b/destination file path
index parent commit hash..current commit hash filemode
--- a/source file path
+++ b/destination file path
@@ line information @@
Details of changes (e.g.: `+asdf`,`-zxcv`)
```
作者就開始思考,如果讓程式碼可以符合 +++ "?b/(.*) 的規則,是否有辦法讓程式碼不被視為一個檔案的修改,因此就可以修改多行程式碼但是讓 CI 系統認為只有一行程式碼於是進行自動合併
作者最初的想法如下,第一行用來放惡意程式碼,第二行用來偽裝檔案路徑,經過一番嘗試後作者真的成功塞入了類似 PRINTF 的程式碼到環境中並觸發自動合併。接者各地使用者透過 brew 安裝 iterm 版本都會看到使用者塞入的程式碼。
```
++ "b/#{Arbitrary codes here}"
++ b/Casks/cask.rb
```
原文還有更多作者的思路過程,有興趣的不要錯過
原文:
https://blog.ryotak.me/post/homebrew-security-incident-en/#fn:7
測試用PR:
https://github.com/Homebrew/homebrew-cask/pull/104191
git修改commit 在 Kewang 的資訊進化論 Facebook 的最讚貼文
https://hahow.in/cr/kewang-git
大家在使用 Git 的時候是不是會常常遇到下列這些問題呢?
1. 常常在 GitHub 上面看到有 SSH 跟 HTTPS 的連線方式,這兩種有哪裡不同?為什麼有時候需要輸入密碼,有時候又不用輸入密碼?
• SSH 是使用金鑰的方式做連線,只要你有這把金鑰就可以不用輸入密碼,而 HTTPS 則是每次都要輸入密碼。更細部則可以控制權限,這在課程前半段就會解釋囉!
2. revert, reset, branch, checkout 這些指令到底是差在哪裡,如果我想還原某個檔案應該要如何做才好?
• revert 是還原單一個 commit,checkout 則是可以還原任何時間點的任何檔案,這些最容易被搞混的指令,當然要利用圖表好好來解釋一下。讓我們進入量子領域的世界吧!
3. 我想要在 push 的時候馬上就讓同事知道我這次修改的內容,我應該怎麼做才好?
• Git 有個 hook 的功能,可以在 push 之後即時寄送 mail 給想要收到的人,當然 Slack 跟 LINE 也可以囉!
以上這些種種問題,全部都會在課程內進一步的探討,讓大家在管理檔案的時候更有效率,不用怕檔案不見。快點來點上面的連結報名喔!
公開分享這篇文章,並且標記你的一位朋友,小編就會送你限量八折折扣碼,還不快點分享!
#git #github #hahow #量子領域
git修改commit 在 更改提交消息- GitHub 文档 的推薦與評價
键入 git commit --amend ,然后按“Enter”****。 在文本编辑器中编辑提交消息,然后保存该提交。 通过在提交中添加尾行可添加合作作者。 有关 ... ... <看更多>
git修改commit 在 Git 更改舊的commit 訊息 - SoarLin 的推薦與評價
記錄一下怎麼使用git 指令來修改舊的commit 訊息。 修改當前commit 訊息這應該是最基本的指令,透過--amend 來修改當前的commit 訊息。 ... <看更多>