Uncategorized

CVE-2016-5195漏洞进行权限提升

在handle_pte_fault()中,如果触发异常的页存在于主存中,那么该异常往往是由写了一个只读页触发的,此时需要进行COW(写时复制操作)。也就是为自己重新分配一个页框,并把之前的数据复制到页框中去,再写。 第二次page fault结束后,FOLL_WRITE已经被置0.此时已经不再需要可写权限所以正常情况下,此时会拿到对应的内存页,然后可以直接做写操作。但是这个写操作是在mapped memory的,不会影响正常的磁盘文件。 但是这个时候如果出现线程madivseThread ,他将对应的mmap出来的空间设置为MADV_DONTNEED即在接下来不会被使用。此时内核将mapped memory对应的页表项置空(立刻换出对应的内存页)。第四次产生page fault 这样当再次write的时候,会触发page fault,由do_fault再次调页。而由于此时FOLL_WRITE为0,所以不会像第一次那样调入后由于写操作产生语义冲突。而是可以正常的返回对应的页,而接下来的写入操作会被同步到只读的文件中。从而造成了越权写。(因为没有做COW)

漏洞知识

madvise

循环调用madvise(map, 100, MADV_DONTNEED),其作用是告知内核对应内存页不常用,可释放。该操作会触发内核的内存页回收机制,配合写时复制机制制造竞争条件,为后续修改只读内存创造机会。 循环调用madvise(map, 100, MADV_DONTNEED),其作用是告知内核对应内存页不常用,可释放。该操作会触发内核的内存页回收机制,配合写时复制机制制造竞争条件,为后续修改只读内存创造机会。