1月4日,Jann Horn等安全研究者披露了\"Meltdown\"(CVE-2017-5754)和\"Spectre\"(CVE-2017-5753 & CVE-2017-5715)两组CPU特性漏洞。据悉,漏洞会造成CPU运作机制上的信息泄露,低权限的攻击者可以通过漏洞窃取内核内存中保存的敏感信息。
Meltdown和Spectre两类攻击方式实际上利用了现代CPU中用于提升执行性能的两种并行执行特性:乱序执行(Out-of-Order Execution)和推测执行(Speculative Execution)。 表面上看,处理器是依次顺序执行既定的处理器指令。但是现代CPU为了更好利用处理器资源,使用了并行执行技术,该技术已经应用了20年左右(1995年开始)。假设,基于猜测或概率的角度,在当前的指令或分支还未执行完成前就开始执行可能会被执行的指令或分支,会发生什么?如果猜对了,直接使用,CPU执行加速了。如果猜测不正确,则取消操作并恢复到原来的现场(寄存器,内存等),结果会被忽略。 不幸的是,不管预测是否正确,CPU缓存中依然保留了推测执行中访问的内存数据,并且由于推测执行的过程是不受权限检测的(CPU在推测执行过程中不会进行权限检测,比如推测执行的应用层代码可以读取内核地址数据)。如果攻击者能触发推测执行去访问指定的敏感数据区域的数据,就可能读取到原本是其它用户或更高特权级的敏感数据,虽然这些越权读取的数据存储在CPU的缓存中,并且用户代码无权访问,但是通过一种低噪的侧信道攻击技巧可以“猜测”出越权读取的数据,从而造成严重的信息泄露。
此外,猜测过程是可以被“污染”的,攻击者可以构造出类似ROP攻击的逻辑去影响推测过程。根据作者提供的思路,主要有三种场景:
1、“边界检查绕过”:通过污染分支预测,来绕过kernel或hypervisor的内存对象边界检测。比如,攻击者可以对高权级的代码段,或虚拟环境中hypercall,通过构造的恶意代码来触发有越界的数据下标,造成越界访问;
2、“分支目标注入”: 污染分支预测。抽象模型比较好的代码往往带有间接函数指针调用的情况,CPU在处理时需要会进行必要的内存访问,这个过程有点慢,所以CPU会预测分支。攻击者可以通过类似的ROP的方式来进行信息泄露;
3、“流氓数据加载”:部分CPU上,为了速度并不是每次都对指令作权限检查的,检查的条件存在一定的缺陷。
实际攻击场景中,攻击者在一定条件下可以做到:
泄露出本地操作系统底层运作信息,秘钥信息等; 通过获取泄露的信息,可以绕过内核(Kernel), 虚拟机超级管理器(HyperVisor)的隔离防护; 云服务中,可以泄露到其它租户隐私信息; 通过浏览器泄露受害者的帐号,密码,内容,邮箱, cookie等用户隐私信息;
目前相关的平台,厂商,软件提供商都在积极应对该系列漏洞,部分厂商提供了解决方案。
经过360安全团队评估,Meltdown和Spectre漏洞影响严重,修复流程较复杂。
Linux以及Windows不得不大幅改动、重新设计内核,才能解决这个芯片级的安全漏洞。
目前几大系统厂商各自在操作系统内核中引入了KPTI的技术,旨在和用户态的页表隔离,这样一来就可以解决\"Meltdown\"和\"Spectre\"漏洞问题。
此外,网上流传的“补丁将导致CPU性能损耗30%”的说法较为片面。30%的性能损失是在比较极端的专门测试情况下出现的,通常的用户使用情况下,尤其在用户的电脑硬件较新的情况下(例如绝大部分在售的Mac电脑和笔记本),这些补丁的性能损失对用户来说是几乎可以忽略不计。
漏洞概要
利用场景
由于漏洞需要在用户机器上首先拥有代码执行权限所以可能的利用场景主要有以下三种: 1、云服务中的虚拟机 云服务中的虚拟机拥有代码执行权限,可以通过相关攻击机制获取完整的物理机的CPU缓存数据。 2、个人终端内核提权攻击 如果配合其他漏洞,可能通过利用该漏洞泄露内核模块地址绕过KASLR等防护机制实现其他类型的攻击(提权或命令执行)。 3、个人终端浏览器入口攻击 利用浏览器JIT特性预测执行特殊的JIT代码,从而读取整个浏览器内存中的数据,泄露用户帐号,密码,邮箱, cookie等隐私信息
风险等级
360安全监测与响应中心风险评级为:高危 预警等级:蓝色预警(一般网络安全预警)
影响范围评估
360威胁情报中心已经确认公开的漏洞利用代码有效,使用漏洞验证程序(POC)可以读取内核地址空间的所有数据,受相关漏洞影响的产品包括但不限于: 处理器芯片:Intel为主、ARM、AMD,对其他处理器同样可能存在相关风险; 操作系统:Windows、Linux、macOS、Android; 云服务提供商:亚马逊、微软、谷歌、腾讯云、阿里云等; 各种私有云基础设施。 桌面用户可能遭遇到结合该机理组合攻击或者通过浏览器泄露cookies、网站密码等信息。
处置建议
\"Meltdown\"和\"Spectre\"漏洞修复流程相对复杂,可能会有部分软件不兼容问题(如杀毒软件等)。360安全监测与响应中心建议相关企业/用户务必作好相关的修复评估工作。 本质上Meltdown和Spectre两类攻击方式造成的后果是“读取”系统任意地址空间的数据,由于大部分操作系统将所有内核数据都映射到了用户进程空间中,所以当前的防御措施是通过强制内核隔离(KAISER/KPTI)来尽可能避免用户进程映射内核中的数据,以此来防御“读取”内核数据的攻击,但是依然无法防御读取用户进程空间数据的攻击(Spectre)。而由于Spectre攻击的入口大部分为浏览器,所以基于Spectre攻击的防护主要在浏览器端进行,因此当前各厂商的防护方案主要集中在以下两方面:
1、操作系统层实施内核隔离(KAISER/KPTI) 2、浏览器中降低performance.now()函数的时间精度来缓解侧信道攻击(通过执行时间猜测数据)
个人用户
由于漏洞需要在用户机器上首先拥有代码执行权限,所以此类漏洞对个人用户的影响非常小,而借助于浏览器的JIT特性可以执行“幽灵”攻击类的恶意代码,所以浏览器成为攻击普通用户的最主要入口。目前微软提供的操作系统内核补丁多少会和本地杀毒软件存在兼容性问题,多应用环境下的测试显示甚至可能导致机器蓝屏。所以360安全监测与响应中心中心建议普通用户先升级浏览器补丁以阻断目前已知的漏洞利用的最主要渠道。 升级浏览器补丁(建议普通用户优先执行) 升级版本到360安全浏览器9.1,提升安全性防止攻击者利用CPU漏洞窃取个人数据; Chrome 63可通过开启一个可选的“站点隔离(Site Isolation)”来进行防御,开启方法是在地址栏中输入“chrome://flags/#enable-site-per-process”,并启用“Strict site isolation”。Chrome 64版本预计在2018年1月23日提供相关的安全防护; IE Edge和IE 11提供了补丁更新,但是部分补丁和系统安全补丁混在一起,导致安装后存在兼容风险,建议暂时不更新; 升级浏览器至Firefox 57.0.4版本: https://www.mozilla.org/en-US/security/advisories/mfsa2018-01/ 升级操作系统补丁(建议暂缓执行,或使用产品解决方案安装操作系统补丁)
2、苹果在2017年12月更新的Mac OSX High Sierra 13.10.2已经修复了Meltdown漏洞;
3、Chromebooks在2017年12月对Chrome OS 63做了更新,可以缓解已知的CPU的漏洞;
4、Linux的不同版本也陆续提供了内核补丁; 升级固件 安全软件实时更新 由于黑客需要在用户电脑上植入恶意程序才能进行漏洞利用,所以保持安全软件实时更新、以及良好的上网习惯、不轻易打开陌生邮件和附件,以避免遭受利用此漏洞的恶意程序攻击。 云端用户
基于本次漏洞的特性,如果在用户机器上拥有了代码执行权限,那么就可以越权访问内核数据或者虚拟机的宿主内存数据,这意味着任何虚拟机的租户或者成功入侵了一个虚拟机的攻击者,都可以通过相关攻击机制去获取完整的物理机的CPU缓存数据,而这种攻击对现有虚拟化节点的防御机制是无法感知的。360威胁情报中心建议云端用户密切配合相关云厂商做好漏洞补丁修复工作。
产品解决方案
360天擎终端安全
天擎团队对微软1月3、4、5日发布的系统安全补丁进行了严格测试,确认天擎所有在售模块与补丁兼容。但不能全面地确定第三方软件是否与微软补丁存在兼容问题,所以安装了360天擎并且启用了漏洞补丁修复模块的政企客户,将先借助360的补丁云测试体系和自动化补丁分发,在360经过充分验证后将得到逐步的补丁推送。
同时为了方便客户在隔离网下验证微软补丁与业务系统的兼容性,天擎团队开发一款一键式漏洞补丁修复工具,集兼容性检测、下载和安装于一体。特别说明此工具的兼容性检测并不完整还在不断完善,建议在测试环境中验证补丁的兼容性后再到正式的业务系统中进行逐步安装。
360天堤产品的解决方案
360新一代智慧防火墙(NSG3000/5000/7000/9000系列)和下一代极速防火墙(NSG3500/5500/7500/9500系列)产品系列,已通过更新IPS特征库完成了对该漏洞的防护。建议用户尽快将IPS特征库升级至“1801061755”版本并启用规则ID: 3467进行防护。
技术分析
从本质上来讲,Meltdown和Spectre这两类攻击都属于基于CPU缓存(cache)的侧信道攻击的范畴。 相同的是这两种攻击方式所达到的目的都是一样的:促使CPU在微代码层面“提前”执行越权代码,由于CPU在微代码层面不会进行权限检查,所以“提前”执行的代码可以访问任意内存数据。 不同的是Meltdown利用了乱序执行(Out-of-Order Execution)来进行越权访问,而Spectre Attacks则利用了推测执行(Speculative Execution)来进行越权访问,接下来我们针对这两种攻击方式进行详细分析。
Meltdown
Meltdown攻击利用现代CPU中乱序执行 (out-of-order execution)的特性,乱序执行(out-of-order execution)是指CPU允许将多条指令不按程序规定的顺序分开发送给各CPU单元处理的技术,我们通过参考资料[1]中的示例代码来说明这一攻击的原理。 一个简化的Meltdown攻击指令序列:
1、rcx寄存器指向用户代码不可访问的内核地址 2、攻击者在指令4中访问内核内存地址,由于访问了内核地址,这一条指令将会触发异常,但由于指令4在CPU内部执行时并不受权限检测,所以读取到的内核数据被存放在了CPU缓存中 3、在等待CPU完成执行指令4的同时,后两条指令因为乱序执行机制实际上已经在CPU的内部执行单元中被执行 4、在CPU内部执行单元执行过的指令5将会把获取到的内核数据(1个字节)乘以4096,并在指令6中将其作为offset来对数组probe array进行访问 5、由于一个内存页的大小是4KB,不同的数据将会导致不同的内存页被访问并存放到CPU缓存中,所以,另一个攻击者进程(任务)就可以通过缓存侧信道攻击(已经被缓存的内存读取时间会更快),来了解哪个内存页被访问过了,从而推断出被访问的内核内存数据。
Spectre
Spectre攻击利用了现代CPU中推测执行(Speculative Execution)的机制来对系统进行攻击。推测执行(Speculative Execution)同样是一种CPU优化特性。在执行类似if () {}这类分支指令,并且在分支指令执行结束之前,CPU会预测哪一个分支会被运行,提取相应的指令代码并执行,以提高CPU指令执行的性能。当预测执行发现预测错误时,预测执行的结果将会被丢弃,CPU的状态会被重置。然而,与乱序执行类似,预测执行时CPU获取到的内存数据会被保留在CPU缓存中(包括越权获取的数据,虽然这些数据用户代码无权访问),我们通过参考资料[2]中的示例代码来说明这一攻击的原理。 1、首先申请一块内存,并写入如下数据
2、获取secret和array1的相对偏移量malicious_x
3、循环调用readMemoryByte函数,分别将malicious递增值作为其中一个参数
4、调用漏洞函数,利用CPU的预测执行机制将越权读取的数据cache到CPU缓存中
5、由于array2[array1[x]*512]的值被缓存,所以代码中通过rdtscp函数计算指令执行时间来判断哪个内存页被访问过(缓存的字节被当做另一系列被预测执行指令访问的数组下标,被访问的数组同样是在CPU中被预测读取),从而推断出被访问的secret内存数据
6、POC验证执行结果,读取进程内的机密数据。
7、POC验证执行结果,读取内核中的EPROCESS地址(Spectre攻击同样可以“读取”内核数据) 读取内核中的EPROCESS地址。
Windbg中对比确认读取的数据完全正确。
限制条件
本质上讲Meltdown和Spectra都是基于侧信道的攻击,主要用于信息泄露,并不能对目标内存地址进行任意修改,以下分别介绍两种攻击的限制条件。
Meltdown
Spectre Spectre攻击需要目标程序具有特殊结构(比如浏览器JIT即时编译出的代码具有Spectra攻击所需要的特殊结构),所以受到目标软件的限制。 Spectre攻击虽然适用于远程攻击,但是浏览器类JIT代码生成的Spectra攻击只能获取当前进程的内存数据,无法获取内核数据。 Spectre攻击在Intel系列CPU上也可以读取目标内核内存数据。
Meltdown和Spectre影响/防御对比 360威胁情报中心整理了两类攻击的影响范围和防御方式,便于对比理解。
| | | 读取系统内核层数据 | | | 通过KAISER/KTPI技术修复 | | | 读取任意用户层数据 | | | 远程攻击 | | | 主要影响范围 | | | 受影响CPU厂商 | | |
相关安全公告
https://newsroom.intel.com/news/intel-responds-to-security-research-findings/ https://security-center.intel.com/advisory.aspx?intelid=INTEL-SA-00088&languageid=en-fr
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV180002
https://aws.amazon.com/de/security/security-bulletins/AWS-2018-013/
https://developer.arm.com/support/security-update
https://googleprojectzero.blogspot.co.at/2018/01/reading-privileged-memory-with-side.html https://www.chromium.org/Home/chromium-security/ssca
http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2017-5715 http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2017-5753 http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2017-5754
https://access.redhat.com/security/vulnerabilities/speculativeexecution
http://xenbits.xen.org/xsa/advisory-254.html
https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new-class-timing-attack/
https://www.vmware.com/us/security/advisories/VMSA-2018-0002.html
https://http://www.hao123.com/ateurmovies.ind.com/en/corporate/speculative-execution
来源 360企业安全
|
评论
直达楼层