复旦CodeWisdom团队发布开源风险治理平台“伏羲”

点击蓝字 关注我们

当前,开源软件已经上升为国家级战略,对于信创和软件产业、国民经济、国防与国家安全等发挥着重要的支撑作用。为此,全球多国陆续发布开源软件规划与政策。2021年11月,我国工信部印发的《“十四五”软件和信息技术服务业发展规划》明确提出:开源已覆盖软件开发的全域场景,正在构建新的软件技术创新体系,引领新一代信息技术创新发展,全球97%的软件开发者和99%的企业使用开源软件,基础软件、工业软件、新兴平台软件大多基于开源,开源软件已经成为软件产业创新源泉和“标准件库”。

开源软件之间存在着非常复杂的依赖关系,即一个开源软件通过源代码拷贝、源代码二次开发、组件依赖引用等方式复用并依赖于其它开源软件,构成了复杂的开源软件供应链。然而,由于开源软件生态以及开源软件供应链日益复杂,开源软件的大范围使用也给软件产品的可信性带来了巨大的影响。开源软件供应链上的任何一个开源软件都有可能存在安全漏洞、许可证、兼容性等问题,严重提高了软件产品使用开源软件的安全风险、法律风险、维护风险。近年来,由此造成的软件供应链事故也频繁发生(如图1所示)。

0f3e4536b5efeb771fc698ed27ed1d09.png

 图1 软件供应链事故频发

为了解决上述问题,复旦大学软件工程实验室软件供应链治理小组近5年来开展了一些研究工作,并沉淀和推出了开源风险治理平台伏羲(如图2所示),旨在推动学术与合作交流,同时提高开源风险的治理水平。当前首次发布的版本主要支持Java和Go语言的组件依赖分析(即软件物料清单分析)与组件级漏洞传播影响分析,以及PyPI和NPM生态投毒检测,并支持GitHub账户的关联以及GitHub项目仓库的导入分析。当前版本还构建了Java 和Go语言的高质量漏洞库与组件库。

b8948f2dcc5ddacb4d8233275f7d579e.png

图2 开源风险治理平台伏羲

伏羲的访问网址是www.se.fudan.edu.cn/fuxi,试用用户可以联系我们fuxioss@163.com获取邀请码注册;有问题也可以通过上述邮箱联系我们。

01

功能概述

组件依赖分析

伏羲通过对Java项目中pom.xml文件的扫描、Go项目中go.mod文件的扫描,实现对直接/间接开源组件依赖的全量检测。

漏洞传播影响分析

伏羲通过构建项目的组件依赖树信息,结合漏洞库中的漏洞影响组件版本信息,实现漏洞在组件依赖树上的传播影响分析。

生态投毒检测

伏羲通过对PyPI和NPM上新发布的组件版本进行实时监控与分析,共计发现了229个已确认的恶意PyPI组件和136个已确认的恶意NPM组件。

漏洞库

伏羲通过半自动校验的方式构建了高质量开源漏洞库,共计收录了2867个开源软件安全漏洞,直接影响的组件覆盖了1622个 Java组件和416个Go组件。

组件库

伏羲对Maven、Go Package、Python Package Index上托管的组件进行了全量下载,共计收录了522729个Java组件(共10186133个组件版本)、866559个Go组件(共13450236个组件版本)、405349个Phthon组件(共3956724个组件版本)。

02

案例演示

我们将以 GitHub 上的 Go 项目 kubernetes v1.23.15(将其fork为k8s-kubernetes)作为案例,演示伏羲的功能和操作流程。

2.1  GitHub账户关联

用户可以通过GitHub账户实现授权绑定(如图3所示),从而可以实现GitHub上托管项目的导入与分析。

895b2f8d975ddcd93e2695b6d7a19fce.gif

图3  GitHub账户关联

2.2   GitHub项目仓库导入与分析

