2018-01-02 inter的CPU漏洞原因分析

[toc]

为啥

本来不想写的,但是看了一下其他人的分析,感觉漏洞原理不是很难,属于计算机操作系统里面的内容. 看了一下发现原来自己也能看懂漏洞; 虽然不会利用漏洞

原理

首先程序在运行时有用户态和系统态之分,然后一般的内核程序都是直接全部都在内存中的,方便调用. 段页式存储的时候系统和用户程序是在一起的表,
本来开始的时候,KASLR为了防止能把内核访问到就把内核地址给打乱,不在同一个区域,这样黑客就不能猜到内核在内存的地址.但是inter 的推测性执行导致这个KASLR(内核位址空间布局随机化)无效

有一个机制就是原来防止访问内核的,把内存叶表的访问权限设置一下,

  • 当是用户态时,可以访问
  • 当是内核时会进入抛出异常,然后就通过这个抛出异常的时间来判断当前地址是否是内核地址

通过对内存读取的反馈可以知道内存中哪些区域是内核,然后就可以通过内核做任何事情记住是任何

影响原因

KPTI是KASLR的进阶版本(内核内存地址随机化),KASLR使得内核数据结构所在地址每次启动随机,目的是基本防御通过类似overflow的方式改写内存的攻击;后来提出了一些通过side-channel(比如看执行时间来判断内存是否在cache里)绕过KASLR的攻击,于是提出了KPTIKPTI是给每个进程两张memory map,一块只有user space memory,一块包含kernel space memory,在进入内核态后使用后者,来进一步防止这种攻击;但是显然会带来很大的开销,每次syscall都会flush TLB,改CR3,这就是其他回答提到的性能下降5%-30%,但是对于没什么syscall的程序(比如纯计算)显然没什么影响


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注