最后一种进入内核的方式就是开发驱动程序了,但加载驱动本身就需要极高的权限,所以这一点就不详述了。以上就是通过正规途径,让我们的程序进入内核态运行的方式,可见,一旦进入内核态,执行流就进入了操作系统提前设置好的代码,攻击者没办法胡来。
0x00000000~0xFFFFFFFF,在x86架构上,内存一般以4KB页面单元进行管理。
系统调用表:SSDT/sys_call_table假如有办法能修改这些表格中的函数地址,改写成攻击者的代码地址,不就能有办法让我们的代码在内核模式下运行了吗?
中断描述符表:IDT
Intel 2011年在第三代Core处理器禁止内核状态下去执行用户地址空间指令 SMEP(supervisor mode execute prevention),设置CR4寄存器的bit20位为1开启空指针、悬空指针、数组越界、整数溢出···这些一个个看起来不起眼的编程问题,如果发生在操作系统内核之中,那造成的后果便是灾难性的!可见,养成一个好的编程习惯有多重要!
ARM从armv7开始加入PXN技术,原理同SMEP
Windows 8.1禁止使用零页地址内存
Linux 2.6.26开始使用vm.mmap_min_addr限制地址空间最小值,防止使用零页内存
······
欢迎光临 嵌入式开发交流网论坛 (http://www.dianzixuexi.com/bbs/) | Powered by Discuz! X3.2 |