我正在尝试使用 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 下的所有文件是轻而易举的事
是的,对于所有被毒害的非 Snap 应用程序来说也是如此。请随时帮助测试 Snap 是否存在恶意活动(毕竟这是一个社区),并报告您发现的任何被毒害的 Snap。
讨论 Snap 安全性的最佳地点是https://snapcraft.io论坛。欢迎光临。
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