一些开发人员正在破坏开源软件

gettyimages-1159346361-恶意代码-skull-crossbones.jpg

盖蒂图片社

开源最令人惊奇的事情之一不是它产生了伟大的软件。 正是因为如此多的开发人员将他们的自尊心放在一边,在他人的帮助下创建出色的程序。 然而,现在,少数程序员将他们自己的担忧置于众多可能破坏所有人的开源软件的利益之上。

例如,JavaScript 的包管理器维护者 RIAEvangelist,Brandon Nozaki Miller, 编写并发布了一个名为 Peacenotwar 的开放代码 npm 源代码包. 它几乎没有什么作用,只是向桌面打印了一条和平消息。 到目前为止,如此无害。 

然后,如果用户的计算机具有俄罗斯或白俄罗斯的 IP 地址,米勒会将恶意代码插入到程序包中以覆盖用户的文件系统。 然后,他将其添加为他流行的依赖项 节点-ipc 程序和瞬间混乱! 许多服务器和个人电脑在更新到最新代码时出现故障,然后他们的系统的驱动器被擦除。 

米勒的辩护,“这都是公开的、记录的、许可的和开源的,” 站不住脚。 

立然·塔尔 斯尼克 发现这个问题的研究人员说:“即使某些人认为蓄意和危险的行为是合法的抗议行为, 这对维护者未来的声誉有何影响 并参与开发者社区? 这位维护者是否会再次被信任,不会在他们参与的任何项目中以这种甚至更激进的行动跟进未来的行动?” 

米勒不是一个随意的曲柄。 他写了很多好的代码,比如node-ipc,还有 节点 HTTP 服务器. 但是,你能相信他的任何代码都不是恶意的吗? 虽然他将其描述为“不是恶意软件,[而是] 完整记录的抗议软件,”其他人恶毒地不同意。 

正如一位 GitHub 程序员所写,“这将导致与俄罗斯或政治完全无关的西方公司的安全团队开始看到 免费和开源软件作为供应链攻击的途径 (完全如此)并开始在他们的公司内禁止免费和开源软件——所有免费和开源软件。” 

正如另一个拥有 nm17 句柄的 GitHub 开发人员所写的那样,“ 开源信任因子,基于开发人员的善意现在实际上已经不复存在了,现在,越来越多的人意识到有一天,他们的库/应用程序可能会被利用来做/说互联网上一些随机开发人员认为的任何事情。是他们做的正确的事情。'”

两者都提出了有效的观点。 如果你不能使用源代码,除非你同意它的制造者的政治立场,你怎么能自信地使用它呢? 

米勒的心可能在正确的地方——乌克兰斯拉瓦! ——但是感染了恶意载荷的开源软件是保护俄罗斯入侵乌克兰的正确方法吗? 不,这不对。 

开源方法之所以有效,是因为我们彼此信任。 当这种信任被打破时,无论出于什么原因,开源的基本框架都会被打破。 正如稳定分支的 Linux 内核维护者 Greg Kroah-Hartman 所说,当明尼苏达大学的学生在 2021 年故意尝试在 Linux 内核中插入错误代码进行实验时,他说:“他们正在做的是故意的恶意行为和是不可接受的,完全不道德的。”

长期以来,人们一直认为开源也应该包括道德规定。 例如,2009 年的 例外通用公共许可证(eGPL), 的修订 GPLv2,试图禁止“例外”,例如军事用户和供应商,使用其代码。 它失败了。 其他许可证,例如 JSON许可证 其天真的“软件应用于善行,而不是作恶”条款仍然存在,但没有人强制执行。  

最近,活动家和软件开发商 Coraline Ada Ehmke 引入了一个开源许可证,要求其用户遵守道德规范。 具体来说,她 希波克拉底执照 添加到 MIT开源许可证 一个条款说明: 

“个人、公司、政府或其他团体不得将软件用于主动和故意危害、伤害或以其他方式威胁弱势个人或团体的身体、精神、经济或总体福祉的系统或活动。违反了联合国世界人权宣言。”

听起来不错,但它不是开源的。 你看,开源本身就是一种道德立场。 它的道德规范包含在 自由软件基金会 (FSF)四项基本自由. 这是所有开源许可证及其核心理念的基础。 正如开源法律专家和哥伦比亚大学法学教授埃本·莫格伦(Eben Moglen)当时所说,道德许可不能是自由软件或开源许可: 

自由零,出于任何目的运行程序的权利,排在四项自由之首,因为如果用户对他们运行的计算机程序没有该权利,他们最终对这些程序根本没有任何权利。 仅出于良好用途而给予许可,或在许可人眼中禁止不良用途的努力违反了保护零自由的要求。” 

换句话说,如果您出于任何原因无法共享您的代码,那么您的代码就不是真正的开源代码。 

关于禁止一个群体使用开源软件的另一个更务实的论点是,阻止诸如 IP 地址之类的东西是一种非常广泛的做法。 作为 Florian Roth,安全公司 Nextron系统' 研究主管,他认为“在系统上禁用我的免费工具 具有某些语言和时区设置,”最终决定不这样做。 为什么? 因为这样做,“我们还将禁用批评家和自由思想家系统上的工具 谴责他们政府的行为。” 

不幸的是,给开源软件带来麻烦的不仅仅是人们试图将开源用于他们认为更高的道德目的。 

今年早些时候,JavaScript 开发人员 Marak Squires 故意破坏了他不起眼但至关重要的开源 Javascript 库“colors.js”和“faker.js”。 结果? 数以万计的 JavaScript 程序崩溃了。

为什么? 目前还不完全清楚,但在一篇已被删除的 GitHub 帖子中,Squires 写道:“尊敬的, 我不再支持财富 500 强 (和其他小型公司)与我的免费工作。 没有什么可说的了。 以此为契机,向我发送一份六位数的年度合同,或者分叉项目并让其他人参与其中。” 正如您可能想象的那样,这种勒索他获得薪水的尝试对他来说效果并不好。 

而且,有些人故意将恶意软件放入他们的开源代码中以获取乐趣和利润。 例如,DevOps 安全公司 青蛙 在 NPM 存储库中发现了 17 个新的 JavaScript 恶意程序包,它们故意攻击和窃取用户的 Discord 令牌。 然后这些可以用在 Discord 通信和数字分发平台.

除了创建看起来无辜且有用的新恶意开源程序外,其他攻击者还在使用旧的、废弃的软件并对其进行重写,以包括加密货币窃取后门。 一个这样的程序是事件流。 它插入了恶意代码以窃取比特币钱包并将其余额转移到吉隆坡服务器。 这些年来,类似的事件已经发生了好几次。

随着每一次这样的举动,人们对开源软件的信心都会被削弱。 由于开源对现代世界绝对至关重要,这是一个糟糕的趋势。 

我们对于它可以做些什么呢? 好吧,一方面,我们确实应该非常仔细地考虑何时(如果有的话)我们应该阻止使用开源代码。 

更实际地,我们必须开始采用 Linux 基金会 软件包数据交换(SPDX)软件物料清单 (SBOM). 这些将共同告诉我们我们在程序中使用了哪些代码以及它来自哪里。 然后,我们将更有能力做出明智的决定。

今天,人们经常使用开源代码而不知道他们正在运行什么或检查它是否存在问题。 他们认为一切都很好。 这从来都不是一个聪明的假设。 今天,真是愚蠢至极。 

即使最近发生了所有这些变化,开源仍然比黑盒专有软件替代品更好、更安全。 但是,我们必须检查和验证代码,而不是盲目地信任它。 这是未来唯一明智的做法。

相关故事:



来源