查看: 4416|回复: 6
收起左侧

[讨论] 多家CPU厂商爆史上最大芯片底层缺陷,微软更新发布,增加升级后性能测试

[复制链接]
tom2000
发表于 2018-1-3 11:42:12 | 显示全部楼层 |阅读模式
本帖最后由 tom2000 于 2018-1-4 19:29 编辑

TOM2000

       蓝字更新今天最新的消息,简明扼要直接看紫色字体,微软和谷歌4日的公告说明不但Intel,ARM公司以及AMD也统统被波及。看样子问题真的很严重,微软竟然今天就紧急更新发布,补丁编号KB4056892!你选择性能还是安全?

       Intel最近被曝出他们的处理器存在一个安全漏洞(并非此前的ME漏洞),影响了所有能访问虚拟内存的CPU,比较彻底(没任何后患)的解决办法是从硬件层面上修复。目前这个漏洞还处于保密状态,虽然目前相关的解决方案(软件层面)正在商讨中,但修复后可能会造成多达35%的性能损失,据称这个漏洞可能会对亚马逊,谷歌和其他云服务提供商产生重大影响。

      这个漏洞目前是保密状态,但是从AMD回复自身不受影响的邮件推测看:如今的处理器(例如:Intel)会尽可能的去猜测接下来将要运行的代码是什么,这样能够一定程度的提高运行效率,但是Intel在实现该方式的时候并没有在做足安全检查的情况下就推测性的执行代码,这样就可能导致在特权级别检查前就完成了该指令的运行。简单点说就是ring-3级别的代码没检查就直接在ring-0级别运行,从而导致了严重的安全问题。

      这次爆出漏洞让Intel更加被动,此前ME漏洞还可以通过固件更新解决,但是这次曝光的漏洞要彻底解决只能是从硬件层面上修复。要知道此前ME漏洞还有海量用户没有更新,新的漏洞貌似软件方面已经无法彻底解决,临时解决方案又将会大幅影响处理器性能这势必造成用户反弹。

      前文说仅仅只是Intel Core CPU产品,貌似只是冰山一角,就在今天人们发现了Intel处理器里一个更为致命的漏洞,从最底端的Pentium,到最新的Coffee Lake Core,无一幸免,现在全球的OS开发者们都全部行动了起来为Linux打补丁,微软也已经在对这个漏洞做反应……光看这种行动的规模就知道这次爆出的漏洞有多严重了。谷歌(大名鼎鼎的Project Zero团队发现并提交这系列缺陷) 随后发布了这一问题的部分细节:Meltdown将会影响到英特尔芯片。另一个漏洞Spectre则会影响许多厂商的芯片(ARM,AMD)。


      本次爆出的Intel CPU架构漏洞的具体表现为核心内存泄漏,是属于芯片级别的安全bug,这个bug迫使Linux和Windows操作系统对它们的关键内核部分进行重新设计。一个操作系统的内核所使用的内存部分级别是非常高的,里面不光有操作系统正常运转的关键数据和驱动加载,它还存储了非常多的敏感信息如身份验证,密码等内容,通常来说在用户层面运行的程序是访问不了这部分内存的——或者说压根就看不见。但Intel CPU架构设计上的这个漏洞有可能会让恶意脚本直接读取核心内存,至少能拿走很多敏感信息。


      然目前关于这个漏洞的细节因为安全考虑暂时没有公布,不过已经有相关领域的人士猜测,Intel CPU架构为追求执行效率在代码执行预测上偷了懒,有可能会绕过核心的安全机制直接执行用户代码。尽管在具体信息公布之前大家都不敢下结论,但就看Linux/Windows OS的开发者们现在手忙脚乱的样子,也足够知道这漏洞有多严重了——影响范围超级广,杀伤力也足够深入。不过好消息是要利用起这个漏洞也需要相当高的水平,或许能减轻一点群众的恐慌,不过最慌的是云服务运营商和商业用户,该漏洞导致的本地代码提权、虚拟机逃逸都会给他们的系统运转造成致命的威胁。


      现在的最好结果是,Intel还可以用一定的性能损失换回本应存在的安全性。在已经对该漏洞作出反应的Linux系统和Windows 10 17035版本里,Intel CPU的性能都出现了一定程度的下降,最大的幅度可以达到30%,较新的CPU损失会小一些,然而Intel对AMD的I/O性能竞争力优势很可能会被大大削弱甚至是荡然无存(游戏性能貌似没受影响)。苹果用户们先别急着看笑话,你们用Intel CPU的macOS也跑不了。



     用普通人能听懂的话说,就是最开始认为影响仅是lntel近一,两年的产品,但是今天新的信息这已经把lntel,ARM,AMD等各大厂商往前20几年的CPU都涵盖进去了。软件补丁使用修改内存页表方案后,牙膏厂的产品性能都往后倒退1,2代,而其它厂商性能也都有不同影响...
     
    小伙伴都开始跑分测试,其实对普通用户来说,根本就不要犹豫是否打补丁,虽然综合来看系统性能确实受到影响,但是因为这次安全漏洞影响太过广泛和深入,基本等于系统最核心的信息都暴漏出来,我再次强调受影响不仅仅只是Intel,其它芯片厂商如ARM,AMD都受到影响。而且目前只有安装补丁解决(彻底解决需要芯片厂在硬件修复,改进后产品不知道什么时候才能上市)而且包括这次漏洞在内的系统漏洞,用户无论安装任何杀毒软件和防火墙都是无法解决的。所以建议个人用户还安装补丁!而且本次事件影响最大还是商业用户和云服务提供商。


     关于打补丁对性能影响应该是大家最关心的问题,从目前收集到的信息看,性能影响最大的是服务器的I/O密集型应用,phoronix网站测试显示,使用pcie固态的8700k在文件读写测试中性能降低了50%,但仍旧比使用SATA的6800k快,使用SATA固态的6800k基本没有性能降低。其他测试,SQL性能降低10%到20%,视频解码和游戏则不受任何影响。性能损失主要还是出在内核调用上。一句话对个人用户影响有限,建议个人用户无脑更新!



