软件供应链中代码签名的重要性
你怎麼知道你的代碼是可信的?
在一個難以獲得信任的世界裡,這是一個重要的問題要問自己。 我們如何知道我們正在運行的應用程序、我們正在部署的容器或我們交付給客戶的代碼是真實的? 我們怎麼知道它沒有被篡改?
這一切都歸結為代碼簽名。
在本博客中,我們將討論代碼簽名的重要性、正確實施的挑戰,以及 Keyfactor Code Assure 如何讓您在不中斷開發人員工作流程的情況下集中和保護代碼簽名。
今天,軟件不僅僅是店面。 它是每項業務背後的運營引擎。 為了讓引擎像運轉良好的機器一樣運行,我們需要知道我們構建的一切和部署的一切都是可信的。
軟件供應鏈中信任的核心是代碼簽名。 代碼簽名證明了代碼源供應商的身份,並驗證代碼自發布以來未被篡改。
我們正在迅速走向一切都需要簽署的現實。 不僅僅是我們從第三方供應商那裡購買的軟件,同樣重要的是,我們在自己的組織中構建和部署的軟件。 這意味著來自 PowerShell 腳本、Bash 腳本、容器、庫、文件和可執行文件(您可以命名)的所有內容。
但是代碼簽名已經存在多年了。 那麼,發生了什麼變化?
軟件供應鏈中的威脅
由於採用 CI/CD 以及構建和測試自動化工具,應用程序和運營團隊的發展速度比以往任何時候都快。 這意味著更少的人眼可以直接看到整個管道中發生的事情。
從高級持續威脅 (APT) 團體到居住在地下室的黑客,不良行為者會在這些快速變化的複雜環境中尋找弱點或漏洞。 為了保持低調,惡意代碼通常會在供應鏈中的幾乎任何點被注入或修改,而不會被檢測到。 要么,要么他們損害了代碼簽名過程本身。
攻擊者可以將惡意代碼注入開源軟件、源代碼存儲庫或破壞構建服務器本身。 在 SolarWinds 的案例中,攻擊者僅將幾行看似良性的代碼注入到單個 DLL 文件中,從而在整個供應鏈中造成了深刻而廣泛的威脅。
攻擊者還可能獲取或竊取在易受攻擊的系統上發現的代碼簽名密鑰,以對其惡意軟件工具進行簽名。我們已經看到這種情況發生在許多不同的場景中,其中代碼簽名私鑰從構建服務器、開發人員工作站被洩露,甚至意外暴露在固件或軟件本身中。
所以從安全的角度來看,僅僅簽署代碼是不夠的。現在,同樣重要的是:(1) 確保開發人員正在構建的是經過簽名並交付給您的客戶的內容,以及 (2) 用於簽署代碼的基礎設施和私鑰受到嚴格控制。
代碼簽名:攻擊者的天然目標
攻擊者向左移動。他們不是直接針對組織,而是在軟件供應鏈中尋找可以竊取工具或破壞代碼的薄弱環節。國家支持的 APT 41 已經掌握了這項技術十多年,通過損害軟件供應商或供應商間接針對廣泛的公司。
![](https://pic1.zhimg.com/80/v2-7174f82e3248bd2641711419c383dfa0_720w.jpg)
代碼簽名是攻擊者的天然目標,因為它允許他們滑入供應鏈並從內部破壞目標。 這是如何發生的:
密鑰盜竊或濫用:攻擊者通過未受保護的系統或配置錯誤的帳戶訪問控制竊取代碼簽名材料。
系統入侵:攻擊者還可以入侵集中式簽名或更新服務器,以劫持交付過程中的軟件更新。
代碼洩露:惡意代碼被注入開源庫或源代碼存儲庫,並且在簽名並推送給最終用戶之前未被檢測到。
內部威脅:組織內的開發人員可能故意簽署惡意代碼,甚至無意中在可公開訪問的軟件更新或存儲庫中披露簽名密鑰。
代碼簽名的當前狀態
儘管存在這些眾所周知的威脅,但現實情況是,我們今天與之交談的大多數組織都沒有進行應有的簽名,更重要的是,它們通常沒有一致的代碼簽名流程。
在最近的一項研究中,我們發現公司平均擁有 25 個代碼簽名證書。 大約 51% 的受訪者表示他們將相關的私鑰存儲在硬件安全模塊 (HSM) 中。 另一方面,許多人表示在構建服務器 (33%) 和開發人員工作站 (19%) 上也發現了私鑰,近三分之二 (60%) 的公司沒有正式的訪問控制和代碼審批流程—— 簽名密鑰。
![](https://pic1.zhimg.com/80/v2-acd07122b261772277c23760ef5f4eb0_720w.jpg)
有什麼阻礙?
問題是代碼簽名通常與軟件開發鬆散耦合,而不是緊密集成。這兩個過程是脫節的,這會在軟件交付中產生摩擦和延遲,或者更糟糕的是,它為不良行為者提供了利用的可能性。以下是一些常見的障礙:
遠程團隊:去中心化開發是新常態,它帶來了一些挑戰。將密鑰本地存儲在機器上不是一種選擇,但是將大文件傳輸到集中式簽名系統會導致大量等待時間。
無流程:代碼簽名密鑰在 HSM 中得到了很好的保護,但仍然需要控制簽名的內容、誰可以簽名等。
手動流程:政策護欄必不可少,但嚴重依賴硬件配置和手動審批流程的流程無法擴展。
沒有集成:缺乏文件類型支持或與現有工具(例如 SignTool、Authenticode、jarsigner)的集成使得在允許開發人員透明地工作的同時保持集中控制非常困難。
所以問題就變成了,您如何讓開發人員能夠輕鬆透明地簽署代碼,同時保持對他們可以簽署的內容和方式的集中控制? 這是我們問自己的一個問題,但我們沒有尋找答案,而是建立了它。
關鍵因素代碼保證
隨著我們轉向更頻繁的軟件更新、遠程開發團隊和更多產品,我們的現有簽名解決方案已經超過了依賴高度安全但大量手動流程的現有簽名解決方案。 這就是關鍵因素代碼保證的用武之地。
![](https://pic4.zhimg.com/80/v2-d67d7114daadebbdb83693cc158d25f7_720w.jpg)
為了在我們(和我們的客戶)對透明度、易用性以及安全性的要求之間找到適當的平衡,我們構建了一個解決方案,該解決方案可以:
- 在集中控制的 HSM(物理或云)中保護私鑰
- 使開發人員能夠在其本地機器上使用本機工具和簽名方法,而私鑰永遠不會離開中央 HSM
- 控制不同團隊和角色的訪問權限並劃分職責
- 根據用戶/組、位置、簽名方法和其他參數實施簽名策略護欄
- 維護所有代碼簽名活動和密鑰使用的審計跟踪和時間戳
- 與構建服務器和 CI/CD 工具(尤其是 Jenkins)集成以自動化代碼簽名
来源网站:https://www.keyfactor.com/ 沃通WoTrus原创翻译整理,转载请注明来源
原文网址:https://www.keyfactor.com/blog/the-importance-of-code-signing-in-software-supply-chain/
参考
- https:wosign.com/Products/digicert_CodeSigning_EV.htm