论文学习及报告总结

20182918 2018-2019-2 《密码与安全新技术专题》第13周作业

课程:《密码与安全新技术专题》

班级: 92
姓名: 冯乾
学号: 20182918
上课教师:谢四江
上课日期:2019年5月25日
必修/选修: 选修

1.本次论文的学习、报告总结

论文题目:Spectre Attacks: Exploiting Speculative Execution
论文来源:39th IEEE Symposium on Security and Privacy(Oakland)
作者信息:

  • Paul Kocher
    • Independent
  • Daniel Genkin
    • University of Pennsylvania and University of Maryland
  • Daniel Gruss
    • Graz University of Technology
  • Werner Haas
    • Cyberus Technology
  • Mike Hamburg
    • Rambus, Cryptography Research Division
  • Moritz Lipp
    • Graz University of Technology
  • Stefan Mangard
    • Graz University of Technology
  • Thomas Prescher
    • Cyberus Technology
  • Michael Schwarz
    • Graz University of Technology
  • Yuval Yarom
    • University of Adelaide and Data

本文发表时间不到一年半,引用次数已经达到了416次。

Spectre Attacks(幽灵攻击)

现代处理器使用分支预测和推测执行来最大化性能。 例如,如果分支的目标取决于正在读取的内存值,则CPU将尝试获取目标并尝试提前执行。 当内存值最终到达时,CPU丢弃或提交推测计算。 推测逻辑在执行方式上是不忠实的,可以访问受害者的内存和寄存器,并且可以执行具有可测量副作用的操作。
幽灵攻击涉及诱使受害者以规范的方式执行在正确的程序执行期间不会发生的操作以及泄漏受害者的操作,可以通过侧信道向外界提供的机密信息。幽灵攻击结合了来自侧信道攻击,故障攻击和回归导向编程的方法,可以从受害者的内存中读取任意任意位置的内容。 更广泛地说,推测性执行实施违反了支持数字软件安全机制的安全假设,包括操作系统进程分离,静态分析,容器化,即时(JIT)编译以及对缓存的定时/侧通道攻击的对策。 这些攻击对实际系统构成严重威胁,因为在用于数百万台设备的英特尔,AMD和ARM的微处理器中发现了漏洞预测执行的功能。
幽灵攻击就像字面所说的意思一样,来无影去无踪,当攻击发生时受害者在毫无察觉的情况下就被CPU的预测执行功能“出卖”了。

Speculative Execution(预测执行)

预测执行简单来说是一些具有预测执行能力的新型处理器,可以估计即将执行的指令,采用预先计算的方法来加快整个处理过程。

预测执行的设计理念是:加速大概率事件。

预测执行是高速处理器使用的一种技术,通过考虑可能的未来执行路径并提前地执行其中的指令来提高性能。例如,当程序的控制流程取决于物理内存中未缓存的值时,可能需要几百个时钟周期才能知道该值。除了通过空闲浪费这些周期之外,过程还会控制控制流的方向,保存其寄存器状态的检查点并且继续在推测的路径上推测性地执行该程序。当值从存储器中偶然到达时,处理器检查最初猜测的正确性。如果猜测错误,则处理器将寄存器状态恢复为存储的检查点并丢弃(不正确的)预测执行,如果猜测是正确的,则该部分代码已被执行过,不需要再次执行,因此带来了显著的性能增益。

可以发现,如果预测错误,即便程序真正执行到这里时错误结果被丢弃,但错误的结果还是短暂的出现在寄存器中,在被丢弃之前,这部分数据就很容易被泄露。

欺骗分支预测器

下面是一段可能被分支预测器错误预估的代码:

1506386-20190602225431446-1402950511.png

