防範 Spectre、Meltdown 和微架構資料抽樣弱點的 SQL Server 指引

適用於: Microsoft SQL Server

摘要


Microsoft 已知稱為「理論式執行端通道攻擊」的新公開揭露等級弱點,這些弱點影響許多新型處理器和作業系統, 其中包括 Intel、AMD 和 ARM。

注意:這個問題也影響其他系統,例如 Android、Chrome、iOS 和 MacOS, 因此,建議客戶向那些廠商尋找指引。

Microsoft 已經發行數個更新,可協助避免這些弱點。 我們也已採取行動,保護我們的雲端服務。 請參閱下列章節,了解詳細資訊。

Microsoft 尚未收到任何資訊,指出客戶已遭受這些弱點的攻擊。 Microsoft 會持續與晶片製造商、硬體 OEM 和應用程式廠商等業界合作夥伴密切合作,一同保護客戶。 若要取得所有可用的保護,則必須安裝硬體或韌體更新和軟體更新。 這包括來自裝置 OEM 的微碼,在某些情況下,還包括防毒軟體的更新。

如需有關這些弱點的詳細資訊,請參閱 Microsoft 資訊安全諮詢 ADV180002。 如需防範這個弱點等級的一般指引,請參閱減少推測性執行旁路攻擊漏洞在 Azure 中造成的風險指引

Microsoft 已於 2019 年 5 月發佈 ADV190013 - 緩和微結構資料取樣弱點的 Microsoft 指引。 SQL Server 沒有針對 ADV190013 中所述問題的任何具體安全性修補程式。 您可以在本文的<建議>章節找到適用於受 ADV190013 影響之環境的指引。 請注意,此資訊安全諮詢僅適用於 Intel 處理器。

如何取得並安裝更新


您也可以透過 Windows Server Update Services (WSUS) 或 Microsoft Update Catalog 網站取得此更新。

注意:
此更新不會從 Windows Update 自動下載並安裝。

可用的 SQL 修補程式

發行時,已有下列更新的 SQL Server 組建可供下載:

服務發行

4057122 說明 SQL Server 2017 GDR 的安全性更新: 2018 年 1 月 3 日
4058562 說明 SQL Server 2017 RTM CU3 的安全性更新: 2018 年 1 月 3 日
4058561 說明 SQL 2016 SP1 CU7 的安全性更新: 2018 年 1 月 3 日
4057118 說明 SQL Server 2016 GDR SP1 的安全性更新: 2018 年 1 月 3 日
4058559 SQL Server 2016 CU 的安全性更新描述: 2018 年 1 月 6 日
4058560 說明 SQL Server 2016 GDR 的安全性更新: 2018 年 1 月 6 日
4057117 說明 SQL Server 2014 SP2 CU10 的安全性更新: 2018 年 1 月 16 日
4057120 說明 SQL Server 2014 SP2 GDR 的安全性更新: 2018 年 1 月 16 日
4057116 說明 SQL Server 2012 SP4 GDR 的安全性更新: 2018 年 1 月 12 日
4057115 說明 SQL Server 2012 SP3 GDR 的安全性更新: 2018 年 1 月
4057121 說明 SQL Server 2012 SP3 CU 的安全性更新: 2018 年 1 月
4057114 說明 SQL Server 2008 SP4 GDR 的安全性更新: 2018 年 1 月 6 日
4057113 說明 SQL Server 2008 SP3 R2 GDR 的安全性更新: 2018 年 1 月 6 日

本文件將於其他更新組建推出時進行更新。

注意事項

  • 我們已為 SQL Server 發行所有必要的更新,以防範 “Spectre” 和 “Meltdown” 理論式執行端通道弱點。對於<可用的 SQL 修補程式>一節未列出的元件,Microsoft 目前尚未發現任何元件暴露於 “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 弱點,我們一開始就將這些 SQL Server 更新傳遞至「Microsoft 下載中心」,做為主要傳遞模式。 雖然這些更新會在 3 月透過 Microsoft Update 傳遞,但建議受影響的客戶立即安裝更新,不要等到更新透過 Microsoft Update 提供。

