DevOps風險測繪之程式碼篇

綠盟科技發表於2022-08-10

一、簡介

  • DevOps流程簡述

DevOps是Development和Operations組合的縮寫詞,它指的是一種協作方法,使企業的應用程式開發團隊(Development team)和 IT 運營團隊(Operations team)能夠更好地溝通工作,DevOps的概念有助於使技術專案與業務需求保持一致,從而提高企業整體的工作效率[1]。如圖1所示[2],DevOps流程主要會涉及8個步驟,分別是:計劃(PLAN)、編碼(CODE)、編譯(BUILD)、測試(TEST)、釋出(RELEASE)、部署(DEPLOY)、運營(OPERATE)和監控(MONITOR)。

 DevOps風險測繪之程式碼篇

圖1  DevOps流程示意圖

  • 編碼環節簡述

編碼(CODE)環節是DevOps流程中非常重要的一環,在這一環中企業機構一般都會使用相關的程式碼管理工具來提高團隊整體的開發協作效率,同時大部分企業機構會選擇自建程式碼倉庫管理工具來進行開發以避免自身相關的程式碼暴露在公網之中。因此,DevOps團隊一般不會使用集中式公開的程式碼管理工具(如Github、CSDN、Gitee等),而是選擇可以建在自己伺服器上的程式碼管理工具(如GitLab、Gogs、Gitea、Gitblit等)。

  • 自建程式碼倉庫測繪

程式碼安全一直是網路資訊保安中至關重要的一環;對於一個網路系統來說,程式碼就是其生命的化身,無論是前期的研發還是後期的運營,程式碼安全對於任何一個組織機構而言都有著舉足輕重的意義。基於網路空間測繪技術,我們對自建程式碼倉庫GitLab、Gogs、Gitea、Gitblit、Gitbucket等進行了研究。此前52期《安全+》期刊文章《誰動了我的DevOps:DevOps風險測繪》中已詳細介紹了GitLab資產的風險測繪,此篇我們將詳細介紹Gogs、Gitea和Gitblit三個程式碼倉庫資產相關的測繪研究結果。


二、Gogs資產風險測繪

  • Gogs簡介

Gogs是一款極易搭建的自助 Git 服務,它的目標是打造一個最簡單、最快速和最輕鬆的方式搭建自助 Git 服務。使用 Go 語言開發使得 Gogs 能夠透過獨立的二進位制分發,並且支援 Go 語言支援的 所有平臺,包括 Linux、Mac OS X、Windows 以及 ARM 平臺[3]。

  • Gogs國內資產暴露情況

根據網路測繪資料,我們對2022年3月國內Gogs資產暴露情況進行了統計,共計查詢到4650個暴露的資產,下面將從地區分佈、暴露埠和網路協議三個維度分別進行介紹。

 

如圖2所示,國內暴露的Gogs資產中約60%來源於北京市、廣東省、上海市;其中北京市暴露資產數量排名首位,暴露的Gogs資產達到1095個。

DevOps風險測繪之程式碼篇

圖2  Gogs國內暴露資產分佈圖(地區維度)

 

如圖3所示,國內暴露的Gogs資產使用的埠主要為3000和443,共佔總數的93%,其中3000埠暴露量最多,共計3849個,佔比83%。

 DevOps風險測繪之程式碼篇

圖3  Gogs國內暴露資產分佈圖(埠維度)

 

如圖4所示,國內暴露的Gogs資產協議為HTTP和HTTPS,分別佔比86%和14%。

 

DevOps風險測繪之程式碼篇

圖4  Gogs國內暴露資產分佈圖(協議維度)

 

  •  Gogs國內資產脆弱性情況分析

我們對近幾年Gogs的CVE進行了分析,主要有七個,分別是:CVE-2020-15867、CVE-2019-14544、CVE-2018-20303、CVE-2018-18925、CVE-2018-16409、CVE-2018-15193和CVE-2018-15192。CVE釋出時間、CVSS V3.1評分、CVE對應資產版本及漏洞型別如表1所示,其中評分9分以上的漏洞有兩個,分別是屬於RCE漏洞的CVE-2018-18925和屬於未授權訪問漏洞的CVE-2019-14544。

DevOps風險測繪之程式碼篇

表1 Gogs CVE詳情

 

除了公佈的Gogs CVE漏洞之外,我們透過研究還發現部分Gogs資產存在著因錯誤配置而導致的未授權訪問漏洞,攻擊者可以匿名訪問該資產的程式碼倉庫並進行複製,如圖5所示。

 DevOps風險測繪之程式碼篇

圖5  存在未授權訪問漏洞的Gogs資產

 

