ВВЕДЕНИЕ
Корпорация Майкрософт выпустила бюллетень по безопасности MS14-025. Дополнительные сведения об этом бюллетене безопасности:
-
Версия для пользователей домашних компьютеров:
http://www.microsoft.com/ru-ru/security/pc-security/updates.aspxПропустить подробности: Скачайте обновления для домашнего компьютера или ноутбука с веб-сайта Центра обновления Майкрософт:
-
Версия для ИТ-специалистов:
https://technet.microsoft.com/ru-ru/library/security/ms14-025
Справка и поддержка по этому обновлению для системы безопасности
Помощь в установке обновлений: поддержка Центра обновления Майкрософт
Помощь по вопросам безопасности для ИТ-специалистов: устранение неполадок и поддержка по вопросам безопасности на сайте TechNet
Защита компьютера под управлением Windows от вирусов и вредоносных программ: центр обеспечения безопасности и защиты от вирусов
Локальная поддержка в вашей стране: Международная поддержка
Дополнительная информация
Известные проблемы и дополнительные сведения, связанные с этим обновлением для системы безопасности
В указанных ниже статьях содержатся дополнительные сведения об этом обновлении для системы безопасности, предназначенные для отдельных версий продуктов, а также сведения об известных проблемах, которые указаны после ссылки на статью.
-
2928120
MS14-025: описание обновления для системы безопасности средств удаленного администрирования сервера для систем с установленным обновлением 2919355 от 13 мая 2014 г. (может быть на английском языке) -
2961899
MS14-025: описание обновления для системы безопасности средств удаленного администрирования сервера для систем без обновления 2919355 от 13 мая 2014 г. (может быть на английском языке)
Настройки групповой политики
Обзор
Иногда в настройках групповой политики может храниться пароль. Эта возможность теперь отключена, так как пароль хранился в незащищенном месте. В этой статье описаны изменения интерфейса пользователя, а также все возможные обходные пути.
Настройки групповой политики, в которых больше невозможно хранить имена и пароли пользователей:
-
Сопоставления дисков
-
Локальные пользователи и группы
-
Назначенные задачи
-
Службы
-
Источники данных
Это повлияет на поведение всех существующих объектов групповой политики вашей среды, использующих пароли, которые содержатся в этих настройках. Кроме того, это предотвратит создание настроек групповой политики с помощью этой возможности.
Для настроек "Сопоставление дисков", "Локальные пользователи и группы" и "Службы" эти задачи можно выполнить с помощью других, более защищенных возможностей Windows.
Для настроек "Назначенные задачи" и "Источники данных" невозможно выполнить задачи, которые ранее выполнялись с помощью незащищенной функции паролей настроек групповой политики.
Сценарии
Это изменение затрагивает перечисленные ниже настройки группой политики. Приведены краткое и подробное описание всех настроек. Кроме того, предложены обходные пути, позволяющие выполнить такие же задачи.
Затронутая настройка |
Применимо к пользователю |
Применимо к компьютеру |
Управление локальным пользователем |
Да |
Да |
Сопоставленные диски |
Да |
Нет |
Службы |
Нет |
Да |
Назначенные задачи (верхнего уровня) |
Да |
Да |
Назначенные задачи (нижнего уровня) |
Да |
Да |
Немедленные задачи (верхнего уровня) |
Да |
Да |
Немедленные задачи (нижнего уровня) |
Да |
Да |
Источники данных |
Да |
Да |
Сводка изменений
-
Поля паролей отключены во всех затронутых настройках. Администраторы не могут создавать настройки с помощью этих полей паролей.
-
Поле имени пользователя отключено в некоторых настройках.
-
Невозможно обновить существующие настройки, содержащие пароль. Их можно только удалить или отключить — это зависит от конкретной настройки.
-
Поведение действий "Удалить" и "Отключить" для этих настроек не изменено.
-
Когда администратор открывает какую-либо настройку, содержащую атрибут CPassword, появляется приведенное ниже диалоговое окно предупреждения, уведомляющее о том, что эту функцию использовать не рекомендуется. Попытка сохранить изменения в новые или существующие настройки, для которых необходимо использовать атрибут CPassword, приведет к появлению такого же окна. Диалоговые окна предупреждения не появляются только после выполнения действий "Удалить" и "Отключить".
Сценарий 1. Управление локальным пользователем
Настройка "Управление локальным пользователем" обычно используется для создания локальных администраторов, использующих известные пароли на компьютере. Учитывая способ хранения паролей в настройках групповой политики, эта функция не защищена. Поэтому эта возможность больше не доступна. Это касается следующих настроек:
-
Конфигурация компьютера -> Параметры панели управления -> Локальные пользователи и группы -> Создать -> Локальный пользователь
-
Конфигурация пользователя -> Параметры панели управления -> Локальные пользователи и группы -> Создать-> Локальный пользователь
Важные изменения
Действие: "Создать" или "Заменить"
-
Поля Имя пользователя, Пароль и Подтвердить пароль отключены.
-
Когда администратор открывает существующие настройки, содержащие пароль, или пытается сохранить какие-либо их изменения, появляется диалоговое окно предупреждения.
Действие: "Обновить"
-
Поля Пароль и Подтвердить пароль отключены.
-
Когда администратор открывает существующие настройки, содержащие пароль, или пытается сохранить какие-либо их изменения, появляется диалоговое окно предупреждения.
Действие: "Удалить"
-
Поведение не изменено
Обходные пути
Тем, кто ранее использовал настройку групповой политики для настройки паролей локальных администраторов, предлагается приведенный ниже сценарий как альтернатива атрибуту CPassword. Скопируйте содержимое и сохраните его в новый файл Windows PowerShell, а затем запустите сценарий, как описано в его разделе .EXAMPLE.
Корпорация Майкрософт приводит примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их пригодности для применения в пользовательских приложениях. Примеры в данной статье рассчитаны на пользователя, имеющего достаточный уровень знаний соответствующего языка программирования и необходимых средств разработки и отладки. Специалисты служб технической поддержки Майкрософт могут объяснить функции определенных процедур. Однако они не будут изменить эти примеры для добавления функций или создания процедур с соответствии с вашими требованиями.
function Invoke-PasswordRoll
{
<#
.SYNOPSIS
Этот сценарий можно использовать для установки случайных паролей для локальных учетных записей на удаленных машинах. Сочетание "имя пользователя/пароль/имя сервера" будет сохранено в CSV-файле. Пароли учетных записей, хранящиеся в CSV-файле, можно зашифровать с помощью пароля администратора, убедившись, что открытые пароли учетных записей не записаны на диск. Зашифрованные пароли можно расшифровать с помощью другой функции из этого файла: ConvertTo-CleartextPassword
Function: Invoke-PasswordRoll
Author: Microsoft
Version: 1.0
.DESCRIPTION
Этот сценарий можно использовать для установки случайных паролей для локальных учетных записей на удаленных машинах. Сочетание "имя пользователя/пароль/имя сервера" будет сохранено в CSV-файле. Пароли учетных записей, хранящиеся в CSV-файле, можно зашифровать с помощью пароля администратора, убедившись, что открытые пароли учетных записей не записаны на диск. Зашифрованные пароли можно расшифровать с помощью другой функции из этого файла: ConvertTo-CleartextPassword
.PARAMETER ComputerName
Массив компьютеров, на которых будет выполняться сценарий с помощью удаленного взаимодействия PowerShell.
.PARAMETER LocalAccounts
Массив локальных учетных записей, пароли которых необходимо изменить.
.PARAMETER TsvFileName
Файл, в который будут сохранены полученные сочетания "имя пользователя/пароль/имя сервера".
.PARAMETER EncryptionKey
Пароль, с помощью которого будет зашифрован TSV-файл. Используется шифрование AES. Будут зашифрованы только пароли, хранящиеся в TSV-файле; имена пользователя и сервера будут открытыми.
.PARAMETER PasswordLength
Длина паролей, которые будут созданы случайным образом для локальных учетных записей.
.PARAMETER NoEncryption
Не шифруйте пароли учетных записей, хранящиеся в TSV-файле. Это приведет к записи открытых паролей на диск.
.EXAMPLE
. .\Invoke-PasswordRoll.ps1 #Загружает функцию в этой файл сценария
Invoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator","CustomLocalAdmin") -TsvFileName "LocalAdminCredentials.tsv" -EncryptionKey "Password1"
Подключается ко всем компьютерам, указанным в файле computerlist.txt. Если "администратор" локальной учетной записи и/или CustomLocalAdmin существуют в системе, пароль изменяется на случайно созданный 20-символьный (по умолчанию). Сочетания "имя пользователя/пароль/имя сервера" сохраняются в файле LocalAdminCredentials.tsv, а пароли учетных записей шифруются по протоколу AES с помощью пароля Password1.
.EXAMPLE
. .\Invoke-PasswordRoll.ps1 #Загружает функцию в этой файл сценария
Invoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator") -TsvFileName "LocalAdminCredentials.tsv" -NoEncryption -PasswordLength 40
Подключается ко всем компьютерам, указанным в файле computerlist.txt. Если "администратор" локальной учетной записи существует в системе, его пароль изменяется на случайно созданный 40-символьный. Сочетания "имя пользователя/пароль/имя сервера" сохраняются в файле LocalAdminCredentials.tsv в незашифрованном виде.
.NOTES
Требования: –установленная оболочка PowerShell версии 2 или более поздней –удаленное взаимодействие PowerShell должно быть включено во всех системах, в которых будет запущен сценарий
Поведение сценария: –если локальная учетная запись существует в системе, но не указана в параметре LocalAccounts, сценарий вызовет окно предупреждения, чтобы уведомить о существовании локальной учетной записи. При этом выполнение сценария будет продолжено. –если локальная учетная запись указана в параметре LocalAccounts, но не существует на компьютере, ничего не произойдет (учетная запись НЕ будет создана). –функцию ConvertTo-CleartextPassword, содержащуюся в этом файле, можно использовать для шифрования паролей, которые хранятся в зашифрованном виде в TSV-файле. –если к серверу, указанному в параметре ComputerName, не удастся подключиться, PowerShell отобразит сообщение об ошибке. –корпорация Майкрософт рекомендует компаниям регулярно свертывать пароли всех локальных и доменных учетных записей.
#>
[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)]
[Switch]
$NoEncryption
)
#Загружает все необходимые классы.net
Add-Type -AssemblyName "System.Web" -ErrorAction Stop
#Параметр ScriptBlock, который будет запущен на каждом компьютере, указанном в параметре ComputerName
$RemoteRollScript = {
Param(
[Parameter(Mandatory=$true, Position=1)]
[String[]]
$Passwords,
[Parameter(Mandatory=$true, Position=2)]
[String[]]
$LocalAccounts,
#Он существует, поэтому можно записать имя сервера, к которому был подключен сценарий. Это может быть полезно, так как иногда легко запутаться в записях DNS.
[Parameter(Mandatory=$true, Position=3)]
[String]
$TargettedServerName
)
$LocalUsers = Get-WmiObject Win32_UserAccount -Filter "LocalAccount=true" | Foreach {$_.Name}
#Проверьте, существуют ли на компьютере учетные записи локальных пользователей, пароли которых не будут свернуты с помощью этого сценария
foreach ($User in $LocalUsers)
{
if ($LocalAccounts -inotcontains $User)
{
Write-Warning "Server: '$($TargettedServerName)' has a local account '$($User)' whos password is NOT being changed by this script"
}
}
#Измените пароль для всех указанных локальных учетных записей, существующих на этом сервере
$PasswordIndex = 0
foreach ($LocalAdmin in $LocalAccounts)
{
$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 "Error changing password for user:$($LocalAdmin) on server:$($TargettedServerName)"
}
}
$PasswordIndex++
}
}
#Создавайте пароль на клиентском компьютере, на котором выполняется сценарий, а не на удаленной машине. Параметр System.Web.Security недоступен в профиле .NET Client. Совершение этого вызова # на клиентском компьютере, на котором выполняется сценарий, позволяет использовать полноценную установленную среду выполнения .NET только на одном компьютере (в отличие от систем со свернутыми паролями).
function Create-RandomPassword
{
Param(
[Parameter(Mandatory=$true)]
[ValidateRange(20,120)]
[Int]
$PasswordLength
)
$Password = [System.Web.Security.Membership]::GeneratePassword($PasswordLength, $PasswordLength / 4)
#Это не должно завершиться неудачей, но я всегда проверяю работоспособность на этом этапе
if ($Password.Length -ne $PasswordLength)
{
throw new Exception("Password returned by GeneratePassword is not the same length as required. Required length: $($PasswordLength). Generated length: $($Password.Length)")
}
return $Password
}
#Основная функция — создание пароля и передача его на машины для изменения паролей указанных локальных учетных записей
if ($PsCmdlet.ParameterSetName -ieq "Encryption")
{
try
{
$Sha256 = new-object System.Security.Cryptography.SHA256CryptoServiceProvider
$SecureStringKey = $Sha256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey))
}
catch
{
Write-Error "Error creating TSV encryption key" -ErrorAction Stop
}
}
foreach ($Computer in $ComputerName)
{
#Необходимо создать по одному паролю для каждой учетной записи, которая может быть изменена
$Passwords = @()
for ($i = 0; $i -lt $LocalAccounts.Length; $i++)
{
$Passwords += Create-RandomPassword -PasswordLength $PasswordLength
}
Write-Output "Connecting to server '$($Computer)' to roll specified local admin passwords"
$Result = Invoke-Command -ScriptBlock $RemoteRollScript -ArgumentList @($Passwords, $LocalAccounts, $Computer) -ComputerName $Computer
#Если используется шифрование, зашифруйте пароль с помощью ключа, предоставленного пользователем, прежде чем записывать его на диск
if ($Result -ne $null)
{
if ($PsCmdlet.ParameterSetName -ieq "NoEncryption")
{
$Result | Select-Object Username,Password,TargettedServerName,RealServerName | Export-Csv -Append -Path $TsvFileName -NoTypeInformation
}
else
{
#Отфильтровывает возвращенные записи $null
$Result = $Result | Select-Object Username,Password,TargettedServerName,RealServerName
foreach ($Record in $Result)
{
$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
}
}
}
}
}function ConvertTo-CleartextPassword
{
<#
.SYNOPSIS
Эту функцию можно использовать для расшифровки паролей, которые были сохранены в зашифрованном виде с помощью функции Invoke-PasswordRoll.
Function: ConvertTo-CleartextPassword
Author: Microsoft
Version: 1.0
.DESCRIPTION
Эту функцию можно использовать для расшифровки паролей, которые были сохранены в зашифрованном виде с помощью функции Invoke-PasswordRoll.
.PARAMETER EncryptedPassword
Зашифрованный пароль, сохраненный в TSV-файле.
.PARAMETER EncryptionKey
Пароль, используемый для шифрования.
.EXAMPLE. .\Invoke-PasswordRoll.ps1 #Загружает функцию в этой файл сценария
ConvertTo-CleartextPassword -EncryptionKey "Password1" -EncryptedPassword 76492d1116743f0423413b16050a5345MgB8AGcAZgBaAHUAaQBwADAAQgB2AGgAcABNADMASwBaAFoAQQBzADEAeABjAEEAPQA9AHwAZgBiAGYAMAA1ADYANgA2ADEANwBkADQAZgAwADMANABjAGUAZQAxAGIAMABiADkANgBiADkAMAA4ADcANwBhADMAYQA3AGYAOABkADcAMQA5ADQAMwBmAGYANQBhADEAYQBjADcANABkADIANgBhADUANwBlADgAMAAyADQANgA1ADIAOQA0AGMAZQA0ADEAMwAzADcANQAyADUANAAzADYAMAA1AGEANgAzADEAMQA5ADAAYwBmADQAZAA2AGQA"
Расшифровывает зашифрованный пароль, сохраненный в TSV-файле.
#>
Param(
[Parameter(Mandatory=$true)]
[String]
$EncryptedPassword,
[Parameter(Mandatory=$true)]
[String]
$EncryptionKey
)
$Sha256 = new-object System.Security.Cryptography.SHA256CryptoServiceProvider
$SecureStringKey = $Sha256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey))
[SecureString]$SecureStringPassword = ConvertTo-SecureString -String $EncryptedPassword -Key $SecureStringKey
Write-Output ([System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($SecureStringPassword)))
} Администраторы могут добавлять учетные записи локального администратора на компьютеры путем создания группы Active Directory и добавления ее в группу локальных администраторов в разделе "Настройки групповой политики" -> "Локальная группа". Это действие не кеширует учетные данные. Соответствующее диалоговое окно приведено ниже. Этот обходной путь требует подключения к доменным службам Active Directory, если пользователь входит в систему с помощью этих учетных данных.
Сценарий 2. Сопоставленные диски
Администраторы используют сопоставленные диски для выделения пользователям расположений в сети. Функция защиты паролем используется для обеспечения санкционированного доступа к диску. Это касается следующих настроек:
-
Конфигурация пользователя -> Параметры Windows -> Сопоставления дисков -> Создать -> Сопоставленный диск
Важные изменения
Действие: "Создать", "Обновить" или "Заменить"
-
Поля Имя пользователя, Пароль и Подтвердить пароль отключены.
Действие: "Удалить"
-
Поведение не изменено
Обходные пути
Вместо парольной проверки подлинности можно использовать проводник для управления разрешениями для общих ресурсов и назначения прав пользователям. С помощью объектов Active Directory можно контролировать разрешения для папки.
Сценарий 3. Службы
Предпочтения "Службы" можно использовать для изменения свойств служб с тем, чтобы запускать их в контексте, отличном от их исходного контекста безопасности. Это касается следующих настроек:
-
Конфигурация компьютера -> Параметры панели управления -> Службы -> Создать -> Служба
Важные изменения
Запуск: "Без изменений", "Автоматически" или "Вручную"
-
Поля Пароль и Подтвердить пароль отключены.
-
Администратор может использовать только встроенные учетные записи.
Запуск: "Отключить"
-
Поведение не изменено
Новое диалоговое окно
-
При попытке использовать для этой учетной записи пользователей, отличных от встроенных, появляется следующее предупреждение:
Обходные пути
Службы можно все равно запускать с помощью локальных системных учетных записей. Разрешения для служб можно изменять, как описано в следующей статье базы знаний Майкрософт:
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
Сценарий Windows PowerShell, описанный в этой статье базы знаний Майкрософт, позволяет определить, содержит ли домен настройки групповой политики, которые могут использовать атрибут CPassword. Если элемент CPassword XML будет найден в определенном предпочтении, он отобразится в приведенном ниже списке.
Обнаружение настроек CPassword
Этот сценарий необходимо запускать в локальном каталоге контроллера домена, который требуется очистить. Скопируйте содержимое и сохраните его в новый файл Windows PowerShell, определите свой системный диск, а затем запустите сценарий, как описано ниже.
<#
.SYNOPSIS
Объекты групповой политики в вашем домене могут содержать настройки, которые хранят пароли для различных задач, например:
1. Источники данных 2. Сопоставление дисков 3. Локальные пользователи 4. Назначенные задачи (Windows XP и выше) 5. Службы
Эти пароли хранятся в томе SYSVOL как часть настроек групповой политики. Их безопасность не может быть гарантирована из-за слабого шифрования (32-битное шифрование AES). Таким образом, рекомендуется не развертывать такие настройки в своей среде домена и удалить какие-либо существующие настройки. Этот сценарий призван помочь администраторам в поиске настроек групповой политики в томе SYSVOL их доменов, содержащих пароли.
.DESCRIPTION
Этот сценарий необходимо запускать в контроллере домена или на клиентском компьютере с установленными средствами удаленного администрирования сервера для печати всех настроек, содержащих пароль с такими сведениями, как "Объект групповой политики", "Имя настройки", а также "Путь GPEdit", по которому определяется это предпочтение.
Получив список затронутых настроек, можно удалить их с помощью редактора в консоли управления групповой политикой.
.SYNTAXGet-SettingsWithCPassword.ps1 [-Path <String>] .EXAMPLEGet-SettingsWithCPassword.ps1 -Path %WinDir%\SYSVOL\domain
Get-SettingsWithCPassword.ps1 -Path <GPO Backup Folder Path>
.NOTES
Если модуль настроек групповой политики не обнаружен, выходные данные будут содержать идентификаторы GUID объекта групповой политики, а не их имена. Можно запустить этот сценарий в контроллере домена или перезапустить его на клиентском компьютере, установив средства удаленного администрирования сервера и включив модуль групповой политики. Кроме того, идентификаторы GUID объекта групповой политики можно использовать для получения имен этих объектов с помощью командлета Get-GPO.
.LINK
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" }
#---------------------------------------------------------------------------------------------------------------- # импортировать модуль групповой политики (если доступен) #----------------------------------------------------------------------------------------------------------------
if (-not (Get-Module -name "GroupPolicy"))
{
if (Get-Module -ListAvailable |
Where-Object { $_.Name -ieq "GroupPolicy" })
{
$isGPModuleAvailable = $true
Import-Module "GroupPolicy"
}
else
{
Write-Warning "Unable to import Group Policy module for PowerShell. Therefore, GPO guids will be reported.
Run this script on DC to obtain the GPO names, or use the Get-GPO cmdlet (on DC) to obtain the GPO name from GPO guid."
}
}
else
{
$isGPModuleAvailable = $true
}
Function Enum-SettingsWithCpassword ( [string]$sysvolLocation )
{
# Пути дерева GPMC
$commonPath = " -> Preferences -> Control Panel Settings -> "
$driveMapPath = " -> Preferences -> Windows Settings -> "
# Рекурсивно извлекать все XML-файлы в расположении SYVOL
$impactedXmls = Get-ChildItem $sysvolLocation -Recurse -Filter "*.xml" | Where-Object { $impactedPrefs -cmatch $_.Name }
# Каждый XML-файл содержит несколько настроек. Проверить, #содержат ли все настройки атрибут cpassword, и отобразить его.
foreach ( $file in $impactedXmls )
{
$fileFullPath = $file.FullName
# Установить категорию GPP. Если файл расположен в папке Machine тома SYSVOL, # параметр определяется конфигурацией компьютера. В противном случае # параметр определяется настройками пользователя
if ( $fileFullPath.Contains("Machine") )
{
$category = "Computer Configuration"
}
elseif ( $fileFullPath.Contains("User") )
{
$category = "User Configuration"
}
else
{
$category = "Unknown"
}
# Получить содержимое файла в формате XML
try
{
[xml]$xmlFile = get-content $fileFullPath -ErrorAction Continue
}
catch [Exception]{
Write-Host $_.Exception.Message
}
if ($xmlFile -eq $null)
{
continue
}
switch ( $file.BaseName )
{
Groups
{
$gppWithCpassword = $xmlFile.SelectNodes("Groups/User") | where-Object { $_.Properties.cpassword -ne $null}
$preferenceType = "Local Users"
}
ScheduledTasks
{
$gppWithCpassword = $xmlFile.SelectNodes("ScheduledTasks/*") | where-Object { $_.Properties.cpassword -ne $null}
$preferenceType = "Scheduled Tasks"
}
DataSources
{
$gppWithCpassword = $xmlFile.SelectNodes("DataSources/DataSource") | where-Object { $_.Properties.cpassword -ne $null}
$preferenceType = "Data sources"
}
Drives
{
$gppWithCpassword = $xmlFile.SelectNodes("Drives/Drive") | where-Object { $_.Properties.cpassword -ne $null}
$preferenceType = "Drive Maps"
}
Services
{
$gppWithCpassword = $xmlFile.SelectNodes("NTServices/NTService") | where-Object { $_.Properties.cpassword -ne $null}
$preferenceType = "Services"
}
default
{ # очистить gppWithCpassword и preferenceType для следующего элемента.
try
{
Clear-Variable -Name gppWithCpassword -ErrorAction SilentlyContinue
Clear-Variable -Name preferenceType -ErrorAction SilentlyContinue
}
catch [Exception]{}
}
}if ($gppWithCpassword -ne $null)
{
# Создать имя объекта групповой политики с идентификатора GUID, извлеченного с элемента filePath
$guidRegex = [regex]"\{(.*)\}"
$match = $guidRegex.match($fileFullPath)
if ($match.Success)
{
$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
}
}
# отобразить настройки, содержащие пароль
foreach ( $gpp in $gppWithCpassword )
{
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 functions Enum-PoliciesWithCpassword
#----------------------------------------------------------------------------------- # Проверить правильность элемента Path. Пронумеровать все настройки, содержащие атрибут cpassword. #-----------------------------------------------------------------------------------
if (Test-Path $Path )
{
Enum-SettingsWithCpassword $Path
}
else
{
Write-Warning "No such directory: $Path"
}
Использование примера (предполагает, что системным является диск C)
.\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” | Format-List
Примечание. Обратите внимание: при указании пути можно использовать любой архив объекта групповой политики вместо домена..
Сценарий обнаружения создает список, приведенный ниже.
Для более длинных списков рекомендуется сохранить выходные данные в файл:
.\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” | ConvertTo-Html > gpps.html
Удаление настроек атрибута CPassword
Чтобы удалить настройки, содержащие данные атрибута CPassword, рекомендуется использовать консоль управления групповой политики в контроллере домена или на клиентском компьютере с установленными средствами удаленного администрирования сервера. Выполнив пять действий в этих консолях, можно удалить любые настройки. Для проверки выполните указанные ниже действия.
-
В консоли управления групповыми политиками откройте настройку, содержащую данные атрибута CPassword.
-
Выберите действие Удалить или Отключить (в зависимости от того, что применимо к настройке).
-
Нажмите кнопку ОК, чтобы сохранить изменения.
-
Дождитесь завершения одного или двух циклов обновления групповой политики, чтобы разрешить распространение изменений на клиентские компьютеры.
-
После применения изменений всеми клиентскими компьютерами удалите настройку.
-
Повторите действия 1–5, чтобы очистить всю свою среду. Если сценарий обнаружения возвращает нулевые результаты, все готово.
File name |
SHA1 hash |
SHA256 hash |
---|---|---|
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 |