作者a40136 (funnynose)
看板PC_Shopping
标题Re: [情报] Intel CPU漏洞导致64位元作业系统、虚拟化软体易受骇客
时间Tue Jun 19 18:33:44 2012
在过去AMD开发X86-64的指令集时,AMD并没有真的把记忆体的位元数扩充到64bit
实际上只有到48bit(因为48bit已足够定址256TB的记忆体,真实64bit需要6层的
pagetable、而48bit只需要4层pagetable)。
所以当记忆体储存时,第48~63bit的值必须与第47bit的值相等(canonical form)
假使值不相等那就会回传一个错误讯息(GP)。
现在的作业系统设计主要都是阶层化设计,分为User mode、Priveleged mode
中间是透过SYSRET这个System Call做切换,一些比较重要的事情都必须在
Priveleged mode底下运行,而进行转换这个动作主要是透过SYSRET执行,也是
这次问题发生之所在。
SYSRET 主会做以下2个动作
将RCX值赋予RIP(instruction pointer)
转换为User mode
而RCX 是一个通用的register所以可以存取64bit之值
但是RIP是用作存取记忆体位置所以必须符合前述所说canonical form
针对这点,Intel与AMD都会针对这个值检查的时机不同。
Intel是在转换前做检查,AMD是在转换後。
假使不符合canonical form
Intel会是在Priveleged mode传回GP
AMD会在User mode传回GP
假使GP是在Userv mode时传出,那Stack pointer会是一个由hypervisor给定
得值
但是假使GP是在Priveleged mode传出那SP值会是当下的SP值也就是Priveleged mode
底下的SP值
但是SYSRET并不会做回复SP值这个动作,这个动作是由hypervisor执行,所以当GP
出现之前SP值已经被复制到当下的地方,所以有心要搞破坏的人,只需要促使
hypervisor 所接收到的RIP不符合canonical form那他就能任意修改SP的值,藉此
破坏。
其实早期的AMD处理器也有相同的问题,并不只有Intel。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.213.173
1F:推 MrDisgrace :专业推 06/19 18:37
※ 编辑: a40136 来自: 140.115.213.173 (06/19 18:39)
2F:推 ChaosK :推~但还是看不太懂XD...是会让CPU当机吗? 06/19 18:39
可以让他当机,但是更狠一点,可以控制整台电脑
※ 编辑: a40136 来自: 140.115.213.173 (06/19 18:40)
3F:推 quamtum :是改变sp然後pop到骇客的程式取得最高权限? 06/19 18:43
把要注入的Code放在自己虚拟机的Stack,藉由以上手法使得code会在
Priveleged mode下运行。
※ 编辑: a40136 来自: 140.115.213.173 (06/19 18:46)
4F:推 s25g5d4 :有列出受影响的AMD与Intel处理器吗? 06/19 18:46
理论上只要修改作业系统针对层级切换所使用的system call就可以解决这个问题
Windows、Xen、FreeBSD、RedHat、NetBSD都已经有Patch,记得更新就没事了
如果是企业用户使用Linux系统建议可以参考一下KSplice,在事情爆发後不到12小时
就更新了,还不错。
※ 编辑: a40136 来自: 140.115.213.173 (06/19 19:04)
5F:推 s25g5d4 :问一下...这跟ring0有关系吗? 06/19 19:08
Intel CPU权限分为4层Ring0~Ring3,依照Windows internal Window指使用了Ring0
Ring3,而这里说的Priveleged mode可以就说是Ring0
6F:推 juunuon :还是看不懂0.0 06/19 19:56
※ 编辑: a40136 来自: 140.115.213.173 (06/19 20:01)
7F:推 zoidsx :所以这问题AMD很早就解决了? Intel则是现在才解决吗? 06/19 20:33
正确来说最早是AMD实做这个指令集Intel拿去用,或许AMD後来偷改过没公布
8F:推 netsphere :专业推 勉强看得懂,请问一下这类知识要看哪些书? 06/19 20:38
恐龙本会有最基本的作业系统概念,想进阶就去了解Linux Kernal
9F:→ jack089452 :恐龙? 06/19 20:45
※ 编辑: a40136 来自: 140.115.213.173 (06/19 21:00)
10F:→ x000032001 :operating system concepts 06/19 21:01
11F:→ MrDisgrace :恐龙中文版翻得有好一点了吗? XDDD 06/19 21:02
12F:推 netsphere :Linux Kernel是推荐哪本书呢? 中文或原文都可以 06/19 21:03
Linux Kernel in a Nutshell有网路书
13F:推 netsphere :先谢谢大大 06/19 21:05
14F:推 evo2001 :幸好看得懂,感谢大大分析XD 06/19 21:19
我只是大3的学生 ... 不是大大
15F:推 MarsZ5 :有名的 ring 0 security bug 06/19 21:21
※ 编辑: a40136 来自: 140.115.213.173 (06/19 21:27)
16F:推 taiwanbeers :推一下 专业 06/19 21:34
17F:→ jack089452 :要看还是看英文吧...中文超烂(懊悔) 06/19 21:55
18F:推 a83a83cjcj :推一个~ 专业~~ 06/19 21:59
19F:推 chugliang :推一个 06/19 22:02
20F:推 supersax :...令人怀念的恐龙本= =".. 06/20 01:03
21F:推 stosto :念中文本要用英文文法 这样可以省去单字翻译时间 06/20 02:10
22F:推 obov :完全没碰过OS QQ 06/20 02:40
23F:→ zoidsx :您只是大三的学生的话 那您应该是可以用外星语跟教授 06/20 21:05
24F:→ zoidsx :对话的哪几位学生了XDDD 06/20 21:05
25F:推 tsairay :原po年纪轻轻,程度就相当不错,厉害 06/20 23:36
26F:→ singy :你是许老师学生吗? 06/21 11:26
大学部还不用选教授吧,果进研究所会想跟许教授
※ 编辑: a40136 来自: 140.115.213.173 (06/21 11:59)
27F:推 anedo :这以後会是个人才 06/21 14:02
28F:推 tsming :有前途:P 06/21 16:26
29F:推 macdivas :怀念 06/21 20:50
30F:推 ayumiayayaai:大大受我一拜! 06/22 01:27
31F:推 nfsnfs :可以来我们实验室教学吗 :p 我是许老师学生 XD 06/22 01:47
32F:→ nfsnfs :欢迎来我们实验室呀 XD 06/22 01:47
博班的大大就不要开我玩笑了Orz
※ 编辑: a40136 来自: 140.115.213.173 (06/22 11:12)
33F:推 cyrandy :大大超强<(_ _)> 06/23 15:39
34F:→ cyrandy :大屁超无敌强!!! 06/23 22:02
小屁无敌强!!!
※ 编辑: a40136 来自: 140.115.213.173 (06/23 22:03)