在 ubuntu 中沙箱 X 应用程序的最佳方法

信息安全 linux 沙盒
2021-08-26 21:38:37

在ubuntu中沙箱化像firefox或thunderbird这样的X应用程序的最佳方法是什么(进入qubes os所做的方向,但仅适用于单个应用程序)?

我知道有许多不同的沙盒技术。例如

  • 仅使用虚拟盒:这似乎非常安全,但资源过度使用。您需要 VirtualBox 中的最小操作系统才能运行 firefox。

  • 使用SE-Linux 沙盒技术这似乎是最好的选择,但据我所知,SElinux 在 ubuntu 中可用,但默认配置得不是很好(例如与 RedHat-linux 相比)。此外,SELinux 的沙箱部分似乎丢失了:https ://unix.stackexchange.com/questions/67127/how-do-i-install-selinuxs-sandbox-utility-on-linux-mint-debian-edition?lq =1所以必须编译它。

  • apparmor 等价物似乎还没有准备好生产,据我所知,目前还没有随 ubuntu 一起提供。但是,我无法估计开发的状态是什么,以及是否值得等待下一个 ubuntu 版本,它可能会成为其中的一部分。

  • gnome 桌面似乎支持X-sandboxing我不清楚是否可以以独立于 wm 的方式使用它。

  • lightweigt 工具mbox似乎只在文件系统级别上运行,这对于 X 应用程序来说是不够的。

  • 自制的 chroot 解决方案也是如此,例如sandfox-script

  • 比 chroot 更轻量级和安全的选项似乎是Plash但我不确定 X 保护的实施情况如何。

  • 相同的免疫FBAC-LSM

  • 还有一个名为arkose的程序似乎很好地支持 ubuntu,但同时很少有关于它如何工作的文档,我不知道它与其他方法相比有多安全。

  • Docker似乎更多地用于服务器应用程序而不是桌面应用程序。我不知道它对于 X 应用程序是否安全。有一个名为 kagome 的较新项目它似乎将 Docker 与 xephyr 结合起来进行 X 隔离。但作者指出 docker 存在一些安全漏洞,最好切换到其他容器解决方案,例如 systemd-nspawn、rkt 或 lxd。

  • 其他解决方案有:seccomp-nurseRainbowvagrantup

  • 最后,特别是对于 firefox,有一个适用于 ubuntu的apparmor 配置文件,但默认情况下未启用这不是沙箱,但在使用 firefox 时应该为您提供一定程度的安全性(但我不知道它与上面的沙箱解决方案相比如何)。

所以似乎有很多方法,但我不知道这些方法如何(以及为什么)在沙盒X应用程序(如 firefox 或 Thunderbird)的安全性方面进行比较,在可用性方面,尤其是在 ubuntu-linux 中,并且已经准备好生产并且运行良好支持的。如果有人可以提供一些有关此的详细信息,如何对它们进行分类以及其中哪些值得我仔细研究以达到我的目的,那就太好了。

3个回答

您可以使用子用户使用Docker对应用程序进行沙箱处理。假设您想对 Firefox 进行沙盒处理:

您将创建一个文件夹my-subuser-images,然后firefox在第一个文件夹中创建第二个文件夹:

my-subuser-images/firefox

firefox文件夹中,您需要创建另一个子文件夹:docker-image

完成后,您需要创建两个文件:

  • permissions.json

  • docker-image/SubuserImagefile

您的文件布局应该类似于在subuser-default-repository中找到的布局

permissions.json文件中,您告诉子用户 Firefox 可以做什么:

{"description":"A popular web browser."
,"maintainer":"student"
,"executable":"/usr/bin/firefox"
,"gui":{"clipboard":true}
,"sound-card":true
,"allow-network-access":true
,"basic-common-permissions":true}

这是我刚刚设置的权限的概述:

  • “gui”:允许 Firefox 使用XPRA X11 桥安全地向 X11 显示窗口
  • "sound-card": 允许 Firefox 与您的声卡通信
  • “allow-network-access”:允许 Firefox 访问网络
  • “basic-common-permissions”:允许 Firefox 做一些基本的事情,比如将设置保存到它自己特别包含的主目录中,查看本地和时区等。

但是,它不允许 Firefox 访问它自己的子用户之外的任何文件。user-dirs例如,如果您愿意,您可以添加一个权限以允许它访问下载目录。

创建permissions.json文件后,您可以继续创建SubuserImagefile.

应该看起来docker-image/SubuserImagefileDockerfile