受影響的 SQL Server 支援版本


Microsoft 建議所有客戶安裝 SQL Server 更新 (下面所述),做為定期修補週期的一部分。 客戶執行 SQL Server 的環境若是已封鎖擴充點,並且在相同伺服器上執行的所有協力廠商程式碼是受信任且已核准的安全環境,應該不會受到這個問題的影響。

下列在 x86 和 x64 處理器系統上執行的 SQL Server 版本有可用的更新:

  • SQL Server 2008
  • SQL Server 2008R2
  • 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 Database 和資料倉儲

不需要任何動作 (請參閱這裡,取得詳細資訊)。

2

SQL Server 在實體電腦或虛擬機器上執行

並且下列沒有一個情況為真:

  • 另一個執行潛在惡意程式碼的應用程式裝載在同一台電腦上
  • 未受信任的程式碼正在使用 SQL Server 擴充性介面 (請參閱下面內容,取得清單)

 

Microsoft 建議安裝所有 OS 更新防範 CVE 2017-5753。

Microsoft 建議安裝 所有 OS 更新 以防範微架構資料抽樣弱點(CVE-2018-12126、CVE-2018-12130、 CVE-2018-12127 和 CVE-2018-11091)。

不需要啟用核心虛擬位址陰影 (KVAS) 和 Indirect Branch Prediction 緩和措施硬體支援 (IBP) (請參閱下面內容)。

SQL Server 修補程式應在下次排程的更新期間,根據正常修補原則進行安裝。

您可以繼續利用此類主機上的超執行緒。

3

SQL Server 在實體電腦或虛擬機器上執行

並且另一個執行潛在惡意程式碼的應用程式裝載在同一台電腦上

並且/或者未受信任的程式碼正在使用 SQL Server 擴充性介面 (請參閱下面內容,取得清單)

 

 

 

Microsoft 建議安裝所有 OS 更新 以防範 CVE 2017-5753。

Microsoft 建議安裝 所有 OS 更新 以防範微架構資料抽樣弱點(CVE-2018-12126、CVE-2018-12130、 CVE-2018-12127 和 CVE-2018-11091)。

套用 SQL Server 修補程式 (請參閱下面內容)。 這可防範 CVE 2017-5753。

強烈建議啟用核心虛擬位址陰影 (KVAS) (請參閱下面內容)。 這可防範 CVE 2017-5754。

強烈建議啟用 Indirect Branch Prediction 緩和措施硬體支援 (IBP) (請參閱下面內容)。 這可防範 CVE 2017-5715。

如果使用 Intel 處理器,我們建議您停用主機上的超執行緒。

4

SQL Server 在實體電腦上執行

並且另一個執行潛在惡意程式碼的應用程式未裝載在同一台電腦上

並且 SQL Server 擴充性介面 ARE 是用來執行 TRUSTED 程式碼。

範例:

  • 已經過檢閱/核准可用於生產的 CLR 組件
  • 您信任且執行您所信任之調查查詢的連結伺服器

非範例:

  • 從網際網路下載的任意 R/Python 指令碼
  • 來自協力廠商、未受信任的 CLR 二進位檔案

Microsoft 建議安裝所有 OS 更新防範 CVE 2017-5753。

Microsoft 建議安裝 所有 OS 更新 以防範微架構資料抽樣弱點(CVE-2018-12126、CVE-2018-12130、CVE-2018-12127 和 CVE-2018-11091)。

強烈建議啟用核心虛擬位址陰影 (KVAS) (請參閱下面內容)。 這可防範 CVE 2017-5754。

強烈建議啟用 Indirect Branch Prediction 緩和措施硬體支援 (IBP) (請參閱下面內容)。 這可防範 CVE 2017-5715。

如果使用 Intel 處理器,我們建議您停用該環境中的超執行緒。

