如何保护 snap 应用程序?

如何保护 snap 应用程序?

从不同角度来看,Snap 应用程序是如何受到保护的?

  1. 运行时保护?
    1. 内存保护?
    2. 与普通流程有何不同?
    3. 与虚拟机有何区别?
  2. 存储保护?
    1. 应用程序二进制文件的保护?
    2. 持久数据的保护?
  3. 容器
    1. “容器”一词在应用程序保护和安全方面意味着什么?
    2. 与普通流程有何不同?
    3. 与虚拟机有何区别?
    4. 与其他容器特别是“Docker”有何区别?
  4. 还有其他相关保护措施吗?

答案1

snapd 开发者在这里。

保护一词似乎暗示 snapd 包含某种 DRM 系统来保护二进制文件。根本没有这种东西。Snapd 保护您的系统免受可能不受信任的软件和各种软件包的相互影响。

与虚拟机的区别很简单,没有涉及虚拟机。在虚拟机中运行程序实际上是将程序、操作系统和硬件模拟器作为一个大进程在系统上运行。Snap 不使用任何类似的东西,而是直接在主机系统提供的硬件和内核上执行。

与普通进程的区别只有几个,但它们却使所有差异和魔力成为可能。Snapd 使用 Linux 内核的多种功能为 snap 进程(已启动 snap 应用程序的进程)提供文件系统的不同视图,以便它们可以在几乎任何现代发行版上运行。此外,这些进程与内核和其他用户空间程序的交互由 snapd 管理的沙箱控制。沙箱的具体行为取决于所使用的系统以及系统中 snap 之间建立的 snap 接口连接集。

如今,“容器”一词几乎毫无意义,它只是一个营销术语。Linux 内核提供了各种各样的工具,允许隔离系统的各个部分,并使其中一些部分看起来不受其他进程所做的更改的影响。这可能包括“它看起来像另一台机器”到“它看起来像这台机器”,并且不断发展和扩大其可执行的范围。

与 docker 等其他“容器”的区别在于所使用的原语集。具体来说,snapd 使用设备 cgroup、freezer cgroup、seccomp BPF 过滤器来限制系统调用,并使用大量 apparmor 配置文件来限制对 IPC 机制、网络机制、信号、功能、读取、写入和对系统上文件的其他访问的访问。Docker 或其他“容器”通常使用不同的内核功能集并以不同的方式配置它们。

从纯粹的感知差异来看,snapd 旨在与主机集成。如果您快速安装服务,它将直接对您机器的服务管理器 (systemd) 可见。如果您快速安装 CLI 应用程序,您将能够像主机上的任何其他应用程序一样运行它。如果您快速安装图形应用程序,它将与您的启动器、面板和其他典型控件集成。docker 的情况并非如此,它旨在允许您运行通常无头网络负载并将集成留给用户。

至于数据保护,snapd 管理和保留修订之间的应用程序数据,以允许用户恢复到以前的工作修订,并包含默认权限,限制对主目录中某些文件的潜在敏感访问。由于调解访问的机制不完整或不成熟,目前仍允许访问大多数主目录。随着时间的推移,访问将受到限制,并且只能通过细粒度调解授予。

有一份关于 snapd 安全模型的详细白皮书,我可以推荐它,它比我在这里介绍的要详细得多:https://developer.ubuntu.com/static/resources/ubuntu-core-16-security-whitepaper.pdf

答案2

“目前,由于调解访问的机制不完整或不成熟,因此大多数主目录仍被允许访问。随着时间的推移,访问将受到限制,并且只能通过细粒度调解才能授予。”

为了提供更多背景信息,默认情况下,Snap 仅允许访问其自身被认为是安全的数据和系统资源。Snap 开发人员能够请求其他资源(在 snapd 中称为“接口”),其中一些是自动授予的,另一些则由用户授予。Zygmunt 在这里指的是“home”接口,Snap 默认情况下没有它,但 snap 开发人员可以请求它。此 home 接口被视为支持某些传统用例的过渡接口,它在传统(又称经典)发行版上自动授予(与 Ubuntu Core 等发行版不同,后者不会自动连接),用户可以选择撤销它。正如 Zygmunt 指出的那样,随着时间的推移,home 接口的使用将受到限制,并且只有通过细粒度的中介才能授予对用户数据的访问权限。

相关内容