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 をリリースしました。 このセキュリティ情報の詳細については、以下を参照してください。

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

更新プログラムのインストールに関するヘルプ:
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 属性を必要とする新規または既存の基本設定への変更を保存しようとすると、同じダイアログ ボックスがトリガーされます。 [削除] アクションと [無効化] アクションのみが警告ダイアログ ボックスをトリガーしません。

             a0a4e39c-aa0a-936b-e086-593dfb035a8e
            
            
            
          

シナリオ 1: ローカル ユーザー管理

[ローカル ユーザー管理] 基本設定は、コンピューターで既知のパスワードを持つローカル管理者を作成するために頻繁に使用されます。 この機能は、グループ ポリシー設定でパスワードを格納する方法のため、セキュリティで保護されていません。 そのため、この機能は使用できなくなります。 次の設定が影響を受ける:

  • コンピューターの構成 -> コントロール パネル設定 ->ローカル ユーザーとグループ-> New-> ローカル ユーザー
  • ユーザー構成 -> コントロール パネル設定 -> ローカル ユーザーとグループ-> New-> ローカル ユーザー

重要な変更

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

  • [ユーザー名]、[パスワード]、[パスワードの確認] の各フィールドは無効になっています。
  • 管理者がパスワードを含む既存の基本設定に対する変更を開くか保存しようとすると、警告ダイアログ ボックスが表示されます。

                
                 41da12b9-527c-80ac-986c-82de889869ab
                
アクション: 更新

  • [ パスワード] フィールドと [ パスワードの確認] フィールドは無効になっています。
  • 管理者がパスワードを含む既存の基本設定に対する変更を開くか保存しようとすると、警告ダイアログ ボックスが表示されます。

                
                 183f7c58-79e3-db1b-72e9-3144fcefc0e4
                
アクション: 削除

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

回避策

以前にローカル管理者パスワードを設定するためのグループ ポリシー設定に依存していたユーザーには、CPassword の安全な代替手段として次のスクリプトが提供されます。 コンテンツをコピーして新しいWindows PowerShell ファイルに保存し、その で示されているようにスクリプトを実行します。[例] セクション。

Microsoft は、明示または黙示の保証なしで、説明のみを目的としてプログラミング例を提供しています。 これには、商品性または特定の目的への適合性に関する暗黙の保証が含まれますが、これらに限定されません。 この記事では、デモンストレーションされているプログラミング言語と、プロシージャの作成とデバッグに使用されるツールについてよく理解していることを前提としています。 Microsoft サポート エンジニアは、特定のプロシージャの機能の説明を支援できます。 ただし、これらの例を変更して、特定の要件を満たすために追加の機能を提供したりプロシージャを構築したりすることはできません。

関数 Invoke-PasswordRoll
{
<#
.概要

このスクリプトを使用して、リモート マシンのローカル アカウント パスワードをランダム パスワードに設定できます。 ユーザー名/パスワード/サーバーの組み合わせは、CSV ファイルに保存されます。
CSV ファイルに格納されているアカウント パスワードは、クリア テキスト アカウント パスワードがディスクに書き込まれないようにするために選択した管理者のパスワードを使用して暗号化できます。
暗号化されたパスワードは、このファイル内の別の関数を使用して復号化できます: ConvertTo-CleartextPassword

関数: Invoke-PasswordRoll
作成者: Microsoft
バージョン: 1.0

.説明

このスクリプトを使用して、リモート マシンのローカル アカウント パスワードをランダム パスワードに設定できます。 ユーザー名/パスワード/サーバーの組み合わせは、CSV ファイルに保存されます。
CSV ファイルに格納されているアカウント パスワードは、クリア テキスト アカウント パスワードがディスクに書き込まれないようにするために選択した管理者のパスワードを使用して暗号化できます。
暗号化されたパスワードは、このファイル内の別の関数を使用して復号化できます: ConvertTo-CleartextPassword

.PARAMETER ComputerName

PowerShell リモート処理を使用してスクリプトを実行するコンピューターの配列。

.PARAMETER LocalAccounts

パスワードを変更する必要があるローカル アカウントの配列。

.PARAMETER TsvFileName

ユーザー名/パスワード/サーバーの組み合わせを出力するファイル。

.PARAMETER EncryptionKey

TSV ファイルを暗号化するためのパスワード。 AES 暗号化を使用します。 TSV ファイルに格納されているパスワードのみが暗号化され、ユーザー名とサーバー名はクリア テキストになります。

.PARAMETER PasswordLength

ローカル アカウント用にランダムに生成されるパスワードの長さ。

.PARAMETER 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")]
    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 "Server: '$($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
                        Username = $LocalAdmin
                        Password = $Password
                        RealServerName = $env:computername
                    }

                    $ReturnData = New-Object PSObject -Property $Properties
                    Write-Output $ReturnData
                }
                catch
                {
                    Write-Error "サーバー上のユーザー:$($LocalAdmin) のパスワードの変更中にエラーが発生しました:$($TargettedServerName)"
                }
            }

            $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 = new-object System.Security.Encryptiony.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 ユーザー名、パスワード、TargettedServerName、RealServerName |Export-Csv -Append -Path $TsvFileName -NoTypeInformation
            }
            else
            {
                返された$nullエントリを #Filters する
                $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 によって暗号化されて格納されたパスワードの暗号化を解除できます。

.PARAMETER EncryptedPassword

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

.PARAMETER EncryptionKey

暗号化を行うために使用されるパスワード。

.例

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

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

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

        [Parameter(Mandatory=$true)]
        [String]
        $EncryptionKey
    )

    $Sha 256 = new-object System.Security.Encryptiony.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する接続が必要です。

