以这种方式在没有 sudo 密码的情况下挂载 Veracrypt 是否安全

信息安全 脆弱性 特权升级 真密码 须藤
2021-08-17 08:16:10

除了该帖子中提到的内容之外,这种方式是否存在任何安全问题?

以供参考:

创建一个名为 say veracryptusers 的新组,并为其授予在没有 root 密码的情况下使用 VeraCrypt 的必要权限。属于该组的任何用户都可以使用 VeraCrypt。注意:这会略微增加用户权限提升的攻击面,因此请确保仅将受信任的用户添加到该组。

$ groupadd veracryptusers

现在让我们将此组 sudo 权限限制为 VeraCrypt:

$ sudo visudo -f /etc/sudoers.d/veracrypt
GNU nano 2.5.3        File: /etc/sudoers.d/veracrypt.tmp                      

允许 veracryptusers 组中的用户以 root 身份运行 veracrypt。

%veracryptusers ALL=(root) NOPASSWD:/usr/bin/veracrypt

另外请确保 veracrypt 和 /usr/bin 具有适当的权限,并且不能被组或其他人写入:

$ ls -al /usr/bin/vera*
-rwxr-xr-x 1 root root 6341016 paź 17  2016 /usr/bin/veracrypt
$ ls -ald /usr/bin
drwxr-xr-x 2 root root 69632 lip 25 10:09 /usr/bin

否则,恶意用户可能会替换可执行文件并根据自己的意愿获得完全的 root 权限。

现在重新启动(或重新登录)以重新评估组成员身份并瞧瞧 - 您可以安装和卸载您最喜欢的卷。

2个回答

这是非常不安全的。我很高兴您在自己运行此设置之前询问了其他地方!我希望 AskUbuntu 上的 3000 多人也同样谨慎。那么,为什么这是不安全的呢?如果将攻击者放入组中,攻击者可以做什么?该组将能够将权限提升到 root。原因很简单:VeraCrypt 允许使用具有任意挂载标志的任意文件系统挂载具有任意文件权限的加密卷。考虑以下场景:

  1. 一个邪恶的用户被放在你的特殊组中,让他们以 root 身份运行 VeraCrypt 而无需密码。该用户想要利用您的设置来获取 root shell,从而允许他们以 root 身份运行命令/usr/bin/veracrypt他们的最终目标很简单:绕过您的限制并以 root 身份运行任意命令。

  2. 恶意用户创建、拥有和写入加密卷。它被格式化,并且bash二进制文件被复制到文件系统中。由于卷是直接可写的,因此可以在二进制文件上设置 setuid 位。这通常是不可能的,但我们的攻击者可以修改音量。

  3. 邪恶用户以 root 身份运行 VeraCrypt 并将卷挂载到/mnt(通常是特权操作)。他们运行/mnt/bash并获得一个 root shell,他们可以从中以特权用户身份执行任何命令。他们有自己的 root shell,可以执行任何他们想要的东西。

通常,用户可挂载的文件系统会有一些限制。此类文件系统通常通过挂载user标志来配置。根据mount(8)手册页:

用户

允许普通用户挂载文件系统。安装名称
用户被写入 mtab 以便他可以再次卸载文件系统。
option 隐含选项 noexec、nosuid 和 nodev(除非被覆盖
通过后续选项,如选项行 user,exec,dev,suid)。 

当非特权用户以这种方式挂载文件系统时,尽管他们可以创建带有 setuid 可执行文件的文件系统,但在挂载文件系统时系统将不会使用 setuid 位。VeraCrypt 无法知道这一切,并愉快地将可写文件系统挂载为 root,并完全支持 setuid 二进制文件。尽管您只允许通过 sudoers 执行一个“安全”命令,但这种保护措施被绕过了,并且攻击者获得了 root 权限。

我敢肯定还有其他可能的攻击。您的文件系统是否有任何挂载标志,它们本身可以给攻击者root?可以将密钥文件或新卷写入任意位置吗?如果是,用户可以选择它们的内容吗?当你绕过一个重要的保护措施时,你突然必须依靠 VeraCrypt 的设计者编写程序,以保护他们免受他们从未考虑过的威胁模型的影响。mount从一开始就设计为安全的程序不同,VeraCrypt 没有这样的目标。在以 root 身份运行它之前,同样的注意事项应该适用于任何东西。

编辑 17/03/2021:当知道以下适当的解决方案时,所有这些话题可能都没有实际意义(非常感谢 Serendipity 女士,我希望我以前读过):https : //www.computercorrect.com/2018/operating-systems /linux/ubuntu/auto-mounting-a-veracrypt-volume-under-ubuntu-debian-linux/


我一直在寻找解决该问题的方法,并遇到了几个有关此方法安全性的警告。

我相信这些警告是完全有道理的,尽管我相信对于属于“root”组的用户只想挂载 VeraCrypt 容器而无需输入密码(例如在脚本运行中)的相当主流的用例在会话开始时),原帖中描述的方法是安全的。

在这种情况下,用户已经拥有 root 权限,并且所描述的方法将只允许他们像 LUKS 那样透明地自动挂载加密的容器/分区。

也就是说,我并不完全确定这一点,应该由真正知识渊博的人确认。