我正在尝试默认使用 firejail 对我的所有应用程序进行沙箱处理。Firejail 不支持快照应用程序。
似乎默认情况下,如果 snap 请求,snapd 将授予 snap 对用户主目录的读/写访问权限。这意味着默认情况下,如果在具有网络访问权限的“沙盒”快照应用程序中存在漏洞,攻击者可以轻松获取 $HOME 下的所有文件,包括 GPG 密钥、SSH 密钥,当然还有用户的文件和其他文件。
做一些在线研究让我能够做一个snap disconnect <snap>:<plug interface> <snap>:<slot interface>
理论上会阻止访问主目录的事情。不幸的是,这是一种“全有或全无”的方法(无法定义家庭中允许/拒绝哪些文件夹),并且必须在安装后单独应用于每个快照。
有没有办法默认对所有快照应用“无 $HOME 访问”策略?如果是这样,有没有办法允许访问 $HOME 中的某些目录而拒绝访问其他目录?我的理解是,由于 snap 容器的设计方式,apparmor 不能用于此目的。
替代计划:是否有一些技巧可以让我重新挂载主目录的一部分(比如/home/folderforsnaps)并欺骗快照认为这是主目录?
[I] 对于攻击者来说,获取 $HOME 下的所有文件将是微不足道的
是的,对于曾经编写的每个中毒的非 Snap 应用程序也是如此。请随时帮助测试 Snap 的恶意活动(毕竟这是一个社区),并报告您发现的任何中毒 Snap。
讨论 Snap 安全性的好地方是https://snapcraft.io论坛。顺便拜访。
snapd/AppArmor 确实对这种特殊攻击有部分保护:主界面使所有隐藏文件(如
~/.ssh
或~/.thunderbird
)的内容不可读。有没有办法默认对所有快照应用“无 $HOME 访问”策略?
不会。每个 Snap 的 YAML 文件都定义了 Snap 运行所需的访问策略。全局策略会破坏确实需要访问 $HOME 的 Snap,这正是开发人员所不希望的。
是否有一些技巧可以让我重新挂载主目录的一部分(比如/home/folderforsnaps)并欺骗快照认为这是主目录?
当然:您可以创建一个 LXD 容器,绑定安装 /home 的部分,然后将 Snap 安装到容器中。
或者,您可以简单地以不同用户的身份运行 Snap,并在其 /home 中使用一组有限的数据。
您可以使用以下内容查看哪些 snap 包使用该
home
接口。disconnect
然后,您可以从此界面为每个快照包编写脚本。设置SNAPLIST
为您从上面获得的输出。