Linux无处不在。这就是所有云,甚至是 Microsoft Azure 所运行的。这就是让 500 强中的所有 500 台超级计算机都能正常工作的原因。哎呀,如果你相信Pornhub,即使桌面 Linux 也在增长,它声称 Linux 用户增长了 28%,而 Windows 用户下降了 3%。
开源软件也在突飞猛进地发展。根据Gartner 的 2021 年开源软件 (OSS) 炒作周期:“到 2025 年,与目前的 IT 支出相比,超过 70% 的企业将增加在 OSS 上的 IT 支出。此外,到 2025 年,软件即服务( SaaS) 将成为 OSS 的首选消费模型,因为它能够提供更好的操作简单性、安全性和可扩展性。”
考虑到数据库,企业软件的主要部分,Gartner预测超过 70% 的新内部应用程序将在开源数据库上开发。同时,50% 的现有专有关系数据库实例将已转换或正在转换为开源 DBMS。
我会买那些号码;从第一天起,我就一直关注 Linux 和开源软件。无论我走到哪里,我与之交谈的每个人都承认,这对搭档运行着软件世界。
但正如蜘蛛侠所知,强大的力量也伴随着巨大的责任。而且它也来了,正如许多开发人员最近发现Apache Java 日志记录开源库 Log4j2 的多个安全漏洞时 发现的那样,非常头疼。
log4j2 问题非常糟糕。根据国家漏洞数据库 (NVD) 等级,它被评为 10.0 CVSSv3,这是非常糟糕的。
它真正的麻烦不在于开源本身;有 关于开源的方法和安全没有什么神奇。安全错误仍然可以输入代码。
莱纳斯定律 “只要有足够的眼球,所有的虫子都是浅薄的。” 但如果没有足够的开发人员在寻找,安全漏洞仍然不会被注意到。正如我现在所说的施奈尔定律所说,“安全是一个过程,而不是一个产品。” 这表明需要始终保持警惕以保护所有软件。
也就是说,log4j 真正的问题在于 Java 如何隐藏其源代码和二进制文件在众多Java Archive (JAR)变体中使用的库。结果?您可能正在使用易受攻击的 log4j 版本,并且在它被利用之前不知道。
由于乔希Bressers,驻定安全的副总裁,最近解释,“其中一个挑战log4j的漏洞会被真正找到它。Java应用程序和依赖关系,通常在某种包装形式,使分布,真的很容易运行,但它会使弄清楚这些软件包中的内容变得困难。”
幸运的是,有log4j 扫描器可以帮助您发现正在使用的有缺陷的 log4j 库。但是,它们并不完美。
log4j 混乱的背后是另一个问题:你怎么知道你的软件使用了哪些开源组件?例如,log4j2 从 2014 年开始使用。您不能指望任何人记得他们是否在您今天仍在使用的某个程序中使用了第一个版本。
答案是开源社区近年来开始认真对待的一个答案:软件物料清单 (SBOM) 的创建。SBOM 准确说明了任何程序中使用了哪些软件库、例程和其他代码。有了这个,您就可以检查程序中使用了哪些组件版本。
正如Linux 基金会开源供应链安全总监David A. Wheeler所解释的那样,通过使用 SBOM 和经过验证的可复制构建,您可以确保了解程序中的内容。这样,如果在组件中发现安全漏洞,您可以简单地修补它,而不是像疯子一样搜索任何可能的问题代码,然后才能修复它。
“一个可重复的构建,”Wheeler 解释说,“在给定相同的输入的情况下总是产生相同的输出,以便可以验证构建结果。经过验证的可重复构建是一个过程,其中独立组织从源代码生成构建并验证构建的结果来自声称的源代码。”
为此,您和您的开发人员需要使用 Linux Foundation 的软件包数据交换 (SPDX) 格式在 SBOM 中跟踪您的程序。然后,为了进一步确保您的代码确实如其所声称的那样,您需要使用Codenotary Community Attestation Service和Tidelift Catalogs 等服务对您的 SBOM 进行公证和验证。
这一切说起来容易。做起来很难。
到 2022 年,开源开发人员将花费大量时间检查他们的代码是否存在问题,然后构建基于 SPDX 的 SBOM。担心Solarwind 类型的灾难和 log4j 安全问题的用户会要求这样做。
与此同时,Linux 开发人员正在努力通过使Rust Linux成为第二语言来进一步保护操作系统。为什么?因为与 Linux 的主要语言 C 不同,Rust 更安全。具体来说,Rust 在处理内存错误方面比 C 安全得多。
正如微软首席云开发倡导者 Ryan Levick 所解释的那样,“ Rust 是完全内存安全的。” 这是一个大问题,因为正如 Linux 内核开发人员 Alex Gaynor 和 Geoffrey Thomas 在 2019 年 Linux 安全峰会上指出的那样,几乎三分之二的 Linux 内核安全漏洞来自内存安全问题。那些来自哪里?C 和 C++ 的固有问题。
在这十年内,Linux 不会被 Rust 重写(在 2030 年代再次与我联系)。但是很多 Linux 驱动程序和其他代码将在未来用 Rust 编写。
正如 Linus Torvalds 告诉我的那样,虽然他“绝不‘推动’Rust”,但“考虑到承诺的优势并避免一些安全陷阱,他对它持开放态度。”
“不过,”他总结道,“我也知道有时承诺不会兑现。”
我们将看看它是如何运作的。我可以肯定的一件事是,在 2022 年,保护代码安全将成为 Linux 和开源开发人员的首要问题。它们都变得太重要了,无法采取任何其他方式。