SQL Server 修補程式應在下次排程的更新期間,根據正常修補原則進行安裝。

5

SQL Server 在 Linux OS 上執行。

套用散發提供者提供的 Linux OS 更新。

套用 Linux SQL Server 修補程式 (請參閱下面內容)。 這可防範 CVE 2017-5753。

請參閱下面內容,取得有關是否啟用 Linux Kernel Page Table Isolation (KPTI) 和 IBP (CVE 2017-5754 和 CVE 2017-5715) 的指引。

對於上述案例 3 和 4,如果使用 Intel 處理器,我們建議您停用該環境中的超執行緒。

6

Analytics Platform System (APS)

雖然 APS 不支援此資訊安全公告所列、SQL Server 中的擴充性功能,但仍建議在 APS 設備上安裝 Windows 修補程式。 不需要啟用 KVAS/IBP。

效能公告


建議客戶在套用更新時,評估特定應用程式的效能。

Microsoft 建議所有客戶安裝更新的 SQL Server 和 Windows 版本。 根據 Microsoft 對 SQL 工作負載的測試,這對現有應用程式的效能影響應該極小。 不過,我們建議您先測試所有更新,然後再部署到生產環境中。

Microsoft 已經在不同環境中,針對各種 SQL 工作負載測量核心虛擬位址陰影 (KVAS)、Kernel Page Table Indirection (KPTI) 和 Indirect Branch Prediction 緩和措施 (IBP) 的影響,發現有些工作負載出現顯著效能降低。 建議您在部署到生產環境之前,先測試啟用這些功能帶來的效能影響。 如果啟用這些功能對現有應用程式造成太多效能影響,您可以考量對應用程式而言,從同一台電腦上執行的未受信任程式碼隔離 SQL Server 是否為更妥善的緩和措施。

如需有關 Indirect Branch Prediction 緩和措施硬體支援 (IBP) 之效能影響的詳細資訊,請前往這裡

Microsoft 將適時更新此章節,補充更多資訊。

啟用核心虛擬位址陰影 (Windows 中的 KVAS) 和 Kernel Page Table Indirection (Linux 上的 KPTI)


KVAS 和 KPTI 有助於避免 CVE 2017-5754 攻擊,在 GPZ 中也稱為 “Meltdown” 或 “variant 3”。

SQL 在許多環境中執行:實體電腦、公開和私人雲端環境中的 VM、在 Linux 和 Windows 作業系統上。無論是哪種環境,程式都是在電腦或 VM 上執行。 這稱為安全性「界限」。

如果「界限」中的所有程式碼都能存取該「界限」中的所有資料,則不需採取任何動作。 如果不是上述情形,則界限稱為「多租用戶」。 本文所述的這些弱點發現,即使權限受限,任何程式碼都能在該界限的任何處理序中執行,進而讀取該界限內的任何其他資料。 如果界限內有任何處理序執行未受信任的程式碼,則可能會使用這些弱點來讀取其他處理序中的資料。 這個未受信任的程式碼可能是使用 SQL Server 擴充性機制的未受信任程式碼,或是界限中執行未受信任程式碼的其他處理序。

若要在多租用戶界限中防範未受信任的程式碼,請使用下列其中一個方法:

  • 移除未受信任的程式碼。 如需有關如何為 SQL Server 擴充性機制執行這項操作的詳細資訊,請參閱下面內容。 若要從相同界限的其他應用程式中移除未受信任的程式碼,通常需要進行應用程式特定變更, 例如分隔成兩個 VM。
  • 啟用 KVAS 或 KPTI。 這將會產生效能影響。 如需詳細資訊,請參閱本文前述內容。

如需有關如何為 Windows 啟用 KVAS 的詳細資訊,請參閱 KB4072698。 如需有關如何在 Linux 啟用 KPTI 的詳細資訊,請洽詢作業系統的散發者。

強烈建議啟用 KVAS 或 KPTI 的案例範例

