bash 退出时 sudo 可能存在的安全风险

bash 退出时 sudo 可能存在的安全风险

我最近读到关于使用 bash 的内置trap命令在 bash 退出时执行命令的文章,例如,trap "notify-send test" EXIT在 bash 终止时立即发送桌面通知。首先想到的是:攻击者会不会利用这一点?经过一番研究和反复试验,我发现了以下内容。

sudo 手册页说:

安全策略可能支持凭证缓存,以允许用户在一段时间内再次运行 sudo,而无需进行身份验证。默认情况下,sudoers 策略会在每个终端上缓存凭据 15 分钟。

我结合了这两个信息,得出了这样一个命令: ,如果用户在 15 分钟内使用 sudo ,trap 'printf "" | sudo -S COMMAND &>/dev/null' EXIT该命令会在 bash 退出时自动执行。COMMAND

例如。如果 sudo 在 bash 会话中使用的时间不超过 15 分钟,则将命令放入trap 'printf "" | sudo -S touch ~/test &>/dev/null' EXIT~/.bashrc 之类的文件中,将在用户的主目录中创建文件 test ,该目录由 user 拥有。root

据我所知,攻击者可以通过将此命令插入 bash 在启动时执行的位置来进行权限升级,然后等待,直到有人在 bash 会话中使用 sudo,然后利用新权限、安装后门等他必须注意的一件事是,该命令会延迟 bash 的终止,因此用户会注意到运行长命令或无限循环,但这很容易通过运行命令来规避。的背景

我在这里缺少什么吗?是否有一些我不知道的安全限制?我在使用 Linux 5.19.0-31-generic x86_64 内核的 Ubuntu 22.10 笔记本电脑上对其进行了测试,它按预期工作并创建了文件。我还尝试在系统目录中创建一个文件,甚至通过 apt 安装一个包,一切都有效。 (安装包时有点延迟,但这是预料之中的)

谢谢。

答案1

不,就可能的利用而言,您并没有错过任何东西。它确实有效,只要用户有权通过sudo.

然而,您似乎在这里忽略了其他三个重要点:

  • 这不是一个容易隐藏的攻击。除了你提到的关闭时间问题外,sudo默认为日志记录全部通过它执行命令,因此几乎总是会有明显的纸质记录,并且任何命令输出也对用户可见。
  • 能够操纵目标用户的 shell 启动文件实际上表明了一个相当深的漏洞利用。如果攻击者已经达到这一点,他们大概有其他方法可以以相关用户身份执行任意代码,因此可能有其他比这更容易隐藏的权限升级选项。
  • 凭证缓存在sudo选修的。你可以将其关闭,大多数理智、有安全意识的用户都会这样做。 Ubuntu 选择默认启用它,因为他们不认为这是一个高风险的攻击媒介(因为上述两点),并且它让懒惰的用户的生活更轻松。

相关内容