0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

芯片漏洞实战之破解KASLR

Linux阅码场 来源:https://paper.seebug.org/497/ 作者:蒸米,白小龙 2020-11-26 13:47 次阅读

Meltdown和Spectre分析以及CPU芯片漏洞攻击实战,教你如何破解macOS上的KASLR。

作者:蒸米,白小龙 @ 阿里移动安全 来源:

https://paper.seebug.org/497/

0x00 影响

早上突然就被Meltdown和Spectre这两个芯片漏洞刷屏了,但基本上都是一些新闻报道,对漏洞的分析和利用的信息基本为0。作为安全研究者,不能只浮在表面,还是要深入了解一下漏洞才行,于是开始研究这方面的资料。结果发现其实这个硬件漏洞的影响非常广,不光是IntelARMAMD也受影响,只是AMD的影响比较小罢了。因此基本上所有的操作系统(Windows,macOS,LinuxAndroid等)都有被攻击的风险。漏洞有两种攻击模式:一种被称为Meltdown,是在用户态攻击内核态,造成内核信息泄露。另一种被称为Spectre,一个应用可以突破自己的沙盒限制,获取其他应用的信息。另外,因为是硬件漏洞,这个攻击对云的影响非常大,利用这个漏洞,一个guest可以获取host或同一台服务器上其他guest的信息,可以说是一个非常严重的漏洞,因此亚马逊和google都在紧急加班修复漏洞。比如google就公布了漏洞修复的进度在:https://support.google.com/faqs/answer/7622138。虽然是硬件漏洞,但是在系统或软件层面上通过牺牲性能的方法还是可以进行修补的。

0x01 原因

那么我们现在知道漏洞很严重了,那么漏洞形成的原因是什么呢?关键点在于Speculative execution(推测执行)。推测性执行是一种优化技术,CPU会执行一些可能在将来会执行任务。当分支指令发出之后,传统处理器在未收到正确的反馈信息之前,是不会做任何工作的,而具有预测执行能力的新型处理器,可以估计即将执行的指令,采用预先计算的方法来加快整个处理过程。如果任务最终没有被执行,CPU还可以回滚到之前的状态,就当做什么都没发生过一样。但是这样真的安全吗?答案是,并不安全。攻击者通过寻找或构建一些指令就可以在CPU回滚的时间窗口里进行一系列的攻击。比如Google Blog中提到的边界检查绕过(CVE-2017-5753),分支目标注入(CVE-2017-5715), 恶意数据缓存加载(CVE-2017-5754)。

举个例子,如果CPU执行下面这段代码:

arr1->length没有被缓存的时候, CPU会从arr1->data[untrusted_offset_from_caller]处读取数据,如果untrusted_offset_from_caller的值超过arr1->length,就会造成越界读。当然,正常情况下这并不会出现什么问题,因为在执行到判断语句那一行的时候,CPU发现不对,后面的语句不应该被执行,于是会将状态回滚到越界读之前。

但是接下来,问题就出现了。假设arr1->length,arr2->data[0x200]和arr2->data[0x300]都没有被缓存,CPU会继续推测执行下面的代码,在这里index2会根据value&1产生两个不同的值0x200,0x300,而Value就是越界读到的值。接下来,代码会根据Value的值去读取arr2->data[0x200]或arr2->data[0x300]的值并且这个值会被加入到缓存里。接下来,我们可以再次尝试去读取arr2->data[0x200]和arr2->data[0x300],读取时间短的那个值说明被缓存过了,因此就可以判断出value&1的值为0还是1,从而做到内核信息泄露。

其实,在google的blog发布之前,就已经存在类似的攻击了,只是危害没有这么大而已,今天我们就直接实战一个利用Intel CPU芯片漏洞来破解macOS KASLR的攻击。

0x02 芯片漏洞实战之破解KASLR

这种攻击比较简单,但是是后面高级攻击的基础,因此我们先从这个攻击讲起。之前我们讲到,为了让CPU效率更高,它们依靠推测性执行在任务到来之前就提前执行任务。同样,数据预取就利用这个思想推测性地先将数据加载到缓存中。Intel的CPU有五个软件预取指令:prefetcht0,prefetcht1,prefetcht2,prefetchnta和prefetchw。这些指令作用是提示CPU,告诉他一个特定的内存位置可能很快被访问。然而,Intel的手册中却提到,预取“未映射到物理页面的地址”会导致不确定的性能损失。因此,我们可以通过CPU预读指令执行的时间长短来判断这个地址有没有被映射到物理页面上。

我们知道KASLR的原理是在内核的基址上增加一个slide,让攻击者无法猜测内核在内存中的位置。但是内核肯定是被映射到物理页面上的,因此我们可以使用预取指令去遍历内核可能的起始地址,如果执行预取指令的时间突然变短,就说明我们猜中了内核的起始地址。我们在网上成功找到了破解macOS 10.13 KASLR的POC,并做了一点简单的修改:https://pastebin.com/GSfJY72J

其中关键代码如下:

这是一段汇编参数会传入想要预取的地址,然后利用rdtscp和rdtscp来统计指令执行的时间,并返回。于是我们从内核可能的起始地址开始,不断地执行这段汇编代码,直到我们找到内核的起始地址为止。

可以看到在0x15c00000这一行,指令执行的时间明显缩短了。因此,我们可以猜出Kernel Side为0x15c00000。

0x03 修复

根据某内部漏洞修复人员在twitter上的回复,苹果已经在macOS 10.13.2上对此类芯片漏洞进行了修复,采用了牺牲性能的针对用户态使用两次映射的方式来解决该问题。并号称10.13.3上有更好的解决方案。另外iOS的A*系列芯片暂时还不受这类漏洞的影响。

0x04 总结

