首页 > 解决方案 > 内核试图执行受 NX 保护的页面——利用尝试?

问题描述

看看这个非常基本的 linux 模块:

static ssize_t checksec_write(struct file *f, const char __user *buf,size_t len, loff_t *off)
{
    unsigned long addr_fonction_userspace;

    memcpy(&addr_fonction_userspace,buf,sizeof(unsigned long));

    void (*functionPtr)(void);
    functionPtr = addr_fonction_userspace;
    (*functionPtr)();

    return len;
}

该模块适用于这个 /dev/checksec 字符设备。

看看这个基本的 c 用户态程序:

void fonction_userland();

void fonction_userland()
{
    asm ("nop");
}

void main()
{
    FILE *f=fopen("/dev/checksec","w");
    unsigned long addr_fonction_userland = &fonction_userland;
    fwrite(&addr_fonction_userland,sizeof(unsigned long),1,f);
}

当我运行程序时,我在 dmesg 中收到此错误:

kernel tried to execute NX-protected page - exploit attempt?

我知道这是一种利用尝试,因为这是我想要学习的。但我不明白为什么该页面受 NX 保护。该函数不在非执行页面中,它是一个用户态函数。SMEP 和 SMAP 未启用(CR4 寄存器中的位 0)

非常感谢

标签: linux-kernelkernel

解决方案


推荐阅读