使用 Qubes 的安全桌面:隔离

作者:Kyle Rankin

这是我关于 Qubes 系列文章的第三篇。在前两篇文章中,我概述了 Qubes 是什么,并描述了如何安装它。 Qubes 的一个决定性的安全特性是它如何让您将不同的桌面活动隔离到单独的虚拟机中。通过隔离实现安全性的理念是,如果您的某个虚拟机被入侵,损害仅限于该虚拟机。

当您第一次开始使用 Qubes 时,您可能不太确定如何最好地将所有文件和活动划分为单独的虚拟机。我知道当我第一次开始使用它时,我从 Joanna Rutkowska(Qubes 的创建者)的关于她如何使用 Qubes 的论文中找到了灵感。在本文中,我描述了如何在我的个人计算机上将我的活动组织到虚拟机中。虽然我不是说我的方法是完美的,而且我当然可以使事情更加安全,但我至少会为您提供一个您可以用来入门的示例。

Qubes 概念摘要

在我的上一篇文章中,我详细阐述了 Qubes 的总体概念,例如不同的虚拟机类型、信任级别和其他功能,但由于我在本文中也提到了这些概念,因此这里有一个简短的摘要。(如果您想了解更多信息,请阅读我在 2016 年 4 月和 5 月刊中发表的专栏。)

使用 Qubes 需要理解的第一个概念是,它根据用途将虚拟机分组到不同的类别中。以下是我在本文其余部分中提到的虚拟机的主要类别

  • 一次性虚拟机 (Disposable VM):这些虚拟机也称为 dispVM,专为一次性使用而设计。应用程序关闭后,其中的所有数据都将被擦除。

  • 域虚拟机 (Domain VM):这些虚拟机通常也称为 appVM。它们是运行大多数应用程序以及用户花费大部分时间的虚拟机。

  • 服务虚拟机 (Service VM):服务虚拟机分为 netVM 和 proxyVM 子类别。这些虚拟机通常在后台运行,并为您的 appVM 提供服务(通常是网络访问)。

  • 模板虚拟机 (Template VM):其他虚拟机的根文件系统模板来自模板虚拟机,一旦您关闭 appVM,您对该根文件系统所做的任何更改都将被擦除(只有 /rw、/usr/local 和 /home 中的更改会保留)。通常,除非您正在安装或更新软件,否则模板虚拟机保持关闭状态。

当您创建任何类型的新虚拟机时,您可以根据您对信任级别的连续统(从红色(不受信任)到橙色和黄色到绿色(稍微更受信任)到蓝色和紫色和灰色(更受信任)到黑色(最终受信任))为其分配颜色。特定虚拟机的窗口边框和图标会根据其信任级别进行着色,因此您可以获得视觉提示,以帮助您防止例如将受信任的密码粘贴到不受信任的虚拟机中。

虽然默认情况下,您创建的所有新 Qubes 虚拟机都具有不受限制的网络访问权限,但 Qubes 允许您创建防火墙规则来限制虚拟机可以执行的操作。如果您的虚拟机不需要网络访问(例如,您可以用来存储 GPG 密钥和密码库的高度受信任的 vault 虚拟机),您甚至可以完全删除网络设备。

在默认安装中,Qubes 提供了一些 appVM 来帮助您入门

  • untrusted appVM:红色。

  • personal appVM:黄色。

  • work appVM:绿色。

  • vault appVM:黑色。

其理念是让您在不受信任的虚拟机中执行任何通用不受信任的活动(例如,一般网页浏览),并且不要在那里存储任何个人文件。然后,您可以在个人虚拟机中执行更受信任的活动,例如查看您的电子邮件或任何需要个人凭据的网页浏览。您可以在工作虚拟机中查看您的工作电子邮件并存储您的工作文档。最后,您可以将您的 GPG 密钥和密码管理器文件存储在 vault 中(vault 完全没有网络)。虽然这对于入门来说很好,但正如您所看到的,您可能希望进一步隔离您的活动和文件。

安装程序还会创建 sys-net、sys-firewall 和 sys-whonix 服务虚拟机,分别为您提供网络访问、appVM 的防火墙和 Tor 网关。您还可以选择启用 sys-usb 服务虚拟机,该虚拟机被分配了您的所有 USB 控制器,以保护系统的其余部分免受基于 USB 的攻击。

我的个人计算机

我的个人计算机是一台 Purism Librem 13,我的通用桌面使用非常基本。以下是我按风险顺序列出的常用活动列表

  • 网页浏览。

  • 查看电子邮件。

  • 在 IRC 上聊天。

  • 使用我的 3D 打印机。

  • 撰写文章。