近期已经爆出几个硬件漏洞:
1最新CPU安全漏洞,除硬件更新外无法彻底解决,软件临时解决方案可行(微软在元月四日已经提供补丁),但是会大幅度影响处理器效率。多家芯片厂商近20年CPU产品都受到影响(是不是有点像苹果目前降频风波,但是换Cpu可远没换电池那么容易)

2ME漏洞,用户可以通过升级主板厂商提供的升级固件解决,虽然多数大厂已经给出升级程序,但是硬件漏洞太过专业升级也比普通安全更新复杂,所以绝大多数用户依旧没有修复。

3WPA2漏洞 微软已经发布更新补丁,多数手机厂商也更新相关补丁,但是用户要想彻底解决这个漏洞必须升级路由固件,但是多数路由厂商反应并不积极。

       对于系统安全求要较高的用户,希望能留意上边提到过的硬件漏洞,对于普通用户...好吧!貌似普通用户也不会来卡饭。计算机安全已经越来越复杂,安全问题不仅仅停留在软件层面上,硬件上安全问题也越来越多威胁普通用户日常生活。用户以前计算机安全知识已经无法应对新的安全威胁,如何去应对将是摆在所有人面前的问题。





dg1vg4
发表于 2018-1-3 11:51:50 | 显示全部楼层
AMD或成最大赢家
另外这个是不是发错区了?
tom2000
 楼主| 发表于 2018-1-3 11:54:21 | 显示全部楼层
dg1vg4 发表于 2018-1-3 11:51
AMD或成最大赢家
另外这个是不是发错区了?

确实不太合适,但是也没更好分区发,更关键我想提醒更多人关注这个问题,所以只好发在这了
欧阳宣
头像被屏蔽
发表于 2018-1-3 19:26:54 | 显示全部楼层
问题是没得选啊,尤其在笔记本领域,ryzen几乎还没有涉足。
wowocock
发表于 2018-1-4 16:18:55 | 显示全部楼层
先用老外的工具检测下。
/*++

Copyright (c) Alex Ionescu.  All rights reserved.

Module Name:

    specucheck.c

Abstract:

    This module implements a checker app for CVE-2017-5754 and CVE-2017-5715

Author:

    Alex Ionescu (@aionescu) 03-Jan-2018 - Initial version

Environment:

    User mode only.

--*/