6d3013b5-df8c-898a-0a22-33a829d3755f

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

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

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

重要な変更

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

  • [ユーザー名]、[パスワード]、[パスワードの確認] の各フィールドは無効になっています。

                 78e7a904-5d9c-8655-e4b6-2d7c8dc3c3f9
                
アクション: 削除

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

回避策

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

シナリオ 3: サービス

サービスの基本設定を使用して、元のセキュリティ コンテキスト以外のコンテキストで実行されるようにサービス プロパティを変更できます。 次の設定が影響を受ける:

  • コンピューターの構成 -> コントロール パネル設定 -> Services -> New -> Service

重要な変更

スタートアップ: 変更なし、自動、または手動

  • [ パスワード] フィールドと [ パスワードの確認 ] フィールドは無効になっています。
  • 管理者は組み込みのアカウントのみを使用できます。

                 bd4e263c-d8e6-e20f-b57a-9c1c5caca355
                
スタートアップ: 無効にする

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

[新しい] ダイアログ ボックス

  • このアカウントに組み込みユーザー以外のユーザーを使用しようとする管理者は、次の警告を受け取ります。

                 975f73f7-e950-ad09-d46b-b68ac9a5e4cb
                
                
              

回避策

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

256345 システム サービスのセキュリティを設定するグループ ポリシー設定を構成する方法

注 構成するサービスが存在しない場合は、サービスが実行されているコンピューターで設定を構成する必要があります。 

シナリオ 4: スケジュールされたタスクと即時タスク (上位レベル)