針對於上述暴露的4650個Gogs資產,我們對其脆弱性進行了分析。如下圖6所示,我們共發現未授權訪問漏洞(因錯誤配置)2181個、CVE-2020-15867(許可權提升)1263個、CVE-2018-20303(目錄遍歷)549個、CVE-2018-18925(RCE)503個、CVE-2018-15192(SSRF)435個、CVE-2018-15192(CSRF)435個、CVE-2019-14544(未授權訪問)151個和CVE-2018-16409(SSRF)65個。

 DevOps風險測繪之程式碼篇

圖6  Gogs暴露資產脆弱性情況

三、 Gitea資產風險測繪

  • Gitea簡介

Gitea 是一個企業自身託管的Git服務程式,由Gogs 發展而來,支援 Linux、macOS 和 Windows 等各種架構。Gitea的首要目標是建立一個極易安裝,執行非常快速,安裝和使用體驗良好的自建 Git 服務,Gitea採用Go作為後端語言,這使它只要生成一個可執行程式即可[4]。

  • Gitea國內資產暴露情況

根據網路測繪資料,我們對2022年3月國內Gitea資產暴露情況進行了統計,共計查詢到2922個暴露的資產,下面將從地區分佈、暴露埠和網路協議三個維度分別進行介紹。

 

如圖7所示,國內暴露的Gitea資產中約55.3%來源於北京市、廣東省、上海市;其中北京市暴露資產數量排名首位,暴露的Gitea資產達到563個。

 

DevOps風險測繪之程式碼篇

圖7  Gitea國內暴露資產分佈圖(地區維度)

 

由圖8可見,國內暴露的Gitea資產使用的埠主要為3000和443,佔總數的96%,其中3000埠暴露量最多,共計2293個,佔比78.5%。

 

DevOps風險測繪之程式碼篇

圖8  Gitea國內暴露資產分佈圖(埠維度)

 

如圖9所示,國內暴露的Gitea資產協議為HTTP和HTTPS,分別佔比82%和18%。

 DevOps風險測繪之程式碼篇

圖9  Gitea國內暴露資產分佈圖(協議維度)


  • Gitea國內資產脆弱性情況分析

我們對近幾年Gitea的CVE進行了分析,主要有九個,分別是:CVE-2018-18926、CVE-2019-11576、CVE-2020-13246、CVE-2021-3382、CVE-2021-45325、CVE-2021-45326、CVE-2021-45327、CVE-2021-45330、CVE-2021-45331,詳情如表2所示。其中評分9分以上的漏洞有四個,分別是屬於RCE漏洞的CVE-2018-18926和CVE-2021-45327、屬於未授權訪問漏洞的CVE-2019-11576、屬於弱身份驗證漏洞的CVE-2021-45330。

 

DevOps風險測繪之程式碼篇

表2 Gitea CVE詳情

 

除了公佈的Gitea CVE漏洞之外,和Gogs類似,我們還發現了部分Gitea資產存在著因錯誤配置而導致的未授權訪問漏洞,攻擊者可以匿名訪問該資產的程式碼倉庫並進行複製,如圖10所示。

DevOps風險測繪之程式碼篇 

圖10  存在未授權訪問漏洞的Gitea資產

 

針對於上述暴露的2922個Gogs資產,我們對其脆弱性進行了分析。如下圖11所示,我們共發現未授權訪問漏洞(因錯誤配置)1743個、CVE-2021-45330(弱身份驗證)1537個、CVE-2021-3382(DoS)592個、CVE-2020-13246(執行緒死鎖)365個、CVE-2021-45327(RCE)325個、CVE-2019-11576(未授權)113個、CVE-2021-45325(SSRF)92個、CVE-2018-18926(RCE)56個、CVE-2021-45326(CSRF)52個和CVE-2021-45331(未授權)43個。

 DevOps風險測繪之程式碼篇

圖11  Gitea暴露資產脆弱性情況

 

四、 Gitblit資產風險測繪


  • Gitblit簡介

Gitblit 是一個開源的純 Java 堆疊,用於管理、檢視和提供 Git 儲存庫,它是一款為希望託管集中式儲存庫的小型工作組設計的工具。Gitblit 可以用作沒有管理控制或使用者帳戶的儲存庫檢視器,也可以用作完整的 Git 堆疊,用於克隆、推送和儲存庫訪問控制,同時Gitblit 可以在沒有任何其他 Git 工具(包括實際的 Git)的情況下使用,也可以與使用者已建立的工具配合使用[5]。

  • Gitblit國內資產暴露情況

根據網路測繪資料,我們對2022年3月國內Gitblit資產暴露情況進行了統計,共計查詢到1556個暴露的資產,下面將從地區分佈、暴露埠和網路協議三個維度分別進行介紹。

 

如圖12所示,國內暴露的Gitblit資產中約74%來源於北京市、廣東省、上海市和浙江省;其中北京市暴露資產數量排名首位,暴露的Gitblit資產達到359個。

 DevOps風險測繪之程式碼篇

圖12  Gitblit國內暴露資產分佈圖(地區維度)

 

