![攻击者有什么方法可以使用 mkdir 来破坏系统吗?](https://linux22.com/image/29502/%E6%94%BB%E5%87%BB%E8%80%85%E6%9C%89%E4%BB%80%E4%B9%88%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20mkdir%20%E6%9D%A5%E7%A0%B4%E5%9D%8F%E7%B3%BB%E7%BB%9F%E5%90%97%EF%BC%9F.png)
我正在为 user 设置一个受限用户帐户ricardo
,这是我系统上的一个麻烦用户。我想授予他使用 制作目录的权利sudo
,他有时需要这样做。我正在我的/etc/sudoers
文件中考虑这条规则:
ricardo ALL=(root) NOPASSWD: /bin/mkdir
仅使用此规则,里卡多是否可以有意或无意地破坏系统?
答案1
我怀疑这样的攻击会起作用,其中“something”是一个内核模块,它将在安装 rootfs 后尝试加载:
$ sudo mkdir -m 777 /lib/modules/`uname -r`/a
$ cp evil.ko /lib/modules/`uname -r`/a/«something».ko
另请注意,您可以使用其他名称,具体取决于模块中声明的别名。我猜它在 depmod 运行之前不会被加载,这将在下次内核更新时发生 - 所以mkdir
最近不会在 sudo 日志中显示。
/etc 中有很多东西可以读取目录中的所有文件,有时是递归的。更糟糕的是,其中一些目录默认情况下并不存在,了解它们的唯一方法是阅读使用它们的程序的联机帮助页、初始化脚本等。更糟糕的是,有些是已弃用的向后兼容的东西,甚至可能不再被记录。
编辑:想到了更多目录,这些目录位于/usr/local
:
/usr/local/lib/perl/5.14.2
(根据 Perl 版本的不同而有所不同,尝试perl -V
找出)。File
在那里创建一个子目录,并Find.pm
在其中放入一个。现在,每当有人使用 时File::Find
,他们都会使用攻击者的版本。同样,对 执行同样的操作Getopt::Long
。系统实用程序通常是用 Perl 编写的,因此这可能会提供 root 权限。 (尝试ack-grep --color -a 'use.+::' /usr/sbin | less -R
)- 我觉得Python、Ruby等都有类似的目录。系统实用程序也是用 Python 编写的。
- 颠覆一些人用
/usr/local/include
.
答案2
答案3
你应该将他重定向到 chroot 监狱。或者更好的是,对于一个小虚拟机来说,他每小时可以崩溃一次。您所需要做的就是提供一份新副本。
答案4
由于能够创建具有写访问权限的目录,因此存在可能性。用户可以mkdir -m 777 blah
将ricardo
他们喜欢的任何内容写入新目录。您需要系统上有一个已经以不同用户身份运行的进程,该进程将递归目录树以加载配置、脚本或模块。然后用户可以添加自己的东西来加载或运行。我首先想到的是如果你运行一个可以执行 php 或 cgi 的 Web 服务器。然后您可以以该用户身份运行脚本。我正在努力想出更多现实世界的例子,尤其是root
那些但我确信它们是关于的。
ssh 是捕获这种情况的守护进程的一个示例。如果您.ssh
为没有目录的用户创建了一个目录并将您自己的authorized_hosts
文件放在适当的位置。sshd
注意到目录权限过于开放并忽略公钥。
您肯定会因为创建预计会出现文件的目录(例如瞬态 tmp 或交换文件)而感到麻烦,而许多程序无法很好地处理这些文件。
您可以创建很多 cgroup,但看起来您并没有对它们做任何事情。您至少可以让系统屈服。一个256M的盒子上大约需要10000个cgroupOOM 杀手取出 sshd。
如果你控制环境的-m
选项mkdir
和 UMASK,sudo
我认为它又会变成一个麻烦。