MS14-025:群組原則喜好設定中的弱點可能會允許提高權限:2014 年 5 月 13 日

套用到
Windows RT 8.1 Windows 8.1 Windows 8.1 Enterprise Windows 8.1 Pro Windows Server 2012 R2 Datacenter Windows Server 2012 R2 Essentials Windows Server 2012 R2 Foundation Windows Server 2012 R2 Standard Windows 8 Windows 8 Enterprise Windows 8 Pro Windows Server 2012 Datacenter Windows Server 2012 Datacenter Windows Server 2012 Essentials Windows Server 2012 Foundation Windows Server 2012 Foundation Windows Server 2012 Standard Windows Server 2012 Standard Windows 7 Service Pack 1 Windows 7 Enterprise Windows 7 Professional Windows 7 Ultimate Windows 7 Home Premium Windows 7 Home Basic Windows Server 2008 R2 Service Pack 1 Windows Server 2008 R2 Standard Windows Server 2008 R2 Enterprise Windows Server 2008 R2 Datacenter Windows Server 2008 Service Pack 2 Windows Server 2008 for Itanium-Based Systems Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Server 2008 Web Edition Windows Vista Service Pack 2 Windows Vista Business Windows Vista Enterprise Windows Vista Home Basic Windows Vista Home Premium Windows Vista Starter Windows Vista Ultimate Windows Vista Enterprise 64-bit Edition Windows Vista Home Basic 64-bit Edition Windows Vista Home Premium 64-bit Edition Windows Vista Ultimate 64-bit Edition Windows Vista Business 64-bit Edition

簡介

Microsoft 已發行資訊安全公告 MS14-025。 若要深入了解此資訊安全公告:

如何取得此安全性更新的說明及支援

協助安裝更新:
Microsoft Update 支援

適用於 IT 專業人員的安全性解決方案:
TechNet 安全性疑難排解與支援

協助保護您的 Windows 電腦 Windows 免於病毒和惡意程式碼攻擊:
病毒解決方案與資訊安全中心

您所在國家/地區的當地支援:
多語系支援

更多資訊

已知問題和有關此安全性更新的詳細資訊

下列文章包含有關此安全性更新的詳細資訊,因為它與個別產品版本相關。 這些文章可能包含已知問題的資訊。 如果是這種情況,已知問題會列在每個文章連結中。

  • 2928120

    MS14-025: 說明已安裝更新 2919355 之系統的 Windows 遠端伺服器管理工具安全性更新: 2014 年 5 月 13 日

  • 2961899

    MS14-025: 未安裝更新2919355之系統的 Windows 遠端伺服器管理工具安全性更新說明: 2014 年 5 月 13 日

群組原則喜好設定

概觀

某些群組原則喜好設定可以儲存密碼。 由於密碼儲存不安全,因此此功能即將移除。 本文說明使用者介面變更和任何可用的因應措施。

下列群組原則喜好設定將不再允許儲存使用者名稱和密碼:

  • 行車地圖
  • 本機使用者和群組
  • 排定的工作
  • 服務
  • 資料來源

這會影響您環境中依賴這些喜好設定所包含密碼的現有 群組原則 物件 (GPO) 行為。 它也會防止使用此功能建立新的群組原則喜好設定。

對於雲端硬碟地圖、本機使用者和群組,以及服務,您可能可以透過 Windows 中其他更安全的功能來達成類似的目標。

針對排定的工作和資料來源,您將無法透過群組原則喜好設定密碼的非安全功能達成相同的目標。

案例

下列群組原則喜好設定受此變更影響。 每個偏好都會簡要介紹,然後更詳細地介紹。 此外,還提供讓您能夠執行相同工作的因應措施。

受影響的喜好設定 適用於使用者
適用對象:電腦
本機使用者管理 是 是
對應的磁碟機 是 否
服務 否 是
排定的工作 (上層) 是 是
排定的工作 (下層) 是 是
即時工作 (上層) 是 是
立即工作 (下層) 是 是
資料來源 是 是

變更摘要

  • 所有受影響的喜好設定中的密碼欄位都會停用。 系統管理員無法使用這些密碼欄位建立新的喜好設定。
  • 在某些喜好設定中,使用者名稱欄位是停用的。
  • 包含密碼的現有喜好設定無法更新。 它們只能根據特定的喜好設定刪除或停用。
  • 喜好設定的 [刪除] 和 [停用] 動作行為並未變更。
  • 當系統管理員開啟任何包含 CPassword 屬性的喜好設定時,系統管理員會收到下列警告對話方塊,以通知他或她最近被取代的消息。 嘗試儲存對需要 CPassword 屬性之新的或現有喜好設定所做的變更時,會觸發相同的對話方塊。 只有 [刪除] 和 [停用] 動作不會觸發警告對話方塊。

             指出 CPassword 屬性需要無法使用的安全性功能的安全性警告
            
            
            
          

