当应用程序设置了SUID时,为什么不创建核心转储?


16

我设置环境以创建所有崩溃的核心转储,但是,当我在与执行用户不同的用户上运行设置了SUID的程序时,不会创建核心转储。知道为什么会这样吗?我在网络上的任何地方都找不到它,我认为它是某种安全功能,但我想禁用它...

问题:

$ cd /tmp
$ cat /etc/security/limits.conf | grep core
*     -     core     unlimited
root  -     core     unlimited

$ ls -l ohai
-rwsr-sr-x 1 root root 578988 2011-06-23 23:29 ohai

$ ./ohai
...
Floating point exception

$ sudo -i
# ./ohai
...
Floating point exception (core dumped)
# chmod -s ohai
# exit
$ ./ohai
...
Floating point exception (core dumped)

编辑: 为了使其尽可能安全,我现在具有以下脚本来设置环境:

mkdir -p /var/coredumps/
chown root:adm /var/coredumps/
chmod 772 /var/coredumps/

echo "kernel.core_pattern = /var/coredumps/core.%u.%e.%p" >> /etc/sysctrl.conf
echo "fs.suid_dumpable = 2" >> /etc/sysctl.conf

echo -e "*\t-\tcore\tunlimited" >> /etc/security/limits.conf
echo -e "root\t-\tcore\tunlimited" >> /etc/security/limits.conf

现在剩下要做的就是将ACL添加到/ var / coredumps中,以便用户只能添加文件,而不能修改或再次读取它们。唯一的缩小是我仍然需要chroot的应用程序出现问题,这些问题需要a bind mount或类似的东西。

Answers:


21

setuid程序的内存可能(甚至可能)包含机密数据。因此,核心转储将只能由root读取。

如果核心转储由root拥有,那么我看不到明显的安全漏洞,尽管内核将必须小心不要覆盖现有文件。

Linux禁用setxid程序的核心转储。要启用它们,您至少需要执行以下操作(我尚未检查是否足够):

  • 通常,通过将fs.suid_dumpablesysctl设置为2来启用setuid核心转储,例如使用echo 2 >/proc/sys/fs/suid_dumpable。(注意:2,不是1; 1表示“我正在调试整个系统,并希望删除所有安全性”。)
  • prctl(PR_SET_DUMPABLE, 1)从程序中调用。

先生,您现在是我的个人英雄!
DipSwitch 2011年

@DipSwitch奇怪,那不是文档fs.suid_dumpable所说的。您可以在fs.suid_dumpable不调用pctrl程序的情况下尝试设置吗?也许我对文档有误解,但在这种情况下,您确实获得了内核,但由root拥有。
吉尔(Gilles)“所以,别再邪恶了”,

哎呀,我的坏人...该文件归root所有,但core_pattern中的%u(uid)一见钟情。
DipSwitch 2011年

这种解决方案似乎也适用于在“ sudo -s”下运行的程序,至少对于内核2.6.27。
赛斯·诺布尔

7

核心转储包含故障发生时内存中所有内容的副本。如果程序正在运行suid,则意味着它需要访问您作为用户无法访问的内容。如果程序获取了该信息,然后转储了核心信息,那么您将能够读取该特权信息。

从上面的示例中可以看出,以超级用户身份运行或删除特权升级后,您可以获得核心转储。

从setuid程序轻松访问coredump可能很方便(对于开发人员来说仅是方法),但这是一个安全漏洞,应保留在原处。


1
我担心你会在那说些什么:(
DipSwitch 2011年

0

我决定也将共享用例,直到我忘记它为止。自从几个月前我解决同一问题以来,这对将来的我来说也很方便,而且花了我太多时间再次查找。好。它实际上不是核心转储,但堆栈跟踪也很有用。

问题:不知道发生了什么事:

sudo id
Segmentation fault

解决方案:将suid位从sudo移到valgrind可以正常工作:

chmod +s /usr/bin/valgrind
chmod -s /usr/bin/sudo
valgrind /usr/bin/sudo id

如果安装了debuginfo,则会写出不错的回溯。


同时,除非您记得重新设置权限,否则所有人和Tillie姨妈都可以valgrind随心所欲。不要这样做,这是巨大的安全风险。
vonbrand '16

当然,仅在测试机上进行测试。
雅库耶

给我威利,不管。
vonbrand '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.