对于这段代码,攻击者首先使用有效的x调用相关代码,训练分支预测器判断该if为真。 然后,攻击者设置x值在array1_size之外。 CPU猜测边界检查将是真的,推测性地使用这个恶意x读取array2 [array1 [x] * 256]。 读取array2使用恶意x将数据加载到依赖于array1 [x]的地址的高速缓存中。当处理器意识到这个if为假时,重现选择执行路径,但缓存状态的变化不会被恢复,并且可以被攻击者检测到以找到受害者的存储器的一个字节。 通过使用不同的x值重复,可以利用该构造来读取受害者的存储器。
该段代码的通常执行过程如下:
进入if判断语句后,首先从高速缓存查询有无array1_size的值,如果没有则从低速存储器查询,按照我们的设计,高速缓存一直被擦除所以没有array1_size的值,总要去低速缓存查询。
查询到后,该判断为真,于是先后从高速缓存查询array1[x]和array2[array1[x]*256]的值,一般情况下是不会有的,于是从低速缓存加载到高速缓存。
在执行过几次之后,if判断连续为真,在下一次需要从低速缓存加载array1_size时,为了不造成时钟周期的浪费,CPU的预测执行开始工作,此时它有理由判断if条件为真,因为之前均为真(加速大概率事件),于是直接执行下面的代码,也就是说此时即便x的值越界了,我们依然很有可能在高速缓存中查询到内存中array1[x]和array2[array1[x]*256]的值,当CPU发现预测错误时我们已经得到了需要的信息。

攻击过程及结果

攻击流程图如下:

1506386-20190605212223115-914969923.png

获取目标内存地址的技术本论文没有介绍,个人以为可以堆内存地址进行监控,选择频繁被修改的地址。

攻击示例程序中的受害代码采用上面的例子,交替输入有效和恶意的参数:

1506386-20190602225440457-122524045.png

在通过直接读取该处cache中的值确定攻击是否命中,当读取速度小于某个经验值时,则认为该数据在高速缓存中,判断为命中。当命中某个数值达到一定次数时判定命中结果:
1506386-20190602225444575-531317321.png

本文作者声称这种攻击可以获取信息的速率在一定环境下可达10KB/s(10KB/second on an i7 Surface Pro 3)。

相似的攻击手段:meltdown

Meltdown是一种类似的微体系结构攻击,它利用无序执行来泄漏目标的物理内存。 Meltdown在两个主要方面与Spectre Attacks截然不同。 首先,与Spectre不同,Meltdown不使用分支预测来实现推测执行。 相反,它依赖于观察,当一条指令导致一个软中断时,正在无序执行的指令中止。第二,Meltdown利用特定于英特尔处理器的特权升级漏洞,由此 推测执行的指令可以绕过内存保护。 结合这些问题,Meltdown从用户空间访问内核内存。 此访问会导致软中断,但在发出软中断之前,访问后面的代码会通过缓存通道泄漏所访问内存的内容。与Meltdown不同,Spectre攻击适用于非Intel处理器,包括AMD和ARM处理器。 此外,KAISER补丁已被广泛应用于对Meltdown攻击的缓解,但不能防止幽灵攻击。

复现过程

  • 实验环境:
    • win10 专业版1809 64位、 win7旗舰版32位(VMware14 pro虚拟机)
    • CPU: i5-8300H。
    • 内存: 分别为16G,4G。

代码修改:原论文附录中提供的代码存在些许瑕疵,对于观察期望输出存在一定阻碍,如图:

1506386-20190605212238423-826438193.png

将第二处红框中的代码改为第一处一样的格式即可。同时不知道原作者使用何编译器,在我们的测试中 %c是不能用引号括起来的。
运行结果如图:
1506386-20190605212243356-1714405552.png

2.学习中遇到的问题及解决

  • 问题1:如何确保分支预测器按照我们的想法去执行分支?
  • 问题1解决方案:仔细阅读代码得知,训练分支预测器的时候除了按照一定的比例输入有效和恶意的输入外,还会频繁的清除cache中的缓存,这样程序在执行到该处位置时为避免低速存储器的IO代价,会进行推测执行。
    1506386-20190602225452372-195871285.png
  • 问题2:array2大小为何定义为256*512(程序中实际上只需要256个值)
  • 问题2解决方案:结合之前学过的操作系统的知识、加上查阅资料,推测这是因为CPU中存在多级缓存,当把内存中某处的数值读到最高速缓存时,其相邻的值很可能也会被读到次一级的高速缓存,在次一级的高速缓存中的数值被读取时速度同样非常快,这样就影响我们用读取时间判断是否命中。

3.本次讲座的学习感悟、思考等

正如没有绝对安全的系统,某种方案被开发出来后必定伴随着一些隐藏的副作用。预测执行这种技术听起来确实是有无限可能,尤其是在处理器性能大大受到IO限制的今天。但推测执行带来的问题也不得不防,利用推测执行的漏洞进行攻击的幽灵,无声无息的盗取数据后甚至不会留下一点痕迹。

参考资料

转载于:https://www.cnblogs.com/thechosenone95/p/10964939.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值