案例 1:本機使用者管理

[本機使用者管理] 喜好設定經常用來建立在電腦上擁有已知密碼的本機系統管理員。 由於群組原則喜好設定儲存密碼的方式,此功能並不安全。 因此,此功能不再可供使用。 下列喜好設定會受到影響:

  • 電腦設定 -> 控制台設定 -> 本機使用者和群組 -> 新的 -> 本機使用者
  • 使用者設定 -> 控制台設定 -> 本機使用者和群組 -> 新 -> 本機使用者

重要變更

動作:建立或取代

  • [ 使用者名稱]、[ 密碼] 和 [確認密碼 ] 欄位會停用。
  • 當系統管理員開啟或嘗試儲存對包含密碼的現有喜好設定所做的任何變更時,會出現警告對話方塊。

                
                 新的 [本機使用者內容] 對話方塊,醒目提示空白的使用者名稱和密碼欄位
                
動作:更新

  • [ 密碼] 和 [確認密碼 ] 欄位會停用。
  • 當系統管理員開啟或嘗試儲存對包含密碼的現有喜好設定所做的任何變更時,會出現警告對話方塊。

                
                 [新的本機使用者內容] 對話方塊,其中 [動作] 欄位設定為 [更新]
                
動作:刪除

  • 行為不變

解決方法

對於那些以前依賴群組原則喜好設定來設定本機系統管理員密碼的使用者,以下指令碼作為 CPassword 的安全替代方案。 將內容複製並儲存至新的 Windows PowerShell 檔案,然後依照其 的指示執行指令碼。EXAMPLE 章節。

Microsoft 僅提供圖例的程式設計範例,不含明示或暗示的擔保。 這包括 (但不限於) 適用于特定目的之可操作性或適用性的暗示擔保。 本文假設您熟悉正在示範的程式設計語言,以及用來建立和進行程式偵錯工具的工具。 Microsoft 支援工程師可以協助說明特定程式的功能。 不過,他們將不會修改這些範例以提供新增功能或建構符合您特定需求的程式。

