聚焦源代码安全,网罗国内外最新资讯!

编译:代码卫士

开源软件存在多个高级别安全问题。最近,一名心怀不满的开发人员提交了故意修改的faker.js 和 colors.js 软件包版本,导致依赖于这两个软件包的“数千个项目”崩溃。有些人在考虑使用开源软件是否安全。当然,自从可使无数服务器遭远程利用的Log4j 漏洞爆发后,白宫已要求主要技术企业就软件安全进行讨论。

志愿者们编写的代码不如专业开发人员编写的安全吗?如果产品失败会起诉别人吗?你付钱后真的物有所值吗?

什么是开源?

正如认为所有闭源项目中都不存在bug 是错误的看法一样,认为所有开源项目都存在安全风险的认识也是错误的。不同项目的关注点各不相同,某些项目更注重发布的安全性。

Josh Berkus 基于结构,发现了五种开源项目类型:

  • 单人项目是某个个体的热情,或者最多是具有相同愿景的一些专职人员的热情。

  • 君主制项目是一个成功的单人项目,如 Linux 获得大规模社区贡献者的支持,因此其原始创建者充当仁慈的暴君。

  • 社区项目如 PostgreSQL 因社区目标相似而出现,因共识而前进。

  • 企业项目通常以商业项目的分叉形式发布,如 Sun 将 OpenOffice 发布为 StarOffice 的开源分叉,其方向由发布的公司指引。

  • 基金会是最正式的形式,它是一个独立的商业结构,Apache 或许就是最好的例子。Apache 的决策由管理委员会做出。

通常而言,单人项目最容易遭受安全风险。就像写作者可以以任何内容更新自己的网页一样,个体开发人员可以同样的方式更新代码。通常而言,社区对分叉单人项目没有足够的兴趣,因此这些项目就成为事实上的标准。Faker.js 和 colors.js 就是这样,Marak Squires 修改自己的代码,打印标记并进入无限循环。

开源和闭源项目的安全性取决于贡献者们的关注点,而非其结构。我们很幸运,因为 Linus Torvalds 将安全作为考量因素之一。Theo de Raadt 从一开始就考虑到 OpenBSD 的安全性。相反,StarOffice(商用)和 OpenOffice 中存在多个安全漏洞,可导致攻击者在 XML 文档中执行任意代码。

很多人的关注点在别处?

关于开源的一个讽刺是,认为很多人都在盯着安全的看法。多年来,我们常常听到说开源更安全,因为“社区”会审计代码。问题就在于,“社区”审计代码的情况很少见,所有人都认为其他人在做这件事。这种错误的安全认识在“心脏出血”漏洞期间瓦解——太多代码和太少关注的现实意味着我们需要更好的流程和自动化来改进开源安全性。

然而,还存在另外一种错误的安全认识:不要认为你无法看到,就假设闭源软件的流程更好。在“心脏出血”案例中,“社区”最终审计了 OpenSSL 中的漏洞,而解决方案更加开源。LibreSSL 是 OpenSSL 的一个分叉,它关注的是安全性而非向后兼容性。

开源需要责任共担

尽管我们在使用开源软件时并不付钱,但并不意味着我们对公司、客户和社区没有义务。在使用开源软件时要负责任:

  • 知道自己在使用什么。某些生态系统最危险的一个地方是,一个开源项目很容易能够包含另外一个开源项目。当前,很多项目中包含了其它项目作为其组件。如npm等系统使代码引入更为容易。各种工具有助于生成软件物料清单并扫描代码,查看是否依赖于不了解的组件。

  • 避免使用单人项目和被遗弃的项目。单个恶意开发人员可引入很多危害,尤其是自动升级的情况下。使用被遗弃项目的危险在于它们可能包含现代漏洞。评估所使用项目每个发布的状况。

  • 在发布前先测试。开源项目的危险大多源于未经测试即升级。如果你的代码中包含含有exploit 的开源库,则用户将归责于你。对项目的特定版本进行认证并将其更新至最新版本。分叉你所使用的开源库并分配资源,审计所提交的内容。

  • 更新规划。Log4j 漏洞尤其危险,因为它可导致在已将软件拷贝到ROM上的平台上执行任意代码。对于一些物联网设备而言,并不存在升级 Log4j 库进行修复的方法。这就造成无法被修复的长期存在的漏洞。不要把产品置于相同的困境中。对每个组件都提供升级(和降级!)。也不要等到出现安全漏洞时才升级代码,要经常更新至最近版本,以改进代码的安全。

  • 为开源项目做贡献。很多开源项目都会在资源较少的情况下发布有用代码。对所使用的开源库进行经济资助或提供开发资源或QA资源。不要将开源贡献局限于你拉取库的那一天——开源需要持续支持,因此在年度预算和长期规划中纳入开源贡献。你要确保最新发布和刚开始拉取的发布一样安全。

  • 投资 DevSecOps。假设经常更新是常态而非例外。不管是你所在团队创建的代码还是从开源项目引入的代码,认识到将产生漏洞,需要更新,而在某些情况下需要快速迭代才能赶上变更。DevOps 以 CI/CD 的形式,正在成为入场筹码;通过加入 “Sec”即直接将左移安全检查自动化到开发周期以加大赌注,这样,当更新进入时,你已经提前做好修复准备,不必熬太多通宵,也少了很多辛劳和压力。

从噩梦中醒来

