소개
Microsoft는 보안 공지 MS14-025를 릴리스했습니다. 이 보안 게시판에 대해 자세히 알아보려면 다음을 수행합니다.
개인 사용자:
https://www.microsoft.com/security/pc-security/updates.aspx 세부 정보 건너뛰기: 지금 Microsoft 업데이트 웹 사이트에서 가정용 컴퓨터 또는 노트북에 대한 업데이트를 다운로드합니다.
IT 전문가:
이 보안 업데이트에 대한 도움과 지원을 받는 방법
업데이트 설치 지원:
Microsoft Update 지원
IT 전문가용보안솔루션:
TechNet 보안문제해결및지원
바이러스 및 맬웨어로부터 Windows 기반 컴퓨터 Windows를 보호하는 데 도움이 됩니다.
바이러스 솔루션 및 보안 센터
지역별 지원 정보:
국가별 지원
추가 정보
알려진 문제 및 이 보안 업데이트에 대한 자세한 정보
다음 문서에는 개별 제품 버전과 관련된 이 보안 업데이트에 대한 자세한 정보가 포함되어 있습니다. 문서에는 알려진 문제 정보가 포함될 수 있습니다. 이 경우 알려진 문제가 각 문서 링크 아래에 나열됩니다.
-
MS14-025: 업데이트 2919355 설치된 시스템의 Windows 원격 서버 관리 도구 보안 업데이트에 대한 설명: 2014년 5월 13일
-
MS14-025: 업데이트 2919355 설치되지 않은 시스템의 Windows 원격 서버 관리 도구 보안 업데이트 설명: 2014년 5월 13일
그룹 정책 기본 설정
개요
일부 그룹 정책 기본 설정은 암호를 저장할 수 있습니다. 암호가 안전하지 않게 저장되었기 때문에 이 기능이 제거되고 있습니다. 이 문서에서는 사용자 인터페이스 변경 내용 및 사용 가능한 해결 방법을 설명합니다.
다음 그룹 정책 기본 설정은 더 이상 사용자 이름 및 암호를 저장할 수 없습니다.
- 드라이브 맵
- 로컬 사용자 및 그룹
- 예약된 작업
- 서비스
- 데이터 원본
이 동작은 이러한 기본 설정에 포함된 암호를 사용하는 사용자 환경의 기존 그룹 정책 개체(GPO)의 동작에 영향을 줍니다. 또한 이 기능을 사용하여 새 그룹 정책 기본 설정을 만들지 못하게 됩니다.
드라이브 맵, 로컬 사용자 및 그룹 및 서비스의 경우 Windows에서 더 안전한 다른 기능을 통해 비슷한 목표를 달성할 수 있습니다.
예약된 작업 및 데이터 원본의 경우 그룹 정책 기본 설정 암호의 안전하지 않은 기능을 통해 사용할 수 있었던 것과 동일한 목표를 달성할 수 없습니다.
시나리오
다음 그룹 정책 기본 설정은 이 변경의 영향을 받습니다. 각 기본 설정은 간략하게 그리고 더 자세히 설명합니다. 또한 동일한 작업을 수행할 수 있는 해결 방법이 제공됩니다.
| 영향을 받는 기본 설정 | 사용자에게 적용됩니다. |
컴퓨터에 적용 |
|---|---|---|
| 로컬 사용자 관리 | 예 | 예 |
| 매핑된 드라이브 | 예 | 아니요 |
| 서비스 | 아니요 | 예 |
| 예약된 작업(상위 수준) | 예 | 예 |
| 예약된 작업(하위 수준) | 예 | 예 |
| 즉각적인 작업(상위 수준) | 예 | 예 |
| 즉각적인 작업(하위 수준) | 예 | 예 |
| 데이터 원본 | 예 | 예 |
변경 요약
- 영향을 받는 모든 기본 설정의 암호 필드는 사용하지 않도록 설정됩니다. 관리자는 이러한 암호 필드를 사용하여 새 기본 설정을 만들 수 없습니다.
- 사용자 이름 필드는 일부 기본 설정에서 사용하지 않도록 설정됩니다.
- 암호를 포함하는 기존 기본 설정을 업데이트할 수 없습니다. 특정 기본 설정에 따라 삭제하거나 사용하지 않도록 설정할 수 있습니다.
- 기본 설정에 대해 삭제 및 사용 안 함 작업에 대한 동작이 변경되지 않았습니다.
- 관리자가 CPassword 특성이 포함된 기본 설정을 열면 관리자가 다음 경고 대화 상자를 수신하여 최근 사용 중단을 알릴 수 있습니다. CPassword 특성이 필요한 새 또는 기존 기본 설정에 대한 변경 내용을 저장하려고 하면 동일한 대화 상자가 트리거됩니다. 삭제 및 사용 안 함 작업만 경고 대화 상자를 트리거하지 않습니다.
시나리오 1: 로컬 사용자 관리
로컬 사용자 관리 기본 설정은 컴퓨터에 알려진 암호가 있는 로컬 관리자를 만드는 데 자주 사용됩니다. 이 기능은 그룹 정책 기본 설정에서 암호를 저장하는 방식 때문에 안전하지 않습니다. 따라서 이 기능은 더 이상 사용할 수 없습니다. 다음 기본 설정이 영향을 받습니다.
- 컴퓨터 구성 -> 제어판 설정 -> 로컬 사용자 및 그룹 -> 신규-> 로컬 사용자
- 사용자 구성 -> 제어판 설정 -> 로컬 사용자 및 그룹 -> 신규-> 로컬 사용자
중요한 변경 내용
작업: 만들기 또는 바꾸기
- 사용자 이름, 암호 및 암호 확인 필드를 사용할 수 없습니다.
- 경고 대화 상자는 관리자가 열리거나 암호를 포함하는 기존 기본 설정에 대한 변경 내용을 저장하려고 할 때 나타납니다.
작업: 업데이트
- 암호 및 암호 확인 필드를 사용할 수 없습니다.
- 경고 대화 상자는 관리자가 열리거나 암호를 포함하는 기존 기본 설정에 대한 변경 내용을 저장하려고 할 때 나타납니다.
작업: 삭제
- 동작이 변경되지 않음
해결 방법
이전에 로컬 관리자 암호를 설정하기 위한 그룹 정책 기본 설정에 의존했던 경우 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)]
[문자열]
$TsvFileName
[Parameter(ParameterSetName="Encryption", Mandatory=$true)]
[문자열]
$EncryptionKey
[Parameter()]
[ValidateRange(20,120)]
[Int]
$PasswordLength = 20,
[Parameter(ParameterSetName="NoEncryption", Mandatory=$true)]
[스위치]
$NoEncryption
)
필요한 .net 클래스 #Load
Add-Type -AssemblyName "System.Web" -ErrorAction 중지
#This ComputerName에 지정된 모든 컴퓨터에서 실행되는 scriptblock입니다.
$RemoteRollScript = {
Param(
[Parameter(Mandatory=$true, Position=1)]
[String[]]
$Passwords
[Parameter(Mandatory=$true, Position=2)]
[String[]]
$LocalAccounts
#This 여기에 있으므로 스크립트가 연결된 서버 이름을 기록할 수 있고 DNS 레코드가 엉망이 되는 경우도 있습니다.
[Parameter(Mandatory=$true, Position=3)]
[문자열]
$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)
{
없습니다
{
$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
}
잡을
{
Write-Error "server:$($TargettedServerName)에서 사용자:$($LocalAdmin)의 암호를 변경하는 동안 오류가 발생했습니다."
}
}
$PasswordIndex++
}
}
원격 컴퓨터가 아닌 이 스크립트를 실행하는 클라이언트에서 암호를 #Generate. System.Web.Security는 .NET 클라이언트 프로필에서 사용할 수 없습니다. 이 호출 만들기
스크립트를 실행하는 클라이언트의 #은 1개의 컴퓨터만 전체 .NET 런타임을 설치해야 합니다(암호가 롤된 모든 시스템과 반대).
함수 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")
{
없습니다
{
$Sha 256 = new-object System.Security.Cryptography.SHA256CryptoServiceProvider
$SecureStringKey = $Sha 256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey))
}
잡을
{
Write-Error "TSV 암호화 키 만들기 오류" -ErrorAction 중지
}
}
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 사용자 이름, 암호, 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 76492d1116743f0423413b16050a5345MgB8AGcAZgBaAHUAaQBwADAAQgB2AGgAcABNADMASwBaAFoAQQBzADEAeABjAEEAPQA9AHwAZgBiAGYAMAA1ADYANgA2ADEANwBkADQAZgAwADMANABjAGUAZQAxAGIAMABiADkANgBiADkAMAA4ADcANwBhADMAYQA3AGYAOABkADcAMQA5ADQAMWBmAGYANQBhADEAYQBjADcANABkADIANgBhADUANwBlADgAMAAyADQANGA1ADIAOQA0AGMAZQA0ADEAMwAzADcANQAyADUANAAzADYAMAA1AGEANgAzADEAMQA5ADAAYwBmADQAZAA2AGQA"
TSV 파일에 저장된 암호화된 암호를 해독합니다.
#>
Param(
[Parameter(Mandatory=$true)]
[문자열]
$EncryptedPassword
[Parameter(Mandatory=$true)]
[문자열]
$EncryptionKey
)
$Sha 256 = new-object 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 Explorer 사용하여 공유 권한을 관리하고 사용자에게 권한을 할당할 수 있습니다. Active Directory 개체를 사용하여 폴더에 대한 권한을 제어할 수 있습니다.
시나리오 3: 서비스
서비스 기본 설정을 사용하여 원래 보안 컨텍스트가 아닌 컨텍스트에서 실행되는 방식으로 서비스 속성을 변경할 수 있습니다. 다음 기본 설정이 영향을 받습니다.
- 컴퓨터 구성 -> 제어판 설정 -> 서비스 - 새로 만들기 ->> 서비스
중요한 변경 내용
시작: 변경 없음, 자동 또는 수동
- 암호 및 암호 확인 필드를 사용할 수 없습니다.
- 관리자는 기본 제공 계정만 사용할 수 있습니다.
시작: 사용 안 함
- 동작이 변경되지 않음
새 대화 상자
- 이 계정에 기본 제공이 아닌 사용자를 사용하려고 하는 관리자는 다음 경고를 받습니다.
해결 방법
서비스는 여전히 로컬 시스템 계정으로 실행할 수 있습니다. 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 기본 설정을 찾는 데 도움이 됩니다.
. 설명
이 스크립트는 DC 또는 RSAT와 함께 설치된 클라이언트 컴퓨터에서 실행하여 포함된 모든 기본 설정을 인쇄해야 합니다.
이 기본 설정이 정의된 GPO, 기본 설정 이름, GPEdit 경로와 같은 정보가 포함된 암호입니다.
영향을 받는 기본 설정 목록이 있으면 그룹 정책 관리 콘솔의 편집기를 사용하여 이러한 기본 설정을 제거할 수 있습니다.
. 구문
Get-SettingsWithCPassword.ps1 [-Path <String>]
. 예제
Get-SettingsWithCPassword.ps1 -Path %WinDir%\SYSVOL\domain
Get-SettingsWithCPassword.ps1 -Path <GPO Backup 폴더 경로>
. 노트
그룹 정책 PS 모듈을 찾을 수 없는 경우 출력에는 GPO 이름 대신 GPO GUID가 포함됩니다. 둘 중 하나를 실행할 수 있습니다.
도메인 컨트롤러에서 이 스크립트를 실행하거나 RSAT 및 를 설치한 후 클라이언트에서 스크립트를 다시 실행합니다.
그룹 정책 모듈을 사용하도록 설정했습니다.
또는 GET-GPO cmdlet을 사용하여 GPO GUID를 사용하여 GPO 이름을 가져올 수 있습니다.
. 링크
http://go.microsoft.com/fwlink/?LinkID=390507
#>
#----------------------------------------------------------------------------------------------------------------
입력 매개 변수
#--------------------------------------------------------------------------------------------------------------
param(
[string]$Path = $(throw "-Path가 필요합니다.") # GPP가 있는 디렉터리 경로입니다.
)
#---------------------------------------------------------------------------------------------------------------
$isGPModuleAvailable = $false
$impactedPrefs = { "Groups.xml", "ScheduledTasks.xml","Services.xml", "DataSources.xml", "Drives.xml" }
#----------------------------------------------------------------------------------------------------------------
사용 가능한 경우 그룹 올리기 모듈 가져오기
#----------------------------------------------------------------------------------------------------------------
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 이름을 가져오거나 DC의 Get-GPO cmdlet을 사용하여 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의 Machine 폴더 아래에 있는 경우
# 설정은 컴퓨터 구성에서 정의됩니다. 그렇지 않으면
# 설정은 사용자 구성에 대한 입니다.
if ( $fileFullPath.Contains("Machine") )
{
$category = "컴퓨터 구성"
}
elseif( $fileFullPath.Contains("User") )
{
$category = "사용자 구성"
}
else
{
$category = "알 수 없음"
}
# XML로 파일 콘텐츠 가져오기
없습니다
{
[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 = "예약된 작업"
}
DataSources
{
$gppWithCpassword = $xmlFile.SelectNodes("DataSources/DataSource") | where-Object { [String]::IsNullOrEmpty($_. Properties.cpassword) -eq $false }
$preferenceType = "데이터 원본"
}
드라이브
{
$gppWithCpassword = $xmlFile.SelectNodes("드라이브/드라이브") | where-Object { [String]::IsNullOrEmpty($_. Properties.cpassword) -eq $false }
$preferenceType = "드라이브 맵"
}
서비스
{
$gppWithCpassword = $xmlFile.SelectNodes("NTServices/NTService") | where-Object { [String]::IsNullOrEmpty($_. Properties.cpassword) -eq $false }
$preferenceType = "서비스"
}
기본값
{ # 지우기 gppWithCpassword 및 preferenceType 다음 항목에 대 한.
없습니다
{
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)
{
없습니다
{
$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. Name) -passthru |
Add-Member -MemberType NoteProperty -name Path -value($prefLocation)
Write-Output $obj
}
} # end if $gppWithCpassword
} # end foreach $file
} # end 함수 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단계에서 기본 설정을 제거할 수 있습니다. 그러려면 다음 단계를 따르세요.
- GPMC에서 CPassword 데이터가 포함된 기본 설정을 엽니다.
- 기본 설정에 해당하는 경우 작업을 삭제 또는 사용 안 함으로 변경합니다.
- 확인을 클릭하여 변경 내용을 저장합니다.
- 변경 내용이 클라이언트에 전파되도록 하나 또는 두 그룹 정책 새로 고침 주기를 기다립니다.
- 모든 클라이언트에 변경 내용이 적용되면 기본 설정을 삭제합니다.
- 필요에 따라 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 |