百科问答小站 logo
百科问答小站 font logo



如何看待美国研究人员设计出的「无法被黑的芯片」? 第1页

  

user avatar   Gh0u1L5 网友的相关建议: 
      

刚听说这条消息的时候,我直接就是一个嗤之以鼻。一个系统只要能接受来自人类的指令,就一定存在相应的攻击向量。你可以不断拔高攻击的难度,但是“不可攻破”就是痴人说梦了,研究人员和记者两方必有一方是骗人的小狗。

于是我翻开相关论文,扫了一眼相关机构,嗯……密歇根大学、UT Austin、普林斯顿大学,还拿了美国国防高级研究计划局(DARPA)足足360万经费,好,肯定是记者的报道出了偏差,他是要负责任的。

批判完记者的标题党行为之后,我怀着对新架构的好奇继续读完了论文,然后……我感觉整个人都陷入了一种“哇”的状态。这个 MORPHEUS 架构虽然远远谈不上“不可攻破”,但是它却有可能将一类相当常见、相当泛滥的漏洞彻底根除,对信息安全领域产生深刻的影响。

那么,请容我在这里卖个关子。在 CPU 架构层能根绝的漏洞类型不多,猜到是哪一种了吗?


比较书卷气的答案是控制流劫持(Control-Flow Hijacking)。这个叫法有点太学术了,不少人可能听不懂我说的是什么。但如果我说溢出攻击(Overflow)的话,想必有人就会恍然大悟了。

其实严格来讲,这两个概念并不完全一样。

溢出攻击指的是黑客通过一些内存读写方面的逻辑漏洞,恶意覆盖某段内存,把里面的数据污染成自己想要的内容。如果黑客污染的是跳转地址、函数返回地址等数据的话,就能实现控制流劫持,操纵程序跳转到自己想要的任意位置;污染其他敏感数据的话,又会产生别的效果,比如篡改关键校验位、提升权限等。

目前,MORPHEUS 架构对后一种情况还力不从心,但是对于前一种情况却有着极其优异的表现。我所说的“极其优异”,是指跟目前所有防护手段相比,MORPHEUS 都呈现出压倒性的安全优势和性能优势。在看完了具体数据之后,我甚至开始有些害怕:如果美方单方面地将这类“安全处理器架构”发展成熟,列装到政府系统和军用系统里,中方在这个领域会不会变得只能被动挨打?只能看着敌人把这些高危攻击砸在我们的系统里,我们却无法还击?想必美国的国防高级研究计划局也是因为看到了这种可能,才会豪掷360万美金参与打造了 MORPHEUS 的原型机,以求能在这个方向上领先一步占据优势。

好了,危言耸听了这么多,是时候科普一下目前为止 MORPHEUS 公开的技术细节了。在开始科普之前,先来贴一下相关论文链接:Morpheus: A Vulnerability-Tolerant Secure Architecture Based on Ensembles of Moving Target Defenses with Churn.

0x01 浅谈栈溢出攻击

为了照顾背景知识不足的读者,我们先来简单聊一聊一类常见的控制流劫持攻击——栈溢出攻击(Stack Overflow)

有编程背景的同学应该都知道,一个函数调用的内存是在栈(Stack)上分配的,其中包含着这个函数执行结束后应该返回的位置。

栈溢出攻击,就是利用程序读写内存时出现的逻辑缺陷,将这个返回地址覆盖成攻击者想要的地址,让程序跳转到攻击者预先注入的一段恶意程序上,接管整个程序的执行。

显而易见地,为了让这整段攻击顺利完成,攻击者需要达成起码三项条件:

  1. 成功覆盖某段关键内存,比如函数返回地址。
  2. 覆盖后成功跳转到一段恶意代码。
  3. 跳转到的恶意代码成功得到执行。

所有关于栈溢出的攻防,总归是要围绕这三项条件展开的,比如:

  • Rust 、C∀ (C for all) 等项目想要设计出更安全的编程语言,从源头上杜绝攻击者覆盖内存。但是由于包括 Linux 内核在内的老旧C语言项目数量太多、规模太大,在将来十到二十年内也许看不到将它们全部移植到安全语言的可能。
  • 代码指针完整性校验(Code-Pointer Integrity, CPI)代码指针隔离(Code-Pointer Seperation, CPS)则是把所有指向代码的指针都隔离存放到一块安全的区域里,并且限定读写这些指针的条件,防止攻击者将它们覆盖、指向恶意代码。
  • 地址空间布局随机化(Address Space Layout Randomization, ASLR)可以打乱数据在内存中的分布,让攻击者找不到自己注入的恶意代码,从而阻止恶意跳转发生。然而 ASLR 仅仅会在程序加载时打乱一次,之后不再进行打乱,因此可以通过堆喷(Heap Spray)等攻击手段绕过。
  • 控制流完整性校验(Control-Flow Integrity, CFI)试图审计与监控跳转行为,拦截所有可疑的跳转。但是这样的方案理所当然地会产生严重的性能负担,所以现有的 CFI 方案基本都为了性能牺牲了安全性,留下了种种破绽。
  • 数据执行保护(Data Execution Prevention, DEP)指令集随机化(Instruction-Set Randomization, ISR)等防护可以阻止未授权的代码在设备上执行,但是这类防护大都可以通过面向返回编程(Return-Oriented Programming, ROP)面向跳转编程(Jump-Oriented Programming, JOP)等手段绕过。