FROM ubuntu
RUN apt-get update && apt-get upgrade -y && apt-get install -yq firefox

现在您已完成设置子用户图像。

您可以通过运行以下命令创建一个 firefox 子用户:

$ subuser subuser add firefox firefox@/home/student/my-subuser-images

您可以通过运行以下命令来运行 firefox 子用户:

$ subuser run firefox

您可以创建多个 firefox 子用户。如果您想拥有多个 Facebook 帐户或 Google 帐户并且不必一直注销/登录,这很有用。如果您想在进行网上银行业务时降低跨站点脚本的风险,它也很有用。

subuser subuser add internet-banking firefox@/home/student/my-subuser-images

您可以使用以下命令运行您的网上银行子用户

subuser run internet-banking

您可以通过访问来访问子用户的主目录~/.subuser/homes

这是在我的系统上运行的 Firefox 的屏幕截图,具有演示的配置:

在此处输入图像描述

请注意,尽管我运行的是 Debian,但安装的是 Ubuntu 版本的 Firefox!

您可以与其他人共享您的子用户图像,以减轻每个人的沙盒应用程序的负担。如果你想分享你的 Firefox 镜像,你可以 cd 到my-subuser-images该文件夹并将其转换为 git 存储库:

$ cd ~/my-subuser-images
$ git init
$ git add .
$ git commit -m "Add Firefox image"

如果你将这个 git repo 推送到某个地方,那么其他人可以使用以下命令轻松安装你的 Firefox 映像:

$ subuser subuser add firefox firefox@http://example.com/student/my-subuser-images.git

他们将以与在本地完成设置相同的方式运行该子用户。

Ubuntu 文档为使用 SELinux 的 X 应用程序提供了一个沙盒命令:

http://manpages.ubuntu.com/manpages/precise/man8/sandbox.8.html

SELinux 是一条不错的路线,因为有很多网页、书籍、工具等在使用它。它很好地与操作系统集成,这是它复杂的原因之一。Tresys 出售很好的工具,可以轻松配置这些工具。

像 SELinux 这样的东西源自橙皮书时代的分隔模式工作站,它试图为普通操作系统增加安全性。我所知道的最后一个幸存(和维护)的产品是 Argus Pitbull 系列。它只是 Solaris,但现在是 RHEL。它们比 SELinux 更全面,尽管您会为此付出代价。还有结合 VMWare 和 Linux 的通用动力高保证平台。

VM 方法更易于使用,但在受信任的计算库中资源更密集且功能更多。最好的办法是使用一个非常轻量级的发行版(想到 CrunchBang),只添加你需要的东西,去掉你不需要的东西。如果您希望允许文件夹共享以在主机和来宾之间移动文件,则可以通过 SELinux 或 SMACK 强制控件将 VM 限制为单个文件夹。

还有旨在使 VM 选项更安全的 QubesOS 项目。它现在状态很好,而且易于使用。

您的问题的总体问题是,X 和 Ubuntu 都不是为安全分离相互不信任的应用程序而设计的。数十年的研究致力于为 UNIX 和 X 提供大量原型/产品。看过他们并看过 Ubuntu,我向你保证他们没有做那些事情。SELinux 的东西只为此做了一点点,虚拟机方法仍然有很多攻击面(VMM、Dom0 等)。Genode、QubesOS、欧洲的 Perseus 安全架构、OKL4/OKLinux 套件和 TU Dresden 的 Nizza 架构是我所知道的通过 Linux 兼容性解决这个问题的唯一开放方法。它们的功能和完整性差异很大。

如果它运行的是主流 Linux,我向你保证,还有 0-days 等待被发现。我只是保留了旧的解决方案,即拥有单独的 PC,一台不在线,以及一台 KVM 切换器。以及使用只读媒体(例如 CD-R)、单向电缆或保护移动数据。并备份到只读媒体。并尽可能从只读媒体加载。如果一个人获得便宜的组件并接受中等性能,则整个设置成本低于 1,000 美元。2,000-3,000 美元的高性能。

我想将此项目添加到上面的优秀项目列表中。它可以沙箱任何类型的进程:服务器、图形应用程序,甚至用户登录会话。

https://l3net.wordpress.com/projects/firejail/

Firejail 是一个 SUID 安全沙箱程序,它通过使用 Linux 命名空间限制不受信任的应用程序的运行环境来降低安全漏洞的风险。它允许一个进程及其所有后代对全局共享的内核资源拥有自己的私有视图,例如网络堆栈、进程表、挂载表。