一般来说,网页浏览和电子邮件是我每天在计算机上执行的最危险的活动,因为它们可能会使我接触到恶意文件附件和其他入侵。另一方面,我只需要一个没有网络访问权限的文本编辑器来撰写文章,所以这是一个非常安全的活动。下面我列出了我根据这种使用类型创建的不同 appVM,从最不受信任到最受信任排序。我还展示了我为虚拟机分配的颜色,并描述了我如何使用每个 appVM。

dispVM—红色

每当我执行特别危险的操作时,例如当我想查看可疑的 URL 时,我都会使用一次性虚拟机。例如,我的邮件客户端配置为在一次性虚拟机中自动打开所有附件(基于官方的Qubes mutt 指南)。这样,即使有人向我发送恶意的 Word 文档或 PDF,我也可以在一次性虚拟机中阅读它,并且攻击被隔离在该虚拟机内部。当我关闭文档时,它正在运行的任何恶意程序都会消失,同时,攻击者无法访问我的任何个人文件。

untrusted—红色

我的 untrusted appVM 是我执行所有通用网页浏览的地方,但不包括任何需要用户名和密码的网站。它可以不受限制地访问互联网。我已经设置了一些更受信任的虚拟机(例如我在其中进行 IRC 聊天的虚拟机)来自动在此虚拟机中打开 URL(通过将该 appVM 中的默认 Web 浏览器设置为 qvm-open-in-vm 命令行工具)。我不在我的 untrusted 虚拟机中存储任何个人文件,因此如果我觉得我打开的 URL 看起来特别可疑,我可以删除该虚拟机并重新创建它,并且在不到一分钟的时间内,我就可以恢复到一个干净的 untrusted 虚拟机。

由于我使用此虚拟机浏览随机网站,并且可能会打开模糊的 URL 缩短网址,因此它是最有可能被入侵的虚拟机之一。也就是说,因为我没有在该虚拟机中存储任何个人文件,并且我没有浏览到任何需要用户名和密码的网站,所以攻击者除了使用该虚拟机的网络和 CPU 资源外,最多只能查看我的通用浏览习惯。

fb—橙色

一些读者可能会惊讶地发现我有一个 Facebook 帐户。我个人不会在我的帐户上发布太多内容(当我发布内容时,我只发布我乐意让全世界看到的东西),但像你们中的许多人一样,我有一些不经常见面的朋友,他们只在 Facebook 上发布关于他们生活近况的信息。我担心围绕 Facebook 跟踪我在 Web 上的每一次移动的隐私问题,但我仍然希望能够查看我朋友的帖子,如果不登录就无法做到这一点。

我的折衷方案是创建一个专门用于 Facebook 的特殊 appVM,除此之外什么也不做。此 appVM 配置为使用 sys-whonix proxyVM 进行网络访问,因此其所有流量都通过 Tor,并且我使用 Facebook 的 Tor 隐藏服务来访问该网站。通过这种方式,任何跟踪 cookie 都仅限于此 appVM 内的 Web 浏览器;Tor 可以防止除 Facebook 之外的任何其他服务器知道我正在使用 Facebook,甚至 Facebook 本身也不知道我的 IP。

personal-web—黄色

由于网页浏览是人们可以执行的风险较高的活动之一,因此我决定不仅将经过身份验证的网页浏览与通用网页浏览分开,而且还与我的其余个人文件分开。由于提供登录的网站通常也允许您通过 HTTPS 登录,因此我限制了此虚拟机的网络访问权限,使其只能连接到互联网上的端口 443。personal-web appVM 专门用于任何需要用户名和密码的网站(银行业务除外)。因此,例如,当我在网上购物时,我可能会使用我的 untrusted 虚拟机,但当我准备好登录并购买东西时,我使用我的 personal-web appVM。我已经设置了我的密码库,以在此 appVM 中自动打开 URL,而不是在 untrusted 虚拟机中打开。

这里的想法是防止通过恶意网站入侵我的 untrusted appVM 的攻击者能够获取我的任何 Web 凭据。虽然攻击者确实可以通过 personal-web 入侵我登录的许多网站之一来获取其他网站的凭据,但他们仍然无法访问我的任何个人文件(如文档或 GPG 或 SSH 密钥)。他们也无法访问我的银行业务,因为我将我的银行业务隔离到其自身的虚拟机中。一些担心这类事情的 Qubes 用户最终会为任何经过身份验证的会话启动一次性虚拟机。

personal—黄色

