【问题标题】:What does it indicate if /proc/PID/maps shows zero for all addresses?如果 /proc/PID/maps 对所有地址显示为零,这表明什么?
【发布时间】:2015-06-23 04:21:52
【问题描述】:

我正在调试 Linux DNS 服务器的问题。奇怪的是,当我查看 DNS 服务器进程的/proc/PID/maps 时,我得到了这样的结果:

00000000-00000000 r-xp 00000000 00:0e 2344                  /usr/sbin/unbound
00000000-00000000 rw-p 00000000 00:0e 2344                  /usr/sbin/unbound
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:00 0                     [heap]
00000000-00000000 rw-p 00000000 00:00 0                     [heap]
00000000-00000000 r-xp 00000000 00:0e 2009                  /usr/lib/engines/libgost.so (deleted)
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:0e 2009                  /usr/lib/engines/libgost.so (deleted)
00000000-00000000 r-xp 00000000 00:0e 2016                  /usr/lib/engines/libpadlock.so (deleted)
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:0e 2016                  /usr/lib/engines/libpadlock.so (deleted)
00000000-00000000 r-xp 00000000 00:0e 2333                  /lib/libz.so.1.2.8
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:0e 2333                  /lib/libz.so.1.2.8
00000000-00000000 r-xp 00000000 00:0e 1760                  /lib/libdl-0.9.33.2.so
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 r--p 00000000 00:0e 1760                  /lib/libdl-0.9.33.2.so
00000000-00000000 rw-p 00000000 00:0e 1760                  /lib/libdl-0.9.33.2.so
00000000-00000000 r-xp 00000000 00:0e 3083                  /usr/lib/libgcc_s.so.1
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:0e 3083                  /usr/lib/libgcc_s.so.1
00000000-00000000 r-xp 00000000 00:0e 1761                  /lib/libuClibc-0.9.33.2.so
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 r--p 00000000 00:0e 1761                  /lib/libuClibc-0.9.33.2.so
00000000-00000000 rw-p 00000000 00:0e 1761                  /lib/libuClibc-0.9.33.2.so
00000000-00000000 rw-p 00000000 00:00 0
00000000-00000000 r-xp 00000000 00:0e 3085                  /lib/libpthread-0.9.33.2.so
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 r--p 00000000 00:0e 3085                  /lib/libpthread-0.9.33.2.so
00000000-00000000 rw-p 00000000 00:0e 3085                  /lib/libpthread-0.9.33.2.so
00000000-00000000 rw-p 00000000 00:00 0
00000000-00000000 r-xp 00000000 00:0e 2002                  /lib/libcrypto.so.1.0.0 (deleted)
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:0e 2002                  /lib/libcrypto.so.1.0.0 (deleted)
00000000-00000000 rw-p 00000000 00:00 0
00000000-00000000 r-xp 00000000 00:0e 3181                  /usr/lib/libevent-2.0.so.5.1.9
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:0e 3181                  /usr/lib/libevent-2.0.so.5.1.9
00000000-00000000 r-xp 00000000 00:0e 3189                  /usr/lib/libldns.so.1.6.17
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:0e 3189                  /usr/lib/libldns.so.1.6.17
00000000-00000000 r-xp 00000000 00:0e 2335                  /lib/libssl.so.1.0.0 (deleted)
00000000-00000000 ---p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:0e 2335                  /lib/libssl.so.1.0.0 (deleted)
00000000-00000000 r-xp 00000000 00:0e 1755                  /lib/ld64-uClibc-0.9.33.2.so
00000000-00000000 rw-p 00000000 00:00 0
00000000-00000000 rw-p 00000000 00:00 0
00000000-00000000 r-xp 00000000 00:00 0                     [vdso]
00000000-00000000 r--p 00000000 00:0e 1755                  /lib/ld64-uClibc-0.9.33.2.so
00000000-00000000 rw-p 00000000 00:0e 1755                  /lib/ld64-uClibc-0.9.33.2.so
00000000-00000000 rw-p 00000000 00:00 0                     [stack]
ffffffffff600000-ffffffffff601000 r--p 00000000 00:00 0     [vsyscall]

我以前从未见过这样的事情。除 vsyscall 页面外,所有地址均为零!你知道那是什么意思吗?

【问题讨论】:

  • 您确定该应用仍在运行吗? IE。它可能会变成僵尸,所以它仍然会在进程列表中。
  • 它肯定正在运行,并且正在处理 DNS 请求。我现在不在工作,但明天会发布uname 的输出。
  • 您知道吗,当您执行cat /proc/self/maps 时,您是否看到类似的输出全为零?
  • @Hi-Angel,我明天上班看看。
  • 你能用 sudo 运行吗?

标签: linux linux-kernel


【解决方案1】:

当有人遇到同样的问题时,我找到了discussion in Valgrind mail list。问题是内核已经用 PaX 补丁打了补丁,其中一个不允许查看 /proc/pid/maps

关于补丁from wikipedia的引用

如果攻击者需要预先了解地址空间布局并且可以通过读取被攻击任务的地址空间来获得这些知识,那么第二类和第三类攻击也可以 100% 可靠地进行。如果目标存在泄漏信息的错误,例如,如果攻击者有权访问 /proc/(pid)/maps,则这是可能的。有一个模糊补丁,它会将用户空间可访问的每个信息源中的地址范围和 inode 的值清空,以关闭大多数这些漏洞;但是,它目前不包含在 PaX 中。

尽管补丁目前不包括在内,但邮件列表中的问题已通过 PaX 实用程序解决。 IE。可以使用 chpax utility 更改它,该chpax utility 在每个二进制文件的基础上进行权限修改,从而允许禁用对特定二进制文件的限制。

【讨论】:

  • 谢谢!!是的,事实证明这台主机正在运行一个 grsec 内核。我会看看我是否可以使用paxctl 来关闭这些保护。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
相关资源
最近更新 更多