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

はじめに

マイクロソフトは、セキュリティ情報 MS14-025 を公開しました。 このセキュリティ情報の詳細については、次の手順を実行します。

このセキュリティ更新プログラムに関するヘルプとサポートを受ける方法

更新プログラムのインストールに関するヘルプ:
Windows 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 ファイルに保存し、次に示されているようにスクリプトを実行します。セクションの例。

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" に保存されているすべてのコンピューターに接続します。 ローカル アカウント "administrator" がシステムに存在する場合、そのパスワードはランダムに生成されたパスワードに変更されます
長さ 40 のパスワード。 ユーザー名/パスワード/サーバーの組み合わせは、暗号化されずに LocalAdminCredentials.tsv に保存されます。

.注
要件:
- PowerShellv2 以降をインストールする必要があります
- PowerShell リモート処理は、スクリプトが実行されるすべてのシステムで有効にする必要があります

スクリプトの動作:
- ローカル アカウントがシステムに存在するが、LocalAccounts パラメーターで指定されていない場合、スクリプトは画面に警告を書き込み、このローカル アカウントの存在を警告します。 この場合、スクリプトは引き続き実行されます。
- ローカル アカウントが LocalAccounts パラメーターで指定されていても、そのアカウントがコンピューターに存在しない場合は、何も起こりません (アカウントは作成されません)。
- このファイルに含まれる関数 ConvertTo-CleartextPassword を使用すると、TSV ファイルに暗号化されて保存されているパスワードの暗号化を解除できます。
- ComputerName で指定されたサーバーに接続できない場合、PowerShell はエラー メッセージを出力します。
- Microsoft では、すべてのローカル アカウントとドメイン アカウントのパスワードを定期的にロールするように企業にアドバイスしています。

#>
    [CmdletBinding(DefaultParameterSetName="Encryption")]
    Param(
        [Parameter(Mandatory=$true)]
        [String[]]
        $ComputerName、

        [Parameter(Mandatory=$true)]
        [String[]]
        $LocalAccounts、

        [Parameter(Mandatory=$true)]
        [String]
        $TsvFileName、

        [Parameter(ParameterSetName="Encryption", Mandatory=$true)]
        [String]
        $EncryptionKey、

        [Parameter()]
        [ValidateRange(20,120)]
        [Int]
        $PasswordLength = 20,

        [Parameter(ParameterSetName="NoEncryption", Mandatory=$true)]
        [スイッチ]
        $NoEncryption
    )

    必要な .NET クラス #Load
    Add-Type -AssemblyName "System.Web" -ErrorAction Stop

    #This は、ComputerName で指定されているすべてのコンピューターで実行されるスクリプトブロックです
    $RemoteRollScript = {
        Param(
            [parameter(mandatory=$true, position=1)]
            [String[]]
            $Passwords、

            [parameter(mandatory=$true, position=2)]
            [String[]]
            $LocalAccounts、

            スクリプトが接続されているサーバー名を記録できるように #This ここにありますが、DNSレコードがめちゃくちゃになることがありますが、これがあるといいかもしれません。
            [parameter(mandatory=$true, position=3)]
            [String]
            $TargettedServerName
        )

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

        このスクリプトによってパスワードがロールされないローカル ユーザー アカウントがコンピューターにあるかどうかを #Check します
        foreach ($LocalUsers の$User)
        {
            if ($LocalAccounts -inotcontains $User)
            {
                Write-Warning "サーバー: '$($TargettedServerName)' にはローカル アカウント '$($User)' があります。このスクリプトのパスワードは変更されていません"
            }
        }

        このサーバーに存在するローカル アカウントすべて #For、パスワードを変更します
        $PasswordIndex = 0
        foreach ($LocalAccounts $LocalAdmin)
        {
            $Password = $Passwords[$PasswordIndex]

            if ($LocalUsers -icontains $LocalAdmin)
            {
                try
                {
                    $objUser = [ADSI]"WinNT://localhost/$($LocalAdmin), user"
                    $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)上のuser:$($LocalAdmin)のパスワードの変更エラー"
                }
            }

            $PasswordIndex++
        }
    }

    リモート コンピューターではなく、このスクリプトを実行しているクライアントのパスワードを #Generate します。 System.Web.Security は .NET クライアント プロファイルでは使用できません。 この呼び出しを行う
    # クライアントでスクリプトを実行すると、完全な .NET ランタイムをインストールする必要があるコンピューターが 1 台だけになります (すべてのシステムでパスワードがロールされるのではなく)。
    関数 Create-RandomPassword
    {
        Param(
            [Parameter(Mandatory=$true)]
            [ValidateRange(20,120)]
            [Int]
            $PasswordLength
        )

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

        #This 決して失敗してはならないが、とにかくここに正気チェックを置くつもりだ
        if ($Password.Length -ne $PasswordLength)
        {
            throw new Exception("GeneratePassword によって返されるパスワードは、必要な長さとは異なります。 必要な長さ: $($PasswordLength)。 生成された長さ: $($Password.Length)")
        }

        return $Password
    }

    #Main 機能 - パスワードを生成し、マシンにリモート インして、指定されたローカル アカウントのパスワードを変更する
    if ($PsCmdlet.ParameterSetName -ieq "Encryption")
    {
        try
        {
            $Sha 256 = 新しいオブジェクト System.Security.Cryptography.SHA256CryptoServiceProvider
            $SecureStringKey = $Sha 256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey))
        }
        catch
        {
            Write-Error "TSV 暗号化キーの作成中にエラーが発生しました" -ErrorAction Stop
        }
    }

    foreach ($ComputerName の $Computer)
    {
        変更可能なアカウントごとに 1 つパスワードを生成する #Need
        $Passwords = @()
        for ($i = 0; $i -lt $LocalAccounts.Length; $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 username,password,TargettedServerName,RealServerName |Export-Csv -append -path $TsvFileName -NoTypeInformation
            }
            else
            {
                返された $null エントリを #Filters する
                $Result = $Result |Select-Object username,password,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("パスワード")
                    $Record |Select-Object username,EncryptedPassword,TargettedServerName,RealServerName |Export-Csv -append -path $TsvFileName -NoTypeInformation
                }
            }
        }
    }
}

