将加固镜像打造成软件安全带

14 阅读11分钟

容器镜像强化应如安全带般免费、默认提供。效仿HTTPS和TLS普及模式,通过免费和简化提高整体供应链安全,供应商可从增值服务盈利。

译自:Let's Make Hardened Images the Seatbelts of Software

作者:Michael Donovan

没有汽车制造商会要求你为安全带支付额外费用。安全带的成本已经计入每辆汽车的价格中,因为安全带以可接受的边际成本防止了伤害。这甚至不再是一个话题。当然,你的汽车有安全带。

强化容器镜像也应该以同样的方式运作。它们应该对一个两人创业公司来说,从第一天起就负担得起,默认普及,并被视为提高所有人安全性的公共利益。这意味着最小化基础镜像、非root用户执行、只读文件系统、固定并验证的依赖项、签名溯源以及在每个通用漏洞披露(CVE)发生时进行重建。

这些应该是标准设备,而不是追加销售或特殊功能。供应商可以通过其他方式赚钱。开源项目将受益于为希望从最小攻击面和官方镜像开始的用户提供基本的强化选项。

我们以前在 HTTPS 和 TLS 方面也这样做过

十年前,HTTPS对大多数网站来说是可选的。证书需要付费。配置很繁琐。许多网站完全跳过了它,让用户暴露在窃听和中间人攻击之下。

随后,Let’s Encrypt 于 2015 年推出,提供了免费、自动化的证书。浏览器厂商开始将 HTTP 网站标记为“不安全”。几年之内,HTTPS 从“锦上添花”变成了基本条件。

如今,超过 95% 的网络流量是加密的。这不是政府强制要求的。一个非营利组织使证书免费且易于获取,浏览器施加了社会压力,默认设置随之改变。

TLS 普及的故事也遵循同样的轨迹。多年来,在电子邮件服务器、数据库和内部服务上启用 TLS 被视为可选的强化措施,只有注重安全性的团队在有时间和专业知识的情况下才会去做。

后来,云服务提供商和平台开始默认启用 TLS。Amazon Web ServicesMicrosoft Azure 和 Google Cloud Platform (GCP) 使加密连接成为阻力最小的路径。云原生计算基金会 (CNCF) 将 TLS 添加为 Kubernetes 安全的核心要求。一旦默认设置改变,运行未加密的内部流量就成了需要解释的例外,而不是相反。

最近,开源社区和与该社区合作的供应商围绕 Docker Hub 上的 Docker 官方镜像 (DOI) 进行了集结。DOI 是一种容器用户确保他们只从官方项目源拉取镜像的方式。DOI 标识作为干净、官方开源镜像的真实来源而广受欢迎。

当你使安全选项免费、简便且默认时,无需强制就能实现普及。更重要的是,提高安全标准是所有供应商都会支持的事情,因为最终,这能为他们节省大量辛劳和麻烦,并改善客户体验。这对所有人来说都是双赢。

安全外部性是每个人的问题

软件开发正以惊人的速度向前发展。AI 辅助编码正在加速开发速度。公司将更多代码更快地推向基于共享基础的生产环境。这给本已紧张的补丁实践带来了压力,加速了安全“跑步机”,增加了所有人的风险。

组织面临着潮水般的 CVE,即使是复杂的安全团队也难以进行分类处理。针对广泛使用的软件包的供应链攻击使数百万台服务器面临风险。同样关键的是,现代软件栈的本质变得令人眼花缭乱地复杂且变化迅速。一个组织可能部署了数千个软件组件。现代开发人员采用新开源组件的速度比强化工作跟上的速度要快得多。

强制技术团队修改配置设置,或允许他们调整所谓的“黄金镜像”,为许多人为错误打开了大门,从而导致安全漏洞和其他问题。期望他们跟上所有新技术的最新安全要求是强人所难。

同时,我们正在进入一个由人工智能驱动的漏洞发现和利用时代。坏人也在使用人工智能,并且也会擅长人工智能。

在这种环境下,一个团队未打补丁的基础镜像或易受攻击的开源组件很快就会成为每个人的事故。任何未经验证溯源就部署的组件都会招致入侵,从 拼写错误抢注式 Node.js 软件包 到通过欺骗构建系统拉取攻击者控制的“内部”工件的 依赖混淆攻击,再到在代码已审查后悄无声息地替换可信二进制文件或容器镜像的被攻破的 CI/CD 流水线。

即使是聪明的团队也可能遭受这种命运,因为人非圣贤孰能无过,而且安全补丁游戏是无法取胜的。在这种情况下,供应链漂移会横向渗透到平台、云和客户之间。

当非root用户执行、只读文件系统、最小权限默认值和签名溯源成为基本条件时,整类常规入侵在开始之前就会失败。公共领域中的软目标越少,僵尸网络、加密矿工和机会主义蠕虫的“氧气”就越少。

这就是“安全带”论点,它在广泛的技术生态系统中保护着每一个人。就像 HTTPS 一样,技术群体免疫只有当安全默认设置以免费且简便的极低价格向所有人开放时才能发挥作用。

规模化安全功能成本低廉

你可能会说,所有这些东西是谁来构建的呢?毫无疑问,构建一个一流的强化流水线需要真正的资金。你需要策展、策略即代码、SLSA 级别的证明、自动化重建,当然还有人工智能护栏来检查你的工作。但一旦这个基础设施存在,每个镜像的边际成本就会急剧下降。大部分持续工作是自动化和内容分发。

Let’s Encrypt 的运作方式正是如此。构建和运行证书颁发机构需要资金。颁发单个证书几乎不花钱。基础设施投资分摊到数亿张证书上。这是规模经济的典型例子。

强化镜像遵循同样的经济规律。一个专门从事强化的组织可以承担基础设施成本,并以边际成本分发强化镜像。安全带被嵌入到汽车中。

商业模式已经存在

汽车制造商不为安全带额外收费。他们通过装饰包、高级功能和服务赚取利润。安全带是微不足道且默认包含的,因为没有制造商希望成为不带安全带销售汽车的公司。

同样的模式也适用于容器安全。每个人都获得免费的基线:最小化、可复现的基础镜像,不含 shell 或不必要的工具,通过删除权限和 seccomp 配置文件进行非root用户执行,只读文件系统和锁定网络默认设置,带有 软件物料清单 (SBOM)漏洞可利用性交换 (VEX) 的固定和验证依赖项,针对 CVE 和已知已利用漏洞目录 (KEV) 信号的持续重建,以及带有机器可验证证明的加密签名。

企业为高级服务付费:FIPS(联邦信息处理标准)验证的密码学、带有严重性服务水平协议的扩展 LTS 分支、针对监管机构的特定证明和合规性文档、专用镜像、气隙更新、区域特定分发、迁移协助、紧急访问支持、定制策略包以及远超标准生命周期终止的长期支持。

一旦镜像强化成为基本条件,供应商将有动力以新方式创新,超越基本安全,改进其产品和用户体验。在汽车行业,最初对三点式安全带的强制要求导致了一系列补充创新,如安全带预紧器、安全气囊和碰撞吸能区。通过解决安全问题,汽车制造商可以将重心和资源转移到其他更具吸引力的创新上,从而改善用户体验,例如更好的娱乐系统和符合人体工程学的座椅控制。

你需要为司机、四点式赛车安全带和老式汽车维护计划支付额外费用。安全带是标准配置。然而,这个标准最好结合软件特有的特点来运作。

如果免费的强化镜像足够简单,所有人都可以将其应用到自己的应用程序中,那么它们将对每个人都有帮助。因此,在强化镜像广泛普及之前设计和部署的每个应用程序都可以轻松地进行改造。

而且,如果用户选择更改其技术栈,强化镜像也可以轻松适应,工作量最小。它应该感觉更像是更换雨刮器,而不是大手术,这是任何业余爱好者、学生、小型企业、初创公司或企业平台团队都能轻松完成的基本任务。

克服价格和复杂性对普及的阻碍

对于那些可能正在从事关键开源项目的业余爱好者、学生和独立维护者来说,为强化镜像付费从来都不是一个选择。对于初创公司和小型企业来说,为强化镜像付费与其他所有预算优先事项竞争。许多人根本不付费,他们只是运行在搜索中第一个出现的基础镜像。

但即使拥有充足安全预算的组织也常常运行臃肿、未打补丁的镜像。问题不总是钱。它是专业知识和启动能耗。构建强化流水线需要许多团队不具备的专业知识。

这就是为什么仅仅免费是不够的。它必须既免费又简单。Let’s Encrypt 不仅仅消除了证书成本。它自动化了整个颁发和续订过程。你不需要理解公钥基础设施。你运行一个命令,就获得了 HTTPS。

强化镜像需要同样的方法。拉取镜像,你就获得了安全默认设置。无需构建流水线,无需编写策略,无需维护证明基础设施。复杂性由提供商承担。

将“Let’s Encrypt”模式应用于容器安全

这不是一个抽象的呼吁,要求“行业”做得更好。容器基础设施以及在此基础上构建的供应商,都处于有利位置来促成此事。

我们已经生活在一个强化镜像作为任何人都可以访问的免费基线,只需一个功能开关即可实现的世界。一个初创公司在第一天就获得了与企业相同的基本安全性。不,他们不会获得服务水平协议、FIPS 验证或专用支持。但他们获得了安全带,这让他们和他们周围的人都更安全。

当每个主要镜像都默认进行强化时,运行未强化的基础镜像就成了需要解释的例外。默认设置改变了,就像 HTTPS 那样。结果是整个生态系统变得更安全。我们现在免费提供强化镜像。我们希望其他所有“销售”强化镜像的公司也能效仿。这是默认情况下实现更安全的软件供应链的最佳途径。

在外保持安全

让强化镜像像安全带一样普及和经济。让它们成为标准、无聊且无处不在。供应商仍然会赚钱,只是不再通过限制安全功能来赚钱。我们有 HTTPS 和 TLS 的先例。经济学是可行的,因为边际成本在规模化后会大幅下降。

容器是机制。现在是时候改变默认设置,系好安全带了。