GLEP 57:Gentoo 软件分发安全 - 概述
作者 | Robin Hugh Johnson <[email protected]> |
---|---|
类型 | 信息 |
状态 | 最终 |
版本 | 1 |
创建 | 2008-10-22 |
上次修改 | 2022-04-15 |
发布历史 | 2009-12-01 |
GLEP 源代码 | glep-0057.rst |
摘要
这是 4 个 GLEP 系列中的第一个。它旨在定义 Gentoo 软件分发流程中的参与者和问题,并着重强调安全性。然后,将在随后的 GLEP 中使用由此开发的概念来描述针对此分发流程的全面安全解决方案,该解决方案可以防止简单的攻击并增加对更复杂攻击的难度。
动机
自从 2002 年中旬(参见尾注:“Gentoo 中树签名历史”)以来,gentoo-dev 邮件列表和其他许多地方都进行了许多讨论,以设计和实施 Gentoo 项目文件分发安全策略。
通常,此类提议的目标是能够安全地识别 Gentoo 提供的数据,并防止第三方(如受损的镜像)向 Gentoo 元分发用户提供有害数据(无论是修改后的 ebuilds、可执行的 shell 代码或任何其他形式)。
这些策略既不能阻止恶意或受损的上游注入“不良”程序,也不能阻止不法开发者提交恶意 ebuilds。它们所能做的是减少攻击向量,例如,检测受损的镜像,并且不会在用户系统上执行受污染的数据。
Gentoo 的软件分发系统目前存在一些安全漏洞。gentoo-dev 邮件列表上的最后一次讨论 [Lauer06] 对大多数问题进行了很好的概述。此处总结如下
- 分发的不可验证的可执行代码:最明显的例子是 eclasses,但现在树中还有许多其他部分根本没有签名。修改这些数据非常容易。
- 现有清单验证的缺陷。缺乏和执行策略,以及 portage 中的次优支持,使得修改或替换现有清单变得轻而易举。
- 现有基础设施容易受到攻击。前两项使熟练的攻击者能够设计攻击并针对现有基础设施的特定部分执行攻击(例如:破坏国家/地区本地 rsync 镜像,完全替换软件包及其清单)。
规范
安全不是可以孤立考虑的东西。它是一个持续的整体过程,也是通过检查以前的缺陷吸取的经验教训。
系统元素
需要考虑以下几个实体
- 上游。提供我们希望分发的程序或数据的人。
- Gentoo 开发者。打包和测试上游提供的事物的人。
- Gentoo 基础设施。允许对元数据进行版本控制并分发开发者和上游提供的数据和元数据的人员和硬件。
- Gentoo 镜像。外部贡献者提供的硬件,不受或仅部分受 Gentoo 基础设施控制。需要实现 Gentoo 大量用户群所需的扩展性和性能。
- Gentoo 用户。使用 Gentoo 元分发的人。
此处描述的数据通常是上游提供的程序和数据文件;由于这相当大量的 data 通常通过 http 或 ftp 从 Gentoo 镜像分发。这些数据通常被标记为“distfiles”。元数据是描述如何操作这些数据的全部信息 - 通常称为“树”或“Portage 树”,包含许多 ebuilds、eclasses 和支持文件,通常通过 rsync 分发。中央 rsync 服务器由 Gentoo 基础设施控制,但存在许多第三方 rsync 镜像,有助于减轻这些中央服务器的负载。这些额外的镜像不受 Gentoo 基础设施维护。
攻击可能针对这些实体中的任何一个。显然,针对上游和用户的直接攻击超出了本系列 GLEP 的范围,因为它们不受 Gentoo 的控制或无法控制 - 但是,必须考虑使用 Gentoo 作为中介(包括恶意镜像)的攻击。
流程
在 Gentoo 分发中,有两个主要流程需要实施安全措施
- 开发者提交到基础设施控制的版本控制系统。
- 从基础设施到用户通过镜像分发树和 distfile(这包括 HTTP 和 rsync 分发)。
这两个流程都需要改进其安全性。在 [GLEPxx2] 中,我们将讨论如何提高第一个流程的安全性。相对而言,文件分发更简单的流程将在 [GLEP58] 中进行描述。由于它可以在不改变开发者工作流程和行为的情况下实施,我们希望在合理的时间范围内完成它。
针对流程的攻击
针对流程 #1 的攻击可能与恶意或受损的开发者(被盗 SSH 密钥、被入侵的系统)一样复杂,也可能与用户提供的补丁一样简单,该补丁比它声称的要多,并且没有得到充分审查。
针对流程 #2 的攻击可能与单个被入侵的镜像一样简单,该镜像将修改后的树分发给该镜像的用户 - 或对上游源代码进行了一些更改。这些攻击成本低廉,并且很难发现,除非所有分发的数据都透明地签名。
[Goller05] 提供了此类攻击的一个简单示例以及针对 eclasses 的部分解决方案。它很好地表明,任何不受 Gentoo 控制的 rsync 镜像都可以修改可执行代码;由于大部分此类代码默认情况下以 root 身份运行,因此恶意镜像可能会每天破坏数百个系统 - 如果隐藏得足够好,这种攻击可能会持续数周才会被发现。由于现在没有有效的安全措施,用户只能选择从有时速度缓慢甚至无响应的 Gentoo 控制的 rsync 镜像同步,或者冒被社区提供的镜像之一破坏的风险。我们将表明,以低廉的额外成本实施对这类攻击的保护非常容易。
在镜像级别,添加恶意内容并不是唯一的攻击。正如 Cappos 等人在 [C08a] 、 [C08b] 中讨论的那样,攻击者可以使用排除和重放攻击,可能只对用户特定子集执行,以延长对另一个漏洞利用的机会窗口。
流程安全
对流程 #1 的保护永远不可能是完整的(除非对我们的开发流程进行重大修改),因为恶意开发者有权提供用于分发的材料。Portage 和基础设施更改可以获得部分保护,但真正需要的改进是开发者教育和持续警惕。这将在 [GLEPxx2] 中进一步讨论。
这种安全性仍然是有限的 - 针对受损开发者的保护非常昂贵,即使像同行评审/多重签名这样复杂的系统也可能被串通的开发者破坏。存在许多问题,无论是社会问题还是技术问题,这些问题都大大增加了此类措施的成本,而只提供了边际安全收益。任何实施提案都必须经过仔细分析,以找到最佳的安全性和开发者麻烦比率。
对流程 #2 的保护完全是另一回事。虽然它也不能完全实现(因为用户可能会受到直接攻击),但我们可以确保 Gentoo 基础设施和镜像不是弱点。这个目标实际上比看起来更接近 - 大部分工作已经为其他事情完成了!这将在 [GLEP58] 中进一步讨论。由于此流程在安全性方面最能获得收益,并且具有最直接的影响,因此应该在对流程 #1 进行任何更改之前或同时实施。此级别的安全性已在签名的每日快照中提供,但我们可以将其扩展到涵盖 rsync 镜像。
与密钥(OpenPGP 或其他密钥)相关和管理密钥的要求是一个影响这两个流程的问题,由于主题的技术复杂性,它被分解为一个单独的 GLEP。这处理所有内容,包括:使用的密钥类型;使用指南;管理签名和密钥信任的程序,包括丢失(销毁)和被盗(或以其他方式变成恶意)密钥的情况。
向后兼容性
作为一个信息性 GLEP,本文件对向后兼容性没有直接影响。但是,相关的深入文档可能会进一步探讨任何向后兼容性问题。
尾注:Gentoo 中树签名历史
这是对所有之前树签名讨论的简要回顾,在 2003-04-03 之前的东西很难找到,因此我为遗漏了任何讨论而道歉(我希望听到它)。我认为 2001 年与 drobbins 进行了非常早期的私人讨论,因为它的模糊引用,但我无法在任何地方找到它。
2002-06-06,gentoo-dev 邮件列表,用户首次询问 ebuilds 的签名:消息 ID [email protected], https://archives.gentoo.org/gentoo-dev/message/c113c603ad9f8fa22ff13b1657cdb84c
2003-01-13,gentoo-dev 邮件列表,“Re: 验证 portage 是否来自 Gentoo” - Paul de Vrieze (pauldv):消息 ID [email protected], https://archives.gentoo.org/gentoo-dev/message/7062d6765b35406b4b8ed6b7c6e8fc28
2003-04,GWN 文章宣布树签名:[ https://gentoolinux.cn/news/en/gwn/20030407-newsletter.xml#doc_chap1_sect3 ] [ https://gentoolinux.cn/news/en/gwn/20030421-newsletter.xml#doc_chap1_sect2 ]
2003-04 年,gentoo-security 邮件列表,“Portage 中 ebuild 签名的现状” - Joshua Brindle(方法),第一个关于签名 Manifest 的建议,但也提出了一种不寻常的密钥信任模型:消息 ID 未知 https://marc.info/?l=gentoo-security&m=105073449619892&w=2
2003-04 年,gentoo-core 邮件列表,“新的摘要和签名 - 尝试解释”
Date: Wed, 2 Apr 2003 23:39:05 -0600 From: Nick Jones <[email protected]> Message-ID: <[email protected]>
2003-06 年,gentoo-core 邮件列表,“GPG 和密钥签名的快速指南。” - 此概述是第一个帮助开发者了解如何使用 dev 的概述,主要用于密钥签名聚会。
Date: Mon, 30 Jun 2003 14:32:09 +1000 (EST) From: Troy Dack <[email protected]> Message-ID: <[email protected]>
2003-08-09 年,gentoo-core 邮件列表,“Ebuild 签名” - 状态查询,回复不甚积极,因 Nick Jones (carpaski) 被入侵,安全清理需要很长时间才能生效。
Date: 06 Aug 2003 15:36:34 -0500 From: Chris PeBenito <[email protected]> Message-Id: <[email protected]>
2003-12-02 年,gentoo-core 邮件列表,“报告:rsync1.it.gentoo.org 被入侵”
Date: Tue, 2 Dec 2003 20:25:57 +0100 From: Andrea Barisani <[email protected]> Message-ID: <[email protected]>
2003-12-03 年,gentoo-core 邮件列表,“Ebuild 签名”
Date: Wed, 3 Dec 2003 11:15:09 +0100 From: Hanno Böck <[email protected]> Message-Id: <[email protected]>
2003-12-07 年,gentoo-core 邮件列表,“Manifest 的 GPG 签名”,此线程包含 Robin H. Johnson (robbat2) 编写的第一个 GnuPG 签名原型代码。Andrew Cowie (rac) 也在同一时间制作了一个概念验证。
Date: Sun, 7 Dec 2003 21:01:03 +0000 From: Douglas Russell <[email protected]> Message-Id: <[email protected]>
2004-03-23 年,gentoo-dev 邮件列表,“2004.1 不会包含安全的 Portage” - Kurt Lieber (klieber)。签名距离 2004.1 版本发布还很遥远,大家认识到签名缺乏足够的关注,问题很大。关于检查和验证方面的许多争论。关于 MD5 可能在不久的将来被破解的第一个警告信号。消息 ID [email protected],https://archives.gentoo.org/gentoo-dev/message/20968c7c86cd46458e0e3c2911a8dbd4
2004-03-25 年,gentoo-dev 邮件列表,“Redux: 2004.1 不会包含安全的 Portage” - Robin H. Johnson (robbat2)。又一个提案,总结了之前线程的要点,这次尝试跟踪各种弱点。消息 ID [email protected],https://archives.gentoo.org/gentoo-dev/message/fc6fc1c97bfae66806a0bfd9a9cf146f
2004-05-31 年,Gentoo 管理员会议,Portage 团队报告 FEATURES=sign 现已可用,但验证策略和程序以及密钥处理方面仍然存在大量问题。[ https://gentoolinux.cn/proj/en/devrel/manager-meetings/logs/2004/20040531.txt ]
2005-01-17 年,gentoo-core 邮件列表,“2005 年的全球目标:Portage 签名”。Thierry Carrez (koon) 建议投入更多精力到树签名工作中。线程后面部分的问题显示上游 gpg-agent 尚未准备好,以及其他一些小问题。
Date: Mon, 17 Jan 2005 11:04:50 +0100 From: Thierry Carrez <[email protected]> Message-ID: <[email protected]>
2005-02-20 年,gentoo-dev 邮件列表,“LWE 2005 后” - Brian Harring (ferringb)。关于持续缺乏签名的讨论,以及 eclasses 和配置文件也需要签名,但似乎目前依赖于 GLEP33。消息 ID [email protected],https://marc.info/?l=gentoo-dev&m=110893886214157&w=2
2005-03-08 年,gentoo-core 邮件列表,“GPG Manifest 签名统计”。非正式统计显示,树中 26% 的软件包包含一个签名的 Manifest。关于密钥类型和密钥策略的问题被提出。
Date: Tue, 8 Mar 2005 12:21:55 +0100 From: Torsten Veller <[email protected]> Message-ID: <[email protected]>
2005-11-16 年,gentoo-core 邮件列表,“Gentoo 密钥签名实践和官方 Gentoo 密钥环”。关于密钥处理和其他未解决问题的讨论,还提到了部分 Manifest,以及与 Slackware、Debian 和基于 RPM 的发行版中使用的签名程序的比较。
Date: Wed, 16 Nov 2005 12:29:46 -0800 From: "Robin H. Johnson" <[email protected]> Message-ID: <[email protected]>
2005-11-19 年,gentoo-portage-dev 邮件列表,“Manifest 签名” - Robin H. Johnson (robbat2) 回应了之前的 -core 帖子,讨论了实现问题。消息 ID [email protected],https://archives.gentoo.org/gentoo-portage-dev/message/1ffa48adfce79105cca532c00533c298
2006-05-18 年,gentoo-dev 邮件列表,“签名所有内容,为了乐趣和利益” - Patrick Lauer (bonsaikitten)。后来提出需要 Manifest2 来确保一切顺利。消息 ID 1147988717.32416.51.camel@localhost,https://archives.gentoo.org/gentoo-dev/message/91a60d78bb4822d89f6fcc7b19fd3588
2006-05-19 年,gentoo-dev 邮件列表,“Re: 签名所有内容,为了乐趣和利益” - Robin H. Johnson (robbat2)。介绍了 OpenPGP 标准的一些内容,重点介绍了它对文件签名、密钥签名、密钥管理和撤销的影响。消息 ID [email protected],https://archives.gentoo.org/gentoo-dev/message/5625b475f201639577cab33cdec58b47
2007-04-11 年,gentoo-dev 邮件列表,“Re: *DEVELOPMENT* 邮件列表,对吧?” - Robin H. Johnson (robbat2)。关于这些 GLEP 的进度报告。消息 ID [email protected],https://archives.gentoo.org/gentoo-dev/message/cfb032f3a878bcacfa0c4c3d2a0d3e7a
2007-07-02 年,gentoo-dev 邮件列表,“Re: Re: Gentoo 委员会 2007/08 提名开放” - Robin H. Johnson (robbat2)。另一个进度报告。消息 ID [email protected],https://archives.gentoo.org/gentoo-dev/message/b25efdb57f973e1f53b38eadc55de1ee
2007-11-30 年,portage-dev 别名,“Manifest2 和树签名” - Robin H. Johnson (robbat2)。这些 GLEP 的第一个审查线程,Marius Mauch (genone) 提出了很多建议。
Date: Fri, 30 Nov 2007 22:13:43 -0800 From: "Robin H. Johnson" <[email protected]> Message-ID: <[email protected]>
2008-04-03 年,gentoo-dev 邮件列表,“Re: 每月 Gentoo 委员会提醒(4 月份)” - Ciaran McCreesh (ciaranm)。一个线程,Ciaran 在其中提醒大家,仅仅让所有开发者签署树并不能阻止所有攻击。消息 ID 20080403130151.12507f1a@snowcone,https://archives.gentoo.org/gentoo-dev/message/8c492855d6e86b05fa399ad055ad6d18
2008-07-01 年,gentoo-portage-dev 邮件列表,“树签名的原型 GLEP” - Robin H. Johnson (robbat2)。此线程寻求 Portage 开发者的审查意见。消息 ID [email protected],https://archives.gentoo.org/gentoo-portage-dev/message/0a4b602eb348ac5bf4940320c4f2f9c6
2008-07-12 年,gentoo-portage-dev 邮件列表,“树签名的原型 GLEP,第 2 版” - Robin H. Johnson (robbat2)。整合了之前审查中的更改,并提供了一个签名代码的原型。zmedico 还发布了一个验证原型的补丁。消息 ID [email protected],https://archives.gentoo.org/gentoo-portage-dev/message/8d867c110b99e3562736907fa0864877
感谢
我要感谢 Patrick Lauer (bonsaikitten) 敦促我继续树签名项目,并帮助我进行拼写、语法和研究(尤其是追踪过去讨论中提到的所有可能的漏洞,并将它们整合到这个概述中)。
参考文献
[C08a] | Cappos, J 等人。(2008)。“软件包管理安全”。亚利桑那大学技术报告 TR08-02。可从以下网站在线获取:ftp://ftp.cs.arizona.edu/reports/2008/TR08-02.pdf |
[C08b] | Cappos, J 等人。(2008)。“对软件包管理器的攻击”。可从以下网站在线获取:http://www.cs.arizona.edu/people/justin/packagemanagersecurity/ |
[GLEP58] | (1, 2) Gentoo 软件分发的安全 - 从基础设施到用户分发 - MetaManifest https://gentoolinux.cn/glep/glep-0058.html |
[GLEPxx2] | (1, 2) 关于开发者流程安全的未来 GLEP。 |
[GLEPxx3] | 关于 GnuPG 策略和处理的未来 GLEP。 |
[Goller05] | Daniel Goller (morfic)。“[RFC] 版本化的 eclasses”。gentoo-dev 邮件列表,2005-01-21,消息 ID [email protected],https://marc.info/?l=gentoo-dev&m=110628152430403&w=2 |
[Lauer06] | Patrick Lauer (patrick)。“签名所有内容,为了乐趣和利益”。gentoo-dev 邮件列表,2006-05-18,消息 ID 1147988717.32416.51.camel@localhost,https://archives.gentoo.org/gentoo-dev/message/91a60d78bb4822d89f6fcc7b19fd3588 |
版权
版权所有 (c) 2005-2010 Robin Hugh Johnson。
此作品根据知识共享署名-相同方式共享 3.0 未本地化版本许可协议授权使用。要查看此许可协议的副本,请访问 https://creativecommons.org/licenses/by-sa/3.0/。