由圖13可見,國內暴露的Gitblit資產使用8443埠最多,佔比48%,其次是8080埠,佔比14%。

 

DevOps風險測繪之程式碼篇

圖13  Gitblit國內暴露資產分佈圖(埠維度)

 

如圖14所示,國內暴露的Gitblit資產協議為HTTP和HTTPS,分別佔比52%和48%。

 

DevOps風險測繪之程式碼篇

圖14  Gitblit國內暴露資產分佈圖(協議維度)

  • Gitblit國內資產脆弱性情況分析

類似於Gogs和Gitea,我們也發現Gitblit存在著同樣因錯誤配置而導致的未授權訪問漏洞,攻擊者可以匿名訪問該資產的程式碼倉庫並進行複製,如圖15所示。


DevOps風險測繪之程式碼篇

圖15  存在未授權訪問漏洞的Gitblit資產

 

針對於上述暴露的1556個Gitblit資產,我們對該未授權訪問漏洞進行了驗證,共計發現約602個Gitblit資產存在漏洞,存在著較大的安全隱患。

五、安全風險及建議

  • 安全風險

透過對自建程式碼倉庫Gogs、Gitea和Gitblit的風險測繪研究,我們可以發現暴露資產中存在著較大的安全隱患。目前我們已發現的潛在安全風險有:1. 敏感資料洩露;2. 專案原始碼洩露;3. 軟體供應鏈投毒攻擊。

敏感資料洩露:透過利用上文漏洞,攻擊者可以竊取部分Gogs、Gitea和Gitblit資產中的敏感資料,示例見圖16。

 

DevOps風險測繪之程式碼篇

圖16 敏感資料洩露示例

專案原始碼洩露:原始碼是控制系統的最底層邏輯,透過程式碼審計可以發現系統中存在的缺陷,攻擊者會透過缺陷對系統進行攻擊。透過利用上文漏洞,攻擊者可以成功竊取部分Gogs、Gitea和Gitblit資產中的原始碼。

 

軟體供應鏈投毒攻擊:透過利用上文漏洞,攻擊者可以增刪改部分Gogs、Gitea和Gitblit資產中的程式碼,可能會導致供應鏈投毒攻擊,類似於solarwinds事件[6]。

  • 安全建議

原始碼洩露的危害不可小覷,任何企業和組織機構都不會希望自己的程式碼落入他人之手,對於開發團隊我們建議:

1. 及時更新軟體版本。

2. 儘量將資產使用的埠放在內網IP地址,避免直接暴露在網際網路。

3. 避免將敏感資料存放到程式碼倉庫。

 

同時我們發現上述暴露的資產90%以上屬於軟體供應鏈的模式,如圖17所示。由於外包關係,受害單位很難知道自己使用的系統程式碼是否洩露,並且我們已發現我國多個關鍵基礎設施單位的系統程式碼存在著類似的安全風險,因此我們建議相關大型企業、單位聯絡我們進行進一步的系統程式碼洩露核查。

 DevOps風險測繪之程式碼篇

圖17  透過外包專案進行網路攻擊(關係圖)

六、總結

出於網路安全和保護隱私等方面,大部分DevOps團隊都會選擇自建程式碼倉庫進行協同開發合作(如GitLab、Gogs、Gitea、Gitblit等)。透過研究,我們發現我國存在大量暴露的Gogs、Gitea和Gitblit資產,且部分暴露的資產存在著嚴重的脆弱性漏洞(如RCE、未授權訪問漏洞等)。這些存在漏洞的程式碼管理工具可能會導致敏感資料洩露、專案原始碼洩露及軟體供應鏈投毒攻擊等安全風險。同時我們還發現上述暴露的資產90%以上歸外包開發商所有,這進一步加大了對自身程式碼洩露進行排查的難度。

 

Gartner報告指出[7],到2025年全球45% 組織機構的軟體供應鏈將遭到攻擊,這個資料將會是2021年的三倍。而在DevOps流程中,開發團隊會使用各種各樣的供應鏈軟體,因此DevOps安全值得引起我們所有人的注意。程式碼開發協同合作是DevOps流程中非常重要的一環,而原始碼又是程式碼開發協同合作中的核心,原始碼安全不僅會直接對相關企業單位造成嚴重影響,也會對國家整體網路安全造成極大的威脅,因此保護好原始碼安全就是保護好DevOps流程安全的關鍵。

 

參考文獻

[1] https://www.digite.com/blog/introduction-to-devops/

[2] https://thedevopsinstitute.com/?page_id=22

[3] https://gogs.io/docs

[4] https://docs.gitea.io/zh-cn/

[5] http://gitblit.github.io/gitblit/index.html

[6] https://www.solarwinds.com/sa-overview/securityadvisory

[7] https://www.gartner.com/en/documents/4003625


相關文章