これらは、特定のセキュリティ コンテキストでスケジュールされたタスクを実行するために使用されます。 スケジュールされたタスクの資格情報を格納して、そのユーザーがログオンしていないときに任意のユーザーとして実行する機能は使用できなくなります。 次の設定が影響を受ける。 (一部のプラットフォームでは、"少なくとも Windows 7" が "Windows Vista 以降" に置き換えられます。

  • コンピューターの構成 -> コントロール パネル設定 ->スケジュールされたタスク ->新しい -> スケジュールされたタスク (少なくとも Windows 7)
  • コンピューターの構成 -> コントロール パネル設定 -> スケジュールされたタスク ->新しい -> イミディエイト タスク (少なくとも Windows 7)
  • ユーザー構成 -> コントロール パネル設定 -> スケジュールされたタスク ->新しい -> スケジュールされたタスク (少なくとも Windows 7)
  • ユーザー構成 -> コントロール パネル設定 -> スケジュールされたタスク ->新しい -> イミディエイト タスク (少なくとも Windows 7)

重要な変更

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

  • [ ユーザーがログオンしているかどうかに関係なく実行 する] オプションを選択すると、管理者に資格情報の入力を求めるダイアログ ボックスが表示されなくなります。
  • [パスワードを保存しない] チェック ボックスが無効になっています。 既定では、このボックスもオンになっています。

                 60ff2409-1c24-a2aa-466d-89afaadaf0a0
                
アクション: 削除

動作に変更はありません

回避策

"スケジュールされたタスク (少なくとも Windows 7)" タスクと "イミディエイト タスク (少なくとも Windows 7)" タスクの場合、管理者は、特定のユーザーがログオンしたときに特定のユーザー アカウントを使用できます。 または、ローカル リソースにアクセスできるのは、そのユーザーのみです。 これらのタスクは、ローカル サービスのコンテキストで引き続き実行できます。

            
シナリオ 5: スケジュールされたタスクと即時タスク (ダウンレベル) これは、特定のセキュリティ コンテキストでスケジュールされたタスクを実行するために使用される設定の下位レベルのバージョンです。 スケジュールされたタスクの資格情報を格納して、そのユーザーがログオンしていないときに任意のユーザーとして実行する機能は使用できなくなります。 次の設定が影響を受ける:

  • コンピューターの構成 -> コントロール パネル設定 ->スケジュールされたタスク ->新しい -> スケジュールされたタスク
  • コンピューターの構成 -> コントロール パネル設定 ->スケジュールされたタスク ->新しい -> イミディエイト タスク (Windows XP)
  • ユーザー構成 -> コントロール パネル設定 ->スケジュールされたタスク ->新しい -> スケジュールされたタスク
  • ユーザー構成 -> コントロール パネル設定 ->スケジュールされたタスク ->新しい -> イミディエイト タスク (Windows XP)

重要な変更

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

  • [チェックとして実行] ボックスが無効になっています。 そのため、[ ユーザー名]、[ パスワード]、[パスワード の確認 ] の各フィールドはすべて無効になります。

                 2baacb70-2e5a-e72d-7fd6-3e358608d76c
                
アクション: 削除

 動作に変更はありません

回避策

"スケジュールされたタスク" および "イミディエイト タスク (Windows XP)" 項目の場合、スケジュールされたタスクは、ローカル サービスで現在使用できるアクセス許可を使用して実行されます。 

シナリオ 6: データ ソース

[データ ソース] 基本設定は、データ ソースをコンピューターまたはユーザーに関連付けるために使用されます。 この機能では、パスワードで保護されているデータ ソースへのアクセスを有効にする資格情報が格納されなくなりました。 次の設定が影響を受ける:

  • コンピューターの構成 -> コントロール パネル設定 -> データ ソース
  • ユーザー構成 -> コントロール パネル設定 -> データ ソース

重要な変更点

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

  • [ユーザー名]、[パスワード]、[パスワードの確認] の各フィールドは無効になっています。

                 92beb16c-1b15-8903-a694-f471212d4a45
                
アクション: 削除

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

回避策

使用できる回避策はありません。 この設定では、パスワードで保護されているデータ ソースへのアクセスを許可する資格情報が格納されなくなりました。 

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 Backup Folder Path>

.ノート
PS モジュールグループ ポリシー見つからない場合、出力には GPO 名ではなく GPO GUID が含まれます。 を実行できます。
このスクリプトをドメイン コントローラーにインストールするか、RSAT をインストールした後にクライアントでスクリプトを再実行します。
グループ ポリシー モジュールを有効にしました。
または、GET-GPO コマンドレットを使用して GPO GUID を使用して 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
}
関数 Enum-SettingsWithCpassword ( [string]$sysvolLocation )
{
    # GPMC ツリー パス
    $commonPath = " -> 基本設定 -> コントロール パネル 設定 -> "
    $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 = "不明"
        }
        # ファイルコンテンツを 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("Groups/User") |where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
                $preferenceType = "ローカル ユーザー"
            }
            ScheduledTasks
            {
                $gppWithCpassword = $xmlFile.SelectNodes("ScheduledTasks/*") |where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
                $preferenceType = "スケジュールされたタスク"
            }
            データソース
            {
                $gppWithCpassword = $xmlFile.SelectNodes("DataSources/DataSource") |where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
                $preferenceType = "データ ソース"
            }
            ドライブ
            {
                $gppWithCpassword = $xmlFile.SelectNodes("Drive/Drive") |where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
                $preferenceType = "ドライブ マップ"
            }
            サービス
            {
                $gppWithCpassword = $xmlFile.SelectNodes("NTServices/NTService") |where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }
                $preferenceType = "Services"
            }
            既定
            { # clear gppWithCpassword and preferenceType for next item.
                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 = "不明"
            }
            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 "ドライブ マップ" )
                {
                    $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。Name) -passthru |
                       Add-Member -MemberType NoteProperty -name Path -value ($prefLocation)
                Write-Output $obj
            }
        } # end if $gppWithCpassword
    } # end foreach $file
} # end functions Enum-PoliciesWithCpassword
#-----------------------------------------------------------------------------------

Path が有効かどうかを確認します。 cpassword を含むすべての設定を列挙します。

#-----------------------------------------------------------------------------------
if (Test-Path $Path )
{
    Enum-SettingsWithCpassword $Path
}
else
{
    Write-Warning "そのようなディレクトリがありません: $Path"
}

使用例 (システム ドライブが C であると想定)

.\Get-SettingsWithCPassword.ps1 –path "C:\Windows\SYSVOL\domain" |Format-List
注 ドメインの代わりに 、パス のバックアップ GPO をターゲットにすることもできます。

検出スクリプトは、次のような一覧を生成します。

f9c1582e-a8d3-6f33-ffdd-7c143530043d

より長いリストの場合は、出力をファイルに保存することを検討してください。

.\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 6641B1A9C95A7E4F0D5A247B9F48887AC94550B7F1D7B1198D5BCBA92F7A753
Windows8.1-KB2928120-x86.msu DE84667EC79CBA2006892452660EB99580D27306 468EE4FA3A22DDE61D85FD3A9D0583F504105DF2F8256539051BC0B1EB713E9C
Windows8.1-KB2961899-x64.msu 10BAE807DB158978BCD5D8A7862BC6B3EF20038B EC26618E23D9278FC1F02CA1F13BB289E1C6C4E0C8DA5D22E1D9CDA0DA8AFF51
Windows8.1-KB2961899-x86.msu 230C64447CC6E4AB3AD7B4D4655B8D8CEFBFBE98 E3FAD567AB6CA616E42873D3623A777185BE061232B952938A8846A974FFA7AF