本篇文章只是给芯片的一系列漏洞开了个头,我们随后还会有更多关于芯片漏洞的分析和利用实战,欢迎继续关注本系列的文章,谢谢。

参考文献:

1. https://googleprojectzero.blogspot.hk/2018/01/reading-privileged-memory-with-side.html

2. https://siguza.github.io/IOHIDeous/

3. Prefetch Side-Channel Attacks: Bypassing SMAP and Kernel ASLR, CCS 2016.

责任编辑:PSY

原文标题:性能VS安全?CPU芯片漏洞攻击实战(1) - 破解macOS KASLR篇

文章出处:【微信公众号:Linuxer】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    446

    文章

    47759

    浏览量

    409050
  • 漏电
    +关注

    关注

    4

    文章

    121

    浏览量

    20586
  • intel
    +关注

    关注

    19

    文章

    3451

    浏览量

    184770

原文标题:性能VS安全?CPU芯片漏洞攻击实战(1) - 破解macOS KASLR篇

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32库开发实战指南

    STM32库开发实战指南-刘火良,电子 epub格式,清晰非扫描
    发表于 10-27 16:25 9次下载

    LabVIEW入门与实战开发100例

    LabVIEW入门与实战开发100例,实用例子
    发表于 10-26 15:25 25次下载

    Ciphey 的实战使用教程

    Ciphey 是一个使用自然语言处理和人工智能的全自动解密/解码/破解工具。 简单地来讲,你只需要输入加密文本,它就能给你返回解密文本。就是这么牛逼。 有了Ciphey,你根本
    的头像 发表于 10-21 16:08 612次阅读
    Ciphey 的<b class='flag-5'>实战</b>使用教程

    网站常见漏洞checklist介绍

    在做网站渗透之前除了关注一些通用漏洞,这些漏洞通常能很容易的利用扫描器扫出,被WAF所防护,然而有一些逻辑漏洞WAF和扫描器就无法发现了,就需要人工来测试。
    的头像 发表于 10-16 09:10 457次阅读
    网站常见<b class='flag-5'>漏洞</b>checklist介绍

    电阻维修检测实战

    电阻维修检测实战
    发表于 10-15 11:23 3次下载

    如何搭建“实战化”的统一系统脆弱性管理平台

    面对层出不穷的漏洞,如何搭建“实战化”的统一系统脆弱管理平台,是网络安全厂商和客户比较头痛的事情。日前,国内专注于保密与非密领域的分级保护、等级保护、业务连续性安全和大数据安全产品解决方案与相关
    的头像 发表于 09-05 13:35 252次阅读

    用于缓解高速缓存推测漏洞的固件接口

    CVE-2017-5715,也称为Spectre Variant 2,是某些ARM CPU设计中的漏洞,允许攻击者控制受害者执行上下文中的推测执行流,并泄露攻击者在体系结构上无法访问的数据。 在
    发表于 08-25 07:36

    常见的漏洞扫描工具

    漏洞扫描工具是现代企业开展渗透测试服务中必不可少的工具之一,可以帮助渗透测试工程师快速发现被测应用程序、操作系统、计算设备和网络系统中存在的安全风险与漏洞,并根据这些漏洞的危害提出修复建议。常见
    的头像 发表于 06-28 09:42 1097次阅读
    常见的<b class='flag-5'>漏洞</b>扫描工具

    已知的HAB漏洞是否会影响i.MX6ULL版本1.1?

    我有一个 NXP iMX6ULL rev 1.1,发现i.MX6ULL 的 HAB 机制中存在两个已知漏洞。但是,我所指的文档并未指定芯片版本。因此,我不确定这些漏洞是否会影响我的设备。你能帮我澄清一下吗?
    发表于 06-02 09:07

    如何破解wordpress

    web破解 一般喜欢用 burpsuite 、hydra 通用性好 但 一大堆参数 使用是还需配置 破解wordpress 用wpscan 不得不说是很好用 功能多 而且经常更新 但 不是每次
    的头像 发表于 05-30 09:04 616次阅读

    NPATCH漏洞无效化解决方案

    NPATCH漏洞无效化解决方案 防御恶意漏洞探测 防御恶意漏洞攻击 防御利用漏洞扩散 安全挑战 未修复的漏洞如同敞开的大门,可任由黑客恶意窥
    的头像 发表于 05-25 14:46 1059次阅读
    NPATCH<b class='flag-5'>漏洞</b>无效化解决方案

    服务器有漏洞如何修复和解决?

    服务器漏洞会有什么问题?如何修复它?随着互联网的发展,网络攻击和服务器漏洞的安全问题越来越突出,那么服务器漏洞会有什么影响呢?我们应该如何处理这些漏洞和攻击呢?这个小编将与您一起了解个
    的头像 发表于 05-24 13:57 1267次阅读

    node.js实战源码

    node.js实战源码
    发表于 05-16 18:06 0次下载

    快来看看你的MCU是怎么被破解

    大家可能都知道破解 51 单片机是很容易的,但为什么容易,又是如何来破解的,可能很多人就不大清楚了。其实对于MCU的破解从简单来讲,它并不像我们开发项目那样复杂,有时候一个漏洞被发现,
    发表于 05-16 11:10 3285次阅读
    快来看看你的MCU是怎么被<b class='flag-5'>破解</b>的

    渗透实战:记一次弱口令的挖掘

    由于web只找到两个登陆页面,其他什么都找到,那么只能先对登陆页面进行测试。看到前台登陆页有短信登陆功能,马上想到短信发送是否有频率和次数限制,如有则存在短信炸弹漏洞。虽说不是什么危害性很大的漏洞,但漏洞就是
    的头像 发表于 05-06 11:50 1095次阅读
    渗透<b class='flag-5'>实战</b>:记一次弱口令的挖掘