这些年来,CPI 和 CFI 都是相当热门的研究方向。尤其是 CPI,不仅通过形式化证明论证了自己理论上百分之百的安全性,性能数据也相当喜人。根据 SPEC2006 的性能测试结果,应用了 CPI 技术后,程序的运行时间平均增加 8.5%,最差情况下增加 44.2% ,远低于“细粒度 CFI”等相同安全级别的防护手段。

但是,让我们把目光放回到今天的主角身上,MORPHEUS 的性能表现又是如何呢?

同样是 SPEC2006 性能测试,程序运行在标准的 MORPHEUS 架构上时,运行时间平均增加 0.86%,最差增加 6.71%,碾压了几乎全部的已知手段。这个悬殊的结果乍一看让人觉得有些不可思议,但细想之后又是理所当然:MORPHEUS 所用到的所有操作,都是在硬件层由电路直接支持的,怎么可能会不快呢。其他防护手段想要胜过 MORPHEUS,估计只能从安全性上做文章了。

遗憾的是,在读过 MORPHEUS 的设计之后,我觉得其他手段在安全性上应该也很难和它比肩了。因为在 MORPHEUS 的设计里,我觉得我能看到所有已知手段的影子。

0x02 MORPHEUS 架构原理

MORPHEUS架构的原理,用论文标题中的一段就能完美概括:“Ensembles of Moving Target Defenses with Churn”,直译成中文的话,就是“将若干种移动目标防御手段结合使用,并且反复进行搅乱操作”。

移动目标防御(Moving Target Defenses)是近些年各国都极其重视的发展方向,被美国国土安全部称为“改变游戏规则的新型信息安全技术”。它的基本思想很简单:在传统的静态系统里,大部分的敏感数据都是固定不变的,攻方可以有相当宽裕的时间进行刺探和信息收集,而守方只能在出事之后被动应对,处于敌暗我明的不利局面。移动目标防御的目的,就是让整个系统活动起来、随机起来,让攻方刺探到的每一条信息都迅速失效,拉平攻守双方的信息不对称。

可以被归类为移动目标防御的技术手段有很多,比如我们常见的银行数字令牌,就属于一次性密码(One-Time Password)的范畴。而在控制流劫持这个领域,我们主要用到的技术是之前提到的 ASLR 和 ISR,这里让我们复读一下:

  • 地址空间布局随机化(Address Space Layout Randomization, ASLR)可以在程序每次加载时,打乱数据在内存中的分布,让攻击者找不到自己注入的恶意代码。
  • 指令集随机化(Instruction Set Randomization, ISR)可以在程序每次加载时,为 CPU 制定一套加密过的指令集,并且把内存里的每一行代码都转换成加密过的指令集。这样一来,由于黑客不知道程序这次运行所使用的指令集,他写出来的二进制代码也就不可能正常执行。

这两种 MTD 都只会在程序加载时执行一次,所以又被称为加载时移动目标防御(Load-time MTD)。显然,它们的防护力度并不够理想,尤其是对于各种服务器软件来说,一次运行往往要持续好几个月,期间地址空间布局和指令集都会保持不变,给攻击者留下充足的刺探时间。

既然如此,那这几个月我们对服务器软件随机做几次 ASLR 和 ISR,是不是就能解决问题了呢?很遗憾,对于传统 CPU 架构来说这基本是不可能的。这种行为打个比方的话,就相当于是在客机飞行期间给发动机换零件,发动机还不能熄火。如果这都不爆炸的话,你修的可能是纸飞机。

而 MORPHEUS 架构的奇妙之处,就在于它把 ASLR 和 ISR 转换成了两种效果相仿的操作,并且在架构层添加了若干电路和一个搅乱单元(Churn Unit)进行硬件支持,把“万米高空修飞机”这个虚幻操作变成了可能。更夸张的是,它不仅把这个操作变成了可能,还把它变得贼快,以至于你可以每 50ms 搅乱一次,对性能的损耗却仅仅只有 0.86% 左右。

