保守秘密的机器?

作者:Vinay Gupta

[我无法开始描述 Vinay Gupta 所做的一切。幸运的是,他在 http://re.silience.com 上进行了描述。在那里,他展示了在许多参与中的领导才能,您可以尽情享受数小时富有成效的阅读、聆听和观看——其中许多涉及各种 Linux。最近在伦敦与 Vinay 共度了一段时光后,我邀请他为我们撰写一篇关于他选择的任何主题的客座 EOF。他接受了邀请,这就是它。——Doc Searls]

Ultra 和 Mincemeat 的教训

英国陆军部从密码学中学到的最重要的事情是如何保守秘密:Enigma 在第二次世界大战初期在布莱切利公园被破解,足以改变战争和历史的进程。现在事情是这样的:只有当突破(称为 Ultra,这让您感受到它的重要性)是秘密的,Enigma 的泄露才能被用来击败纳粹。破解 Enigma 真的是一个“零日漏洞”,它摧毁了一个帝国。“零日漏洞”是只有攻击者知道的漏洞。防御者(那些创建/保护软件的人)从未见过该漏洞利用,因此,在他们完成分析之前,他们基本上无能为力。零日漏洞保密的时间越长,其未被发现的使用时间就越长,它所代表的绝对权力就越长。

就像在黑市上出售的任何现代零日漏洞一样,Enigma 泄露的价值仅在于它保持秘密。赌注更高,但游戏的基本模板——秘密泄露、秘密利用、发现后的厄运——至今仍然是计算机安全游戏的一种基本形式。盟军竭尽全力掩盖他们对 Enigma 的泄露,包括像 Operation Mincemeat 这样的陷阱(在伪装成溺水的英国军官的尸体上放置虚假文件)。斯诺登的揭露和其他工作表明,这场游戏仍在继续进行,数百万美元的纳税人资金被用于保持 NSA、GCHQ 和所有其他机构可以非法访问软件漏洞。首要规则是通过粗心的行动来泄露您在破坏敌人安全方面的成功;毕竟,斯诺登揭露的泄露工作在公众意识到之前已经运行了很多年。

软件为谁服务?

我想提出我们对计算机安全态度的一个根本问题。长期以来,我们基本上假设计算机就像任何其他工具一样。袖珍计算器和超级计算机集群都共享相同的冯·诺依曼架构(也是二战的产物)。但事实是,计算机从其最初的真正实现开始,也是一台用于保守和寻找秘密的机器。这种历史不仅适用于英国人颠覆以帮助击败纳粹的 Enigma 机器,也适用于 IBM 的 Hollerith 制表机,纳粹使用它从人口普查数据库中识别犹太人。

这就是为什么我们现在使用的通用计算模型非常难以安全的原因。在概念层面上,所有程序都被假定为用户的直接代表(或超级用户)。这从根本上来说是一个错误,一个概念上的错误,任何数量的附加层都无法修复这个根本错误:软件为其作者服务,而不是为其用户服务。当然,Richard M. Stallman 清楚地理解这一点,但主要关注于解放源代码,让技术用户控制他们的软件。但是,除了现在陈旧的格言“有足够的眼睛,所有错误都是肤浅的”之外,整个安全社区并没有回到基本层面,正确地分配软件的意图:给它的作者,而不是给它的用户。一旦我们承认软件为编写它的人工作,而不是为那些不幸运行它的人工作,那么许多计算机安全管理问题就会变得更加清晰,即使不是更容易!此外,总是有小精灵:不和谐表现为错误。没有人为预期的软件行为不仅很常见,而且无处不在。在这些情况下,软件既不为用户也不为作者服务,而是默默地增加了宇宙本身的熵。

想象一下,如果您每天使用的所有软件的编写者都是可见的。如果您运行一台完全自由的计算机,一直到 BIOS,您通常会期望看到一群完全站在您这边的人。但随后还有路由器,以及鼠标和电话基带处理器中的固件,以及为您的设备必须连接的电网供电的史诗般的软件迷宫等等。事实上,我们不喜欢或不信任许多编写软件的人,而我们的生活在很多方面都依赖于这些软件。坦率地说,在 21 世纪,我们仍然下载并运行可以任意访问我们所有个人文件、数据,并且常常可以深入访问我们操作系统的程序,这简直是疯了。我不是在讨论沙箱或虚拟环境——这些可能是答案,但让我们首先清楚地说明问题:这台机器为谁服务?

这台机器为其软件的作者服务,而不是为选择运行它的人服务。如果您最近在 Android 手机上安装软件时交出了您不太乐意授予的权限,您会感到一种“不,我不希望您这样做——那是您的愿望,而不是我的愿望!”的感觉。通常,我们并不完全信任这些作者、他们的软件或运行它的硬件。我们真的无法信任我们的财产。没有人想在口袋里携带告密者,但我们都这样做了。

在理想的世界中,我们所有的系统(或许不仅仅是技术系统)都会遵守最小权限原则。我们可以以更狭隘的方式授予权限,而不是向代码(或其他系统)授予大量抽象的权力并信任不会出现错误。考虑一下我们授予几乎所有软件守护进程的非常典型的“程序可以看到整个文件系统”权限:当出现问题时,会导致像 Squid 在重新启动时删除您的根文件系统这样的灾难。为什么 Squid 需要这样做?为什么甚至持有这些钥匙?

如果我们选择不信任所有人会发生什么?

曾经有一条未被采纳的道路:基于能力的操作系统。基于能力的操作系统真的是保守秘密的机器。它们假设所有代码都是由我们不信任的人编写的,并且代码可能包含破坏性错误,如果不是直接的攻击。“所有代码都是不受信任的代码”为操作系统在保护用户免受他们自己下载的工具的侵害方面创建了一个完全不同的角色。这是一个关于软件是什么样子的现实模型,一个明确的不信任模型,不像我们在安装许多其他人正在使用的软件时感受到的模糊信任,认为“有足够的眼睛,所有错误都是肤浅的,所以我确信这会没事的。”这不是一个很好的信任模型!基于能力的系统假设所有代码都可能是恶意的,即使是用户编写的代码(错误!),因此,默认情况下,它在最深刻的意义上是不受信任的。

一个裸程序什么也做不了——没有网络,没有文件系统访问,什么也没有,除非它被授予权限,并且操作系统为授予和管理这些权限提供了一个平滑的界面。这不像 Android 模型,在 Android 模型中,应用程序可以访问“您的地址簿”等高级结构;相反,这从该级别一直扩展到低级别的逐文件访问控制模型。

在对象能力模型中,程序无法打开目录或搜索文件,除非用户允许,尽管通常这种允许是隐含的。例如,将打开的文件句柄作为命令行参数传递将授予相关程序访问该文件的权限。shell 可以为用户无缝管理这些打开的文件句柄,以对用户无缝且透明的方式打开文件并传递其句柄。没有该权限,所有访问文件的尝试都将以失败告终;就软件而言,该资源根本不存在。

为了达到这种安全地位,人们必须非常清楚软件的政治性。这段代码是为什么编写的?它为谁服务?它为谁的利益服务?Cui bono? 即使唯一的非法优势是一个或两个错误,仅仅是为了增加宇宙的熵,我们也必须承认,当我们真正深入了解时,如果您自己没有编写软件,那就像把您房子的钥匙交给别人一样。但是,不必这样。

每当我使用现代 Linux 机器写下这行论点时,我都会感到不安,因为我很清楚,我使用 apt-get install 安装到我计算机上的每一样东西都可能中继我的按键,因为一旦我安装了它,它就会像我一样行动,无论我是否希望这种行为,每时每刻都是如此。

计算机是一台保守和寻找秘密的机器。

是否存在进化升级路径?

我不是建议我们抛弃已经完成的一切并重新开始。我怀疑,在很大程度上,通过共同努力,可以将基于能力系统的思想全面地重新集成到 Linux 中。Security-Enhanced Linux 使用了这些术语,但没有提供完整的对象能力模型。后斯诺登时代,现在充分意识到高级持续性威胁类型的攻击在我们的机器上是多么普遍,似乎应该可以开始重新考虑我们对软件和安全的认知,以适应我们所处的新操作环境。但是,我们能否从长期建立的 SELinux 项目发展到这些目标?

这并不是一个直接的主张,原因有二:SELinux 当前的局限性以及 SELinux 的编写者问题。

SELinux 当前建立在 Linux 的 POSIX 能力之上,POSIX 能力是将 root 的权力划分为一组隔间,避免使用 setuid 的一种方式。这很重要,因为在特权提升错误的情况下,非法获得的特权不是 root 的全部权力,而是这些权力的受限子集:名义上,在 SELinux 下,破解“sudo tail /log/stuff”不会让您访问网络堆栈中的安装新软件或任何其他无关的东西。您可能可以读取您不应该读取的内容,但您无法写入任何东西。但是,SELinux 中的 POSIX 能力模型(令人困惑地)不是完全成熟的对象能力模型,因为它不允许委派,并且(就我从文档中可以看出的!)仅适用于超级用户特权。它来自不同的理论基础。

在一个具有委派功能的完全成熟的对象能力系统中,例如 GNOSIS、KeyKos(在生产系统中使用)、EROS、CapROS 和 Coyotos 的研究操作系统谱系中,程序(比如移植版本的 GIMP)被运行并且是盲目的。它看不到文件系统、网络堆栈或任何其他东西;它存在于虚空中。用户打开一个文件系统浏览器并将文件传递给程序,并且随之而来的是一组必要访问密钥,这些密钥由操作系统隐形地传递。这些可以实现为加密令牌,有点像 Kerberos,或者作为操作系统级别的权限授予。现在 GIMP 可以看到该文件了。它可以将令牌传递给操作系统,就像文件名或句柄一样,然后操作系统将打开/关闭文件等等。此外,但是,在允许的情况下,它可以将该令牌传递给另一个程序。想要运行一个仅作为命令行实用程序存在的外部过滤器?GIMP 可以将该令牌传递给外部实用程序;查看文件的权限是一种可转移的资产。而且,此模型跨越计算机。Wi-Fi 访问的令牌可以从一台机器传递到另一台机器作为委派权限,并且权限可以被链接和组合。某些东西可以代表您行事(它有令牌),但就软件而言,它不是您。

假设打印机需要来自一个用户的网络访问权限,以及来自另一个用户的要打印的文件。通常这有点棘手。您通常最终会得到一个用户通过电子邮件将文件发送给另一个用户,因为打印机希望为单个人工作:身份验证就是授权。在对象能力系统中,打印机(或设备,或程序)只是组装能力,直到它拥有完成工作所需的全部能力。这完全打破了人们(非常普遍地)将具有无限权力的密码传递给他们实际上希望在远程机器上完成一项特定工作的人的模式。控制的粒度要精细得多,委派比密码身份模型更适合我们现实世界的安全用例。您仍然可以使用密码登录,但之后,它是委派的能力,用于管理不受信任的软件(和不受信任的人),一直向下。在当今不安全的时代,这听起来不像是一种更好的经商方式吗?

现在是第二个问题:谁编写了 SELinux?

NSA Security-Enhanced Linux 是一组针对 Linux 内核的补丁和一些实用程序,旨在将强大、灵活的强制访问控制 (MAC) 架构集成到内核的主要子系统中。它提供了一种增强的机制来强制执行基于机密性和完整性要求的信息分离,这允许解决篡改和绕过应用程序安全机制的威胁,并能够限制恶意或有缺陷的应用程序可能造成的损害。它包括一组旨在满足常见、通用安全目标的示例安全策略配置文件。

SELinux 背后的 NSA 团队在 2000 年底以 FOSS 许可证发布了它。现在我们需要问问自己,它是什么?我们有充分的理由从斯诺登的文件中怀疑,长期以来试图破坏开放和学术安全工作是 NSA 任务的一部分——例如,通过引入有缺陷的算法并让 NIST 认可它们作为可信标准来颠覆国家标准与技术研究所的密码学认证过程。而且,正如 OpenSSL 的痛苦经历(Heartbleed)向我们展示的那样,“有足够的眼睛,所有错误都是肤浅的”实际上并没有为我们带来多少安全性。在 Heartbleed 漏洞将世界的焦点转移到 OpenSSL 报酬过低的开发团队的困境之前,OpenSSL 的资金严重不足(每年 2,000 美元!)。GPG 的开发团队也同样资金不足。这行不通。

所以现在我们必须以与(可悲的是)Tor 项目大致相同的眼光看待 SELinux——由深度不可信的来源资助的 FOSS 安全工具,这些来源长期以来一直强制破坏安全、隐私和用户对其自身计算机的控制。在这些情况下,我们是否有足够的眼睛能够信任代码?SELinux 是仅有的四个可以在 Linux 下提供此类控制的系统之一(其他系统是 AppArmor、Smack 和 Tomoyo),它们使用相同的底层 POSIX 能力。眼球是正确的衡量标准吗?这是否足够多的眼球?

这些持续存在的问题触及了我们安全开发过程的核心。我希望在未来几年,我们能找到一种好的方法来资助必要的安全工作,我们以及日益增长的整个世界每天都在依赖这些工作。

进入 Capsicum。Capsicum 是一个相当认真的推动力,旨在将基于能力的安全性完整实现深度集成到 FreeBSD 中。目前正在努力为 Linux 创建 Capsicum,并且工作正在继续。对于为用户提供与其现在所知的后斯诺登环境相适应的安全级别而言,这似乎是一种明智而显而易见的方法。因为任何有缺陷的软件都假定具有作为用户或超级用户的完全权限,具体取决于它是浏览器还是守护进程等用户代理被入侵(大致来说),我们面临着挑战。要么完美地拧紧整个星舰上的每一颗螺栓,并且不要遗漏一颗,要么安装舱壁并将空间划分为安全区域,这样,如果出现泄露,它也不会是系统性的。

拧紧螺栓的安全方法当然是必要的,但我看不到在没有基于能力的操作系统概念大规模进入 Linux 的情况下,如何在充当安全端点的设备上为用户提供全面的隐私和安全,而现在,这似乎意味着 Capsicum 是唯一的选择。这是一个非常紧迫的问题。端点安全漏洞真的开始产生系统性影响。让我解释一下。

如果我今天不必像现在这样信任我笔记本电脑上的数千个应用程序,我会感到更加安心,并且我对我的不安有非常具体的原因:私钥管理。我现在为 Ethereum 工作,这是一个 FOSS 项目,致力于开发构建全球分布式元计算机的软件,其中包括区块链数据库。它有点像比特币,但它使用数据库以“合约”(您信任管理您的资产的小脚本)的形式存储可执行软件。

我认为 Ethereum 非常酷。我们期望看到该平台的许多非常有趣的用例。许多人可能会最终深度依赖使用该软件的服务。例如,针对日益混乱的 DNS 和颁发 SSL 证书的全面解决方案可能会来自具有脚本的全球分布式数据库:在区块链上注册一个域名,并使用您用于支付域名注册的相同密钥自行发布您的证书。简单。Namecoin 已经给出了一些可能的想法,我毫不怀疑未来会有更多。

风险不仅仅在于个人用户被入侵并且他们的合约被欺骗。在分布式系统中,存在单一文化风险。如果我们有个人用户因为他们的笔记本电脑落后于最前沿的安全补丁版本而被黑客入侵,这已经够糟糕的了。我们都听说过大量比特币蒸发到一些小偷的口袋里的故事。但是,如果我们只有三个主要的操作系统,由 >99% 的用户运行,请考虑零日漏洞可能被用来通过攻击底层共识算法来破坏整个网络完整性的风险。如果网络上足够多的计算机说 2+2 = 5,那么区块链的本质是 2+2 不仅等于 5,而且它将永远等于 5。

如果区块链技术最终成为 DNS 和 SSL 命名空间问题的解决方案(我认为这种结论很可能,并且我可能会在未来为本刊撰写文章),那么这种错误可能会对日常生活造成巨大破坏。一旦共识协议受到受损机器的攻击,我们可能会失去与大部分互联网的基本连接。如果零日漏洞被用来构建滥用或仅仅发布私钥的恶意软件,那么这也可能对个人用户以及整个去中心化数据库造成灾难性影响。如果事实证明区块链对于物联网至关重要(IBM 有一个基于 Ethereum 的项目 ADEPT,正在研究区块链和物联网),那么即使区块链本身和我们的软件是安全的,我们也以 PC 的形式质押了命运,PC 用于管理密钥和存储所有这些价值和效用的代码。

存在一个紧迫的问题,用户开始在他们的机器上存储非常真实的价值,不仅仅是以间接访问银行网站价值的形式,而是以直接访问他们自己的私钥和在形成整个区块链的共识算法中的政治角色的形式。这一切都变得比有人读取一个人的电子邮件或私人日记更系统化,也可能更严重。

目前,区块链技术持续采用中最薄弱的环节是操作系统安全。人们担心自己会被黑客入侵,这阻止了许多用户在自己的机器上使用软件进行计算(以使用 Stallman 模型)。相反,理论上更安全的第三方网站钱包很常见——本质上,人们将他们的比特币和类似的“存储在云端”,因为他们不信任自己的 PC 到足以以去中心化的方式存储价值。从 Stallman 通常的分析模式来看,这否定了基于区块链的方法的许多去中心化优势。从 Stallman 通常的分析模式来看,这显然是一个巨大的问题。

当然,在历史上的这个时刻,我们应该让计算回归其根源。计算机是一台保守我的秘密的机器:我的银行详细信息、我的加密货币持有量、我的私钥,这些私钥控制着代表我在区块链、物联网或虚拟现实或任何其他环境中操作的软件。用户越来越有必要能够在自己的机器上实际存储价值,而现在,玩弄零日漏洞并不是让这场革命继续下去的足够好的安全模型。我们必须回到这个难题:如何阻止其他人在没有首先征求我的意见的情况下告诉我的计算机该做什么?

没有安全端点的加密作用不大,而现在,操作系统安全是最薄弱的环节。我期待您对我们如何以持续的方式解决这些问题的想法——既作为提高认识和资助模式的问题,也为了普通用户获得真正安全的长期艰苦追求。普通人应该能够在他们的家用电脑上存储价值,而不会感觉他们自动打开了前门,钥匙还插在锁里。我们如何为人们提供与其银行账户或比特币持有量相当的保护级别?这是加密货币、区块链甚至物联网面临的真正挑战。如果我们不能信任用户的设备,我们如何给他们所有这些访问和对用户生活的权力?

对于普通用户来说,这场革命正在停滞不前,因为他们无法信任他们的操作系统来保护他们的私钥,从而保护他们的帐户。现在怎么办?

致谢

我想感谢以下几位人士的投入:惠普实验室的 Alan Karp,以及 Google(和 Capsicum)的 Ben Laurie 和 David Drysdale。

还要感谢 Doc,感谢他邀请我做这件事。

资源

英国陆军部:https://en.wikipedia.org/wiki/War_Office

Enigma:http://www.bbc.co.uk/history/topics/enigma

布莱切利公园:http://www.bletchleypark.org.uk/content/hist/worldwartwo/industrialisation.rhtm

Ultra:https://en.wikipedia.org/wiki/Ultra

“零日漏洞是如何买卖的”:http://null-byte.wonderhowto.com/inspiration/zero-day-exploits-are-bought-sold-0159611

Operation Mincemeat:https://en.wikipedia.org/wiki/Operation_Mincemeat

The Man Who Never Was(一部关于 Operation Mincemeat 的电影):https://en.wikipedia.org/wiki/The_Man_Who_Never_Was

“NSA 从法国安全公司 Vupen 购买零日漏洞”:http://www.zdnet.com/article/nsa-purchased-zero-day-exploits-from-french-security-firm-vupen

IBM 和大屠杀:https://en.wikipedia.org/wiki/IBM_and_the_Holocaust

最小权限原则:http://en.wikipedia.org/wiki/Principle_of_least_privilege

“重新启动 squid 的测试版本会导致删除硬盘驱动器中的所有文件”:https://bugzilla.redhat.com/show_bug.cgi?id=1202858

基于能力的安全:https://en.wikipedia.org/wiki/Capability-based_security

从对象到能力:基于能力的操作系统:http://erights.org/elib/capability/ode/ode-capabilities.html

Security-Enhanced Linux:https://en.wikipedia.org/wiki/Security-Enhanced_Linux

POSIX 能力:https://friedhoff.org/posixfilecaps.html

“在 Linux 中使用 POSIX 能力,第一部分(避免使用 setuid)”:http://archlinux.me/brain0/2009/07/28/using-posix-capabilities-in-linux-part-one

EROS(极其可靠的操作系统):http://www.eros-os.org/eros.html

CapROS(基于能力的可靠操作系统):http://www.capros.org

Coyotos 安全操作系统:http://www.coyotos.org

“像我 5 岁一样解释:Kerberos”:http://www.roguelynn.com/words/explain-like-im-5-kerberos

谁编写了 SELinux?:https://www.nsa.gov/research/selinux

补丁:https://en.wikipedia.org/wiki/Patch_(computing)

Linux 内核:https://en.wikipedia.org/wiki/Linux_kernel

强制访问控制 (MAC):

“科技巨头启动‘核心基础设施倡议’以保护关键开源组件”:http://www.securityweek.com/tech-titans-launch-core-infrastructure-initiative-secure-key-open-source-components

Heartbleed:

“互联网正受到两位名叫 Steve 的人的保护”:http://www.buzzfeed.com/chrisstokelwalker/the-internet-is-being-protected-by-two-guys-named-st#.earzPzxNAB

“美国政府增加对 Tor 的资助,2013 年提供 180 万美元”:http://www.theguardian.com/technology/2014/jul/29/us-government-funding-tor-18m-onion-router

Clipper Chip:https://en.wikipedia.org/wiki/Clipper_chip

Google 透明度报告:https://www.google.com/transparencyreport/userdatarequests/US

“Capsicum:UNIX 的实用能力”:https://lwn.net/Articles/482858

Linux 的 Capsicum:https://www.cl.cam.ac.uk/research/security/capsicum/linux.html

带有 Capsicum 支持的 Linux 内核:https://github.com/google/capsicum-linux

Ethereum:https://ethereum.org

智能合约:https://en.wikipedia.org/wiki/Smart_contract

初学者 Dapps(Ethereum 合约教程):https://dappsforbeginners.wordpress.com

Namecoin:https://namecoin.info

“比特币黑客历史”:http://www.theguardian.com/technology/2014/mar/18/history-of-bitcoin-hacks-alternative-currency

设备民主——拯救物联网的未来:http://public.dhe.ibm.com/common/ssi/ecm/en/gbe03620usen/GBE03620USEN.PDF

端点安全:http://searchmidmarketsecurity.techtarget.com/definition/endpoint-security

加载 Disqus 评论