新年“礼物”:不敢置信的安全漏洞
当全球各大云计算公司不惜用各种黑科技(“水煮”服务器、水中数据中心等等)榨出 CPU 每一赫兹的性能的时候,2018 年初云计算厂商主要依赖的 CPU 供应商 Intel 却爆出了两个严重高危漏洞:Meltdown 和 Spectre。
下面是利用漏洞轻松地获得了正在输入的密码:
这里读取内存获得内容的效果:
不要以为只能作用于字符,图片照样可以:
通过上面的演示我们可以很直观的了解到这个漏洞带来的严重后果,因此对于支撑了整个现代互联网业务的云计算行业为了用户的安全是必须修复这一漏洞的。
现在我们了解一下漏洞的具体情况:
由 Meltdown 和 Spectre 这两个漏洞延伸出三个变体 Spectre Variant 1(CVE-2017-5753)、Spectre Variant 2 (CVE-2017-5715) 和 Meltdown Variant 3(CVE-2017-5754):
Spectre Variant 1(CVE-2017-5753) 影响 AMD、Intel 和 ARM 处理器等高性能处理器,但可以通过软件的方式修复,剩下的 Spectre Variant 2 和 Meltdown Variant 3 就仅影响 Intel 处理器,且修复只能通过操作系统内核的方式实现。
哭着也要打完的补丁
由于漏洞源自于 CPU 硬件,无法通过微码的方式修复,必须通过 Windows 内核、Linux Kernel 和 macOS 的 Darwin-XNU 内核等进行修复,不仅修复难度高而且修复后还会带来明显的性能下降。这种修复不仅仅影响到了各大操作系统,也从根本上影响到了各个云服务商的平台,几乎是让云计算公司在性能上的努力前功尽弃。
这两个漏洞是利用现代高性能处理器存在的安全缺陷,即无法通过正确判断将低权限的应用程序访存与内核高权限的访问分开,使得攻击者可以绕过内存访问的安全隔离边界,在内核中读取操作系统和其他程序的内存数据,造成敏感信息泄露风险。
目前的修复方式是通过 KPTI(Kernel Page Table Isolation)完全分离系统内核与用户内存,让系统使用另外一个分区表,使得用户程序无法访问系统内核。但是,KPTI 会导致 CPU 频繁地从内核模式切换到用户模式,引发耗时的 TLB 缓存刷新,拉低了系统效能。
云服务商遭遇重击
不过很多人都通过一定的途径了解到目前漏洞修复带来的性能损耗对普通人的日常使用,特别是游戏体验基本上没有太大影响,但是对于 CPU 密集型、I/O 密集型以及 CPU 缓存依赖的服务器使用性能,却带来了严重的性能下降:
- Redis-Server 整体计算能力,下降超过 50%
- PostgreSQL 整体计算能力,下降 17% ~ 23%
- Receiver Cluster 等网络 I/O 密集型服务,下降 30%
- 编译可执行程序,下降 30% 左右
- 其他服务器用途,下降 5% 左右
在各大社交平台可以看到云计算租户对性能下降的抱怨,即便是 AWS 和 Azure 也无法避免:
在 AWS 的 EC2 产品交流论坛上用户抱怨着漏洞修复带来的性能下降情况:
各大社交媒体上都是关于 KPTI 带来的性能问题的吐槽:
除了来自用户的抱怨,云计算厂商也在加班加点的修复这个漏洞,但是大规模的修复这三个变体又谈何容易,微软的 Azure 和 AWS 的解决方案都无法避免重启情况的出现,并且会有部分用户需要手动进行重启,重启也就意味着网络服务将会中断。
但最惨的恐怕还是修补漏洞打补丁结果还失败了,Azure 的 Virtual Machines 就在打上 Meltdown 补丁更新后然后瘫了~ 大量微软 Azure 客户纷纷在社交媒体上抱怨自己的虚拟机遇到了问题:在 1 月 5 日 的 Meltdown 补丁更新后,自己的虚拟机无法恢复正常运行。
可见本次严重的 CPU 芯片缺陷事故不仅影响巨大后果严重,会带来性能降低问题而且修复也不是一件简单的事情,云计算厂商想要完美的修复且不影响云上租户实属不易,即便是国际顶级的厂商也无法避免。
不过,随着国内外的云服务商的解决方案陆续出炉,我们期待云服务商们、安全厂商们、CPU 厂商们能共同找到最低限度的降低安全风险的前提下,尽可能的减少性能损失的技术手段。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/51049.html