开源盛世:谈谈开源代码的使用与安全风险

本文最早于2020年5月18日发表于鉴释公众号。原文标题为:抓住“开源盛世“,这个工具你必须了解一下。

开源的现状与潜在使用风险

近些年来,开源技术的发展如火如荼,逐渐渗透到软件开发的各大领域,俨然“开源盛世“,市场一片繁荣。开源软件帮助企业或组织大大缩短发布周期、更快的推出创新产品。但同时,开源软件自身质量问题、潜在的风险问题却不容忽视。我们该如何面对开源软件带来的代码质量、安全漏洞、软件许可证等问题,以免“城门失火,殃及池鱼“?

开源的好处知多少

开源是指计算机程序,其源代码或文档可供公开获取和自由使用,或者对原始设计进行修改、编辑,并在软件许可协议的约束下使用或者重新发布,以用于任何目的(包括商业目的)。

  1. 开源促进了软件开发的分工越来越细化,软件逐渐模块化。这让任何组织或个人都可以贡献开源软件,免费供其他人使用,作为其它软件的一个模块。软件开发,不再是闭门造车,一切从零开始,完全可以基于开源软件进行自由“组装”,避免重复”造轮子”,从而大幅度提高开发效率。
  2. 知名的开源代码多数情况下有业界高水平研发人员的参与,这就好比“站在巨人的肩上”,开发者借助开源组件,像搭积木一样,快速构建新的应用,让企业把主要精力专注于创新。有个笑话说,初级工程师,代码自己写;高级工程师,英文+搜索。细思不无道理,大到基础模块,小到一段排序算法,在开源的世界里,常常能获得意想不到的惊喜,或拿来就用,或参考借鉴。
  3. 与传统软件的“闭门造车”不同,开源软件还借助社区的力量,汇聚全球程序员的智慧,在合作开发、协同解决问题等方面具有无可比拟的优势。

正是由于开源软件的免费、共享和协同等优点,促进了开源的蓬勃发展,进入“开源盛世”。

开源软件的安全和合规风险

开源免费,不用白不用。然而,开源更像一匹难以驾驭的野马,复杂的代码库、难以评估的代码质量,错综复杂的依赖关系,风险扑面而来。这主要体现在开源软件的安全性和合规性两个方面:

  1. 开源软件可能存在安全漏洞。开源代码,人人可见,开发者很容易获得,嗅觉灵敏的黑客也能从代码中获取容易被利用的攻击点。CWE高危漏洞,既在警示开发者注意编码的安全,同时也是黑客最容易利用的地方。近几年来,开源软件频频爆出高危漏洞,连广泛应用的OpenSSL、Strusts2等都未能幸免。勒索病毒的赎金也是一路高歌。根据静态代码分析工具爱科识(Xcalscan)的扫描报告显示,OpenSSL仍存在高风险bug 高达三位数!提到OpenSSL的安全漏洞心脏出血(Heartbleed)[1],相信开发者的心脏仍然会怦怦跳。此漏洞主要是通过模拟向服务器端发送自己编写的Heartbeat心跳数据包,如果payload_length大于HeartbeatMessage,就会在服务器返回的response响应包中产生数据溢出,造成用户隐私数据泄露。而数据溢出这种错误类型在爱科识(Xcalscan)的扫描报告中均有报出。由于这类开源软件处于信息系统的底层,很容易出现多米诺骨牌效应,引起行业的连锁反应,因此漏洞带来的安全危害非同一般。安全领域攻击和防御的大戏,一直在上演。作为开源软件的使用者,任何人都不能置身事外、独善其身。

  2. 开源软件可能存在合规性风险。大多数开源软件遵循一定的开源许可协议,这就要求用户在使用过程中应当严格遵守其许可证(License)的各项义务和要求,否则就是违规使用。严重时,合规性风险会导致法律诉讼,产品召回,甚至被迫开源自有知识产权的代码等,这些事件对公司的声誉、市场竞争力都会带来负面影响。

主动应对开源风险

Gartner最近进行的一项调查显示,90%以上的受访者表示他们依赖开源软件[ 2]。然而,不少公司对开源软件的使用非常随意,拿来主义,不求甚解,管理者甚至不清楚自己的团队都使用了哪些开源软件,开发者也无法完整列出使用到的开源软件、版本及许可协议等。开源软件一旦曝出质量问题或安全漏洞,用户连自己是否用了都不知道,怎么可能去防范和修复呢?为了更好的利用开源软件,促进业务的可持续发展,我们需要合理的开源风险应对策略。

  1. 对所使用的开源软件进行主动管理。“开源盛世”,开源代码已经无孔不入,不仅可以由内部开发人员引入,也可能通过第三方供应商和外部开发团队引入,还可能通过第三方依赖库间接被引入。这就要求企业管理者首先要了解自己的团队都用到了哪些开源代码;再来是评估这些开源代码的安全风险。
  2. 密切跟踪核心开源软件的更新,还需要主动关注风险漏洞披露。与商业软件不同,开源软件不会把更新、补丁等自动推送给用户,所以用户就得眼观六路、耳听八方,自行跟踪开源软件的漏洞、修复和更新。
  3. 对核心模块进行定期的代码审计。与动态安全测试、渗透测试等相比较,静态代码审计是面向质量和安全编程的第一道防线。软件外包的形式被越来越多的企业使用,然而在执行过程中,对购买方来说,验收绝对是个考验。企业其实很难对交付代码的质量进行客观评估,这为日后的代码维护埋下巨大隐患。静态代码分析工具,你一定要了解一下!这个工具作为公正的第三方,对代码质量、代码安全给出客观的评估,为交付验收提供重要依据。

总之,要培养“质量第一、安全至上”的思维模式[3],永远不要忽视开源或合作伙伴代码中的风险。代码集成之前,务必通过静态代码分析工具查一遍,确保风险可知可控。

结论

在中国,开发人员搭乘“开源盛世”的快马,通过使用灵活敏捷的创新方法取得了成功。伴随业务发展及海外市场的扩展,我们必须熟知开源使用的利与弊,审查开源带来的风险,采取必要的措施,确保高质量和安全合规的产品,避免在海外业务扩张的过程中遭遇滑铁卢。使用静态代码分析工具逐渐成为一种行业趋势,这是最直接、最有效的代码审计和安全评估工具,没有之一。将静态代码分析工具引入到SDLC或Devops,逐渐成为软件企业的标配,并将在开源管理、软件外包服务管理、生态控制、自有代码质量管理等多个方面发挥越来越重要的作用。

参考资料

[1]:https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2014-0160 (ENG)
[2]: https://resources.whitesourcesoftware.com/blog-whitesource/gartners-software-composition-analysis-report (ENG)
[3]:https://xcalibyte.com.cn/blogs/quality-first-mindset-cn/ (CHI)

猜你喜欢

转载自blog.csdn.net/tracy_cui/article/details/107126934