近日,在「江狐會」廣州站上,極狐(GitLab) 高級解決方案架構師武讓分享瞭如何通過三大階段 + 四大要點,規避代碼安全「馬奇諾防線」,真正確保軟件供應鏈安全。以下內容整理自本次演講。Enjoy~
先跟大家分享一個故事
一戰結束後,曾遭到德國重創的法國,為了防止德軍再次入侵,舉國之力,耗時 10 年、耗費 50 億法郎,在東北邊境構築延綿數百公里的馬奇諾防線,堪稱軍事上的一大奇蹟。
然而實戰中,德軍並沒有去死磕馬奇諾防線的正面防區,他們繞道至法國北部進而長驅直入。這座“世界上最強防線”成了擺設。
現在,“馬奇諾防線” 被用來比喻勞神費力而沒有用處的東西。
圖片來源:https://www.douban.com/note/711063488/?type=like&_i=4225104Gz...
代碼數據作為企業核心數據資產,同樣要避免 “馬奇諾防線” 式的保障,那麼應該如何保證代碼數據安全呢?我們基於 300+ 家企業的實踐經驗,總結出保障代碼數據安全的四大要點:
保密性 + 完整性 + 可用性 + 安全性
代碼數據保密性
保密性即要確保數據不能夠泄漏。
近年來,國內外知名科技企業源代碼泄露事件屢見不鮮,不僅對企業造成直接的經濟損失,也損害了品牌形象。如何避免類似事件?極狐GitLab 提供覆蓋「事前 - 事中 - 事後」三個完整階段的代碼防泄漏總體思路。
「事前」主要是對整個代碼倉庫及代碼平台進行權限控制,包括:
事前:註冊安全 - 註冊限制
可通過 Email 黑白名單限制賬號註冊:
可關閉註冊,通過與企業內的 AD / LDAP / SSO 等權限系統或單點登錄系統打通,不允許用户自由創建用户。
極狐GitLab 專業版中的 AD/LDAP 組同步、SAML 組同步等高級功能,還可以實現將第三方用户管理系統中的用户組直接同步到極狐GitLab 羣組中,更便於企業管理。
事前:登錄安全 - 2FA 雙因素認證
2FA 雙因素認證開啓後,除了用户名密碼外,還需要提供第二層認證因素(比如手機驗證碼)才可以登錄賬號,能夠有效防止用户在不小心丟失用户名密碼的情況下,賬號被惡意登錄使用。
事前:網絡安全 - IP 訪問白名單
該功能限制用户在指定網絡環境下才可以訪問代碼倉庫。
例如企業有外包團隊,那麼代碼需要對其開放,可通過在羣組中添加公司內網或某辦公區 IP 地址為 IP 訪問白名單,不同羣組可設置不同的 IP 訪問白名單。這樣,外包團隊只能在指定辦公區網絡下才可以訪問代碼倉庫。
非 IP 訪問白名單網絡則無法訪問:
事前:授權安全 - 用户角色授權
極狐GitLab 用户角色授權功能具有高靈活性,可以根據組織或項目團隊的實際情況選擇以羣組授權或用户授權,不同的用户角色具備不同的可執行權限。
在實際應用中,極狐GitLab 建議系統管理員遵循最小特權原則(Least Privilege),只給用户分配所需功能的最小權限,同時定期對用户權限進行審查,避免權限管理失控。
事前:提交安全 - GPG 證明提交人身份
GPG 或 GnuPG (GNU Privacy Guard) 是一個遵照 OpenPGP 協議的用於加密、數字簽名以及認證的軟件工具。
GPG 在代碼提交中主要用來確定提交人身份,防止被惡意篡改的代碼進入源代碼倉庫。它需要在用户本地生成一對密鑰(公鑰/私鑰),將公鑰上傳到極狐GitLab 中,並在代碼提交時用對應的私鑰進行簽名,當代碼上傳到極狐GitLab 服務器時,極狐GitLab 會用公鑰進行驗證簽名是否匹配。
使用方式:git commit -S -m "My commit message"
事中:DLP 工具集成
「事中」則是需要通過 DLP 網關來保障數據安全。
極狐GitLab 可以與 DLP、零信任網關集成,從根本上解決了代碼泄露問題。
如下圖,不論是 OA、ERP 或極狐GitLab,所有數據都會經過 DLP(Data leakage prevention,數據泄漏防護)網關,才可以被讀取到開發人員電腦上。
通過 DLP 網關拉取下來的代碼在磁盤中是加密狀態,即便通過 U盤或者其他方式發佈到外網也無法直接打開,只能通過 DLP 網關信任的客户端、IDE 打開,在內存中是解密狀態,可進行正常的開發工作,一旦落盤存儲就又變為加密狀態,從而實現數防泄漏。
DLP 網關雖然在代碼防泄漏的效果上表現最佳,但 DLP 成本往往比較高,對使用人員的用户體驗也有一定程度上的影響,所以比較適合對數據保密要求高的的企業或項目團隊。
極狐GitLab 可以集成行業內主流的 DLP 網關如 IPGarud、綠盾等,並且可以關閉在極狐GitLab 網頁上下載代碼,限制獲取代碼的渠道,以便更好的與 DLP 工具集成,進一步提高數據保密性。
事後:審計事件-人員行為分析與告警
最後是「事後」措施。它主要是對極狐GitLab 中所發生的事件、人員行為進行記錄、分析、追蹤,甚至是告警,以實現對代碼泄露事件的防範或追溯。
例如,誰在什麼時間,通過什麼 IP,從代碼庫中拉取了什麼代碼,拉取了多少次等,這些信息都可以記錄下來。有了這些信息,則可以進行規則設置。
舉個🌰,在 “晚上 12 點之後,早上 6 點鐘之前” 這個時間段,如果有用户超過 5 次去拉取代碼,判斷為一個高風險的事件,觸發一個郵件通知。系統管理員或指定人員可以將這個用户的狀態變成凍結,阻止其訪問;同時可以對該行為進行分析和追蹤。
圖:審計事件
圖:審計告警
這裏的「事後」是相對於「事中」而言的,它具有一定的延後性,但它的成本相較於「事中」的方式大幅降低,依然可以作為絕大多數企業或團隊實現代碼數據保密性的主要手段。
代碼數據可用性與完整性
- 可用性表示能夠訪問數據,並能夠滿足持續的用户增長;
- 完整性表示數據不能夠損壞、不能被篡改。
曾有企業客户在極狐GitLab 數據庫上做了錯誤操作,致使數據庫無法使用,並由於只有一個實例,沒有任何備份,導致數據全部丟失,無法挽回。如何避免這種 “悲劇” ?
極狐GitLab 高可用擴展性架構
極狐GitLab 提供高可用擴展性架構,其源自全球最大代碼託管平台之一的 GitLab.com 十多年的技術實踐沉澱,該架構通過了全球 3000 萬註冊用户的檢驗。
極狐GitLab 高可用擴展性架構通過把極狐GitLab 中所有組件單獨抽出來,以分佈式集羣的方式部署,每一個服務和組件都是多副本的,在整體架構設計上不存在單點故障,並結合負載均衡、水平伸縮、分佈式架構、主從多副本機制和雲原生等多種機制,實現理論上無限擴展的能力。
極狐GitLab 提供支撐從 1000 人到 50000 人規模架構最佳實踐參考和專業服務支持,為企業構建高度可靠 DevOps 研運平台保駕護航。
近期,極狐GitLab 正式發佈《中國企業研發高效能白皮書 · 企業級軟件架構篇》,基於 10 萬+ 企業客户成功實踐經驗,為不同企業規模、集中或分佈式團隊,量身定製成熟的企業級軟件架構方案。
極狐GitLab 在數據存儲方面使用了多個組件,如 PGSQL 用於存儲用户信息、倉庫路徑等元數據、Redis可作為緩存或消息隊列,因為 PGSQL 和 Redis 作為主流中間件都有自己的高可用方案,所以不少客户已經將極狐GitLab 實例中的這些組件替換為第三方的高可用組件,這是一個好事,説明大家對高可用很重視。
但極狐GitLab 中最核心的存儲組件卻不是 PGSQL 也不是 Redis,而是 Gitaly,這是GitLab 自研的組件,用於對代碼倉庫進行管理和指令互動,因此它的地位最重要,負載也最高。
因為有些企業的數據量多達 30 T 級別,使用單個磁盤或單個節點的成本很高,且性能無法保證。Gitaly Cluster 高可用 Git 倉庫服務持多副本和分片,把不同的代碼庫分到不同的存儲片上,這也是提高可用性和性能的方式。
極狐GitLab GEO 多地域部署架構
相較於支持 1000 人起步的高可用可擴展架構,極狐GitLab GEO 多地域部署架構則更為輕量和簡單,更加適合中小型企業。
GEO 多地域部署架構實現一主多從,主從之間的數據實時同步。
不同於傳統數據庫冷備份,RTO(Recovery Time Objective,恢復時間目標) 基本上是 24 小時,可能就丟失了一天的數據。
極狐GitLab GEO 多地域部署方案是熱備份,即便主節點宕機,也可以把從節點處將其恢復,或提升從節點為主節點,那麼丟失的數據最多是 1~2 分鐘的數據。
所以 GEO 多地域部署的時效性和可靠性大大高於傳統冷備份方式,屬於準高可用,同時是災備架構,並支持異地容災。
代碼安全性
近年來,軟件安全問題日趨嚴重,其類型也不盡相同,如勒索軟件事件:
1. 2021 年 2 月,起亞汽車遭勒索,黑客要求支付 1.35 億贖金,若當天不支付,將追加至 2 億元。
2. 2021 年 3 月,黑客組織攻陷了特斯拉攝像頭供應商 Verkada,特斯拉以及美國監獄、警察局、醫院和學校等 15 萬個監控攝像數據遭泄露。
3. 2021 年4 月,黑客通過勒索攻擊,竊取了蘋果的設計藍圖,索要 5000 萬美元(約 3.25 億元)贖金。
還有軟件漏洞和開源及第三方組件風險,據統計,國內有 90% 以上公司都使用了第三方開源代碼,這個數字還在逐年增高。這些開源代碼本身可能存在安全問題。
數據來源:漏洞知識庫(CVE)&中國國家信息安全漏洞共享平台(CNVD)
傳統軟件安全主要關注軟件運行過程中的安全,一般是在軟件發佈、交付前後對軟件應用的安全進行測試和評估。鑑於以上種種,傳統軟件安全測試和評估已經無法定義現階段的軟件安全了。軟件供應鏈安全,應需而生。
什麼是軟件供應鏈安全?
“供應鏈” 一詞來源於製造業。如何評估一輛汽車是否安全?
- 首先,上游提供的發動機、玻璃、剎車片等部件本身必須安全,必須通過汽車企業的測評和檢測;
- 其次,汽車生產鏈條必須規範,比如説豐田主推精益生產,保證汽車製造環節安全可靠;
- 最後,汽車到達消費者手上,還需要定期到 4S 店進行保養,保障汽車安全。
軟件供應鏈安全與製造業供應鏈安全如出一轍。
在軟件領域的供應鏈是指的是軟件從開發到交付的全過程,軟件的供應鏈安全是軟件安全威脅的源頭。
在 CNCF 的《軟件供應鏈安全白皮書》中,強調了分層防禦實踐的重要性,並提供了從以下五個維度來提升軟件供應鏈安全的整體方法。
如何實現軟件供應鏈安全?
SDL(安全開發生命週期):重量、高成本、低效率
SDL 是過去 20 年中普遍使用的一種方式。
如下圖,華為內部有一套安全紅線,包括了安全基線、規範標準指導書、各種各樣的掃描工具,每個項目研發流程需要遵循這一套機制,運行各種審核,各種節點確認,來保證產品和項目交付安全,可想而知其成本之高和效率之低。
DevSecOps:輕量、低成本、高效率
DevSecOps 相較於 SDL ,成本更低,效率更高。
DevSecOps 在軟件開發過程的每個階段集成安全測試的實踐,它包括鼓勵開發人員、安全專家和運營團隊之間協作的工具和流程,以構建既高效又安全的軟件。DevSecOps 帶來了文化轉型,使安全成為開發軟件的每個人的共同責任。
這個機制是如何運轉的呢?
極狐GitLab 將安全掃描集成到 DevOps 工作流中,通過流水線自動化執行,將安全實踐融入軟件開發的每個階段,在代碼上線前,就能夠幫助用户更高效地發現問題、追蹤問題,更低成本地解決問題。
- 完整性:內置 7 種類型安全掃描,覆蓋軟件全生命週期,配置簡單,開箱即用。
- 統一性:統一管理界面,安全規則、漏洞報告、漏洞追溯、任務分配,開展端到端的安全實踐。
- 領先性:Gartner、Forrester 等全球知名測評機構給予高度評價,在 DevOps 產品中處於領先水平。
- 高性能:契合敏捷項目管理機制,能夠與 DevOps 結合,支持大規模用户的高併發檢測。
- 可擴展:可以接入不同的商業化安全產品及解決方案,如 Black Duck、Fortify 等。
以往工作流程中,安全工程師測試後,將漏洞報告發送到工作羣,請研發工程師逐個修改。但研發工程師只看到了漏洞,而具體的漏洞所在的位置等信息全然不知,修復起來十分低效和繁瑣。
極狐GitLab 提供的漏洞詳情和報告如下圖,清晰展示了漏洞所在項目、在哪個文件的第幾行、漏洞級別等信息;針對需要修復的漏洞,安全工程師一鍵「創建議題」,研發工程師即可 “對症下藥” 開始追溯和修復漏洞,高效明瞭。
那麼,極狐GitLab 到底是怎麼真正把安全問題左移到開發階段,並且強制要求開發人員去解決呢?
這裏用到安全策略和安全門禁設置。
如下圖例子,在這個項目中,要求 SAST 靜態應用測試不允許超過 1 個嚴重漏洞,依賴掃描不能超過 2 個高等級漏洞,如果超過了,代碼則不允許被合併或發佈。設置了這樣的安全策略後,研發人員就必須遵守,否則代碼合不上去。
但如果真的有緊急的事情,或是發版迫在眉睫,客户催得很緊,怎麼辦?可以通過評審人員人工確認,共同擔責。
代碼數據安全的思考
對於代碼數據安全,除了上面提到的一些措施,還有哪些方式可以提升代碼數據的安全性?這裏列出一些方案,供大家參考和思考:
- 堡壘機:通過審計方式對運維人員進行控制和追溯,防止運維人員對代碼數據造成威脅;
- 分級部署:把涉及企業機密與核心的代碼,單獨放一個極狐GitLab 的實例,並通過各式手段加強安全保護能力;
- 網絡隔離:常見於金融行業,在內網下部署,並有嚴格的網絡訪問策略;
- 專用設備:在指定的設備上進行數據訪問;
- 備份加密:防止備份文件被拿走後使用;
- 安全意識培養:人員安全意識與能力培訓。
大家可以發現,對於數據安全需要考慮的事情、能做的事情實在是太多了。所以我們常説沒有 100% 的安全。安全是一場博弈,需要綜合考慮可能造成的損失成本與保障安全的成本,來決定採用何種安全措施。不可一葉障目,也不可矯枉過正,唯有先事慮事、因地制宜才可在有限的資源下獲取最大化的安全。
想了解更多極狐 GitLab DevSecOps 7 大實用功能?點擊參與活動👉 DevSecOps 7 大直播課程正在進行中 ,立即上車,啓程軟件安全開發實踐之旅!