开源软件漏洞安全风险分析

二、开源软件认识误区

(一)开源软件等于免费软件

开源软件要求软件发行时附带源代码,但并不意味着它就一定是免费的;同样免费软件也只是软件免费提供给用户使用,但并不一定是开源的。

(二)开源软件可以随便使用

每一个开源软件都需要包含开源许可证去规定开源软件的使用范围和权利义务,开源软件并非完全没有限制可以随意使用,其最基本的限制就是开源软件强制任何使用和修改该软件的人承认发起人的著作权和所有参与人的贡献。

开源软件的许可证比较繁多而且复杂,经常遇到的开源许可证主要有GPL和BSD两种。如果不恰当地使用开源软件,未能充分理解和研究许可证规定的权利和义务,往往会埋下知识产权的风险隐患,甚至会被强制要求公开自家产品的私有代码。

(三)开源软件比闭源软件安全

开源不能作为判定软件产品安全与否的指标,开源并不意味着一定安全。事实上,近年来开源软件的安全性事件频发,也打破了人们传统观念中的“开源等于安全”的认知。根据Snyk公司发布的《2019 年开源安全现状调查 告》显示,“过去两年内应用程序的漏洞数量增长了88%,仅2018年包管理器(NPM )的漏洞数量就增长了47%”。

开源软件具有开放、共同参与、自由传播等特性,一方面由于开发者自身安全意识和技术水平不足容易产生软件漏洞,另一方面也无法避免恶意人员向开源软件注入木马程序进行软件供应链攻击等安全风险引入行为。

图1 开源组件的使用频率

(二)难以分辨商业产品中的开源成分

从软件产品的使用者角度来看,企业购买的很多商业软件往往是开源软件的商业版或者发行版。如果用户没有明确地提出要求,商业软件供应商一般不会说明其产品中是否涉及开源组件,甚至对用户宣称是完全自主研发,导致用户的信息系统中被动地引入了开源软件。例如, 称自主开发的某某浏览器,经过专业测试后却发现其内核是开源软件Chrome。

从软件产品供应商的角度来看,当前的软件开发模式中包管理器替程序员做了很多他并没有意识到的决定,使得商业软件中引入开源软件的数量难以做到完全准确的统计。更有甚者,部分企业在软件开发过程中,对开源软件的使用比较随意,管理者常常不清楚自己的团队在开发过程中使用了哪些开源软件,就连程序员自己也无法完整地列出开源软件使用清单。等到商业软件流转到用户手中后,系统的运维人员更是无法完全知晓正在运行的软件产品中是否包含了开源软件,包含了哪些开源软件,这些开源软件是否存在安全漏洞等,这就无形中给企业的信息系统带去了安全风险。

(三)谁该站岀来为开源软件安全负责

随着大型软件开发过程中,开源组件的占比越来越高,加之软件开发人员往往只关注自己开发的那部分代码的安全性,忽视了采用的开源组件的安全质量,最终导致成型软件产品的系统安全问题越来越多。根据Snyk公司2019年的调查 告,81 %的用户认为开发者应负责开源软件的安全性,如图2所示。

四、开源软件漏洞安全分析

由于开源软件使用与获取的便利性,加之部分软件开发人员的安全意识淡薄,可能导致忽略开源软件带来的风险。总体来看,开源软件存在的安全问题比较严重,安全漏洞是主要的问题,软件供应链攻击呈现上升趋势,同时缺少系统的安全审查机制。

(一)开源项目维护者的安全意识和技术能力参差不齐

奇安信代码安全实验室发起“开源项目检测计划”,通过对3000余款使用比较广泛的开源项目进行检测,发现所有检测项目的总体平均缺陷密度为14.22/ KLOC,高危缺陷密度为0.72/KLOC。路径遍历、空指针相关、密码管理、跨站脚本XSS、注入类缺陷、XML外部实体注入、缓冲区溢出、资源管理、HTTP响应截断、日志伪造等是开源软件主要的安全风险。

2019年,Unit42安全团队分析了 24000多个公开的GitHub开源项目,共识别出2328个硬编码密码,2464个API密钥和1998个OAuth令牌。对于关系 会安全稳定的企业单位,如银行等金融机构,信息系统中如果采用了上述的开源组件将会对 会经济安全造成恶劣的影响。图3中的这段代码[5]来自一个开源系统,它硬编码了用于支付的私钥,通过反编译可以直接查看相关配置数据。

在密钥管理中最常见的错误,就是将密钥硬编码在代码里。一旦攻击者获得密钥,再通过审计分析支付系统的加密算法就可以破译所有的加密数据。

图3 用于支付的密钥被硬编码在源代码中

(二)越来越多的黑客组织开始盯上开源软件

软件生产过程中,代码复用程度越来越高,各种开发包、核心库的应用越来越广泛。很多黑客组织也意识到了这一点,逐渐把目光放在了开源软件上,利用开源代码植入后门。这些代码的复用度越高,其中的后门影响范围就越广,从而实现对软件供应链上游的攻击。

2019年8月,Webmin被爆存在高风险远程命令执行漏洞,根据Webmin开发人员的说法,该漏洞不是编码错误的结果,而是“恶意代码注入受损的构建基础架构中”导致的。Webmin是一个用于管理Linux和UNIX系统的基于Web的开源软件,互联 上大约有13万台机器使用Webmin。根据Shodan搜索引擎收集到的统计数据显示,有近10万台服务器曾运行过存在“后门代码”版本的Webmin软件,对整个互联 安全造成了巨大的影响。

(三)开源软件缺少系统的代码安全审查机制

美国最先认识到开源软件安全问题的重要性,早在2006年美国国土安全部就开展过“开源软件代码测试计划”,对大量开源软件进行安全隐患的筛选和加固。

根据Snyk公司的 告显示,37%的开源开发者在持续集成(CI )期间没有实施任何类型的安全测试,54 %的开发者没有对Docker镜像进行任何的安全测试。

开源代码中不断发现新的安全漏洞,而很多项目没有查找并修复漏洞的响应机制。开源项目的安全记录方式也没有明确的标准可以遵循,GitHub上排名前40 万的公共代码库中,仅2.4%的项目有安全文档。

开源软件在实际的流通过程中,各个环节间缺乏系统的安全审查机制,部分企业内部也缺少必要的安全检测要求和规范,导致一旦底层开源组件出现安全漏洞,这些问题组件将传染给哪些商业产品、影响哪些业务领域,没人能给出一个准确的答案。

六、结语

开源软件已经成为 络空间的重要基础设施,应积极开展开源软件源代码检测工程,推动建设开源软件安全治理体系,形成软件安全渗透测试的长效机制。

推荐阅读

2020年十大开源漏洞回顾

GitHub 发布 Octoverse 开源软件安全趋势 告(超详)

RiskSense Spotlight:全球知名开源软件漏洞分析 告

BCS 2019议题分享|开源软件安全实践与思考

题图:Pixabay License

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

   

开源软件漏洞安全风险分析 觉得不错,就点个 “在看” 或 “赞” 吧~

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月17日
下一篇 2021年1月17日

相关推荐