写点什么

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

评论

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

霸榜18年,作者连续20年获得微软MVP,这本SQL书凭什么成为畅销经典

图灵社区

数据库 SQL语法 sql查询

奈学大数据开发工程师分享787个技术,快来收割

奈学教育

大数据

美国黑客曝出政府惊天内幕,看区块链如何解决!

CECBC

CECBC 区块链技术 民生 不可篡改 信息公开

游戏夜读 | 什么是黑色一分钟?

game1night

收藏!如何有效实施devops?

禅道项目管理

DevOps 运维 持续集成 开发 自动化测试

ARTS-week one

Jokky💫

ARTS 打卡计划

『PyTorch』使用指定GPU的方法

kraken0

人工智能 学习 图像识别

Vim使用总结

JDoe

vim

SpringBatch系列入门之Tasklet

稻草鸟人

spring SpringBatch 批处理

深入理解ContextClassLoader

Skye

深入理解JVM ContextClassLoader

CI/CD - Python Django 项目在 Jenkins 上的实践

meta-algorithmX

Python django TDD CI/CD

手机是21世纪最成功的毒品

Neco.W

学习 提升效率 工作

【译】业务转型是什么?

涛哥 数字产品和业务架构

业务中台 数字化转型

Vue生成AST算法的解析

djknight

Java Vue AST

学习没进步?也许反馈有问题

KAMI

学习 认知提升

面试题:教你如何吃透RocketMQ

奈学教育

架构 RocketMQ 架构设计

万恶的NPE如何避免,几种你必须知道的方案!!!

不才陈某

后端

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十四)编写测试-显示名

编程道与术

Java 编程 TDD 单元测试 JUnit

Java是不是慢半拍?

X.F

Java 架构 编程语言

GcExcel:比 Apache POI 速度更快、性能更高

葡萄城技术团队

Apache POI GCExcel

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十五)编写测试-断言\假设\使测试失效

编程道与术

Java 编程 TDD 单元测试 JUnit

Docker 搭建 Postgres + pgAdmin 环境

姜雨生

Docker DevOps postgres

深入理解JVM内存管理 - 方法区

Skye

深入理解JVM 方法区 老年代

CEO或业务负责人应该具备的数据分析能力

花生

工具 数据 CEO

运维日志里隐藏的安全危机,你知道怎么挖吗?听听专家怎么说

secisland

态势感知 关联分析 SOC

redis持久化RDB与AOF

wjchenge

redis

安全做到首位 统信UOS后激勃发

统小信uos

网络安全 操作系统

Hive底层执行引擎的深度剖析(免费)

奈学教育

大数据 hive

我们是活着,而不是活过

小天同学

个人感想 生活,随想 随笔杂谈 日常思考

产品周刊 | 第 17 期(20200531)

八味阁

产品 设计 产品经理 产品设计 产品推荐

撸一串趣图,给晚上加班打个鸡血

码农神说

程序员 加班 段子

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