
所有软件(如Chrome、Photoshop等)都是由处理器执行的指令序列,这些指令对内存和寄存器中的数据进行操作。关键假设是指令按顺序执行——这相当于假设时间旅行不可能成立。
箭头显示分支指令与其潜在目标的关系
处理器执行指令速度(约2ns/指令)远快于内存访问速度(约100ns/次)。为解决此矛盾,处理器将频繁访问的内存内容副本存储在芯片上的缓存中(L1/L2/L3缓存),访问速度提升至1-3ns。当缓存满时,新项目需置换旧项目。通过测量内存访问时间,可推断目标数据是否被缓存——这正是Meltdown与Spectre利用的缓存计时侧信道基础。
L1/L2缓存位于核心内,L3缓存被多核心共享
现代处理器采用乱序执行技术:同时执行多条指令后重排序结果,伪装成顺序执行。例如同时执行4条指令仅需2ns(顺序执行需8ns)。当处理器预测错误时(如遇到除零异常),已执行的推测指令需被"撤销",但研究人员发现某些副作用无法完全消除。
假设4个执行单元且指令无依赖关系
分支指令控制执行流,分为条件分支(如if判断)和间接分支(如函数指针)。处理器通过分支预测器猜测分支目标(准确率>96%),预测错误时撤销已执行指令。Spectre漏洞正是通过操纵分支预测器来保留推测指令的副作用。
cmp指令操作数相等时跳转(绿箭头),否则继续执行(红箭头)
跳转到0x10000c5f0地址处的initterm函数
Meltdown是自1995年以来几乎所有Intel处理器的设计缺陷,允许用户程序读取本无权限访问的内核内存。处理器采用用户态和内核态两种特权模式,用户程序禁止读取内核内存(包含按键记录、网络流量、加密密钥等敏感数据)。
关键突破点在于:当内核内存内容已缓存但权限信息未缓存时,Intel处理器采用异步权限检查——先读取缓存值,若权限检查失败再中止执行。由于处理器速度远快于内存,在权限结果返回前可能已推测执行数十条指令。
bigblock(分为256段)并确保无缓存secret_kernel_byte(0-255值)bigblock[secret_kernel_byte]并触发缓存bigblock的特定段仍保留在缓存中bigblock各段的时间,被缓存段读取速度显著更快bigblock[42]最快则字节值为42)推测读取的内核内存效应通过缓存侧信道泄露
本文第二部分将详解Spectre V1/V2变种的技术细节,并探讨为何这些漏洞能隐藏25年。技术背景将更复杂,但漏洞机制也更具趣味性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。