ядро пыталось выполнить NX-защищенную страницу - попытка эксплойта? - PullRequest
1 голос
/ 11 апреля 2019

Посмотрите на этот очень простой модуль 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 char устройством.

и посмотрите на эту базовую программу на языке пользователя:

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 не включены (биты 0 в регистре CR4)

Большое спасибо

...