作者简介:汪杰,开源安全治理解决方案专家、系统架构师、分析师,拥有十余年的安全开发经验,对SCA相关产品和技术实现原理均有深入研究,现任开源网安SourceCheck产品负责人。
一、开源背景
随着社会数字化进程的不断推进,开源技术被广泛应用于各个行业,推动产业的快速发展。毫无疑问,开源技术的应用有诸多好处,企业可以免费获取开源软件,以更低成本加快项目进度。而且开源软件大多数由开源社区支持,能一定程度上保证软件质量。同时,企业可以借助它快速占领市场,实现商业目的。
技术是一把双刃剑,不当使用开源技术也会带来大量风险。据统计,99%的项目使用了开源软件,其中有77.5%的项目存在开源软件漏洞,每个项目平均有52.5个漏洞。从许可合规的角度来看,65%的代码库存在许可证冲突,85%的代码库包含4年未更新的开源组件。
此外,近几年开源应用安全事件的频发也造成重大影响。年12月,SolarWinds遭遇国家级APT团伙高度复杂的供应链攻击;超过家客户全部受到影响,可任由攻击者完全操控。年11月,代码质量管理平台SonarQube被爆存在未授权访问漏洞;国内外数万家企业的敏感数据泄露,重点应用代码泄露。年11月,广泛应用的开源组件Log4J被曝存在超危漏洞;72小时内受到84万次攻击,国内外知名企业均受到重大经济损失,相关网络攻击至今仍在继续。
针对开源技术的风险,业内也越来越重视,相关的开源技术监管工作已全面铺开。许多金融行业、通讯行业、科技制造业的企业已自发组成生态联盟,建立起相关开源治理的信息通道。中国信通院也在积极联合安全厂商和标杆企业,共同发布开源治理白皮书、开源治理工具评估等一系列指导标准,以促进行业的可持续发展。
二、开源治理思考
1.开源检测技术思考
如何知道应用中使用了哪些开源组件,可以从五个方面来考虑。
检测技术多样性:根据软件形态可以将检测技术分为源代码检测和二进制检测两种技术。其中源代码检测又可以细分两类,一类是有包管理器管理的软件,能迅速能检测到一些依赖关系。一类是无包管理器管理的检测技术,如C/C++语言,这类技术可以根据源码目录结构、部分代码特征指纹等来提取使用的开源组件信息,利用代码片段指纹信息的提取与匹配技术,能找出代码中拷贝的第三方开源成分的代码。
编程语言众多:据不完全统计,全世界有多种编程语言,常用的语言大概有20多种,要想精准检测每种语言,必须要有特定的检测技术,针对每种语言的包管理器的技术、语法、编译原理等来提取代码特征和二进制特征。
文件格式多:不同语言的自身特点,加上编译环境的差异,在不同应用场景下就会有很多格式。如安装包格式、二进制文件格式、移动应用格式等。
检测场景多样性:不同的机构对开源的使用和检测场景不一样,大致可以分为三类。第一类,一些第三方检测、评测等机构一般都使用单个应用包上传检测的方式;第二类,有较完善的研发流程体系的企业,一般倾向于自动化,集成企业现有的平台或者工具,比如像源代码管理工具、持续集成工具、缺陷管理工具等实现研发过程的检测;而有一些企业,不