以非系統管理員帳戶裝載 SQL Server 的內部部署實體電腦,可讓客戶透過 SQL Server 提交要執行的任意 R 指令碼 (除了 sqlservr.exe 之外,使用次要處理序來執行這些指令碼)。 請務必啟用 KVAS 和 KPTI 兩者,以防範 Sqlservr.exe 處理序內出現資料洩漏,並且防範系統核心記憶體內出現資料洩漏。

注意:就算在 SQL Server 內使用擴充性機制,不表示不安全。 只要客戶了解並信任每個相依性,就能放心地在 SQL Server 內使用這些機制。 此外,還有其他產品是根據 SQL 而建置,這些產品可能需要擴充性機制,才能正常運作。 例如,根據 SQL Server 建置的封裝應用程式,可能需要連結的伺服器或 CLR 預存程序,才能正常運作。

Microsoft 不建議您移除這些項目,做為緩和措施的一部分。 相反地,請檢閱每個用法,以判斷系統是否了解並信任這個程式碼做為初始動作。 提供的這個指引可以協助客戶判斷他們是否處於必須啟用 KVAS 的情況。 這是因為此操作具有顯著的效能影響。

啟用 Indirect Branch Prediction 緩和措施 (IBP) 硬體支援


IBP 有助於避免 GPZ 中又稱為 Spectre 或 “variant 2” 的 CVE 2017-5715 攻擊。

本文中在 Windows 啟用 KVAS 的指示也可以用來啟用 IBP。 然而,IBP 還需要硬體製造商提供的韌體更新。 除了 KB4072698 中可在 Windows 啟用保護的指示以外,客戶還必須取得並安裝硬體製造商提供的更新。

強烈建議啟用 IBP 的案例範例

內部部署實體電腦會裝載 SQL Server,以及允許未受信任的使用者上傳並執行任意 JavaScript 程式碼的應用程式。 假設 SQL 資料庫存在機密資料,則強烈建議使用 IBP 做為防範處理序對處理序資訊洩漏的手段。

在不存在 IBP 硬體支援的情況中,Microsoft 建議將未受信任的處理序和受信任的處理序區隔到不同實體電腦或虛擬機器上。

Linux 使用者: 請與作業系統的 散發者連絡,取得有關 防範 Variant 2 (CVE 2017-5715) 的資訊。

強烈建議對微架構資料抽樣弱點進行防範的案例示例

思考一個範例,在這個範例中,一台內部部署伺服器正在執行 SQL Server 的兩個實例,而 SQL Server 裝載了位於同一實體主機上的兩種不同虛擬機的兩種不同業務應用程式。 假設這些業務應用程式不能讀取儲存在整個 SQL Server 實例中的資料。 成功利用這些弱點的攻擊者可能能夠越過信任邊界讀取特權資料,方法是使用在電腦上以單獨進程執行的未受信任程式碼或者使用 SQL Server 擴充性機制執行的未受信任程式碼(SQL Server 的擴充性選項見下節)。 在共同資源環境 (例如存在於某些雲端服務設定) 中,這些弱點可能會允許一個虛擬機器不當存取另一個虛擬機器中的資訊。 在獨立系統的非瀏覽案例中,攻擊者需要系統的先前存取權,或是在目標系統上執行蓄意製作應用程式的能力,才能利用這些弱點。

未受信任的 SQL Server 擴充性機制


SQL Server 包含許多擴充性功能和機制。 根據預設,這些機制大多是停用的。 不過,我們建議客戶檢閱擴充性功能用法的每個生產執行個體。 我們建議將這些功能限制為最小的二進位檔組合,並且客戶限制存取,以避免任意程式碼在 SQL Server 的所在電腦上執行。 建議客戶判斷是否信任每個二進位檔,並且停用或移除未受信任的二進位檔。

  • SQL CLR 組件
  • 透過外部指令碼機制執行或從與 SQL Server 相同的實體電腦上的獨立 R/Machine Learning Studio 執行的 R 和 Python 套件
  • 在與 SQL Server (ActiveX 指令碼) 相同的實體電腦上執行的 SQL Agent 擴充點
  • 連結的伺服器使用的非 Microsoft OLE DB 提供者
  • 非 Microsoft 擴充預存程序
  • 在伺服器內執行的 COM 物件 (透過 sp_OACreate 存取)
  • 透過 xp_cmdshell 執行的程式

