我正在 Hardened Gentoo 上对 Grsecurity 进行一些研究,请参阅http://en.wikibooks.org/wiki/Grsecurity。更具体地说,我试图找到一个主题模式 x 产生影响的例子。
正如 wiki 中所述:主题模式 x:允许该主题的可执行匿名共享内存。
现在,内核拒绝
mem = mmap(NULL, MAP_SIZE, PROT_WRITE|PROT_EXEC, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
也
mem = mmap(NULL, MAP_SIZE, PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
mprotect(mem, MAP_SIZE, PROT_EXEC);
或相反亦然。另一方面
mem = mmap(NULL, MAP_SIZE, PROT_READ|PROT_EXEC, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
工作正常。
对于上述所有内容,grsec 是否处于活动状态并不重要,如果是,则主题模式 x 是否设置也并不重要 - 内核根本不允许共享内存是(或曾经)可写的,并且可执行的。
因此:主题模式 x 有什么用处,以及它会对哪段代码产生影响?
答案1
根据 Brad Spengler 的说法,主题模式 x 仅适用于 System V 共享内存,请参阅http://forums.grsecurity.net/viewtopic.php?f=5&t=3935。最重要的是,除非对所考虑的二进制文件禁用 MPROTECT,否则 PaX 会发生攻击。