通过授权绑定的GitHub账户,可以读取到GitHub账户下所有的项目仓库信息。用户通过添加项目仓库,可以实现项目仓库的在线检测(如图4所示)。检测时间依赖于项目仓库的复杂程度,在几秒到几分钟不等,待检测结束后输出安全风险分析报告。

e188a2bbf530f09db246f566f76e5749.gif

图4  GitHub项目仓库导入与分析

2.3   项目安全风险分析

项目安全风险分析报告包括:项目中通过漏洞组件引入的漏洞数量、组件依赖清单(即软件物料清单SBOM)、组件漏洞列表、以及组件漏洞风险(如图5所示)。可以看到,k8s-kubernetes项目通过5个漏洞组件引入了6个高危漏洞,通过2个漏洞组件引入了3个中危漏洞。

353bcb21377e24ee2e0dff548ff85e25.gif

 图5 项目安全风险分析报告概览

图6展示了k8s-kubernetes项目的组件依赖清单。可以看到,k8s-kubernetes直接依赖了systemstat、azure-sdk-for-go、k8s-cloud-provider等组件,并间接依赖了mocks、logger、tracing等组件。同时,在组件依赖清单上标识了通过组件所引入的漏洞数量。

c8db4e1a053a66d193dedbd8e1aea7a5.png

 图6 项目组件依赖清单

图7展示了组件漏洞风险。可以看到,k8s-kubernetes通过5个间接依赖组件引入了6个高危漏洞和3个中危漏洞。例如,组件golang.org/x/crypto@v0.0.0-20210817164053-32db794688a5引入了2个高危漏洞CVE-2021-43565和CVE-2022-27191。这两个漏洞的传播链(即组件依赖链)为golang.org/x/crypto@v0.0.0-20210817164053-32db794688a5 -> github.com/Azure/go-autorest/autorest/adal@v0.9.13 -> k8s-kubernetes。

b810f99be255a26dc8fcaabf1ec6156f.gif

  图7 项目组件漏洞列表与组件依赖链

2.4 生态投毒检测

图8展示了伏羲在PyPI和NPM生态中检测到的恶意组件列表,包括组件名称、组件发布时间、检测时间、恶意行为描述、以及组件下载量。可以看到,伏羲在组件发布后立即检测其恶意行为,并上报给PyPI和NPM官方,尽可能早地防止恶意组件进入生态。PyPI和NPM官方都确认了这些恶意组件,并将其下架(如图9所示)。

79b4e94eae6e5c9c4aaf1a392b3a3b36.gif

 图8 PyPI和NPM生态的恶意组件

a5bafca0d1557c7f16e339db553bece0.png

图9 恶意组件官方确认信

2.5  漏洞库

图10展示了伏羲的漏洞库,目前覆盖Java和Go语言,并通过人工确认的方式提高了漏洞库的质量(如漏洞影响组件版本信息等)。

5935db273fc3cdd624d61f7341454bde.png

图10 漏洞库列表

2.6  组件库

图11展示了伏羲的组件库,目前覆盖Maven、Go Package、Python Package Index上托管的组件。

b1b0f0dd904fe646b0eab01a04ee6760.png

 图11 组件库列表

03

版本发布计划

伏羲目前尚处于起步阶段,集成了简单的组件级漏洞传播影响分析。下一版本将持续优化组件级漏洞传播影响分析,并将集成Java、Go、Python语言的函数级漏洞传播影响分析(即漏洞可达性分析)、以及更多生态的组件投毒检测与监控。

04

致谢

伏羲的首次发布离不开陶紫信、郭锦、陆宸昊、严轶轩、魏入磊、吴苏晟、曹毅恒、周卓彤、张峻安等同学的不懈努力和坚持,同时也得益于王颖、施博文、许聪颖、谢隽丰等毕业生的前期工作!特别感谢Scantist联合创始人、新加坡南洋理工大学刘杨教授参与指导!

                                    复旦大学CodeWisdom团队

作者:陈碧欢、黄凯锋、彭鑫

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值