DevOps风险测绘之代码篇

一、简介

  • DevOps流程简述

DevOps是Development和Operations组合的缩写词,它指的是一种协作方法,使企业的应用程序开发团队(Development team)和 IT 运营团队(Operations team)能够更好地沟通工作,DevOps的概念有助于使技术项目与业务需求保持一致,从而提高企业整体的工作效率[1]。如图1所示[2],DevOps流程主要会涉及8个步骤,分别是:计划(PLAN)、编码(CODE)、编译(BUILD)、测试(TEST)、发布(RELEASE)、部署(DEPLOY)、运营(OPERATE)和监控(MONITOR)。

图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个。

图2  Gogs国内暴露资产分布图(地区维度)

如图3所示,国内暴露的Gogs资产使用的端口主要为3000和443,共占总数的93%,其中3000端口暴露量最多,共计3849个,占比83%。

图3  Gogs国内暴露资产分布图(端口维度)

如图4所示,国内暴露的Gogs资产协议为HTTP和HTTPS,分别占比86%和14%。

图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。

表1 Gogs CVE详情

除了公布的Gogs CVE漏洞之外,我们通过研究还发现部分Gogs资产存在着因错误配置而导致的未授权访问漏洞,攻击者可以匿名访问该资产的代码仓库并进行拷贝,如图5所示。

图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个。

图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个。

图7  Gitea国内暴露资产分布图(地区维度)

由图8可见,国内暴露的Gitea资产使用的端口主要为3000和443,占总数的96%,其中3000端口暴露量最多,共计2293个,占比78.5%。

图8  Gitea国内暴露资产分布图(端口维度)

如图9所示,国内暴露的Gitea资产协议为HTTP和HTTPS,分别占比82%和18%。

图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。

表2 Gitea CVE详情

除了公布的Gitea CVE漏洞之外,和Gogs类似,我们还发现了部分Gitea资产存在着因错误配置而导致的未授权访问漏洞,攻击者可以匿名访问该资产的代码仓库并进行拷贝,如图10所示。

图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个。

图11  Gitea暴露资产脆弱性情况

四、Gitblit资产风险测绘

  • Gitblit简介

Gitblit 是一个开源的纯 Java 堆栈,用于管理、查看和提供 Git 存储库,它是一款为希望托管集中式存储库的小型工作组设计的工具。Gitblit 可以用作没有管理控制或用户帐户的存储库查看器,也可以用作完整的 Git 堆栈,用于克隆、推送和存储库访问控制,同时Gitblit 可以在没有任何其他 Git 工具(包括实际的 Git)的情况下使用,也可以与用户已建立的工具配合使用[5]

  • Gitblit国内资产暴露情况

根据网络测绘数据,我们对2022年3月国内Gitblit资产暴露情况进行了统计,共计查询到1556个暴露的资产,下面将从地区分布、暴露端口和网络协议三个维度分别进行介绍。

如图12所示,国内暴露的Gitblit资产中约74%来源于北京市、广东省、上海市和浙江省;其中北京市暴露资产数量排名首位,暴露的Gitblit资产达到359个。

图12  Gitblit国内暴露资产分布图(地区维度)

由图13可见,国内暴露的Gitblit资产使用8443端口最多,占比48%,其次是8080端口,占比14%。

图13  Gitblit国内暴露资产分布图(端口维度)

 

如图14所示,国内暴露的Gitblit资产协议为HTTP和HTTPS,分别占比52%和48%。

图14  Gitblit国内暴露资产分布图(协议维度)

  • Gitblit国内资产脆弱性情况分析

类似于Gogs和Gitea,我们也发现Gitblit存在着同样因错误配置而导致的未授权访问漏洞,攻击者可以匿名访问该资产的代码仓库并进行拷贝,如图15所示。

图15  存在未授权访问漏洞的Gitblit资产

针对于上述暴露的1556个Gitblit资产,我们对该未授权访问漏洞进行了验证,共计发现约602个Gitblit资产存在漏洞,存在着较大的安全隐患。

五、安全风险及建议

  • 安全风险

通过对自建代码仓库Gogs、Gitea和Gitblit的风险测绘研究,我们可以发现暴露资产中存在着较大的安全隐患。目前我们已发现的潜在安全风险有:1. 敏感数据泄露;2. 项目源代码泄露;3. 软件供应链投毒攻击。

敏感数据泄露:通过利用上文漏洞,攻击者可以窃取部分Gogs、Gitea和Gitblit资产中的敏感数据,示例见图16。

图16 敏感数据泄露示例

项目源代码泄露:源代码是控制系统的最底层逻辑,通过代码审计可以发现系统中存在的缺陷,攻击者会通过缺陷对系统进行攻击。通过利用上文漏洞,攻击者可以成功窃取部分Gogs、Gitea和Gitblit资产中的源代码。

软件供应链投毒攻击:通过利用上文漏洞,攻击者可以增删改部分Gogs、Gitea和Gitblit资产中的代码,可能会导致供应链投毒攻击,类似于solarwinds事件[6]

  •  安全建议

源代码泄露的危害不可小觑,任何企业和组织机构都不会希望自己的代码落入他人之手,对于开发团队我们建议:

  1. 及时更新软件版本。
  2. 尽量将资产使用的端口放在内网IP地址,避免直接暴露在互联网。
  3. 避免将敏感数据存放到代码仓库。

同时我们发现上述暴露的资产90%以上属于软件供应链的模式,如图17所示。由于外包关系,受害单位很难知道自己使用的系统代码是否泄露,并且我们已发现我国多个关键基础设施单位的系统代码存在着类似的安全风险,因此我们建议相关大型企业、单位联系我们进行进一步的系统代码泄露核查。

图17  通过外包项目进行网络攻击(关系图)

六、总结

出于网络安全和保护隐私等方面,大部分DevOps团队都会选择自建代码仓库进行协同开发合作(如GitLab、Gogs、Gitea、Gitblit等)。通过研究,我们发现我国存在大量暴露的Gogs、Gitea和Gitblit资产,且部分暴露的资产存在着严重的脆弱性漏洞(如RCE、未授权访问漏洞等)。这些存在漏洞的代码管理工具可能会导致敏感数据泄露、项目源代码泄露及软件供应链投毒攻击等安全风险。同时我们还发现上述暴露的资产90%以上归外包开发商所有,这进一步加大了对自身代码泄露进行排查的难度。

Gartner报告指出[7],到2025年全球45% 组织机构的软件供应链将遭到攻击,这个数据将会是2021年的三倍。而在DevOps流程中,开发团队会使用各种各样的供应链软件,因此DevOps安全值得引起我们所有人的注意。代码开发协同合作是DevOps流程中非常重要的一环,而源代码又是代码开发协同合作中的核心,源代码安全不仅会直接对相关企业单位造成严重影响,也会对国家整体网络安全造成极大的威胁,因此保护好源代码安全就是保护好DevOps流程安全的关键。

参考文献

版权声明
本站“技术博客”所有内容的版权持有者为绿盟科技集团股份有限公司(“绿盟科技”)。作为分享技术资讯的平台,绿盟科技期待与广大用户互动交流,并欢迎在标明出处(绿盟科技-技术博客)及网址的情形下,全文转发。
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。

Spread the word. Share this post!

Meet The Author