我的 personal appVM 最接近于传统的用户主目录,它包含我的大部分个人文件,例如我的 SSH 密钥。也就是说,我不会从此 appVM 进行任何网页浏览,而是使用 untrusted、personal-web 或 finance 虚拟机进行网页浏览。我主要使用此虚拟机 ssh 到我管理的其他服务器、查看电子邮件、连接到我用于 IRC 的远程 screen 会话以及管理一些个人 GitHub 项目。因此,我可以限制 Qubes 防火墙,使其仅允许出站 SSH 连接到任何远程 IP,否则仅显式打开我的邮件服务器所需的少数 IMAP 和 SMTP 端口。

由于此虚拟机包含我的大部分个人文件和我的(受密码保护的)SSH 密钥,因此我比在其他一些虚拟机中更谨慎地执行此虚拟机中的操作。这是我不从此虚拟机浏览 Web 的一个重要原因,也是我虽然从此虚拟机查看电子邮件,但会自动在一次性虚拟机中打开所有附件的原因。

printrbot—绿色

我决定专门设置一个特殊的 appVM 用于与我的 printrbot 交互,因为我有一个共享的内部网络卷,我挂载该卷来存储我的所有 3D 模型。此虚拟机控制我的 3D 打印机,并启动我用来修改和切片 3D 模型的 Cura 程序。通过将其拆分到其自身的 appVM,我可以使用 Qubes 防火墙将访问权限限制为仅我的本地 Octoprint 服务器和我的网络存储,因为此虚拟机不需要使用整个互联网。

finance—绿色

由于个人的金融账户与其他账户相比有多么敏感,因此我决定创建一个通常处于关闭状态的特殊 appVM,我仅将其用于银行业务。这样,我的银行凭据就不会泄露到其他 appVM。此虚拟机被锁定,以便它只能连接到互联网上的端口 443,如果我想进一步锁定它,我可以将其限制为仅属于我的银行网站的主机名。

writing—蓝色

此虚拟机是我现在正在使用的虚拟机,因为它是我存储所有个人文档并组织我的写作的地方。我决定将此活动与其他活动隔离,部分原因是我不想冒险泄露我正在撰写的未发布的书籍,但也因为我意识到此虚拟机实际上不需要任何网络,除了访问我用来组织一些写作项目的本地 git 存储库之外,所以我可以创建非常严格的防火墙规则。

vault—黑色

vault 是我的环境中最敏感和最受信任的 appVM。为了使其尽可能安全,而不是仅仅为此主机创建严格的防火墙规则,它根本没有网络设备。我使用此虚拟机来存储我的 GPG 密钥和我的 KeepassX 密码库。Qubes 提供了一种称为 split-GPG 的服务,该服务充当 GPG 包装程序,您可以在其他 appVM 中使用它,只要您想访问 vault 内的 GPG 密钥。基本上,想要访问密钥的 appVM 使用 Qubes 包装脚本将其加密或解密有效负载发送到 vault 虚拟机。您会在桌面上收到一个彩色提示,询问您是否希望允许 appVM 在设定的时间内访问 vault 的 GPG 密钥。如果您接受,有效负载将发送到 vault,vault 对其进行加密或解密,然后输出将返回到 appVM。通过这种方式,您的 appVM 永远不会看到 vault 中的 GPG 私钥,它的行为有点像一个简陋的硬件安全模块。

我希望看到我如何组织我的 Qubes 桌面将帮助您弄清楚如何最好地组织您自己的虚拟机。一般来说,这归结为根据风险将不同类型的活动和文件彼此分开。指导原则是假设有可能闯入特定的虚拟机(特别是,不太受信任的虚拟机),并尝试限制任何特定虚拟机拥有的文件和访问权限。如果您想要关于 Qubes 最佳实践的更具体指南,首先要访问的是 Qubes 自己的文档页面,因为它为常见活动(如设置 split-GPG)提供了许多有用的指南。

Kyle Rankin 是 Linux Journal 的技术编辑和专栏作家,也是 Purism 的首席安全官。他是 Linux Hardening in Hostile NetworksDevOps TroubleshootingThe Official Ubuntu Server BookKnoppix HacksKnoppix Pocket ReferenceLinux Multimedia HacksUbuntu Hacks 的作者,也是许多其他 O'Reilly 书籍的贡献者。 Rankin 经常就安全和开源软件发表演讲,包括在 BsidesLV、O'Reilly Security Conference、OSCON、SCALE、CactusCon、Linux World Expo 和 Penguicon 上。您可以在 @kylerankin 上关注他。

加载 Disqus 评论