Ric*_*ano 22 security directory
我正在为 user 设置一个受限用户帐户ricardo
,这是我系统上的一个麻烦用户。我想授予他使用 制作目录的权利sudo
,他有时需要这样做。我正在我的/etc/sudoers
文件中考虑这个规则:
ricardo ALL=(root) NOPASSWD: /bin/mkdir
Run Code Online (Sandbox Code Playgroud)
仅使用此规则,ricardo 是否可以有意或无意地破坏系统?
der*_*ert 21
我怀疑这样的攻击会起作用,其中 «something» 是一个内核模块,它将在安装 rootfs 后尝试加载:
$ sudo mkdir -m 777 /lib/modules/`uname -r`/a
$ cp evil.ko /lib/modules/`uname -r`/a/«something».ko
Run Code Online (Sandbox Code Playgroud)
另请注意,您可以使用其他名称,具体取决于模块中声明的别名。我猜在运行 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
)/usr/local/include
.由于能够创建具有写访问权限的目录,因此存在可能性。随着mkdir -m 777 blah
该ricardo
用户可以写任何他们喜欢到新目录。您将需要系统上已经以不同用户身份运行的进程,该进程将向下递归目录树以加载配置、脚本或模块。然后用户可以添加他们自己的东西来加载或运行。我能想到的第一件事是,如果您运行一个可以执行 php 或 cgi 的 Web 服务器。然后,您可以以该用户身份运行脚本。我正在努力想出更多真实世界的例子,尤其是root
那些,但我相信它们是关于的。
ssh 是捕获这种场景的守护进程的一个例子。如果您.ssh
为没有目录的用户创建了一个目录并将您自己的authorized_hosts
文件放在适当的位置。sshd
注意到目录权限太开放并忽略公钥。
您绝对可以让自己在创建目录(如瞬态 tmp 或交换文件)的地方创建文件(如瞬态 tmp 或交换文件),而许多程序无法很好地处理这些目录。
你可以创建很多 cgroup,但看起来你没有对它们做任何事情。您至少可以让系统屈服。OOM 杀手在一个 256M 的盒子上花费了大约 10000 个 cgroup来取出 sshd。
如果您控制环境的-m
选项mkdir
和 UMASK,sudo
我认为它又回到了令人讨厌的地方。