在 SQL Server 中使用未受信任的程式碼時採取的緩和措施:

案例/使用案例

緩和措施或建議步驟

啟用 CLR 時執行 SQL Server (sp_configure ‘clr enabled', 1)

  1. 可以的話,若您的應用程式不需要 CLR,請加以停用,以降低任何未受信任的程式碼載入 SQL Server 的風險
  1. (SQL Server 2017+) 如果應用程式仍然需要 CLR,請使用「CLR 嚴格安全性」功能 (https://docs.microsoft.com/zh-tw/sql/database-engine/configure-windows/clr-strict-security) 和 sys.sp_add_trusted_assembly (https://docs.microsoft.com/zh-tw/sql/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql) 僅啟用要載入的特定組件
  1. 考慮 CLR 程式碼是否可以遷移到 T-SQL 等效程式碼
  1. 檢查安全性權限,以鎖定可以使用 CLR 操作的情形。 將 CREATE ASSEMBLY、EXTERNAL ACCESS ASSEMBLY 和 UNSAFE ASSEMBLY 權限限制為使用者或程式碼路徑的最小組合,以禁止在現有的已部署應用程式中載入新組件。

從 SQL Server 內執行 Java/R/Python 外部指令碼 (sp_configure 'external scripts enabled', 1)

  1. 如果應用程式不需要外部指令碼功能來減少介面區攻擊,請將其停用 (如果可能)。
  1. (SQL Server 2017+) 如果可能,請遷移執行評分的外部指令碼以使用本機評分功能做為替代 (https://docs.microsoft.com/zh-tw/sql/advanced-analytics/sql-native-scoring)
  1. 檢查安全性權限以鎖定可以使用外部指令碼的情形。 將 EXECUTE ANY EXTERNAL SCRIPT 權限制為使用者/程式碼路徑的最小組合,以禁止任意指令碼執行。

使用連結的伺服器 (sp_addlinkedserver)

  1. 檢查已安裝的 OLEDB 提供者,並考慮從電腦移除任何未受信任的 OLEDB 提供者 (如果 OLEDB 提供者在電腦上的 SQL Server 之外使用,則確保不要移除 OLEDB 提供者)。 此範例介紹了如何列舉現有 OLEDB 提供者: OleDbEnumerator.GetEnumerator 方法 (類型) (機器翻譯)
  1. 從 SQL Server 檢查並移除任何不需要的連結伺服器 (sp_dropserver),以減少任何未受信任的程式碼在 sqlservr.exe 處理序中執行的可能性
  1. 檢查安全性權限,將 ALTER ANY LINKED SERVER 權限鎖定至最少使用者人數。
  1. 檢查連結的伺服器登入/認證對應 (sp_addlinkedsvrlogin/sp_droplinkedsvrlogin),以將可以在連結的伺服器上執行操作的使用者數量限制為最少的使用者/案例。

使用擴充預存程序 (sp_addextendedproc)

由於擴充預存程序已被取代,請移除擴充預存程序的所有使用,並且請勿在生產系統中使用。

使用 xp_cmdshell 從 SQL Server 叫用二進位檔

此功能預設為關閉。 請檢查並限制 xp_cmdshell 叫用未受信任二進位檔的所有使用。 您可以透過 sp_configure 控制這個端點的存取,如下所述:

 

透過 sp_OACreate 使用 COM 物件

此功能預設為關閉。 透過 sp_OACreate 叫用的 COM 物件會執行安裝在伺服器上的程式碼。 請檢查任何對未受信任二進位檔的呼叫。 您可以透過 sp_configure 檢查設定,如下所述: