在 WSL 上访问 Ubuntu 的 root 权限是否太容易了?

在 WSL 上访问 Ubuntu 的 root 权限是否太容易了?

我忘记了 WSL 中的 Ubuntu 用户密码,但我可以通过以下方式重置它:

  • 打开 CMD shell
  • wsl -u root,然后(在 Ubuntu 中),passwd my_username

我可以更改密码而无需提供旧密码。这有效,但这在安全方面不是一个漏洞吗?我实际上是 Linux/Unix 新手,所以这个问题浮现在我的脑海中...

答案1

这是个好问题——无论你是新手还是有经验,评估系统的安全性都是一项有价值的练习,在我看来。

我个人曾经多次思考过这个(以及这个稍微不同的形式)特定问题,但我还没有找到可以利用此功能的明确攻击媒介。

这里有几点需要注意:

  • 您的 WSL 实例与您的一起运行视窗用户的权限。

    即使在 Ubuntu 中运行root,你也无法更改视窗这是普通 Windows 用户无法做到的。例如:

    • /mnt/c/<your_Windows_user>/Documents通过 WSL删除或修改文件(以root普通用户身份)
    • 不能修改系统文件或可执行文件/mnt/c/Windows/gdi32.dll,因为除非您在管理会话中运行,否则即使通过文件资源管理器您也无法执行此操作(不要这样做!)。

    再说一遍,这与普通 Windows 用户可以(和不能)做的事情没有什么不同。


  • 您的 Windows 用户可以完全控制 WSL(以及任何其他发行版)中的 Ubuntu。

    这类似于虚拟机或任何容器技术的运作方式。由于您是视窗运行 WSL 的用户,您已经可以执行以下操作:

    • 在 WSL 中安装新的 Ubuntu 实例,设置用户名等。
    • 通过命令删除 Ubuntu 实例wsl --unregister(不要这样做!)
    • 对虚拟驱动器有完全访问权限(.vhdx),可以将其复制到另一台机器,检查它,修改它等。
    • 而且,正如您所发现的,通过以...身份运行可以更改用户密码root(无需密码)。

    因为您是运行 WSL 的 Windows 用户,所以您已经可以用它做任何您想做的事情。 WSL 根本没有理由要求您使用密码“登录”Ubuntu。

    即使在“纯 Ubuntu”中也存在其他类似的情况——运行 Docker 或 Podman(或其他)容器可让您完全控制该容器。您可以在该容器内创建用户、创建或删除文件等。启动 Ubuntu Docker 容器时不需要密码,就像在rootDocker 内部一样;就像在 WSL 上启动 Ubuntu 时不需要密码一样root


事实是,如果攻击者获得足够的系统访问权限,以 Windows 用户身份运行任意代码,那么无论他们是否能够访问其中运行的 Ubuntu,他们就已经“赢了”。root在这种情况下,强迫您使用密码在 WSL 中“登录”Ubuntu(无论是以 Windows 用户身份还是其他用户身份)都不会增加任何额外的防御。

相关内容