我们知道使用 sudoedit 更安全*,但是如果我们在 sudoers 中使用以下内容,会发生什么不好的事情?
Cmnd_Alias FOO = /bin/ed, /usr/bin/ed, /usr/bin/vi
foouser LOCALHOST = NOPASSWD: NOEXEC: FOO
“foouser”可以转义到 root 提示符吗? - 当然除了他现在可以编辑 /etc/shadow 文件,将自定义的 pwd 哈希值发送给 root 用户,从而在大约 3 秒内成为 root 用户。
也许使用 LD_PRELOAD 和 ed 有一些魔法?具体如何?
*=sudo ed 将以 root 身份运行。但 sudoedit 将以给定用户身份运行,编辑的文件将在编辑之前/之后复制。
答案1
“foouser”可以转义到 root 提示符吗?
据推测,foouser 现在可以打开任何系统二进制文件并将其完全“编辑”为其他内容,从而留下 foouser 可以想象的任何类型的安全漏洞。如果您对 setuid 二进制文件(例如 )执行此操作,则这具有特殊的潜力passwd
,因为这意味着非 root 用户可以使用它执行其不打算执行的特权操作。
除此之外,他现在可以编辑 /etc/shadow 文件以放置自定义的 pwd 哈希值
或者只是删除哈希值,在这种情况下,您不需要任何密码即可以 root 身份登录。
答案2
可以修改的文件数量令人难以置信“安装后门”在系统上(编辑/etc/group
是最简单的,但是有很多更隐蔽的方法来实现它)。也可以noexec
通过编辑文件来禁用此保护/etc/sudoers
!我不会依赖于NOEXEC
使“sudo $editor”安全。它不安全。请改用 sudoedit (非常小心,因为很多文件可用于获得 root 权限!)
此外,sudo 的 noexec 包装器正在跟踪(缓慢)移动的目标(请参阅sudo_noexec.c 历史记录和fork()、vfork()、exec() 和clone() 之间的区别)。因此,sudo_noexec
包装器可能无法在某些 Unix 变体上保护您,并且可能不会限制新的系统调用(假设您的编辑器使用这些新的 API)。
为了具体回答您的问题LD_PRELOAD
, sudo 配置文件env_reset
默认启用导致命令在新的最小环境中执行。所以我怀疑它是否会被利用。
PS我也发过类似的问题https://unix.stackexchange.com/q/200411/16640!
答案3
问题不在于“可能发生什么”,而在于发生什么不能发生。我的意思是,vi
它是一个非常强大的工具,作为特权用户使用它会提供许多潜在的攻击和利用途径。
这就是为什么你不应该这样做——因为你正在一座大老房子里玩“堵住老鼠洞”的游戏。
任何互动都是“有风险的”。攻击途径:
- Shell 逃逸 - NOEXEC 在这里提供帮助。
- 编辑系统配置文件 - 有很多“明显”的罪魁祸首,例如
/etc/passwd
等,但也有一些地方可以,例如,将 CGI 脚本插入到 apache 实例中并提升该路由的权限。或者修改 s crontab 调用的脚本root
。 (如果他们安装了 NFS,这会特别有趣!) - 编辑系统脚本(如 的内容
/etc/rc
)。 - 符号链接遍历攻击 - 创建符号链接
/etc/passwd
然后编辑那绕过任何类型的文件白名单。
你也可以直接给予,NOPASSWD: ALL
因为你真正依赖的是你的用户不会像 root 那样做一些愚蠢的事情。
补充一点——很多人都有最喜欢的编辑器。我ed
在必要的时候使用过,而且vim
最近大部分时间都在使用。但并不是每个人都喜欢它们。它的一大优点sudoedit
是它可以让你使用任何东西。