如果你害怕使用开源,太晚了。当前,我们所使用的产品中都包含开源组件。几乎可以肯定,你浏览本文所使用的浏览器正是基于开源技术,由具有开源内核的web 服务器提供服务——所有的一切都构建于开源工具基础之上。尽管噩梦并未成为现实,但它可能是应对合法焦虑的响应。负责任地使用开源软件,就不会担惊受怕了。



推荐阅读

在线阅读版:《2021中国软件供应链安全分析报告》全文

欧盟委员会支持5个开源项目漏洞奖励计划,奖金池20万欧元

奇安信开源卫士率先通过可信开源治理工具评估

热门开源CMS平台 Umbraco 中存在多个安全漏洞,可使账户遭接管

详细分析开源软件项目 Ajax.NET Professional 中的RCE 漏洞(CVE-2021-23758)

白宫和科技巨头在开源软件安全峰会上说了啥?

NPM 修复两个严重漏洞但无法确认是否已遭在野利用,可触发开源软件供应链攻击

原文链接

https://www.zdnet.com/article/how-to-avoid-an-open-source-security-nightmare/

题图:Pixabay License

本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

 觉得不错,就点个 “在看” 或 "赞” 吧~

点击“阅读原文”,马上试用开源卫士!

如何避免开源安全噩梦?相关推荐

  1. CISA:攻击者正在利用开源Zabbix服务器中的多个漏洞!

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 美国网络安全基础设施和安全局 (CISA) 警告称威胁者正在利用开源的Zabbix 工具(用于监控网络.服务器.虚拟机和云服务)中的两个漏洞. ...

  2. 微软谷歌出资500万美元推出 Alpha-Omega 项目,提升软件供应链安全

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 微软和谷歌投资500万美元,助力开源安全基金会 (OpenSSF) 推出 Alpha-Omega 项目,改进开源软件生态系统的安全. 美国政府和 ...

  3. 库依赖关系和开源供应链带来的噩梦

     聚焦源代码安全,网罗国内外最新资讯! 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为 ...

  4. 关于开源网管软件选型的几点思考

    网管软件范围很广,本文提到的网管主要是指监控和管理网络设备(交换机,路由器,防火墙)和服务器以及运行在服务器上的应用,一般不包括客户机的管理. 传统商业软件有 IBM Tivoli.惠普OpenVie ...

  5. 大神开源AI代码!这次我也可以亲自上手、模仿OpenAI利用文本合成图像啦!

    作者 | 耳洞打三金 大家好我是三金,相信大家都还记得上周报道的OpenAI新出的名叫DALL.E的120亿参数神经网络模型,它可以魔法一般按照自然语言文字描述直接生成对应图片! 效果如下所示: 文本 ...

  6. java b2b2c开源商城系统源码

    网址:www.hulianrongyun.com,本人QQ:4407509,有问题可以联系本人 最近公司要开发商城,让我多方咨询,最后看了很多,要不就是代码.表字段注释不全,要不就是bug多,要么就是 ...

  7. Google 神秘 Fuchsia OS 的开源线索

    LWN 和 IEEE Spectrum 发表了两篇文章讨论了 Google 神秘的操作系统 Fuchsia.Google 目前 没有披露多少 Fuchsia 的正式消息,但因为它是作为一个开源项目开发 ...

  8. [转]七大.NET开源框架

    尽管过了相当长的时间,花费了不少资源,微软和.NET社区还是在最近几年加入到了开源运动的阵营中来了,这令人相当惊讶,因为两大阵营一直都是经常对立的.然而,事实是依靠开源,微软社区中的开源开发工具日益发 ...

  9. Kubernetes上领先的开源Serverless解决方案有哪些

    在去年年底的一次YC Startup School采访中,YC软件工程师Kyle Corbitt,询问了亚马逊的首席技术官Werner Vogels,关于容器和Kubernetes的问题.Werner ...

最新文章

  1. java thread参数传递_将参数传递给Java Thread
  2. 余承东:国内用华为P40 Pro+就能拍照测体温,还很精准
  3. 增强包_机电工程学院开展“情暖冬日,爱在机电”冬至包饺子活动
  4. 如何不显示index.php,如何隐藏index.php入口文件?
  5. js获取php页面session的值,在html页面中取得session中的值的方法
  6. 14、mybatis多表关联查询 association定义关联对象封装规则及懒加载
  7. 政策表达式截取json_json格式数据如何提取指定中文字符串。
  8. OC系列foundation Kit基础-NSString
  9. css3实现流星坠落效果
  10. pl/sql中文显示为乱码解决
  11. C#动态加载dll,dll目录指定
  12. php 自动切图,前端工程师技能之photoshop巧用系列扩展篇自动切图
  13. java mvc返回js_技术趋势:是什么让MVC悄然消失的?
  14. 新年第一篇!西南民族大学第十届校赛(同步赛)
  15. 构造函数和构造代码块
  16. 国产计算机设备,国产计算机报价
  17. Android版本和SDK版本
  18. Java MediaMetadataCompat
  19. RISC-V_GD32VF103-ADC 模数转换 电压采集
  20. 谁拿了奖金?HID2020竞赛、研讨会及颁奖典礼

热门文章

  1. Scala Package Package Objects
  2. windows和linux 修改 hosts的路径
  3. Python中的logging模块
  4. LAMP+LNMP视频教程
  5. 关于学习新知识的一点想法
  6. 大数据Python学习大纲
  7. 一场改变你投资生涯的讨论:职业德州扑克手看交易
  8. Shell循环输入符合条件为止
  9. 目前常用的开源服务器端技术
  10. C# ToString格式字符串整理(Format)(数字、日期和枚举的标准格式设置说明符)