檢閱 Windows PowerShell 的遠端安全性功能

已完成

根據預設,Windows PowerShell 建立的端點只允許特定群組所屬成員連線。 從 Windows Server 2016 和 Windows 10 開始,這些群組包括遠端系統管理使用者群組和本機系統管理員群組。 在 Active Directory Domain Services (AD DS) 網域中,後者也會包含 Domain Admins 網域全域群組的成員,因為該群組是每個已加入網域之電腦上的本機系統管理員群組成員。 在 Windows Server 2016和 Windows 10 之前,預設只允許本機系統管理員群組的成員使用 PowerShell 遠端處理。 不過,預設值可以變更。 每個端點都有系統存取控制清單 (SACL),您可以進行修改,以確切控制可與其連線的人員。

PowerShell 遠端 和 WinRM 會接聽以下連接埠︰

  • HTTP:5985
  • HTTPS:5986

預設遠端行為,是將登入認證委派給遠端電腦,雖然您可以選擇在進行連線時指定替代認證。 您所連線的遠端電腦會使用這些認證來模擬您,並執行您指定使用這些認證的工作。 如果您已啟用稽核,除了您執行的工作外,也會稽核 PowerShell 遠端執行的工作。 實際上,遠端功能是安全性透明的,且不會變更您環境現有的安全性。 透過遠端處理,您可以執行所有您在實際在本機電腦時執行的相同工作。

注意

在私人網路中,PowerShell 遠端的預設 Windows 防火牆規則,是要接受所有的連線。 在公用網路上,預設的 Windows 防火牆規則只允許來自相同子網路內的 PowerShell 遠端連線。 您必須明確地變更該規則,才可開啟 PowerShell 遠端對公用網路上的所有連線。

安全性風險和相互驗證

將您的認證委派給遠端電腦會牽涉一些安全性風險。 例如,如果攻擊者成功模擬已知的遠端電腦,您可能會將高度特殊權限認證傳送給該攻擊者,然後他們可能會使用這些認證來進行惡意動作。 由於此風險,遠端處理預設需要相互驗證,這表示您必須自行向遠端電腦進行驗證,而遠端電腦也必須自行向您驗證。 此相互驗證保證您只會確切連線到您的目標電腦。

相互驗證是 Active Directory Kerberos 驗證通訊協定的原生功能。 當您在信任的網域電腦之間進行連線時,會自動進行相互驗證。 當您連線到未加入網域的電腦時,必須以 SSL 憑證的形式和需要事先設定的 HTTPS 通訊協定,提供另一種相互驗證的形式。 另一個選項是將遠端電腦新增至本機 TrustedHosts 清單,來關閉相互驗證的需求。 但是請注意,TrustedHosts 使用 Windows NT LAN Manager (NTLM) 驗證,這無法確保伺服器身分識別。 如同任何使用 NTLM 驗證的通訊協定,可存取已加入網域電腦受信任帳戶的攻擊者,可能會導致網域控制站建立 NTLM 工作階段金鑰,進而模擬伺服器。

注意

NTLM 驗證通訊協定無法確保目標伺服器的身分識別,只有本驗證可確保已經知道您的密碼。 因此,您應該將目標伺服器設定為使用 SSL 進行 PowerShell 遠端處理。 取得用戶端信任的憑證授權單位所簽發的 SSL 憑證,並將其指派給目標伺服器可增強 NTLM 型驗證的安全性,協助驗證使用者身分識別和伺服器身分識別。

電腦名稱稱考量

若要讓 AD DS 型驗證能夠運作,PowerShell 遠端處理必須能夠搜尋和擷取 Active Directory Domain Services (AD DS) 的電腦物件。 這表示您必須使用其完整功能變數名稱來參照目的電腦 (FQDN)。 例如,IP 位址或網域名稱系統 (DNS) 別名將無法運作,因為別名不會提供遠端處理所需的相互驗證。 如果您必須透過 IP 位址或 DNS 別名參照電腦,則必須使用 HTTPS 進行連線,這表示遠端電腦必須設定為接受該通訊協定。 或者,您必須將 IP 位址或 DNS 別名新增至本機的 TrustedHosts 清單。

注意

電腦名稱 localhost 有特殊例外狀況,可用來連線到本機電腦,而不需要任何其他設定變更。 如果本機電腦使用以用戶端為基礎的作業系統,則必須設定 WinRM。

TrustedHosts 清單

TrustedHosts 清單是本機設置的設定,您也可以使用群組原則物件 (GPO) 進行設定。 TrustedHosts 清單會列舉無法相互驗證的電腦。 電腦必須列出與用來連線該電腦相同的名稱,無論是實際的電腦名稱、DNS 別名或 IP 位址。 您可以使用萬用字元來指定 SRV*,這可讓名稱或 DNS 別名開頭為 SRV 的任何電腦進行連線。 不過,請謹慎使用此清單。 雖然 TrustedHosts 清單可讓您更輕易地連線到非網域電腦,而不需要設定 HTTPS,卻會略過重要的安全性措施。 這可讓您將認證傳送至遠端電腦,而不需要判斷該電腦是否實際上是您想要連線的電腦。 使用 TrustedHosts 清單,只應用來指定您知道不會遭到入侵的電腦,例如存放在受保護資料中心的伺服器。 您也可以使用 TrustedHosts 暫時啟用受控制網路子網上非網域電腦的連線,例如正在進行佈建程序的新電腦。

注意

最佳做法是,若非絕對必要,否則您應該避免使用 TrustedHosts 清單。 將非網域電腦設定為使用 HTTPS 是長期更安全的解決方案。

隱私權

根據預設,遠端處理會使用 HTTP,這不會提供通訊內容的隱私權或加密。 不過,Windows PowerShell 預設可以套用應用程式層級加密。 這表示您的通訊會受到一定程度的隱私權和保護。 在內部網路上,此應用程式層級加密通常足以滿足組織安全性需求。

在使用預設 Kerberos 驗證通訊協定的網域環境中,認證會以不含密碼的加密 Kerberos 票證形式傳送。

當您使用 HTTPS 進行連線時,整個頻道會使用遠端電腦 SSL 憑證的加密金鑰來加密。 因此,即使您使用基本驗證,也不會以純文字傳輸密碼。 不過,當您使用 HTTP 和基本驗證連線至未針對 HTTPS 設定的電腦時,將會以純文字傳輸認證 (包括密碼)。 例如,當您連線至新增到本機 TrustedHosts 清單的非網域電腦時,可能會發生這種情況。 甚至在您藉由指定其 IP 位址,而非主機名稱,來使用已加入網域的電腦時,也會發這種種情況。

由於會在該案例的純文字中傳輸認證,因此您應該確定您只在受控制與受保護的網路子網上連線到非網域電腦,例如特別為新電腦佈建指定的電腦。 如果您必須定期連線到非網域電腦,您應該將其設為支援 HTTPS。