问题描述
2018年1月,谷歌Project Zero公布了现代处理器存在安全漏洞Spectre与Meltdown。
Spectre攻击利用的是处理器的分支猜测和高速缓存技术。在执行指令的过程中,当遇到分支时,为了避免等到分支判断结束后再堵塞读取内存中的后续指令,处理器会进行分支猜测。spectre通过可利用的代码片段并对其进行训练,可以读取本来无法读取到的信息。
Meltdown是基于处理器的乱序执行和高速缓存技术,结合现代操作系统进程中内存管理技术制造的一个安全漏洞。meltdown可以绕过权限检查访问数据,所以可以“熔断”(meltdown)安全边界,因此得名。
CPU的投机执行(Speculative Execution)和乱序执行(Out-of-order Execution)是一种性能优化技术,因此修复Meltdown或Spectre漏洞后可能导致在特定工作负载下的性能下降,实际的影响程度与业务和CPU相关(比如在Intel skylake CPU上对Redis性能影响20%左右)。对此用户可以根据自己的需要关闭相关修复,以提升云主机的性能。
注意!关闭漏洞修复开关代表您已知悉并确认关闭补丁带来的负面影响,烦请谨慎操作。
说明:本文加固方法只针对BCLinux、CentOS以及RedHat操作系统。
加固修复处理
关闭修复方法为在内核启动参数中添加参数,具体方法参考如下:
可下载脚本进行相关漏洞检测:
curl -L https://meltdown.ovh -o spectre-meltdown-checker.sh
wget https://meltdown.ovh -O spectre-meltdown-checker.sh
chmod +x spectre-meltdown-checker.sh
sudo ./spectre-meltdown-checker.sh
参见:GitHub
1)在 /etc/default/grub文件 ,GRUB_CMDLINE_LINUX 行添加需要关闭的漏洞参数,此处以添加“nopti”参数为例:
#vim /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=bel/root rd.lvm.lv=bel/swap rhgb quiet nopti "
2)重新生成grub文件
#grub2-mkconfig -o /boot/grub2/grub.cfg
3)重启云主机
4)各项漏洞对应的关闭方法如下:
CVE | 漏洞名称 | 漏洞配置文件所在路径 | 默认处理方式 | 关闭漏洞修复的方法 |
---|---|---|---|---|
CVE-2017-5753 | Spectre Variant 1(Bounds Check Bypass) | /sys/devices/system/cpu | 默认开启漏洞修复 | 强制开启,无法关闭 |
CVE-2017-5753 | Spectre Variant 1(swapgs) | /sys/devices/system/cpu/vulnerabilities/spectre_v1 | 默认开启漏洞修复 | 仅3.10-1062及之后的内核版本支持关闭nospectre_v1=off mitigations=off |
CVE-2017-5715 | Spectre Variant 2 | /sys/devices/system/cpu/vulnerabilities/spectre_v2 | 默认开启漏洞修复(spectre_v2=auto) | nospectre_v2 spectre_v2=off mitigations=off(仅3.10-1062及之后的内核版本支持) |
CVE-2018-3639 | Spectre Variant 4(Speculative Store Bypass) | /sys/devices/system/cpu/vulnerabilities/spec_store_bypass | 若处理器支持Speculative Store Bypass Disable特性,则开启修复,否则不开启任何修复(spec_store_bypass_disable=auto) | spec_store_bypass_disable=off nospec_store_bypass_disable mitigations=off(仅3.10-1062及之后的内核版本支持) |
CVE-2017-5754 | Meltdown | /sys/devices/system/cpu/vulnerabilities/meltdown | 默认开启漏洞修复(pti=auto) | pti=off nopti mitigations=off(仅3.10-1062及之后的内核版本支持) |
CVE-2018-3615 | L1TF | /sys/devices/system/cpu/vulnerabilities/l1tf | Guest Kernel中只开启PTE Inversion修复 | l1tf=off mitigations=off(仅3.10-1062及之后的内核版本支持 |
CVE-2019-11091 | MDS | /sys/devices/system/cpu/vulnerabilities/mds说明:仅3.10-1062及之后的内核版本支持 | Guest Kernel中只开启CPU buffer clear修复 | mds=off mitigations=off(仅3.10-1062及之后的内核版本支持) |