//
// OS Headers
//
#include <windows.h>
#include <winternl.h>

//
// Internal structures and information classes
//
#define SystemSpeculationControlInformation (SYSTEM_INFORMATION_CLASS)201
typedef struct _SYSTEM_SPECULATION_CONTROL_INFORMATION
{
    struct
    {
        ULONG BpbEnabled : 1;
        ULONG BpbDisabledSystemPolicy : 1;
        ULONG BpbDisabledNoHardwareSupport : 1;
        ULONG SpecCtrlEnumerated : 1;
        ULONG SpecCmdEnumerated : 1;
        ULONG IbrsPresent : 1;
        ULONG StibpPresent : 1;
        ULONG SmepPresent : 1;
        ULONG Reserved : 24;
    } SpeculationControlFlags;
} SYSTEM_SPECULATION_CONTROL_INFORMATION, *PSYSTEM_SPECULATION_CONTROL_INFORMATION;

#define SystemKernelVaShadowInformation     (SYSTEM_INFORMATION_CLASS)196
typedef struct _SYSTEM_KERNEL_VA_SHADOW_INFORMATION
{
    struct
    {
        ULONG KvaShadowEnabled : 1;
        ULONG KvaShadowUserGlobal : 1;
        ULONG KvaShadowPcid : 1;
        ULONG KvaShadowInvpcid : 1;
        ULONG Reserved : 28;
    } KvaShadowFlags;
} SYSTEM_KERNEL_VA_SHADOW_INFORMATION, *PSYSTEM_KERNEL_VA_SHADOW_INFORMATION;

//
// Welcome Banner
//
const WCHAR WelcomeString[] = L"SpecuCheck v1.0.0 -- Copyright (c) 2018 Alex Ionescu\n"
                              L"http://www.alex-ionescu.com - @aionescu\n"
                              L"----------------------------------------------------\n\n";

//
// Error String
//
const WCHAR UnpatchedString[] = L"Your system either does not have the appropriate patch, "
                                L"or it may not support the information class required.\n";

//
// Error codes used for clarity
//
typedef enum _SPC_ERROR_CODES
{
    SpcSuccess = 0,
    SpcFailedToOpenStandardOut = -2,
    SpcFailedToQueryKvaShadowing = -3,
    SpcFailedToQuerySpeculationControl = -4,
} SPC_ERROR_CODES;

