写点什么

CPU 特性漏洞!如何更新 microcode 以缓解未被修复的 Spectre 漏洞问题?

  • 2020-04-12
  • 本文字数:1466 字

    阅读完需:约 5 分钟

CPU特性漏洞!如何更新microcode以缓解未被修复的Spectre漏洞问题?

引言

近来 Google 的 Project Zero 团队公布的 Spectre 和 Meltdown 漏洞,可谓一石激起千层浪,业内各个硬件软件厂商开源社区都在积极参与漏洞修复。


据悉,漏洞会造成 CPU 运作机制上的信息泄露,低权级的攻击者可以通过漏洞来远程泄露(浏览器形式)用户信息或本地泄露更高权级的内存信息。


Meltdown 是最早被修复的,在 Kernel 中开启 KPTI 就可以缓解该问题, Spectre 则依然在火热进行中。而作为漏洞的始作俑者 Intel,Spectre 漏洞的 Intel 官方缓解方案也于近日放出。 当然目前很多更新并非真正的修复,而是在最大程度抵御和缓解相关攻击。

更新 microcode

通过更新 microcode 和系统补丁可以缓解 Spectre Var. 2 漏洞,也就是 CVE-2017-5715 branch target injection。 除了在 BIOS 中可以更新 microcode 之外,Kernel 也提供了更新 microcode 的机制。本文只关注在如何在 RancherOS 上更新 microcode。


下载最新的 Intel microcode 版本,注意 microcode 一般并不是适用所有的 CPU,比如 20180108 这个版本,主要是以下 CPU 才会起作用:




下载并解压缩之后,你会发现一个是 intel-ucode 目录下一些文件,另外一个单独的 microcode.dat 文件。 前者是支持热加载方式,也是现在比较推荐的方式;后者是传统更新方式,需要在 initrd 中加入 microcode 加载。 对于 RancherOS,前者比较合适,使用起来相对简单。


若要在内核支持更新 microcode,需要在编译内核时加入以下配置(RancherOS 已经开启):


CONFIG_MICROCODE=yCONFIG_MICROCODE_INTEL=yCONFIG_MICROCODE_AMD=yCONFIG_MICROCODE_OLD_INTERFACE=y #支持传统方式,开启此项
复制代码


安装过程比较简单,几乎每个版本的 microcode 都有相应的 releasnote,大致如下:


# Make sure /sys/devices/system/cpu/microcode/reload exits:$ ls -l /sys/devices/system/cpu/microcode/reload
# You must copy all files from intel-ucode to /lib/firmware/intel-ucode/ using the cp command$ sudo cp -v intel-ucode/* /lib/firmware/intel-ucode/
# You just copied intel-ucode directory to /lib/firmware/. Write the reload interface to 1 to reload the microcode files:$ echo 1 > /sys/devices/system/cpu/microcode/reload
复制代码


无论更新成功与否,在 dmesg 中都会查看到相关信息,比如:


$ dmesg | grep microcode [   13.659429] microcode: sig=0x306f2, pf=0x1, revision=0x36 [   13.665981] microcode: Microcode Update Driver: v2.01 <tigran@aivazian.fsnet.co.uk>, Peter Oruba [  510.899733] microcode: updated to revision 0x3b, date = 2017-11-17  # 这条msg很重要
复制代码


查看 cpuinfo,再次确认 microcode 版本,不同的 CPU 型号,升级后对应的 microcode 版本是不同的:


$ cat /proc/cpuinfo |grep "model\|microcode\|stepping\|family" |head -n 5cpu family   : 6model        : 63model name   : Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz stepping     : 2microcode    : 0x3b #之前是0x36
复制代码


然后在 cloud-config 中在 runcmd 添加脚本,保证每次启动都加载最新版本的 microcode:


runcmd:- echo 1 > /sys/devices/system/cpu/microcode/reload
复制代码

总结

关于 Spectre Var. 2,我们依然在持续关注, 直接在内核编译中使用 Retpoline 指令替换技术,可以更简单方便的缓解 branch target injection, 现在内核已经支持了 Retpoline 指令替换的设置,但是也需要最新版本的 GCC 编译器的特性支持, 而带有 GCC 的新补丁的正式版本还没有发布,一旦 GCC 新版本发布,我们会马上更新内核并发布新的 RancherOS 版本。


2020-04-12 20:391680

评论

发布
暂无评论
发现更多内容

企业级项目开发中的交互式解释器以及global全局定义、Stream流的合理运用和实战【Note.js】

恒山其若陋兮

前端 11月月更

【web 开发基础】PHP回调函数之变量函数 (35)

迷彩

php 回调函数 11月月更

MobPush for Flutter

MobTech袤博科技

云原生下日志采集的3种方式

穿过生命散发芬芳

11月月更 云原生日志采集

极客时间运维进阶训练营第五周作业

Starry

Mobtech短信验证 for Flutter

MobTech袤博科技

【web 开发基础】PHP类静态函数和对象方法的回调 (37)

迷彩

对象 回调函数 11月月更 静态方法 成员方法

Python: 你所不知道的星号 * 用法

eng八戒

Python 编程

React源码分析(二)渲染机制

goClient1992

React

一文熟悉 Go 的循环结构 —— for 循环

陈明勇

Go golang for 11月月更 for-range

C++学习---类型萃取---is_function

桑榆

C++ STL 11月月更

【web 开发基础】PHP自定义回调函数之call_user_func_array() (36)

迷彩

回调函数 web开发基础 11月月更 call_user_func_array 自定义回调函数

防火墙是网络安全的第一道防线,你认同吗?

wljslmz

网络安全 防火墙 11月月更

CDH5部署三部曲之二:部署和设置

程序员欣宸

大数据 hadoop 11月月更

React源码分析(三):useState,useReducer

goClient1992

React

React源码分析(一)Fiber

goClient1992

React

跳板机逐渐被堡垒机替代的最主要原因是这个!

wljslmz

运维 堡垒机 跳板机 11月月更

ubuntu部署ELK-三节点

忙着长大#

ELK

「Go实战」记一次降低30%的CPU使用率的优化

Go学堂

golang redis 程序员 个人成长 11月月更

在使用Note.js的过程中对于tty对于终端的运用、加密模块以及Assert的事件驱动程序的深入运用理解

恒山其若陋兮

前端 11月月更

【Node.js 】开发中遇到的多进程‘keylog‘ 事件以及TLS/SSL的解决学习方案实战

恒山其若陋兮

前端 11月月更

项目经理和Scrum Master之间的不同(译)

Bruce Talk

Scrum 敏捷开发 Agile

React Context源码是怎么实现的呢

flyzz177

React

架构模块六-作业

许四多

架构实战营模块6作业-拆分电商系统为微服务

冷夫冲

架构 「架构实战营」

电商微服务架构图

Johnny

架构实战训练营9期

Maven 如何配置推送的仓库

HoneyMoose

电商平台微服务架构

Jack

架构实战训练营9期

关于登录框的渗透测试

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

「Go实战」基于Prometheus+Grafana搭建完整的监控系统

Go学堂

golang 程序员 个人成长 监控 11月月更

发布MagicOS 7.0, 荣耀如何打造“松弛感”的操作系统?

脑极体

CPU特性漏洞!如何更新microcode以缓解未被修复的Spectre漏洞问题?_文化 & 方法_Rancher_InfoQ精选文章