攻击方法
针对这种页保护的防御,较常用的方法是,从物理页表中取相应的页表条目,找到页表描述符,修改相应的权限。在2014年SyScan360中360团队的安全人员介绍了这种通用修改页表权限的攻击方式。
在华为荣耀6,我们可以通过利用内核中现成的代码来完成页表属性的修改。我们发现可以通过内核导出函数set_memory_rw来打开内核页表的读写权限。set_memory_rw函数的定义如下:
int set_memory_rw(unsigned long virt, int numpages)
virt 为起始虚拟地址,可以设置为_text的虚拟地址,
numpages 为页表的数量, 可以设为(_end_rodata页对齐-_text页对齐)/4k 的值。
3. Vasileios P. Kemerlis Michalis Polychronakis Angelos D. Keromytis,
Columbia Universityret2dir: Rethinking Kernel Isolation,
http://www.blackhat.com/docs/eu-14/materials/eu-14-Kemerlis-Ret2dir-Deconstructing-Kernel-Isolation.pdf