関数 ConvertTo-CleartextPassword
{
<#
.概要
この関数を使用すると、関数 Invoke-PasswordRoll によって暗号化されて格納されたパスワードの暗号化を解除できます。

関数: ConvertTo-CleartextPassword
作成者: Microsoft
バージョン: 1.0

.説明
この関数を使用すると、関数 Invoke-PasswordRoll によって暗号化されて格納されたパスワードの暗号化を解除できます。

.PARAMETER EncryptedPassword

TSV ファイルに保存された暗号化されたパスワード。

.パラメーター EncryptionKey

暗号化の実行に使用されるパスワード。

.例文

. このスクリプト ファイル内の関数 \Invoke-PasswordRoll.ps1 #Loads
ConvertTo-CleartextPassword -EncryptionKey "Password1" -EncryptedPassword 76492d1116743f0423413b16050a5345MgB8AGcAZgBaAHUAaQBwADAAQgB2AGgAcABNADMASwBaAFoAQQBzADEAeABjAEEAPQA9AHwAZgBiAGYAMAA1ADYANgA2ADEANwBkADQAZgAwADMANABjAGUAZQAxAGIAMABxAGIAMABs iADkANgBiADkAMAA4ADcANwBhADMAYQA3AGYAOABkADcAMQA5ADQAMwBmAGYANQBhADEAYQBjADcANABkADIANgBhADUANwBlADgAMAAyADQANgA1ADIAOQA0AGMAZQA0ADEAMwAzADcANQAyADUANAAzADYAMAA1AGEANgAzADEAMQA5ADAAYwBmADQAZAA2AGQA"

TSV ファイルに保存されていた暗号化されたパスワードの暗号化を解除します。

#>
    Param(
        [Parameter(Mandatory=$true)]
        [String]
        $EncryptedPassword、

        [Parameter(Mandatory=$true)]
        [String]
        $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 Domain Services への接続が必要です。

[現在のユーザーの追加] オプションを含む管理者の組み込みグループの [プロパティ] ダイアログ ボックス

シナリオ 2: マップされたドライブ

管理者は、ドライブ マップを使用してネットワークの場所をユーザーに割り当てます。 パスワード保護機能は、ドライブへの承認されたアクセスを確認するために使用されます。 次の設定が影響を受けます。

  • ユーザー構成 -> Windows の設定 -> ドライブ マップ -> 新規 -> マップされたドライブ

重要な変更

アクション: 作成、更新、または置換

  • [ ユーザー名]、[ パスワード]、および [パスワードの確認 ] フィールドは無効になります。

                 パーティションの分割とマージに関するターゲット システム要件の判断フローチャート
                
アクション: 削除

  • 動作に変更はありません

回避策

認証にパスワードを使用する代わりに、Windows エクスプローラーを使用して共有アクセス許可を管理し、ユーザーに権限を割り当てることができます。 Active Directory オブジェクトを使用して、フォルダーへのアクセス許可を制御できます。

シナリオ 3: サービス

サービス・プリファレンスを使用すると、サービス・プロパティーを変更して、元のセキュリティー・コンテキスト以外のコンテキストで実行できます。 次の設定が影響を受けます。

  • コンピューターの構成 -> コントロール パネル 設定 -> サービス -> 新規 -> サービス

重要な変更

起動: 変更なし、自動、または手動

  • [ パスワード] フィールドと [パスワードの確認 ] フィールドは無効になります。
  • 管理者が使用できるのはビルトイン アカウントのみです。

                 ゲートウェイ R1 および R2 がトンネルで接続された IPsec サイト間トポロジ
                
スタートアップ: 無効

  • 動作に変更はありません

新規作成ダイアログ ボックス

  • このアカウントに非組み込みユーザーを使用しようとする管理者には、次の警告が表示されます。

                 CPassword 属性が非推奨になったことを示す警告ダイアログ
                
                
              

回避策

                
                
サービスは引き続きローカル システム アカウントとして実行できます。 サービスのアクセス許可は、次のマイクロソフト サポート技術情報に記載されているように変更できます。

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 名ではなく GPO GUID が含まれます。 Azure portal を使用するには、
または、RSAT をインストールした後にクライアントでスクリプトを再実行し、
グループ ポリシー モジュールを有効にしました。
または、GPO GUID を使用して、Get-GPO コマンドレットで GPO 名を取得することもできます。

.リンク
http://go.microsoft.com/fwlink/?LinkID=390507

#>
#----------------------------------------------------------------------------------------------------------------
# 入力パラメータ #--------------------------------------------------------------------------------------------------------------
param(
    [string]$Path = $(throw "-Path is required.") # GPP が配置されているディレクトリ パス。
 )
#---------------------------------------------------------------------------------------------------------------
$isGPModuleAvailable = $false
$impactedPrefs = { "Groups.xml", "ScheduledTasks.xml","Services.xml", "DataSources.xml", "Drives.xml" }
#----------------------------------------------------------------------------------------------------------------
# グループ olicy モジュールをインポートします #----------------------------------------------------------------------------------------------------------------
if (-not (Get-Module -name "GroupPolicy"))
{
   if (Get-Module -ListAvailable |
         Where-Object { $_.Name -ieq "GroupPolicy" })
    {
        $isGPModuleAvailable = $true
        Import-Module "GroupPolicy"
    }
    else
    {
        Write-Warning "PowerShell 用モジュールグループ ポリシーインポートできません。 したがって、GPO guid が報告されます。
                       このスクリプトを DC で実行して GPO 名を取得するか、Get-GPO コマンドレット (DC 上) を使用して GPO guid から GPO 名を取得します。」
    }
}
else
{
    $isGPModuleAvailable = $true
}
Function Enum-SettingsWithCpassword ( [string]$sysvolLocation )
{
    # GPMC ツリー パス
    $commonPath = " -> Preferences -> コントロール パネル Settings -> "
    $driveMapPath = " -> 環境設定 -> Windows 設定 -> "

    # SYVOL の場所にあるすべての xml ファイルを再帰的に取得する
    $impactedXmls = Get-ChildItem $sysvolLocation -recurse -filter "*.xml" |Where-Object { $impactedPrefs -cmatch $_.名前 }

    # 各 xml ファイルには複数の設定が含まれています。 各設定を反復処理して、それが可能かどうかチェックします
    # cPassword 属性を含んで表示します。
    foreach ( $impactedXmls $file )
    {
        $fileFullPath = $file。FullName

        # GPP カテゴリを設定します。 ファイルが SYSVOL のマシン フォルダにある場合
        # 設定は [コンピューターの設定] で定義され、それ以外の場合は
        # 設定はユーザー構成に
        if ( $fileFullPath.Contains("Machine") )
        {
            $category = "コンピューターの構成"
        }
        elseif ( $fileFullPath.Contains("User") )
        {
            $category = "ユーザーの構成"
        }
        else
        {
            $category = "Unknown"
        }
        # ファイルの内容を XML として取得する
        try
        {
            [xml]$xmlFile = get-content $fileFullPath -ErrorAction Continue
        }
        catch [Exception]{
            Write-Host $_.Exception.Message
        }
        if ($xmlFile -eq $null)
        {
            続行する
        }
        switch ( $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 = "スケジュール済みタスク"
            }
            データソース
            {
                $gppWithCpassword = $xmlFile.SelectNodes("DataSources/DataSource") |where-Object { [文字列]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
                $preferenceType = "データ ソース"
            }
            ドライブ
            {
                $gppWithCpassword = $xmlFile.SelectNodes("Drives/Drive") |where-Object { [文字列]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
                $preferenceType = "ドライブ マップ"
            }
            サービス
            {
                $gppWithCpassword = $xmlFile.SelectNodes("NTServices/NTService") |where-Object { [文字列]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
                $preferenceType = "サービス"
            }
            既定
            { # 次の項目の gppWithCpassword と preferenceType をクリアします。
                try
                {
                    Clear-Variable -Name gppWithCpassword -ErrorAction SilentlyContinue
                    Clear-Variable -Name preferenceType -ErrorAction SilentlyContinue
                }
                catch [Exception]{}
            }
        }
        if ($gppWithCpassword -ne $null)
        {
            # filePath から抽出された GUID から GPO 名を構築する
            $guidRegex = [regex]"\{(.*)\}"
            $match = $guidRegex.match($fileFullPath)
            if ($match.成功)
            {
               $gpoGuid = $match.groups[1].value
               $gpoName = $gpoGuid
            }
            else
            {
               $gpoName = "Unknown"
            }
            if($isGPModuleAvailable -eq $true)
            {
                try
                {
                    $gpoInfo = Get-GPO -Guid $gpoGuid -ErrorAction Continue
                    $gpoName = $gpoInfo.DisplayName
                }
                catch [Exception] {
                    Write-Host $_.Exception.Message
                }
            }
            # cPassword を含むプリファレンスの表示
            foreach ( $gppWithCpassword の $gpp )
            {
                if ( $preferenceType -eq "Drive Maps" )
                {
                    $prefLocation = $category + $driveMapPath + $preferenceType
                }
                else
                {
                    $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 が含まれているすべての設定を列挙します。 #-----------------------------------------------------------------------------------
if (Test-Path $Path )
{
    Enum-SettingsWithCpassword $Path
}
else
{
    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) を使用することをお勧めします。 これらの本体では、5 つの手順で任意の設定を削除できます。 手順は次のとおりです。

  1. GPMC で、CPassword データを含む設定を開きます。
  2. 設定に応じて、操作を [削除] または [無効] に変更します。
  3. [OK] をクリックして変更を保存します。
  4. 変更がクライアントに反映されるよう、1 つまたは 2 つのグループ ポリシー更新サイクルを待ちます。
  5. すべてのクライアントに変更が適用されたら、設定を削除します。
  6. 必要に応じて手順 1 から 5 を繰り返して、環境全体をクリーンアップします。 検出スクリプトから 0 個の結果が返されたら完了です。
ファイル ハッシュ情報
ファイル名 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