周壑x64位内核学习 (六)、硬件漏洞补丁和CFG
一、SPECTRE和MELTDOWN攻击
熔断幽灵攻击
首先介绍三个概念
1、side-channel attacks
侧信道攻击
比如密码验证,假设密码为6789
我们从第一位的0开始爆破,第一位为6时,会发现,验证时间变长了一点,由此可以判断出,6即是密码的第一位,由此类推...
2、CPU抢跑
Intel为了提高cpu执行效率,提出了抢跑策略
比如:
if(x>y){
instruct1
instruct2
instruct3
}
cpu不等if语句中是否判断成功,直接就执行if中的指令,假如,判断成功,即x确实大于y,CPU的执行效率无疑得到了很大提高,但如果,判断失败,即x < y 那么,cpu只能进行回滚,回滚到执行指令前的位置
3、CPU缓存机制
熔断幽灵攻击就是利用这三个机制
如图,我们假设允许访问区有一数组index[],和数组test[],假设test的上限很少,index数组上暂时没有cpu缓存
有
if(x < y){ index[test[6]] instruct1 instruct2 instruct3 }
test[6]数组越界,CPU不会检测,因为CPU认为内核总会去检验是否越界。一般来说,越界的话,内核会报错并强制结束进程,但这时候,由于cpu的抢跑策略,内核检测不了数组是否越界,CPU直接查询了text[6]的值,test[6] = 2,CPU访问之后,由于缓存机制,会在index[2]的位置留下缓存
这时候,攻击者,通过遍历index数组,通过判断读取不同单位的时间找到index[2]的位置,即攻击者就会知晓,不可访问区域的第二个单位的值是2,由此造成数据泄露
为了解决这个问题,在许多跳转指令后面添加了lfence指令
二、CFG控制流保护
在比较老的编译器,在进行跳转时候,会把地址转移到寄存器,再对寄存器进行call
但这种方法容易被攻击者利用,为此,控制流保护机制出现了
把call rax替换成了 call _guard_dispatch_icall函数
进入这个函数:
看其末尾,
mov [rsp+0], rax
retn
最后就是对rax的call
函数中间就是对rax值的检测,这个函数不影响程序的执行,完全可以替代成call eax
我们可以在一下选项中设置流保护
参考
__EOF__

本文作者:_TLSN
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16057161.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16057161.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现