函數 Invoke-PasswordRoll
{
<#
.劇情簡介

此指令碼可用於將遠端電腦上的本機帳戶密碼設定為隨機密碼。 使用者名稱/密碼/伺服器組合會儲存在 CSV 檔案中。
儲存在 CSV 檔案中的帳戶密碼可以使用系統管理員的密碼加密,而系統管理員選擇確保純文字帳戶密碼不會寫入磁碟。
您可以使用此檔案中的另一個函數來解密加密的密碼:ConvertTo-CleartextPassword

功能:Invoke-PasswordRoll
作者: Microsoft
版本:1.0

.產品描述

此指令碼可用於將遠端電腦上的本機帳戶密碼設定為隨機密碼。 使用者名稱/密碼/伺服器組合會儲存在 CSV 檔案中。
儲存在 CSV 檔案中的帳戶密碼可以使用系統管理員的密碼加密,而系統管理員選擇確保純文字帳戶密碼不會寫入磁碟。
您可以使用此檔案中的另一個函數來解密加密的密碼:ConvertTo-CleartextPassword

.參數:ComputerName

使用 PowerShell 遠端處理以執行指令碼的電腦陣列。

.參數:LocalAccounts

應變更密碼的本機帳戶陣列。

.參數 TsvFileName

要輸出使用者名稱/密碼/伺服器組合的檔案。

.參數:EncryptionKey

用來加密 TSV 檔案的密碼。 使用 AES 加密。 只有儲存在 TSV 檔案中的密碼會加密,使用者名稱和伺服器名稱會是純文字。

.參數:PasswordLength

為本機帳戶隨機產生的密碼長度。

.參數 NoEncryption

請勿加密儲存在 TSV 檔案中的帳戶密碼。 這將導致將純文字密碼寫入磁碟。

.範例

. .\Invoke-PasswordRoll.ps1 #Loads 此指令檔中的函數
Invoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @ (“administrator”,“CustomLocalAdmin”) -TsvFileName “LocalAdminCredentials.tsv” -EncryptionKey “Password1”

連線到儲存在檔案「computerlist.txt」中的所有電腦。 如果系統上存在本機帳戶 “administrator” 和/或 “CustomLocalAdmin”,則其密碼會變更
隨機產生的密碼長度為 20 (預設) 。 使用者名稱/密碼/伺服器組合儲存在 LocalAdminCredentials.tsv 中,而帳戶密碼會使用密碼 “Password1” 進行 AES 加密。

.範例

. .\Invoke-PasswordRoll.ps1 #Loads 此指令檔中的函數
Invoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @ (“administrator”) -TsvFileName “LocalAdminCredentials.tsv” -NoEncryption -PasswordLength 40

連線到儲存在檔案「computerlist.txt」中的所有電腦。 如果系統上存在本機帳戶「系統管理員」,其密碼將變更為隨機產生的密碼
長度為 40 的密碼。 使用者名稱/密碼/伺服器組合會以未加密的方式儲存在 LocalAdminCredentials.tsv 中。

.附註
需求:
-必須安裝 PowerShellv2 或更新版本
-必須在將執行指令碼的所有系統上啟用 PowerShell 遠端處理

指令碼行為:
- 如果系統上存在本機帳戶,但未在 LocalAccounts 參數中指定,則指令碼會將警告寫入畫面以提醒您此本機帳戶的存在。 發生此情況時,指令碼會繼續執行。
-如果在 LocalAccounts 參數中指定了本機帳戶,但電腦上不存在該帳戶,則不會) 建立帳戶 (不會發生任何動作。
- 此檔案中包含的 ConvertTo-CleartextPassword 函數可用來解密以加密方式儲存在 TSV 檔案中的密碼。
- 如果無法連線到 ComputerName 中指定的伺服器,PowerShell 將輸出錯誤訊息。
-Microsoft 建議公司定期滾動所有本機和網域帳戶密碼。

#>
    [CmdletBinding (DefaultParameterSetName=“Encryption”) ]
    參數 (
        [參數 (強制=$true) ]
        [字串[]]
        $ComputerName,

        [參數 (強制=$true) ]
        [字串[]]
        $LocalAccounts,

        [參數 (強制=$true) ]
        [字串]
        $TsvFileName,

        [參數 (ParameterSetName=“Encryption”, mandatory=$true) ]
        [字串]
        $EncryptionKey,

        [參數 () ]
        [ValidateRange (20,120) ]
        [整數]
        $PasswordLength = 20,

        [參數 (ParameterSetName=“NoEncryption”, mandatory=$true) ]
        [切換]
        $NoEncryption
    )

    #Load 任何需要的 .net 類別
    Add-Type -AssemblyName “System.Web” -ErrorAction Stop

    #This 是在 ComputerName 中指定的每部電腦上執行的指令碼區塊
    $RemoteRollScript = {
        參數 (
            [參數 (強制 = $true,位置 = 1) ]
            [字串[]]
            $Passwords,

            [參數 (強制 = $true,位置 = 2) ]
            [字串[]]
            $LocalAccounts,

            #This 在這裡,這樣我就可以記錄腳本所連接的伺服器名稱是什麼,有時 DNS 記錄會搞亂,有這個會很好。
            [參數 (mandatory=$true, position=3) ]
            [字串]
            $TargettedServerName
        )

        $LocalUsers = Get-WmiObject Win32_UserAccount -Filter “LocalAccount=true” |Foreach {$_.Name}

        #Check 電腦是否有任何本機使用者帳戶的密碼不會由此指令碼滾動
        $LocalUsers) 中的 foreach ($User
        {
            如果 ($LocalAccounts -inot包含$User)
            {
                Write-Warning 「伺服器: '$ ($TargettedServerName) ' 有本機帳戶 '$ ($User) ',此指令碼不會變更其密碼」
            }
        }

        #For 此伺服器上存在的每個指定的本機帳戶中,變更密碼
        $PasswordIndex = 0
        $LocalAccounts) 中的 foreach ($LocalAdmin
        {
            $Password = $Passwords[$PasswordIndex]

            如果 ($LocalUsers -i包含$LocalAdmin)
            {
                嘗試
                {
                    $objUser = [ADSI]“WinNT://localhost/$ ($LocalAdmin) ,使用者”
                    $objUser.psbase.Invoke (“SetPassword”, $Password)

                    $Properties = @{
                        TargettedServerName = $TargettedServerName
                        使用者名稱 = $LocalAdmin
                        密碼 = $Password
                        RealServerName = $env:computername
                    }

                    $ReturnData = New-Object PSObject -Property $Properties
                    Write-Output $ReturnData
                }
                catch
                {
                    Write-Error 「變更使用者密碼時發生錯誤:$ 在伺服器:$ ($TargettedServerName) 上 ($LocalAdmin) 」
                }
            }

            $PasswordIndex++
        }
    }

    在執行此指令碼的用戶端上 #Generate 密碼,而不是在遠端電腦上。 .NET 用戶端設定檔中不提供 System.Web.Security。 進行此通話
    # 在用戶端上執行指令碼可確保只有 1 台電腦需要安裝完整的 .NET 執行階段 (而不是每個系統都有密碼變) 。
    函數 Create-RandomPassword
    {
        參數 (
            [參數 (強制=$true) ]
            [ValidateRange (20,120) ]
            [整數]
            $PasswordLength
        )

        $Password = [System.Web.Security.Membership]::GeneratePassword ($PasswordLength, $PasswordLength / 4)

        #This 永遠不會失敗,但無論如何我都會在這裡進行健全性檢查
        if ($Password.Length -ne $PasswordLength)
        {
            throw new exception (“GeneratePassword 傳回的密碼長度與要求的長度不同。 所需長度: ($PasswordLength) 美元。 產生的長度: $ ($Password.Length) “)
        }

        退回$Password
    }

    #Main 功能 - 產生密碼並遠端進入電腦以變更指定的本機帳戶密碼
    if ($PsCmdlet.ParameterSetName -ieq “Encryption”)
    {
        嘗試
        {
            $Sha 256 = 新物件 System.Security.Cryptography.SHA256CryptoServiceProvider
            $SecureStringKey = $Sha 256.ComputeHash ([System.Text.UnicodeEncoding]::Unicode.GetBytes ($EncryptionKey) )
        }
        catch
        {
            Write-Error「建立 TSV 加密金鑰時發生錯誤」-ErrorAction Stop
        }
    }

    $ComputerName) 中的 foreach ($Computer
    {
        #Need 為每個可變更的帳戶產生 1 個密碼
        $Passwords = @ ()
        ($i = 0;$i -lt $LocalAccounts.長度;$i++)
        {
            $Passwords += Create-RandomPassword -PasswordLength $PasswordLength
        }

        Write-Output 「連線至伺服器 '$ ($Computer) ' 以滾動指定的本機系統管理員密碼」
        $Result = Invoke-Command -ScriptBlock $RemoteRollScript -ArgumentList @ ($Passwords, $LocalAccounts, $Computer) -ComputerName $Computer
        #If 使用加密,請在寫入磁碟之前,先使用使用者提供的金鑰加密密碼
        if ($Result -ne $null)
        {
            if ($PsCmdlet.ParameterSetName -ieq “NoEncryption”)
            {
                $Result |Select-Object 使用者名稱,密碼,TargettedServerName,RealServerName |Export-Csv -Append -Path $TsvFileName -NoTypeInformation
            }
            否則
            {
                #Filters $null 返回的項目
                $Result = $Result |Select-Object 使用者名稱,密碼,TargettedServerName,RealServerName

                foreach $Result) 中的 ($Record
                {
                    $PasswordSecureString = ConvertTo-SecureString -AsPlainText -Force -String ($Record.Password)
                    $Record |Add-Member -MemberType NoteProperty -Name EncryptedPassword -Value (ConvertFrom-SecureString -Key $SecureStringKey -SecureString $PasswordSecureString)
                    $Record.PSObject.Properties.Remove (“Password”)
                    $Record |Select-Object Username,EncryptedPassword,TargettedServerName,RealServerName |Export-Csv -Append -Path $TsvFileName -NoTypeInformation
                }
            }
        }
    }
}

