適用於: Windows 上的 SQL Server 2019(15.x)及更新版本
證明程序是一種工作流程,可讓用戶端應用程式在使用具有安全記憶體保護區的 Always Encrypted時,驗證其正在與 SQL Server 處理程序內可信賴的記憶體保護區通訊。
在 SQL Server 中,具有安全記憶體保護區的 Always Encrypted 會使用虛擬化型安全性 (VBS) 記憶體保護區 (也稱為虛擬安全模式,或 VSM 記憶體保護區) - 一種依賴 Windows Hypervisor 且不需要任何特殊硬體的軟體型技術。 證明 VBS 記憶體保護區涉及驗證記憶體保護區內的程式碼是否有效以及託管 SQL Server 的電腦是否值得信任。 證明機制透過引入可驗證 SQL Server 電腦身分(以及選擇性的組態)的第三方,來達成此目標。 在 SQL Server 可以使用安全區域執行查詢之前,SQL Server 必須向證明服務提供其作業環境的相關資訊,以取得健康證明。 此健康情況憑證接著會傳送到用戶端,然後由用戶端透過證明服務獨立驗證其真確性。 一旦用戶端信任該健康憑證,就會知道自己正在與可信的 VBS 隔離區通訊,並會發出將使用該隔離區的查詢。
證明對於偵測惡意 OS 管理員的某些攻擊非常重要,例如,涉及竄改記憶體保護區內執行之 SQL Server 程式庫的攻擊。 如果您不擔心此類攻擊 (例如,您在非生產環境中使用具有安全記憶體保護區的 Always Encrypted),請參閱在 SQL Server 中規劃具有安全記憶體保護區的 Always Encrypted,而不需證明。
在 Windows Server 2019 或更新版本中,Host Guardian Service (HGS) 角色可為具有 VBS 安全區域的 Always Encrypted 提供遠端證明功能。 本文將引導您了解使用搭配 VBS Enclave 的 Always Encrypted 與 HGS 證明時,部署前需做的決策與相關需求。
注意
在 VM 中部署 SQL Server 時,VBS 記憶體保護區有助於保護您的資料免受 VM 內部的攻擊。 不過,它們不會使用來自主機的特殊權限系統帳戶來提供任何的保護以免受攻擊。 例如,在主機上產生的 VM 記憶體傾印可能包含 enclave 的記憶體。
架構概觀
主機守護者服務 (HGS) 是一個在 Windows Server 2019 或更新版本上執行的叢集 Web 服務。 在一般部署中,會有 1-3 部 HGS 伺服器、至少一部執行 SQL Server 的電腦,以及一部執行用戶端應用程式或工具 (例如 SQL Server Management Studio) 的電腦。 由於 HGS 負責判斷哪些執行 SQL Server 的電腦值得信任,因此需要與所保護的 SQL Server 執行個體進行實體和邏輯隔離。 如果同一批系統管理員同時可存取 HGS 和 SQL Server 電腦,他們可能會將驗證服務設定為允許惡意電腦執行 SQL Server,進而危害 VBS 飛地。
HGS 網域
HGS 安裝程式會自動為 HGS 伺服器、容錯移轉叢集資源和系統管理員帳戶建立新的 Active Directory 網域。
執行 SQL Server 的電腦不需要加入網域,但如果已加入,則應該與 HGS 伺服器所使用的網域不同。
高可用性
HGS 功能會自動安裝和設定容錯移轉叢集。 在生產環境中,建議使用三部 HGS 伺服器以獲得高可用性。 如需了解叢集仲裁的決定方式及替代組態的詳細資訊(包括含外部見證的雙節點叢集),請參閱容錯移轉叢集文件。
HGS 節點之間不需要共用存放裝置。 證明資料庫的複本會儲存在每部 HGS 伺服器上,並由叢集服務透過網路自動複寫。
網路連線
SQL 用戶端和 SQL Server 都必須能夠透過 HTTP 與 HGS 通訊。 使用 TLS 憑證設定 HGS,以加密 SQL 用戶端與 HGS 之間的所有通訊,以及 SQL Server 和 HGS 之間的所有通訊。 這項設定有助於防範中間人攻擊,並確保您連線的是正確的 HGS 伺服器。
HGS 伺服器需要在叢集中的每個節點之間進行連線,以確保證明服務資料庫保持同步。容錯移轉叢集最佳做法是連接一個網路上的 HGS 節點進行叢集通訊,並使用不同的網路讓其他用戶端與 HGS 通訊。
證明模式
當執行 SQL Server 的電腦嘗試使用 HGS 進行證明時,會先詢問 HGS 應該如何證明。 HGS 支援兩種證明模式,可搭配 SQL Server 使用:
| 證明模式 | 說明 |
|---|---|
| TPM | 信賴平台模組 (TPM) 證明可就透過 HGS 進行證明之電腦的身分與完整性,提供最強而有力的保證。 執行 SQL Server 的電腦必須已安裝 TPM 2.0 版。 每個 TPM 晶片都包含唯一且固定的身分識別 (簽署金鑰),可用來識別特定電腦。 TPM 也會測量電腦的開機程序,並將安全性敏感測量雜湊儲存在作業系統可讀取但無法修改的平台控制暫存器 (PCR) 中。 在證明期間會使用這些測量來提供密碼編譯證明,以證實電腦是在其所宣告的安全性設定中。 |
| 主機金鑰 | 主機金鑰證明是較簡單的證明形式,只會使用非對稱金鑰組來驗證電腦的身分識別。 私密金鑰會儲存在執行 SQL Server 的電腦上,而公開金鑰則會提供給 HGS。 不會測量電腦的安全性設定,且執行 SQL Server 的電腦上也不需要 TPM 2.0 晶片。 請務必保護安裝在 SQL Server 電腦上的私密金鑰,因為任何取得此金鑰的人都可以冒充合法的 SQL Server 電腦以及在 SQL Server 內部執行的 VBS Enclave。 |
一般來說,以下是我們的建議:
- 針對實體生產伺服器,建議使用 TPM 證明來取得它所提供的額外保證。
- 針對虛擬生產伺服器,建議使用主機金鑰證明,因為大部分的虛擬機器都沒有虛擬 TPM 或安全開機。 如果您使用增強安全性的 VM (例如內部部署受防護的 VM),您可以選擇使用 TPM 模式。 在所有虛擬化部署中,證明程序只會分析您的 VM 環境,而不是 VM 底下的虛擬化平台。
- 針對開發/測試案例,建議使用主機金鑰證明,因為它較容易設定。
信任模型
在 VBS 記憶體保護區信任模型中,加密的查詢和資料會在以軟體為基礎記憶體保護區中進行評估,以保護免於遭受來自主機 OS 的攻擊。 此記憶體保護區的存取權會受到 Hypervisor 的保護,其保護方式就像是同一部電腦上執行的兩部虛擬機器無法相互存取記憶體一樣。
為了讓用戶端相信自己正在與合法的 VBS 執行個體通訊,您必須使用以 TPM 為基礎的證明,在 SQL Server 電腦上建立硬體信任根。
在開機過程中擷取的 TPM 測量值包含 VBS 執行個體的唯一身分識別金鑰,確保健康狀態憑證僅對該特定電腦有效。 此外,當執行 VBS 的電腦上可以使用 TPM 時,VBS 識別金鑰的私密部分會受到 TPM 的保護,以防止任何人嘗試模擬該 VBS 執行個體。
為了確保 UEFI 載入的是合法且由 Microsoft 簽署的開機載入程式,並且沒有 Rootkit 攔截 Hypervisor 的開機程序,因此需要使用安全開機與 TPM 證明。 此外,預設必須有 IOMMU 裝置,以確保具有直接記憶體存取的任何硬體裝置都無法檢查或修改記憶體保護區記憶體。
這些保護措施全都假設執行 SQL Server 的電腦是實體機器。 如果您將執行 SQL Server 的電腦虛擬化,則無法再保證 VM 的記憶體不會受 Hypervisor 或 Hypervisor 管理員檢查。例如,Hypervisor 管理員可以傾印 VM 的記憶體,並取得記憶體保護區中查詢和資料的純文字版本存取權。 同樣地,即使 VM 具有虛擬 TPM,也只能測量 VM 作業系統和開機環境的狀態和完整性。 無法測量控制 VM 的 Hypervisor 狀態。
不過,即使 SQL Server 已虛擬化,記憶體保護區仍可免受源自 VM 作業系統內部的攻擊。 如果您信任 Hypervisor 或雲端提供者,且主要是擔心資料庫管理員和 OS 管理員對敏感性資料的攻擊,則虛擬化 SQL Server 可能會符合您的需求。
同樣地,在執行 SQL Server 的電腦上未安裝 TPM 2.0 模組的情況下,或在安全性不重要的開發/測試案例中,主機金鑰證明仍然非常有用。 您仍然可以使用提到的許多安全性功能 (包括安全開機和 TPM 1.2 模組),以進一步保護 VBS 和整體作業系統。 但由於 HGS 無法驗證電腦是否真的使用主機金鑰證明來啟用這些設定,因此用戶端無法確定主機是否真的使用所有可用保護措施。
Prerequisites
HGS 伺服器先決條件
執行主機守護者服務角色的電腦應符合下列需求:
| 元件 | 需求 |
|---|---|
| 作業系統 | Windows Server 2019 或更新版本 (Standard 或 Datacenter Edition) |
| CPU | 2 核心 (最小值),4 核心 (建議) |
| RAM | 8 GB (最小值) |
| 網路介面卡 | 建議使用 2 個使用靜態 IP 的 NIC (1 個用於叢集流量,1 個用於 HGS 服務) |
由於需要加密和解密的動作數目,因此 HGS 是受限於 CPU 的角色。 使用搭載密碼編譯加速功能的新式處理器將會改善 HGS 效能。 證明資料的儲存空間需求很小,每個唯一電腦證明的範圍介於 10 KB 到 1 MB 之間。
在您開始之前,請勿將 HGS 電腦加入網域。
SQL Server 電腦必要條件
運行SQL Server的電腦必須同時符合安裝SQL Server及 Hyper-V 硬體要求。
這些需求包括:
- SQL Server 2019 (15.x) 或更新版本
- Windows 10 1809 版或更新版本 - Enterprise Edition、Windows 11 或更新版本 - Enterprise Edition、Windows Server 2019 或更新版本 - Datacenter Edition。 其他版本的 Windows 10/11 和 Windows Server 不支援使用 HGS 進行證明。
- 虛擬化技術的 CPU 支援:
- 搭載延伸分頁表的 Intel VT-x。
- 搭載快速虛擬化索引處理的 AMD-V。
- 如果您在 VM 中執行 SQL Server:
- 在 Azure 中,使用第 2 代 VM 大小 (建議),或使用啟用巢狀虛擬化的第 1 代 VM 大小。 請查看個別 VM 大小的文件,以判斷哪一種第 1 代 VM 大小支援巢狀虛擬化。
- 在 Hyper-V 2016 或更新版本上 (在 Azure 外部),確定您的 VM 是第 2 代 VM (建議),或它是啟用了巢狀虛擬化的第 1 代 VM。 如需詳細資訊,請參閱應該在 Hyper-V 中建立第 1 代還是第 2 代的虛擬機器?和設定巢狀虛擬化。
- 在 VMware vSphere 6.7 或更新版本中,啟用基於虛擬化的安全支援。 請參考 VMware 文件,了解如何啟用 VBS 和巢狀虛擬化,針對你所在的 vSphere 版本。
- 其他虛擬機器監控程式和公有雲也可能支援巢狀虛擬化功能,因此也能支援搭配 VBS Enclaves 的 Always Encrypted。 如需相容性和設定指示,請參閱虛擬化解決方案文件。
- 如果打算使用 TPM 證明,您必須備妥 TPM 2.0 rev 1.16 晶片,以在伺服器中使用。 目前,HGS 驗證無法與 TPM 2.0 rev 1.38 晶片搭配運作。 此外,TPM 必須具備有效的簽署金鑰憑證。
使用 HGS 設定證明時的角色和責任
使用 HGS 設定證明牽涉到設定不同類型的元件:HGS、SQL Server 電腦、SQL Server 執行個體,以及會觸發記憶體保護區證明的應用程式。 設定各類型元件會由擔任下列其中一種不同角色的使用者所執行:
- HGS 系統管理員 - 部署 HGS、向 HGS 註冊 SQL Server 電腦,以及與 SQL Server 電腦管理員和用戶端應用程式系統管理員共用 HGS 證明 URL。
- SQL Server 電腦系統管理員 - 安裝證明用戶端元件、在 SQL Server 電腦上啟用 VBS、為 HGS 管理員提供向 HGS 註冊 SQL Server 電腦的必要資訊、在 SQL Server 電腦上設定證明 URL,以及確認 SQL Server 電腦可成功向 HGS 證明。
- DBA - 在 SQL Server 執行個體中設定安全記憶體保護區。
- 應用程式系統管理員 - 使用從 HGS 系統管理員取得的證明 URL 設定應用程式。
在生產環境中 (處理真正的機密資料),組織在設定證明時必須遵守每個不同角色皆由不同人擔任的角色隔離。 特別是,如果在組織中部署 Always Encrypted 的目標是要確保 SQL Server 電腦管理員和 DBA 無法存取機密資料,藉此減少受攻擊面的區域,就不該讓 SQL Server 管理員和 DBA 控制 HGS 伺服器。
開發或測試環境考量
如果您在開發或測試環境中使用搭配 VBS enclave 的 Always Encrypted,且不需要 SQL Server 所執行電腦的高可用性或高度保護,您可以採取下列一或多項折衷作法,以簡化部署:
- 使用具有安全記憶體保護區的 Always Encrypted,但不使用證明 - 請參閱 在 SQL Server 中規劃具有安全記憶體保護區但不使用證明的 Always Encrypted。
- 或者:
- 只部署一個 HGS 節點。 即使 HGS 安裝容錯移轉叢集,但如果高可用性並不重要,您就不需要新增額外的節點。
- 使用主機金鑰模式而不是 TPM 模式,以獲得更簡單的設定體驗。
- 將 HGS 和/或 SQL Server 虛擬化以節省實體資源。
- 執行 SSMS 或其他工具,以在與 SQL Server 相同電腦上設定具有安全記憶體保護區的 Always Encrypted。 這會將資料行主要金鑰保留在與 SQL Server 相同的電腦上,因此請勿在生產環境中執行這項操作。