保护 Joomla 更新器 - 让开源变得更好
如果你是 Joomla 社区杂志的忠实读者,你一定还记得通过使用“更新框架”来保护 Joomla 更新过程的项目。尽管在过去几个月里项目相对安静,但幕后工作一直在继续 - 最终在 2023 年 6 月底又进行了一次代码冲刺。
简要回顾
那么,这个项目到底是怎么回事呢?本质上,我们想要防止所谓的供应链攻击。在这种攻击中,恶意方会创建一个包含恶意软件的修改过的 Joomla 版本 - 并使用“正常”的 Joomla 更新过程分发恶意代码,即通过获取项目更新服务基础设施的访问权限。
在计算机科学中,这种攻击是一个非常常见的场景 - 而且已经有了防止它们的解决方案:通过使用密码学,基本上可以在 Joomla 更新文件旁边放置一个数字“签名”,证明这个更新是由官方项目发布的,并且该文件没有被恶意供应商修改。
然而,如果你花一两分钟思考这个问题,很快就会变得明显,需要由这种密码学保护层覆盖无数不同的攻击场景。
- 文件是否由项目发布的?
- 文件是否未修改?
- 提供的更新服务器上的更新真的是最新的,还是恶意行为者骗我相信了这一点,从而阻止我访问最新版本?
- 如果某个发布领导者的加密密钥遭到泄露怎么办?
很快就很清楚,为所有这些场景创建一个自制的解决方案是个糟糕的想法,所以我们决定为 Joomla 更新器实施“更新框架”,简称“TUF”。TUF 既是安全软件更新基础设施的抽象概念,也是参考实现。
一个开源故事
在过去的会议和冲刺中,我们深入探讨了 TUF 规范的细节,并开始着手处理 3 个不同的元素
- 实际的更新服务器端设置:这部分还包括一个易于使用的 CLI 工具,项目可以使用它来管理签名密钥和发布新的 Joomla 更新
- 一个通用的PHP库,能够读取并解析TUF更新存储库
- 在Joomla核心中的实际实现
对于服务器端设置和通用库来说,很明显从头开始并不合理,因为开源世界已经存在一些出色的项目:go-tuf,一个用golang编写的TUF实现,是我们CLI工具的核心,php-tuf则用于实际CMS中处理存储在更新服务器上的信息。
在前几个冲刺中,我们发现这两个上游项目要么在我们至关重要的部分有bug,要么缺少特定的功能。因此,我们决定创建bug报告和pull请求,以改进这些上游项目,同时解决我们在实现中的问题。特别是在php-tuf中,我们要求一些相当大的更改,其中我们不清楚维护者是否会投入额外精力来使他们的项目更适合我们的用例。然而,很明显我们的担忧是多余的:维护者对我们的输入非常高兴,并解决了问题,这使得这次合作成为开源应该如何工作的又一个伟大例子。
当前的冲刺
在上游项目中的大多数阻止性问题已经解决后,我们决定再进行一个冲刺,以完成Joomla中的实现。这个冲刺发生在德国纽伦堡,六月底。我们更新了上游依赖项,为新发现的问题创建了一系列pull请求,最重要的是清理了CMS中的参考实现,使其达到可以创建内部审查草案PR的状态。一旦最终解决上游问题,我们就可以在公共CMS存储库中创建PR。敬请关注!
最后但同样重要的是:赞誉
如果那时你走进那个冲刺的酒店酒吧,你会看到一群人在大家都在享受美丽的夏日夜晚的时候仍在不知疲倦地工作。冲刺团队再次展现了杰出的承诺,因此我想感谢Harald、Benjamin、Timo、Elias、Niels、Stefan和Hannes的贡献!你们太棒了!
《Joomla社区杂志》上发布的一些文章代表了作者在特定主题上的个人观点或经验,可能并不与Joomla项目的官方立场一致
通过接受,您将访问由https://magazine.joomla.net.cn/之外第三方提供的服务
评论