摘要
Microsoft 发现了一个公开披露的新漏洞类(称为“推理执行边信道攻击”)会对众多新式处理器和操作系统产生影响。 其中包括 Intel、AMD 和 ARM。
注意 此问题还会影响其他系统,例如 Android、Chrome、iOS 和 MacOS。 因此,我们建议客户向这些供应商寻求指导。
Microsoft 已发布多个帮助缓解这些漏洞的更新。 我们也采取了措施来保护云服务。 有关更多信息,请参阅下列部分。
Microsoft 目前尚未收到任何信息表明已有人利用此漏洞攻击我们的客户。 Microsoft 将继续与业内合作伙伴(包括芯片制造商、硬件 OEM 和应用程序供应商)密切合作以保护客户。 若要获取所有可用保护,需要安装硬件或固件和软件更新。 其中包括来自设备 OEM 的微码,在有些情况下,还包括防病毒软件更新。
有关这些漏洞的更多信息,请参阅 Microsoft 安全通报 ADV180002。 有关缓解此类漏洞的一般指导,请参阅 Guidance for mitigating speculative execution side-channel vulnerabilities(缓解推理执行边信道漏洞的指导)
Microsoft 于 2019 年 5 月发布了 ADV190013 - 缓解微体系结构数据采样漏洞的 Microsoft 指导。 对于 ADV190013 中描述的问题,SQL Server 没有提供任何特定的安全补丁。 你可以在本文的“推荐”部分找到针对受 ADV190013 影响的环境的指导。 请注意,此建议仅适用于 Intel 处理器。
如何获取并安装更新
还可以通过 Windows Server Update Services (WSUS) 或 Microsoft 更新目录网站获取此更新。
注意: 此更新不会通过 Windows 更新自动下载并安装。
可用 SQL 修补程序
发布时,有以下更新的 SQL Server 版本可供下载:
服务发布
SQL Server 2017 GDR 安全更新说明 (4057122): 2018 年 1 月 3 日
SQL Server 2017 RTM CU3 安全更新说明 (4058562): 2018 年 1 月 3 日
SQL Server 2016 SP1 CU7 安全更新说明 (4058561): 2018 年 1 月 3 日
SQL Server 2016 GDR SP1 安全更新说明 (4057118): 2018 年 1 月 3 日
SQL Server 2016 CU 安全更新说明 (4058559): 2018 年 1 月 6 日
SQL Server 2016 GDR 安全更新说明 (4058560): 2018 年 1 月 6 日
SQL Server 2014 SP2 CU10 安全更新说明 (4057117): 2018 年 1 月 16 日
SQL Server 2014 SP2 GDR 安全更新说明 (4057120): 2018 年 1 月 16 日
SQL Server 2012 SP4 GDR 安全更新说明 (4057116): 2018 年 1 月 12 日
SQL Server 2012 SP3 GDR 安全更新说明 (4057115): 2018 年 1 月
SQL Server 2012 SP3 CU 安全更新说明 (4057121): 2018 年 1 月
SQL Server 2008 SP4 GDR 安全更新说明 (4057114): 2018 年 1 月 6 日
SQL Server 2008 R2 SP3 GDR 安全更新说明 (4057113): 2018 年 1 月 6 日
本文档将于其他更新的版本可用时更新。
注意
-
我们已发布了适用于 SQL Server 的所有所需更新,以缓解“Spectre”和“Meltdown”推理执行边信道漏洞。据 Microsoft 了解,对于未在“可用 SQL 修补程序”部分中列出的组件,目前还没有人利用“Spectre”和“Meltdown”推理执行边信道漏洞。
-
所有后续 SQL Server 2014、SQL Server 2016 以及 SQL Server 2017 Service Pack 和累积更新都将包含修补程序。 例如,SQL Server 2016 SP2 已经包含 Spectre 和 Meltdown 修补程序。
-
对于 Windows 版本,请参阅以下指导获取有关可用 Windows 版本的最新信息:
针对 Spectre/Meltdown 边信道漏洞的 Windows Server 指南
针对微体系结构数据采样漏洞的 Windows Server 指南
对于 Linux 版本,请联系 Linux 供应商获取针对特定 Linux 分发的最新更新的版本。
-
为了尽快修复 Spectre 和 Meltdown 漏洞,首先在 Microsoft 下载中心提供这些 SQL Server 更新作为主要交付模式。 虽然这些更新将于 3 月通过 Microsoft 更新提供,但我们建议受影响的客户立即安装这些更新,而不是等待 Microsoft 更新提供。
受影响且受支持的 SQL Server 版本
Microsoft 建议所有客户安装下面列出的 SQL Server 更新作为其常规修补周期的一部分。 运行 SQL Server(在扩展点被阻止且在同一服务器上运行的所有第三方代码受信任且获得批准的安全环境中)的客户不应受此问题影响。
以下版本的 SQL Server 在 x86 和 x64 处理器系统上运行时具有可用更新:
-
SQL Server 2008
-
SQL Server 2008 R2
-
SQL Server 2012
-
SQL Server 2014
-
SQL Server 2016
-
SQL Server 2017
我们认为 IA64 (Microsoft SQL Server 2008) 不受影响。Microsoft Analytic Platform Service (APS) 基于 Microsoft SQL Server 2014 或 Microsoft SQL Server 2016,但未受特别影响。 一些适用于 APS 的一般指导将在本文后半部分列出。
建议
下表根据运行 SQL Server 的环境和正在使用的功能,列出了客户应当执行的措施。 Microsoft 建议你在部署到生产环境之前,采用常规步骤测试新二进制文件来部署修补程序。
方案编号 |
方案描述 |
优先级建议 |
1 |
Azure SQL 数据库和数据仓库 |
无需执行任何操作(请查看此处了解详细信息)。 |
2 |
在物理计算机或虚拟机上运行 SQL Server 并且以下情况均不存在:
|
Microsoft 建议安装所有操作系统更新,以防止 CVE 2017-5753 攻击。 Microsoft 建议安装所有操作系统更新,以防止微体系结构数据采样漏洞(CVE-2018-12126、CVE-2018-12130、CVE-2018-12127 和 CVE-2018-11091)攻击。 无需启用内核虚拟地址遮蔽 (KVAS) 和间接分支预测缓解硬件支持 (IBP)(请见下文)。 您可以继续在此类主机上利用超线程。 |
3 |
在物理计算机或虚拟机上运行 SQL Server 并且在同一计算机上共同托管执行潜在恶意代码的其他应用程序 并且/或者使用 SQL Server 扩展性界面和不受信任的代码(请见下表)
|
Microsoft 建议安装所有操作系统更新,以防止 CVE 2017-5753 攻击。 Microsoft 建议安装所有操作系统更新,以防止微体系结构数据采样漏洞(CVE-2018-12126、CVE-2018-12130、CVE-2018-12127 和 CVE-2018-11091)攻击。 应用 SQL Server 修补程序(请见下文)。 此修补程序可防范 CVE 2017-5753。 强烈建议启用内核虚拟地址遮蔽 (KVAS)。 此修补程序可防范 CVE 2017-5754。 强烈建议启用间接分支预测缓解硬件支持 (IBP)(请见下文)。 此修补程序可防范 CVE 2017-5715。 如果当前在使用 Intel 处理器,建议您禁用主机上的超线程。 |
4 |
在物理计算机上运行 SQL Server 并且不在同一计算机上共同托管执行潜在恶意代码的其他应用程序 并且 SQL Server 扩展性接口用于执行受信任的代码。
非示例:
|
Microsoft 建议安装所有操作系统更新,以防止 CVE 2017-5753 攻击。 Microsoft 建议安装所有操作系统更新,以防止微体系结构数据采样漏洞(CVE-2018-12126、CVE-2018-12130、CVE-2018-12127 和 CVE-2018-11091)攻击。 强烈建议启用内核虚拟地址遮蔽 (KVAS)(请见下文)。 此修补程序可防范 CVE 2017-5754。 强烈建议启用间接分支预测缓解硬件支持 (IBP)(请见下文)。 此修补程序可防范 CVE 2017-5715。 如果当前在使用 Intel 处理器,建议您在此类环境中禁用超线程。 应安装 SQL Server 修补程序作为下次计划的更新时段的正常修补策略的一部分。 |
5 |
在 Linux 操作系统上运行 SQL Server。 |
应用来自分销商的 Linux 操作系统更新。 应用 Linux SQL Server 修补程序(请见下文)。 此修补程序可防范 CVE 2017-5753。 有关是否启用 Linux 内核页表隔离 (KPTI) 和 IBP(CVE CVE 2017-5754 和 CVE 2017-5715)的指导,请见下文。 如果在上述场景 #3 和场景 #4 中使用的是 Intel 处理器,建议您在此类环境中禁用超线程。 |
6 |
分析平台系统 (APS) |
尽管 APS 不支持本公告中列出的 SQL Server 的扩展性功能,我们仍建议在 APS 设备上安装 Windows 修补程序。 无需启用 KVAS/IBP。 |
性能公告
建议客户在应用更新时,评估特定应用程序的性能。
Microsoft 建议所有客户安装 SQL Server 和 Windows 的更新版本。 这对现有应用程序的性能影响很小甚至可以忽略不计,具体取决于 Microsoft 对 SQL 工作负载的测试结果。 但是,在将所有更新部署到生产环境之前,建议你对其进行测试。
Microsoft 已测量了内核虚拟地址遮蔽 (KVAS)、内核页表间接 (KPTI) 和间接分支预测缓解 (IBP) 对各种环境中的各种 SQL 工作负载的影响,并发现了一些明显降级的工作负载。 我们建议你在将这些功能部署到生产环境之前,测试启用这些功能的性能影响。 如果启用这些功能的性能影响对于现有应用程序而言太大,你可以考虑将 SQL Server 与在同一计算机上运行的不受信任的代码分离对于你的应用程序来说是否是一个更好的缓解方法。
有关间接分支预测 (IBP) 缓解硬件支持的性能影响的更多信息,请查看此处的详细说明。
Microsoft 将适时更新此章节,补充更多信息。
启用内核虚拟地址遮蔽(Windows 中的 KVAS)和内核页表间接(Linux 上的 KPTI)
KVAS 和 KPTI 可修复 CVE 2017-5754(在 GPZ 披露中也称为“Meltdown”或“变体 3”)。
SQL Server 在许多环境中运行:Linux 和 Windows 系统上的物理计算机以及公共和私有云环境中的虚拟机。无论环境如何,此程序都可以在计算机或 VM 上运行。 调用此安全边界。
如果边界中的所有代码可访问此边界中的所有数据,则无需执行任何操作。 如果情况并非如此,则此边界称为“多租户”。 发现的漏洞使得任何代码都可以在此边界的任何进程中运行(即使权限降低),以便读取此边界内的任何其他数据。 如果边界中有任何进程在运行不受信任的代码,它可使用这些漏洞读取其他进程中的数据。 此不受信任的代码可以是使用 SQL Server 扩展性机制的不受信任代码,或运行不受信任代码的边界中的其他进程。
若要防范多租户边界中不受信任的代码,使用以下任一方法:
-
移除不受信任的代码。 有关如何为 SQL Server 扩展性机制执行此操作的更多信息,请见下文。 若要从同一边界的其他应用程序移除不受信任的代码,通常需要应用程序特定的更改。 例如,分为两个虚拟机。
-
打开 KVAS 或 KPTI。 这会影响性能。 有关更多信息,如本文前面所述。
有关如何启用适用于 Windows 的 KVAS 的更多信息,请参阅 KB4072698。 有关如何在 Linux 上启用 KPTI 的更多信息,请咨询操作系统分销商。
强烈建议使用 KVAS 或 KPTI 的示例场景
以非系统管理员帐户身份托管 SQL Server 的本地物理计算机可允许客户提交任意 R 脚本以浏览 SQL Server(使用次级进程在 sqlservr.exe 外运行这些脚本)。 必须同时启用 KVAS 和 KPTI 以防止泄漏 Sqlservr.exe 进程和系统内核内存中的数据。
注意 SQL Server 中的扩展性机制不会仅因为正在使用而被自动视为不安全。 只要了解每一种依赖关系并获得客户信任,即可在 SQL Server 内安全使用这些机制。 此外,在 SQL 之上构建的一些其他产品可能需要扩展性机制才能正常工作。 例如,在 SQL Server 之上构建的应用程序包可能需要链接服务器或 CLR 存储过程才能正常运作。
Microsoft 不建议将其移除作为缓解措施的一部分。 而是应检查每一次使用情况以确定是否了解此代码并信任为初始操作。 本指导旨在帮助客户确定他们是否属于需要启用 KVAS 的情况。 这是因为此操作会对性能产生重大影响。
启用间接分支预测缓解 (IBP) 硬件支持
IBP 可修复 CVE 2017-5715(在 GPZ 披露中也称为“Spectre”或“变体 2”)。
本文中用于在 Windows 上启用 KVAS 的说明也可启用 IBP。 然而,IBP 还需要来自硬件制造商的固件更新。 除了 KB4072698 中有关在 Windows 中启用保护的说明之外,客户还需要从硬件制造商获取更新并进行安装。
强烈建议使用 IBP 的示例场景
同时托管 SQL Server 和应用程序的本地物理计算机可允许不受信任的用户上传和执行任意 JavaScript 代码。 假设 SQL 数据库中存在机密数据,强烈建议将 IBP 作为防御进程间信息泄漏的措施。
在 IBP 硬件支持不存在的情况下,Microsoft 建议将不受信任的进程和受信任的进程分离到不同的物理计算机或虚拟机上。
Linux 用户: 有关如何防范变体 2 (CVE 2017-5715) 的信息,请联系操作系统分销商。
强烈建议使用缓解微体系结构数据采样漏洞的场景示例
考虑这样一个示例:其中一台本地服务器上正在运行两个 SQL Server 实例,实例在同一物理主机的两个不同虚拟机上托管两个不同的业务应用程序。 假设这两个业务应用程序不应能够读取跨 SQL Server 实例存储的数据。 成功利用这些漏洞的攻击者可以使用作为独立进程在计算机上运行的不受信任的代码或使用 SQL Server 可扩展性机制(有关 SQL Server 中的可扩展性选项,请参阅下面部分)执行的不受信任的代码来跨信任边界读取特权数据。 在共享资源环境中(如存在于某些云服务配置中),这些漏洞可能允许一个虚拟机不正确地访问另一个虚拟机中的信息。 在非浏览场景中的独立系统上,攻击者必须先访问系统或者能够在目标系统中运行经特殊设计的应用程序,才能利用这些漏洞。
不受信任的 SQL Server 扩展性机制
SQL Server 包含多个扩展性功能和机制。 默认情况下,其中大多数机制为禁用状态。 但是,我们建议客户检查每个生产实例以使用扩展性功能。 我们建议将其中的各项功能都限定为最小二进制文件集,且客户限制访问权限以防止任意代码与 SQL Server 在同一计算机上运行。 我们建议客户确定是否信任各个二进制文件,并禁用或移除不受信任的二进制文件。
-
SQL CLR 程序集
-
通过外部脚本机制运行或从与 SQL Server 相同的物理计算机上的独立 R/机器学习工作室运行的 R 和 Python 程序包
-
在与 SQL Server 相同的物理计算机上运行的 SQL 代理扩展点(ActiveX 脚本)
-
链接服务器使用的非 Microsoft OLE DB 提供程序
-
非 Microsoft 扩展存储过程
-
在服务器内执行的 COM 对象(通过 sp_OACreate 访问)
-
通过 xp_cmdshell 执行的程序
在 SQL Server 中使用不受信任的代码时采取的缓解措施:
情形/用例 |
缓解措施或建议步骤 |
启用 CLR 时运行 SQL Server (sp_configure ‘clr enabled', 1) |
|
从 SQL Server 运行 Java/R/Python 外部脚本 (sp_configure ‘external scripts enabled’, 1) |
|
使用链接服务器 (sp_addlinkedserver) |
|
使用扩展存储过程 (sp_addextendedproc) |
因为扩展存储过程已弃用,请移除扩展存储过程的所有使用,并且不要在生产系统中使用。 |
使用 xp_cmdshell 从 SQL Server 调用二进制文件 |
默认情况下此功能处于关闭状态。 检查并限制所有 xp_cmdshell 的使用以调用不受信任的二进制文件。 可通过 sp_configure 控制对此终结点的访问,如此处所述:
|
通过 sp_OACreate 使用 COM 对象 |
默认情况下此功能处于关闭状态。 通过 sp_OACreate 调用的 COM 对象执行安装在服务器上的代码。 检查用于不受信任的二进制文件的任何此类调用。 可通过 sp_configure 检查设置,如此处所述:
|