写点什么

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:391579

评论

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

分布式数据库是无用的屠龙术吗?

海边的Ivan

企业架构 分布式数据库 业务中台

走出舒适区最好办法别走了,扩大它

乐少

dubbo-go 中如何实现远程配置管理

joe

Apache 开源 微服务 dubbo Go 语言

任正非管理哲学中的三个常识和三种科学

霍太稳@极客邦科技

创业 团队管理 华为

做小池塘里的大鱼,还是大池塘里的小鱼?这是个问题。

霍太稳@极客邦科技

创业 团队管理 目标管理

喔,明白了,成功也是一种苦难

霍太稳@极客邦科技

创业 身心健康 企业文化 个人成长 心理

特别评论:甲骨文的傲气

张晓楠

云计算 互联网巨头 企业文化

无代码开发

Fenng

一篇文章搞定 java 中的 path 和 classpath

shengjk1

Java classpath vs path classpath path

精纯还是混乱?职场十二箴言——重读“成为乔布斯”的思考(一)

石君

职场 乔布斯 成功学

精纯还是混乱?职场十二箴言——重读“成为乔布斯”的思考(二)

石君

创业 乔布斯 成为乔布斯

翻译: Effective Go (2)

申屠鹏会

翻译 Go 语言

做产品的同理心

孙苏勇

产品 产品经理 产品设计

《小狗钱钱》——财富离我们并不遥远

Yin

读书笔记 投资 成长 思维方式

我的第一个千万阅读量

彭宏豪95

创作 生活 写作

是时候要说再见了,春风十里,不如邮你!

乐少

如何做一名失败的安全架构师

石君

架构 安全架构师 安全评估

用你喜欢的 emoji 作为页面的 favicon 吧 🎉

遇见

CSS html favicon emoji

【SpringBoot】掌握这两个属性,你的测试类可以启动的更快些

遇见

Java Spring Boot Unit Test

小议RPA

一品凡心

人工智能 RPA 自动化

探究vscode debug流程,解决无法运行go程序的问题

simpleapples

vscode Go 语言

如何解决 Kubernetes 的 DNS 延迟问题

倪朋飞

Kubernetes 微服务 云原生

GitHub知错就改,是个好同志

遇见

GitHub

Kubernetes 容器运行时演进

倪朋飞

Kubernetes 容器 云原生

我如何用 Python 给 Github 的 README.md 做一个访客统计功能

遇见

Python GitHub 开源 badge open-source

Elasticsearch文档版本冲突原理与解决

Skysper

elasticsearch 乐观锁 悲观锁

【深度】为您解读东西方艺术教育的专业设置差异对比~

默聲

删掉最后一句话

池建强

心理学 情绪控制

Kubernetes中的CI/CD

倪朋飞

Kubernetes DevOps 微服务

HTTP Methods和RESTful API的设计

孙苏勇

架构 系统设计 RESTful 接口

简单到不可能失败 —— 《微习惯》

零和幺

读书笔记

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