intel meltdown 漏洞的个人浅析

操作系统为了保证了内存的独立性,会阻止应用程序去访问其他应用程序的内存空间,同样也不会让用户程序去访问内核的地址空间。这种内存独立机制保护了用户程序和内核的安全执行,也保证了多用户、多应用同时执行的安全性。
对于处理器来说,通过一个硬件上的supervisor来隔离用户态和内核态,但是在切换到内核态时,用户程序的内存映射是不会发生改变的。


一、Meltdown
Meltdown能够在linux macos windows等主流OS上,利用intel的CPU漏洞,来突破内存独立性的限制,能够通过用户程序去访问整个内核空间和其他用户其他程序的空间(包括内存映射)。


二、原理
Meltdown 利用Intel CPU的乱序执行漏洞,通过对内存的响应时间差来建立一个侧信道攻击,以此读取整个内核空间。


1.out-of-order execution:乱序执行
CPU执行指令并不是单纯的读取-执行的循环,而是以指令流水的形式,把一批指令放在一个流水中执行,这样大大提高了CPU各个部件的利用率,进而提高了工作效率。
在intel CPU中自然也是使用了乱序执行,在执行单元等待从内存中取出数据的时间间隙,执行单元会去准备后面的指令。这种行为虽然提高了工作效率,但是也会产生副作用,meltdown就是利用了该行为产生的时间差来取得信息。
一般来说,CPU在内核态退出时或者检测到应用程序访问了非法地址时,会清除所有信息再退出,因此寄存器中的信息也不会被泄露到外面。
对于非乱序执行:
取指令——》运行指令——》检测到异常——》清除数据——》退出
但是由于乱序执行,CPU提前执行了后续的非法指令:
取指令——》运行指令1——》...——》非法指令——》...——》检测异常——》清除数据——》退出
利用这个窗口期可以建立侧信道攻击。


2.side channel attack:侧信道攻击
侧信道攻击是通信安全中常见的一个问题,是指不去攻击信道本身来获得信息,而是通过观信道双方通信时产生的其他影响,通过分析泄露的额外信息来建立映射,进而取得信息。

Meltdown通过cache泄露的额外信息,建立了一个侧信道攻击,来取得非授权地址内的信息。




三、攻击模型
Meltdown 利用指令流水中指令超前执行,在被超前执行的代码中故意去访问非授权地址a,
a的内容被送入寄存器中参与临时运算,尝试以a的内容做地址去访问某块内存,导致该地址内容被cache;一个周期结束时,被检测出非法指令,所有数据被清除,但是cache中并未擦除;此时对整个内存进行扫描,测试访问速度,地址x访问时间极短说明该地址被cache,进而推断出a地址中的内容为x。



此时扫一遍整个内存,在cache中的内存块会被快速响应,其他相对较慢,基于此时间差建立侧信道攻击。
假设此时,我们扫描内存发现地址为x的内存块响应较快,那么x的内容被cache,m=x。
进而得知a地址中的内容为x;
基于此方法,我们可以得到任意内存块中的内容,甚至去获取内存映射的内容,读取内核数据,其他程序,其他用户数据。


四、影响
此漏洞无疑对云计算的影响最为严重,云计算多用户多程序,只要在同一物理机,理论上可以跨虚拟机读取其他用户所有数据。对目前来说,影响最大的应该是使用半虚拟化技术和intel CPU的云,在半虚拟化环境上,用户程序执行于ring3,由虚拟化程序接管后直接让指令陷入ring0交由硬件资源去执行,因此,meltdown可以直接进行攻击。
而对于全虚拟化的云,用户程序在ring3执行,交由ring1的QEMU,会对指令进行重构,再交由硬件去执行。但是全虚拟化只是设置了一层障碍而已,还是可以被meltdown攻击,仍然很不安全,攻击也只是时间问题。
综上,给intel上香,给docker等半虚拟化上香。
GG


我一直用intel芯片做安全运算,现在你告诉我这个芯片本身就是不安全的。。。。。。



猜你喜欢

转载自blog.csdn.net/y734564892/article/details/79019084