阻止 Snaps 访问用户主目录?

阻止 Snaps 访问用户主目录?

我正在尝试使用 firejail 默认对所有应用程序进行沙盒处理。Firejail 不支持 snap 应用程序。

默认情况下,如果 snap 发出请求,snapd 会授予 snap 对用户主目录的读/写访问权限。这意味着默认情况下,如果在具有网络访问权限的“沙盒”snap 应用程序中存在漏洞,攻击者很容易获取 $HOME 下的所有文件,包括 GPG 密钥、SSH 密钥,当然还有用户的文档和其他文件。

在网上做了一些研究后,我发现可以snap disconnect <snap>:<plug interface> <snap>:<slot interface>这样做,理论上可以阻止对主目录的访问。不幸的是,这是一种“全有或全无”的方法(无法定义允许/拒绝主目录中的哪些文件夹),并且必须在安装后单独应用于每个 snap。

有没有办法默认对所有 snap 应用“禁止 $HOME 访问”策略?如果是,有没有办法允许访问 $HOME 中的某些目录,同时拒绝访问其他目录?我的理解是,由于 snap 容器的设计方式,apparmor 不能用于此目的。

备用计划:是否有一些技巧可以让我重新安装主目录的一部分(比如 /home/folderforsnaps)并欺骗 snaps 让它们认为这是主目录?

答案1

对于攻击者来说,获取 $HOME 下的所有文件是轻而易举的事

  1. 是的,对于所有被毒害的非 Snap 应用程序来说也是如此。请随时帮助测试 Snap 是否存在恶意活动(毕竟这是一个社区),并报告您发现的任何被毒害的 Snap。

    讨论 Snap 安全性的最佳地点是https://snapcraft.io论坛。欢迎光临。

  2. snapd/AppArmor 确实对这种特定的攻击有部分保护:主页界面~/.ssh使所有隐藏文件(如或)的内容~/.thunderbird不可读。

    主页允许访问非隐藏用户主目录 ($HOME) 中由用户拥有的文件。


有没有办法默认对所有快照应用“无 $HOME 访问权限”策略?

不。每个 Snap 的 YAML 文件都定义了 Snap 运行所需的访问策略。全局策略会破坏需要访问 $HOME 的 Snap,而这正是开发人员所不希望的。


是否有一些技巧可以让我重新安装主目录的一部分(比如 /home/folderforsnaps)并欺骗 snaps 认为这是主目录?

当然:您可以创建一个 LXD 容器,绑定安装 /home 的部分,然后将 Snap 安装到容器中。

或者您可以简单地以不同的用户身份运行 Snap,并在其 /home 中保留一组有限的数据。

答案2

您可以使用以下命令查看哪些 snap 包使用了该home接口。

snap interfaces :home

笔记snap interfaces 现已弃用。上述命令的非弃用版本是:

snap connections --all | grep :home

disconnect然后,您可以从此界面为每个 snap 包编写一个脚本。设置SNAPLIST为您从上面获得的输出。

SNAPLIST=snap1,snap2,snap3
for i in $(echo $SNAPLIST | sed "s/,/ /g")
do
    # call your procedure/other scripts here below
    snap disconnect ${i}:home :home
done

相关内容