这个魔术具体的实现细节比较繁琐,我在科普文里就不再细讲了,有兴趣的朋友可以看一下论文的4.2、4.3和4.4节。顺便一提,4.3节的 Domain Encryption 不仅仅有 ISR 的效果,它同时还加密了代码指针(Code Pointer),起到了类似 CPI/CPS 的防护效果。

在论文之中,有一张图很好地体现了 MORPHEUS 架构的优越之处:

图中的“Probe”表示攻击者在进行嗅探的时间。上中下三条分别表示:

  • 没有移动目标防御的情况下,攻击者简单进行一次嗅探就可以开始攻击了。
  • 使用移动目标防御之后,攻击者的嗅探时间被拖得很长,但是还是成功进行了攻击。
  • 而在 MORPHEUS 架构下,攻击者每次嗅探都遭到了疯狂打断,一次攻击都没能完成。

更无情的是,MORPHEUS 架构还吸取了 DEP 的核心思想,实现了对可疑行为的动态检测。

在 MORPHEUS 架构上,设计人员定义了四种数据类型:代码(C)、数据(D)、代码指针(CP)、数据指针(DP)。MORPHEUS 的编译器会标记每块内存的身份,帮助 CPU 判断用户的行为合不合理,比如:

  • 一块内存被标记为数据,用户却要把它当成代码去执行,这明显就是一个恶意行为,MORPHEUS 会直接终止程序执行。
  • 一块内存标记为代码指针,用户却要对它进行加减乘除,这很可能是攻击者在进行嗅探,属于可疑行为,会当场触发一次搅乱(Churn)。

这一整套组合下来,对于攻击者来说基本就是地狱难度了。即使攻击者小心翼翼地绕过了行为检测,他也只有顶多50毫秒的时间进行操作。这50毫秒可能还不够数据包传到服务器上,所有的敏感数据就全打乱了。这种感觉就好像是猎人进山打鸟,发现山里的鸟竟然都会瞬移,别说站远处打了,枪口顶在鸟头上你都打不中,这种效果简直令猎人绝望。

0x03 头脑冷静时间

那么,MORPHEUS 架构是否就是我们要找的“银弹”了?是否就是完美的解决方案了?

坦白地说,现在还不知道,因为还没有看到形式化证明。即使有了形式化证明,也只是证明了理论上的绝对安全。实际做成产品之后,又会因为现实世界的不完美而出现种种缺陷。即使实际产品也已经做到尽善尽美了,它所解决的问题也只是信息安全领域一个相当狭窄的子集,在这之外还有浩如烟海的漏洞是 MORPHEUS 无能为力的。

不过,就算 MORPHEUS 本身不是我们在找的银弹,它也为我们指出了一条前景似乎非常美妙的道路——基于硬件进行高速 MTD,把攻击者直接逼上绝路。这条路如果真的能够走通的话,对于信息安全领域绝对会产生非常深刻的影响,甚至可能衍生出一批“耐漏洞”的计算机架构,让人类永远摆脱漏洞挖掘这项繁琐又枯燥的工作。

当然,如果真有那一天,安全行业恐怕就要大失业了。


最后顺便闲聊两句吧。

这段时间日子过得比较忙,索性从知乎上淡出了两个月,做个简单的休息与调整,毕竟一直坚持输出干货实在是太累了。现在休息得差不多了,手里也攒了一些比较有意思的材料,接下来应该会小小地活跃一阵子,欢迎关注。

另外,觉得本文有价值的话,欢迎点个赞支持一下。对信息安全感兴趣的同学,也欢迎阅读我写的其他信息安全科普类文章:




  

相关话题

  网络安全真的那么好吗? 
  如何看待三星罕见地针对自家晶圆代工良率展开内部调查,连夜彻查晶圆代工业务资金流向? 
  零基础如何学习 Web 安全? 
  为什么电子邮件允许冒充发件人? 
  如何看待兆芯kx6780a正式发售,并定价2499? 
  如何看待b站up主tom表哥硬刚诈骗团伙的行为? 
  高通骁龙 8 Gen1、联发科天玑 9000、苹果 A15 芯片,三者相比哪个更强? 
  如何看待台积电的跨界自研芯片“This”? 
  一家又一家公司不再和华为合作对已买手机用户产生什么实际上的影响? 
  台积电二季度营收同比增加 19.8% 至 3721.5 亿新台币,释放了哪些信号? 

前一个讨论
如何分辨真假轴承?尤其是进口轴承?
下一个讨论
您觉得成年人需要玩具吗?





© 2024-09-19 - tinynew.org. All Rights Reserved.
© 2024-09-19 - tinynew.org. 保留所有权利