目录
目录README.md

关键软件生态漏洞传播分析

背景

近年来,开源软件数量迅速增长,开源软件之间形成了复杂的依赖关系网络,软件供应链的安全问题也因此越来越受到广泛关注。关键软件中的漏洞对整个软件生态系统的安全造成严重威胁。本赛题聚焦于一个非常重要的研究方向——漏洞传播分析。基于已披露的特定漏洞及其在开源代码中的位置,对漏洞在软件供应链中造成的实际影响进行生态分析,以期对开源软件供应链的安全风险进行更准确的评估。

开源软件供应链通常指软件之间形成的复杂依赖网络。其中,如果一些关键的上游节点受到漏洞攻击,漏洞会随着供应链向下游传播,影响整个软件生态系统。这样的例子不胜枚举。2014年,OpenSSL爆出了Heartbleed漏洞,该漏洞可被利用控制目标计算机,导致敏感信息泄漏。OpenSSL是一个知名的开源安全套接字层密码库,广泛用于许多关键信息系统,如网银、在线支付、电商网站、门户网站和电子邮件等互联网应用,以实现数据的安全传输和存储。Heartbleed被称为互联网安全历史上最严重的漏洞之一,当时全球三分之二的网站可能受到该漏洞的攻击。

2021年12月10日,Apache开源项目Log4j的远程代码执行漏洞细节被公开。Apache Log4j2被广泛用于业务系统开发,用于记录日志信息。大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。由于Apache Log4j2的某些功能存在递归解析功能,攻击者可以直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经安全团队验证,可能受影响的应用包括但不限于Spring-Boot-starter-log4j2、Apache Struts2、Apache Solr、Apache Flink、Apache Druid、Elasticsearch、Flume、Dubbo、Redis、Logstash和Kafka等众多组件与大型应用。

早期针对开源软件供应链的研究主要集中在软件包之间的依赖关系上,但基于包级别的分析存在很大的不确定性。对于漏洞传播分析而言,很多下游软件包即使直接或间接依赖于漏洞包,实际上也不会触发漏洞,因为并没有调用漏洞函数。因此,近年来的研究逐渐关注文件级别、方法级别,甚至更细粒度的分析。对于漏洞传播的静态分析而言,如果能实现方法级别的判断,已经能在很大程度上减少误报。但目前这方面的研究还比较有限,存在一些共同的局限。首先,方法级别的节点关系构建有语言区别,不只是方法间的调用关系,在Java中还可能存在继承关系(父类调用了漏洞函数,子类没有调用)。其次,一旦进行方法级别的分析,软件供应链中的节点数量将会比包级别大好几个数量级,这必然导致查询效率低下甚至路径爆炸的问题。

任务

本赛题要求参赛者选择有趣、对开源实践有指导意义的题目进行研究。针对一个关键生态的软件包进行手动、半自动或全自动的漏洞传播分析和漏洞影响分析,并撰写分析报告。参赛者可以自行选择完成以下全部或部分问题。

  1. 构建方法级别的细粒度供应链,支持漏洞传播的可达性分析(即漏洞不止通过函数调用传播,还需要考虑其他可能的路径,如背景中提到的继承关系)。
  2. 由于一个包含有的方法数量可能成千上万,在供应链场景下方法数量将会进一步放大。提出方法解决细粒度漏洞传播分析(实际上是一个图的查询问题)中的节点爆炸和路径爆炸问题。
  3. 构建分析指标衡量漏洞传播的影响,指标可以包括但不限于传播范围、传播路径长度、细粒度与粗粒度传播可达性的对比、是否传播到重要的软件包等。

数据集

相较于传统的JAVA或Python关键项目分析,我们更关注研究较少的C/C++语言以及操作系统相关的项目,因此我们收集了一些2019年到2024年之间的相关开源项目的CVE漏洞作为参考,存储于本项目仓库dataset目录下(数据集名称为cve_data.csv),其中提供了相应漏洞的CVE_ID、开源仓库地址、修复的commit记录、漏洞发生的文件、函数名以及具体的函数定义,参赛者可根据这些信息构建起对应项目的细粒度供应链(即需要包括包级别、文件级别、函数级别的依赖),并对漏洞函数对于下游项目的影响(也即漏洞的传播)进行分析,直接依赖和间接依赖都应该在研究范围内。

当然,参赛者也可以自行查找并补充近几年披露的其他操作系统关键项目中产生的漏洞作为研究数据,漏洞数据可从CVE或NVD官方网站获取,对应的漏洞发生位置可查看漏洞下方的修复记录,需要注意有些最新的漏洞可能没有修复,我们的研究重点在于漏洞传播,因此只需要关注那些能找到具体发生位置的关键项目漏洞即可,漏洞定位并不是我们的关注点。

参赛要求

代码

为了帮助评委和之后的科研工作者理解、复用,我们要求数据爬取、清洗、图建立、图查询、图优化、可视化等步骤的代码需要在GitLink平台开源。代码仓库中需要包含一份简要的README文档,包括:

  • 文件结构
  • 如何配置运行环境
  • 如何运行代码,得出报告中呈现的结果

报告

报告中需要包括以下内容:

  • 研究问题的背景和研究价值
  • 数据来源、数据集及数据版本
  • 数据爬取、数据清洗、图构建以及图查询方法
  • 漏洞传播分析
  • 实验结果及启示

报告要求使用IEEE会议双栏格式(如果使用LaTex,在文件开头加上\documentclass[10pt,conference]{IEEEtran};如果使用Word,可以从IEEE网站找到模板文件),正文部分(不包括引用)不超过4页全文不超过5页

关于
389.4 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号