函數 ConvertTo-CleartextPassword
{
<#
.劇情簡介
您可以使用此函數來解密由 Invoke-PasswordRoll 函數加密儲存的密碼。

功能:ConvertTo-CleartextPassword
作者: Microsoft
版本:1.0

.產品描述
您可以使用此函數來解密由 Invoke-PasswordRoll 函數加密儲存的密碼。

.參數 EncryptedPassword

儲存在 TSV 檔案中的加密密碼。

.參數:EncryptionKey

用來進行加密的密碼。

.範例

. .\Invoke-PasswordRoll.ps1 #Loads 此指令檔中的函數
ConvertTo-CleartextPassword -EncryptionKey “Password1” -EncryptedPassword 76492d1116743f0423413b16050a5345MgB8AGcAZgBaAHUAaQBwADAAQgB2AGgAcABNADMASwBaAFoAQQBzADEAeABjAEEAPQA9AHwAZgBiAGYAMAA1ADYANgA2ADEANwBkADQAZgAwADMANABjAGUAZQAxAGIAMABs iADkANgBiADkAMAA4ADcANwBhADMAYQA3AGYAOABkADcAMQA5ADQAMwBmAGYANQBhADEAYQBjADcANABkADIANgBhADUANwBlADgAMAAyADQANgA1ADIAOQA0AGMAZQA0ADEAMwAzADcANQAyADUANAAzADYAMAA1AGEANgAzADEAMQA5ADAAYwBmADQAZAA2AGQA”

解密儲存在 TSV 檔案中的加密密碼。

#>
    參數 (
        [參數 (強制=$true) ]
        [字串]
        $EncryptedPassword,

        [參數 (強制=$true) ]
        [字串]
        $EncryptionKey
    )

    $Sha 256 = 新物件 System.Security.Cryptography.SHA256CryptoServiceProvider
    $SecureStringKey = $Sha 256.ComputeHash ([System.Text.UnicodeEncoding]::Unicode.GetBytes ($EncryptionKey) )

    [SecureString]$SecureStringPassword = ConvertTo-SecureString -string $EncryptedPassword -key $SecureStringKey
    Write-Output ([System.Runtime.InteropServices.Marshal]::P trToStringAuto ([System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode ($SecureStringPassword) ) )
}
   系統管理員可以透過建立 Active Directory 群組,然後透過群組原則喜好設定 - 本機群組將其新增至本機群組原則喜好設定 -> 本機群組,以新增本機系統管理員帳戶至電腦。 此動作不會快取認證。 對話方塊類似於下圖。 當使用者使用這些認證登入時,此因應措施的確需要連線至 Active Directory 網域服務。

系統管理員內建群組 [內容] 對話方塊,含有 [新增目前使用者] 選項

案例 2:對應的磁碟機

系統管理員使用磁碟機地圖來為使用者配置網路位置。 密碼保護功能用於確保對磁碟機的授權存取。 下列喜好設定會受到影響:

  • 使用者設定 -> Windows 設定 -> 磁碟機地圖 -> 新 -> 對應磁碟機

重要變更

動作:建立、更新或取代

  • [ 使用者名稱]、[ 密碼] 和 [確認密碼 ] 欄位會停用。

                 目標系統需求:分割區分割和合併的決策流程圖
                
動作:刪除

  • 行為不變

解決方法

您可以使用 Windows 檔案總管來管理共用權限並指派權限給使用者,而非使用密碼方法進行驗證。 您可以使用 Active Directory 物件來控制資料夾的權限。

案例 3:服務

您可以使用「服務」喜好設定來變更服務內容,使其在原始安全環境定義以外的環境定義中執行。 下列喜好設定會受到影響:

  • 電腦設定 -> 控制台設定 -> 服務 -> 新增 -> 服務

重要變更

啟動:無變更、自動或手動

  • [ 密碼] 和 [確認密碼 ] 欄位已停用。
  • 系統管理員只能使用內建帳戶。

                 IPsec 站對站拓撲,其中閘道 R1 和 R2 由通道連接
                
啟動:停用

  • 行為不變

新增對話方塊

  • 嘗試對此帳戶使用非內建使用者的系統管理員」會收到下列警告:

                 警告對話方塊指出 CPassword 屬性已被取代
                
                
              

解決方法

                
                
服務仍可以本機系統帳戶的方式執行。 您可以依照下列 Microsoft 知識庫文章所述變更服務權限:

256345 如何設定群組原則設定以設定系統服務的安全性

附註:如果您要設定的服務不存在,您必須在執行此服務的電腦上進行設定。 

案例 4:排程和立即工作 (上層)

這些可用來在特定的安全性環境中執行排程的工作。 已無法再使用儲存排程任務認證的功能,以便在使用者未登入時以任意使用者身分執行。 下列喜好設定會受到影響。 (請注意,在某些平臺上,「至少 Windows 7」會取代為「Windows Vista 和更新版本」。)

  • 電腦設定 -> 控制台設定 -> 排定的工作 -> 新增 -> 排程的工作 (至少 Windows 7)
  • 電腦設定 -> 控制台設定 -> 排定的工作 - 新增 -> 立即工作 (> 至少 Windows 7)
  • 使用者設定 -> 控制台設定 -> 排程工作 -> 新增 -> 排程工作 (至少 Windows 7)
  • 使用者設定 -> 控制台設定 -> 排定的工作 -> 新增 -> 立即工作 (至少 Windows 7)

重要變更

動作:建立、更新或取代

  • 當您選取 [無論使用者是否已登入執行 ] 選項時,對話方塊不再提示系統管理員輸入認證。
  • [ 不儲存密碼] 核取方塊已停用。 根據預設,也會核取方塊。

                 含有選用使用者認證欄位的新 [磁碟機內容] 對話方塊
                
動作:刪除

行為不變

解決方法

對於「至少 Windows 7) (的排程工作」和「至少 (Windows 7) 的立即工作」工作,管理員可以在指定使用者登入時使用特定的使用者帳戶。 或者,他們只能以該使用者身分存取本機資源。 這些工作仍然可以在本機服務內容中執行。

            
案例 5:排定和立即工作 (下層) 這是用來在特定安全性內容中執行排程工作的喜好設定的下層版本。 已無法再使用儲存排程任務認證的功能,以便在使用者未登入時以任意使用者身分執行。 下列喜好設定會受到影響:

  • 電腦設定 -> 控制台設定 -> 排定的工作 -> 新增 -> 排定的工作
  • 電腦設定 -> 控制台設定 -> 排定的工作 - 新增 -> 立即工作 (> Windows XP)
  • 使用者設定 -> 控制台設定 -> 排定的工作 -> 新增 -> 排定的工作
  • 使用者設定 -> 控制台設定 -> 排定的工作 - 新增 -> 立即工作 (> Windows XP)

重要變更

動作:建立、更新或取代

  • [ 執行身分] 核取方塊已停用。 因此, [使用者名稱]、[ 密碼] 和 [確認密碼] 欄位都會停用。

                 [新工作屬性] 對話方塊,醒目提示 [執行身分] 選項
                
動作:刪除

 行為不變

解決方法

針對「排定的工作」和「立即工作 (Windows XP) 」項目,排程工作會使用本機服務目前可用的權限來執行。 

案例 6:資料來源

[資料來源] 喜好設定可用來將資料來源與電腦或使用者建立關聯。 此功能不再儲存認證,以啟用受密碼保護之資料來源的存取權限。 下列喜好設定會受到影響:

  • 電腦設定 -> 控制台設定 -> 資料來源
  • 使用者設定 -> 控制台設定 -> 資料來源

重要變更

動作:建立、更新或取代

  • [ 使用者名稱]、[ 密碼] 和 [確認密碼] 欄位會停用:

                 醒目提示使用者名稱和密碼欄位的 [新資料來源屬性] 對話方塊
                
動作:刪除

  • 行為不變

解決方法

沒有可用的因應措施。 此喜好設定不再儲存認證,以允許存取受密碼保護的資料來源。 

淘汰 CPassword

移除 CPassword

本「Microsoft 知識庫」文章中包含的 Windows PowerShell 指令碼可偵測網域是否包含任何可能使用 CPassword 的群組原則喜好設定。 如果在指定的喜好設定中偵測到 CPassword XML,它會顯示在此清單中。 

偵測 CPassword 喜好設定

此指令碼必須從您要清除的網域控制站上的本機目錄執行。 將內容複製並儲存至新的 Windows PowerShell 檔案,判斷您的系統磁碟機,然後依照下列用法執行指令碼。

  <#
.劇情簡介
您網域中的群組原則物件可以有儲存不同工作密碼的喜好設定,例如:
1. 資料來源
2. 行車地圖
3. 本機使用者
4. 排定的工作 (XP 和上層)
5. 服務
這些密碼會作為 GP 喜好設定的一部分儲存在 SYSVOL 中,並且由於 32 位元組 AES) 的弱式加密而 (不安全。
因此,建議您不要在網域環境中部署這類喜好設定,並移除任何現有的這類喜好設定
喜好設定。 此指令碼可協助系統管理員在其網域的 SYSVOL 中尋找包含密碼的 GP 喜好設定。

.產品描述
此指令碼應在使用 RSAT 安裝的 DC 或用戶端電腦上執行,以列印包含的所有喜好設定
包含 GPO、喜好設定名稱、定義此喜好設定的 GPEdit 路徑等資訊的密碼。
列出受影響的喜好設定後,您可以使用群組原則管理主控台中的編輯器來移除這些喜好設定。

.語法
Get-SettingsWithCPassword.ps1 [-path <string>]
.範例
Get-SettingsWithCPassword.ps1 -Path %WinDir%\SYSVOL\domain
Get-SettingsWithCPassword.ps1 -Path <GPO 備份資料夾路徑>

.附註
如果找不到群組原則 PS 模組,輸出將會包含 GPO GUID,而不是 GPO 名稱。 您可以執行
或在安裝 RSAT 和
已啟用群組原則模組。
或者,您可以使用 GPO GUID 透過使用 Get-GPO Cmdlet 來取得 GPO 名稱。

.連結
http://go.microsoft.com/fwlink/?LinkID=390507

#>
#----------------------------------------------------------------------------------------------------------------
# 輸入參數 #--------------------------------------------------------------------------------------------------------------
參數 (
    [字串]$Path = $ (擲回 “-Path is required.”) # GPP 所在的目錄路徑。
 )
#---------------------------------------------------------------------------------------------------------------
$isGPModuleAvailable = $false
$impactedPrefs = { “Groups.xml”, “ScheduledTasks.xml”,“Services.xml”, “DataSources.xml”, “Drives.xml” }
#----------------------------------------------------------------------------------------------------------------
# 如果可用,請匯入 Group Olicy 模組 #----------------------------------------------------------------------------------------------------------------
if (-not (Get-Module -name “GroupPolicy”) )
{
   如果 (Get-Module -ListAvailable |
         Where-Object { $_.名稱 -ieq “GroupPolicy” })
    {
        $isGPModuleAvailable = $true
        Import-Module “GroupPolicy”
    }
    否則
    {
        Write-Warning「無法匯入 PowerShell 的群組原則模組。 因此,將會報告 GPO GUID。
                       在 DC 上執行此指令碼以取得 GPO 名稱,或在 DC) 上使用 Get-GPO Cmdlet (從 GPO GUID 取得 GPO 名稱。」
    }
}
否則
{
    $isGPModuleAvailable = $true
}
函數 Enum-SettingsWithCpassword ( [字串]$sysvolLocation )
{
    # GPMC 樹狀路徑
    $commonPath = “ -> 喜好設定 -> 控制台設定 -> ”
    $driveMapPath = “ -> 喜好設定 -> Windows 設定 -> ”

    # 遞迴取得 SYVOL 位置內的所有 xml 檔案
    $impactedXmls = Get-ChildItem $sysvolLocation -recurse -filter “*.xml” |Where-Object { $impactedPrefs -cmatch $_.名稱 }

    # 每個 xml 檔案包含多個喜好設定。 逐一查看每個喜好設定,檢查其是否
    # 包含 cpassword 屬性並顯示它。
    $impactedXmls ) 中的 foreach ( $file
    {
        $fileFullPath = $file。FullName

        # 設置GPP類別。 如果檔案位於 SYSVOL 中的電腦資料夾下
        # 該設定是在「電腦設定」下定義,否則
        # 設定對使用者設定而言是 A
        if ( $fileFullPath.Contains (「電腦」) )
        {
            $category = 「電腦設定」
        }
        elseif ( $fileFullPath.Contains (“User”) )
        {
            $category = 「使用者設定」
        }
        否則
        {
            $category = “未知”
        }
        # 以 XML 格式獲取檔案內容
        嘗試
        {
            [xml]$xmlFile = get-content $fileFullPath -ErrorAction 繼續
        }
        catch [例外狀況]{
            Write-Host $_。Exception.Message
        }
        如果 ($xmlFile -eq $null)
        {
            繼續
        }
        切換 ( $file。BaseName )
        {
            群組
            {
                $gppWithCpassword = $xmlFile.SelectNodes (“群組/使用者”) |where-Object { [字串]::IsNullOrEmpty ($_.Properties.cpassword) -eq $false }
                $preferenceType = 「本機使用者」
            }
            ScheduledTasks
            {
                $gppWithCpassword = $xmlFile.SelectNodes (“ScheduledTasks/*”) |where-Object { [字串]::IsNullOrEmpty ($_.Properties.cpassword) -eq $false }
                $preferenceType = 「排定的工作」
            }
            DataSources
            {
                $gppWithCpassword = $xmlFile.SelectNodes (“DataSources/DataSource”) |where-Object { [字串]::IsNullOrEmpty ($_.Properties.cpassword) -eq $false }
                $preferenceType = “資料來源”
            }
            磁碟機
            {
                $gppWithCpassword = $xmlFile.SelectNodes (“磁碟機/磁碟機”) |where-Object { [字串]::IsNullOrEmpty ($_.Properties.cpassword) -eq $false }
                $preferenceType = “行車地圖”
            }
            服務
            {
                $gppWithCpassword = $xmlFile.SelectNodes (“NTServices/NTService”) |where-Object { [字串]::IsNullOrEmpty ($_.Properties.cpassword) -eq $false }
                $preferenceType = “Services”
            }
            預設
            { # 清除 gppWithCpassword 和 preferenceType 來輸入下一個項目。
                嘗試
                {
                    Clear-Variable -Name gppWithCpassword -ErrorAction SilentlyContinue
                    Clear-Variable -Name preferenceType -ErrorAction SilentlyContinue
                }
                catch [例外狀況]{}
            }
        }
        if ($gppWithCpassword -ne $null)
        {
            # 從 filePath 擷取的 GUID 建置 GPO 名稱
            $guidRegex = [regex]“\{ (.*) \}”
            $match = $guidRegex.match ($fileFullPath)
            如果 ($match。成功)
            {
               $gpoGuid = $match.groups[1].value
               $gpoName = $gpoGuid
            }
            否則
            {
               $gpoName = “未知”
            }
            如果 ($isGPModuleAvailable -eq $true)
            {
                嘗試
                {
                    $gpoInfo = Get-GPO -Guid $gpoGuid -ErrorAction 繼續
                    $gpoName = $gpoInfo.DisplayName
                }
                catch [Exception] {
                    Write-Host $_。Exception.Message
                }
            }
            # 顯示包含 CWigue 的優先順序
            foreach ( $gpp 在 $gppWithCpassword ) 中
            {
                if ( $preferenceType -eq “Drive Maps” )
                {
                    $prefLocation = $category + $driveMapPath + $preferenceType
                }
                否則
                {
                    $prefLocation = $category + $commonPath + $preferenceType
                }
                $obj = New-Object -typeName PSObject
                $obj |Add-Member –membertype NoteProperty –name GPOName –value ($gpoName) –passthru |
                       Add-Member -MemberType NoteProperty -name Preference -value ($gpp。名稱) -passthru |
                       Add-Member -MemberType NoteProperty -name Path -value ($prefLocation)
                Write-Output $obj
            }
        } # 如果$gppWithCpassword則結束
    } # end foreach $file
} # 結束函數 Enum-PoliciesWithCpassword
#-----------------------------------------------------------------------------------
# 檢查路徑是否有效。 列舉包含 cpassword 的所有設定。 #-----------------------------------------------------------------------------------
如果 (測試路徑$Path )
{
    Enum-SettingsWithCpassword $Path
}
否則
{
    Write-Warning 「沒有這樣的目錄:$Path」
}

範例使用方式 (假設系統磁碟機為 C)

.\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” |Format-List
注意 請注意,您也可以針對 路徑 而不是網域鎖定任何備份 GPO。

偵測指令碼會產生類似下列的清單:

命令列輸出清單群組原則喜好設定位置

如需較長的清單,請考慮將輸出儲存至檔案:

.\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” |ConvertTo-Html > gpps.html

移除 CPassword 喜好設定

若要移除包含 CPassword 資料的喜好設定,我們建議您在網域控制站上或從安裝了遠端伺服器管理工具的用戶端使用群組原則管理主控台 (GPMC) 。 您可以在這些主機上透過五個步驟移除任何喜好設定。 若要這麼做,請按照下列步驟進行:

  1. 在 GPMC 中,開啟包含 CPassword 資料的喜好設定。
  2. 視情況變更動作為 [刪除 ] 或 [停用]。
  3. 按一下 [確定] 儲存變更。
  4. 等候一或兩個群組原則重新整理週期,以允許變更傳播至用戶端。
  5. 在所有用戶端上套用變更之後,刪除喜好設定。
  6. 視需要重複步驟 1 到 5 來清除整個環境。 當偵測指令碼傳回零結果時,您就完成了。
檔案雜湊資訊
檔案名稱 SHA1 雜湊 SHA256 雜湊
Windows6.0-KB2928120-ia64.msu B2A74305CB56191774BFCF9FCDEAA983B26DC9A6 DCE8C0F9CEB97DBF1F7B9BAF76458B3770EF01C0EDC581621BC8C3B2C7FD14E7
Windows6.0-KB2928120-x64.msu 386457497682A2FB80BC93346D85A9C1BC38FBF7 1AF67EB12614F37F4AC327E7B5767AFA085FE676F6E81F0CED95D20393A1D38D
Windows6.0-KB2928120-x86.msu 42FF283781CEC9CE34EBF459CA1EFE011D5132C3 016D7E9DBBC5E487E397BE0147B590CFBBB5E83795B997894870EC10171E16D4
Windows6.1-KB2928120-ia64.msu 5C2196832EC94B99AAF9B074D3938525B7219690 9958FA58134F55487521243AD9740BEE0AC210AC290D45C8322E424B3E5EBF16
Windows6.1-KB2928120-x64.msu EA5332F4E289DC799611EAB8E3EE2E86B7880A4B 417A2BA34F8FD367556812197E2395ED40D8B394F9224CDCBE8AB3939795EC2A
Windows6.1-KB2928120-x86.msu 7B7B6EE24CD8BE1AB3479F9E1CF9C98982C8BAB1 603206D44815EF2DC262016ED13D6569BE13D06E2C6029FB22621027788B8095
Windows8-RT-KB2928120-x64.msu E18FC05B4CCA0E195E62FF0AE534BA39511A8593 FCAED97BF1D61F60802D397350380FADED71AED64435D3E9EAA4C0468D80141E
Windows8-RT-KB2928120-x86.msu A5DFB34F3B9EAD9FA78C67DFC7ACACFA2FBEAC0B 7F00A72D8A15EB2CA70F7146A8014E39A71CFF5E39596F379ACD883239DABD41
Windows8.1-KB2928120-x64.msu A07FF14EED24F3241D508C50E869540915134BB4 6641B1A9C95A7E4F0D5A247B9F488887AC94550B7F1D7B1198D5BCBA92F7A753
Windows8.1-KB2928120-x86.msu DE84667EC79CBA2006892452660EB99580D27306 468EE4FA3A22DDE61D85FD3A9D0583F504105DF2F8256539051BC0B1EB713E9C
Windows8.1-KB2961899-x64.msu 10BAE807DB158978BCD5D8A7862BC6B3EF20038B EC26618E23D9278FC1F02CA1F13BB289E1C6C4E0C8DA5D22E1D9CDA0DA8AFF51
Windows8.1-KB2961899-x86.msu 230C64447CC6E4AB3AD7B4D4655B8D8CEFBFBE98 E3FAD567AB6CA616E42873D3623A777185BE061232B952938A8846A974FFA7AF