本文最早于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)

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

  1. 抓住“开源盛世“,这个工具你必须了解一下

    过去的五年中,开源技术的发展和应用如火如荼,逐渐渗透到软件开发的各大领域,俨然"开源盛世",市场一片繁荣.开源软件帮助企业或组织大大缩短开发周期.更快的推出创新产品.利用开源软件现 ...

  2. 开源盛世 Linux 资源导航 —★—

    开源盛世 Linux 资源导航 -★-     致Linux世界的朋友 Linux 是操作系统中生命力极其旺盛的一朵奇葩  它能够给这个无穷的世界带来更多的璀璨      -------------- ...

  3. 陌陌安全开源了 Java 静态代码安全审计插件

    近日,陌陌安全开源了 Java 静态代码安全审计插件 MOMO Code Sec Inspector,侧重于在编码过程中发现项目潜在的安全风险,并提供一键修复能力. MOMO 安全团队认为,绝大部分 ...

  4. 【程序员基础篇】开源中国私有库代码更新

    开源中国私有库代码更新 环境 expect bash 步骤 在开源中国新建私有库 脚本执行代码库更新 在本地web项目目录下添加远程库 在本地web目录下/Appliactions/XAMPP/htd ...

  5. 利用开源中国提供的代码仓库提高github下载速度

    利用开源中国提供的代码仓库 标题已经说的很清楚了,我想对于经常使用git的人来讲,很可能已经知道了.对于新手刚接触git的人来讲,可能你只知道github. 实际上,国内也有很多代码仓库提供方,国外也 ...

  6. 【杂谈】有三AI开源项目中的代码和教程,来学习的粉丝们应该要知道了

    我们的开源项目https://github.com/longpeng2008/yousan.ai早就存在了,但还是经常会遇到不知道这个项目的学习者.这个项目是我们目前唯一的技术性开源项目,里面包含适合 ...

  7. OceanBase首次阐述战略:继续坚持自研开放之路 开源300万行核心代码

    简介:在数据库OceanBase3.0峰会上,蚂蚁集团自主研发的分布式数据库OceanBase首次从技术.商业和生态三个维度对未来发展战略进行了系统性阐述.同时,OceanBase宣布正式开源,并成立 ...

  8. python支持向量机分类器怎么用_可视化SVM分类器开源实现的python代码

    如下的Python代码是可视化SVM分类器开源实现的python代码.这是个小巧又简单,却不一定满足大家高效要求的具有可视化功能的SVM分类器源码.是采用标准python写成的,但如果需要作图功能,则 ...

  9. 别熬夜加班了,Facebook 开源了一款代码推荐神器!| 程序员硬核评测

    近日,科技巨头 Facebook 开源了一款代码到代码的搜索和推荐神器--Aroma,开发者基于此可以轻松找到常见的编码模式而无需手动浏览多个代码片段. 作者 | Celeste Barnaby.Sa ...

  10. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

最新文章

  1. Datawhale组队学习周报(第005周)
  2. 深度学习和目标检测系列教程 21-300:deepsorts测试小车经过的时间和速度
  3. 使用SAP iRPA创建一个最简单的hello world项目并部署到SAP云平台上
  4. 查看是否打印GC收集细节
  5. javaSE视频教程正式启动
  6. 连续交付友好的Maven版本
  7. Domino Web开发规则之一:Notes命名规范
  8. java 需要返回类型_在Java中,当一个方法不需要返回数据时返回类型必须是
  9. mysql jdbc官方,mysql_jdbc
  10. Android-广播
  11. 后盾网html5视频教程全集观看下载
  12. 多传感器融合方法综述
  13. 医学信息学计算机技术,2017年医学信息学专业大学排名
  14. 基于支持向量机的图像分类系统(MATLAB GUI界面版)
  15. 这两天用鸿蒙开发板做了个“自动门锁”
  16. PoE供电技术与应用
  17. 心流_追求生命的意义
  18. 计算机视觉(十一):Keras Pipline与自定义模型
  19. 关于 Microsoft Teams 开发你需要知道的一切
  20. Aspect获取目标方法中带特定注解的参数值

热门文章

  1. 单片机 STC8H1K08-36I TSSOP20 - 低压检测
  2. 用c语言找最大素数,C语言实现寻找大素数
  3. 计算机病毒影响打印机,病毒捣乱影响网络打印机共享打印
  4. 大学生 大创 软著申请指南(图文含模板)(专用于大创,这篇就够了!纯干货!)
  5. [思维导图学习六] 常用的思维导图软件
  6. 台达伺服调试软件_万能机智能伺服油源调试说明
  7. HLS:硬件开发软件化
  8. 开源中最好的Web开发的资源
  9. 2022年上半年软件设计师常考概念
  10. 模糊局部信息c均值聚类算法(flicm)