INT
SpcMain (
    VOID
    )
{
    HANDLE hStdOut;
    NTSTATUS status;
    BOOL boolResult;
    SYSTEM_KERNEL_VA_SHADOW_INFORMATION kvaInfo;
    SYSTEM_SPECULATION_CONTROL_INFORMATION specInfo;
    SPC_ERROR_CODES errorCode;
    WCHAR stateBuffer[512];
    INT charsWritten;

    //
    // Open the output handle -- also not much we can do if this fails
    //
    hStdOut = CreateFile(L"CONOUT$",
                         GENERIC_WRITE,
                         0,
                         NULL,
                         OPEN_EXISTING,
                         0,
                         NULL);
    if (hStdOut == INVALID_HANDLE_VALUE)
    {
        hStdOut = INVALID_HANDLE_VALUE;
        errorCode = SpcFailedToOpenStandardOut;
        goto Exit;
    }

    //
    // We now have display capabilities -- say hello!
    //
    WriteConsole(hStdOut, WelcomeString, ARRAYSIZE(WelcomeString) - 1, NULL, NULL);

    //
    // Get the KVA Shadow Information
    //
    status = NtQuerySystemInformation(SystemKernelVaShadowInformation,
                                      &kvaInfo,
                                      sizeof(kvaInfo),
                                      NULL);
    if (!NT_SUCCESS(status))
    {
        //
        // Print out an error if this failed
        //
        WriteConsole(hStdOut,
                     UnpatchedString,
                     ARRAYSIZE(UnpatchedString) - 1,
                     NULL,
                     NULL);
        errorCode = SpcFailedToQueryKvaShadowing;
        goto Exit;
    }

    //
    // Get the Speculation Control Information
    //
    status = NtQuerySystemInformation(SystemSpeculationControlInformation,
                                      &specInfo,
                                      sizeof(specInfo),
                                      NULL);
    if (!NT_SUCCESS(status))
    {
        //
        // Print out an error if this failed
        //
        WriteConsole(hStdOut,
                     UnpatchedString,
                     ARRAYSIZE(UnpatchedString) - 1,
                     NULL,
                     NULL);
        errorCode = SpcFailedToQuerySpeculationControl;
        goto Exit;
    }

    //
    // Print status of KVA Features
    //
    charsWritten = swprintf_s(stateBuffer,
                              ARRAYSIZE(stateBuffer),
                              L"KVA Shadowing Enabled: %s\n"
                              L"KVA Shadowing with User Pages Marked Global: %s\n"
                              L"KVA Shadowing with PCID Support: %s\n"
                              L"KVA Shadowing with INVPCID Support: %s\n\n",
                              kvaInfo.KvaShadowFlags.KvaShadowEnabled ? L"yes" : L"no",
                              kvaInfo.KvaShadowFlags.KvaShadowUserGlobal ? L"yes" : L"no",
                              kvaInfo.KvaShadowFlags.KvaShadowPcid ? L"yes" : L"no",
                              kvaInfo.KvaShadowFlags.KvaShadowInvpcid ? L"yes" : L"no");
    WriteConsole(hStdOut, stateBuffer, charsWritten, NULL, NULL);

    //
    // Print status of Speculation Control Features
    //
    charsWritten = swprintf_s(stateBuffer,
                              ARRAYSIZE(stateBuffer),
                              L"BPB Enabled: %s\n"
                              L"BPB Disabled due to System Policy: %s\n"
                              L"BPB Disabled due to No Hardware Support: %s\n"
                              L"Speculation Controls Enumerated: %s\n"
                              L"Speculation Commands Enumerated: %s\n"
                              L"IBRS Speculation Control Present: %s\n"
                              L"STIBP Speculation Control Present: %s\n"
                              L"Supervisor Mode Execution Prevention Present: %s\n",
                              specInfo.SpeculationControlFlags.BpbEnabled ? L"yes" : L"no",
                              specInfo.SpeculationControlFlags.BpbDisabledSystemPolicy ? L"yes" : L"no",
                              specInfo.SpeculationControlFlags.BpbDisabledNoHardwareSupport ? L"yes" : L"no",
                              specInfo.SpeculationControlFlags.SpecCtrlEnumerated ? L"yes" : L"no",
                              specInfo.SpeculationControlFlags.SpecCmdEnumerated ? L"yes" : L"no",
                              specInfo.SpeculationControlFlags.IbrsPresent ? L"yes" : L"no",
                              specInfo.SpeculationControlFlags.StibpPresent ? L"yes" : L"no",
                              specInfo.SpeculationControlFlags.SmepPresent ? L"yes" : L"no");
    WriteConsole(hStdOut, stateBuffer, charsWritten, NULL, NULL);

    //
    // This is our happy path
    //
    errorCode = SpcSuccess;

Exit:
    //
    // Close output handle if needed
    //
    if (hStdOut != INVALID_HANDLE_VALUE)
    {
        CloseHandle(hStdOut);
    }

    //
    // Return the error code back to the caller, for debugging
    //
    return errorCode;
}
锦瑟无端五十弦
头像被屏蔽
发表于 2018-1-4 17:20:12 | 显示全部楼层
卧槽 降频???那我宁愿不要安全
Jomye
发表于 2018-1-10 23:44:01 来自手机 | 显示全部楼层
安琪大过降频,何况我的笔记本是AMD。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-12-28 05:16 , Processed in 0.161662 second(s), 16 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表