ВВЕДЕНИЕ
Корпорация Майкрософт выпустила бюллетень по безопасности MS14-025. Дополнительные сведения об этом бюллетене по безопасности:
Домашним пользователям.
https://www.microsoft.com/security/pc-security/updates.aspx Пропустите подробности. Скачайте обновления для домашнего компьютера или ноутбука с веб-сайта Центра обновления Майкрософт прямо сейчас:
ИТ-специалисты:
Получение справки и поддержки для этого обновления системы безопасности
Справка по установке обновлений:
Поддержка Центра обновления Майкрософт
Решения безопасности для IT-специалистов:
Устранение неполадок и поддержка в области безопасности TechNet
Защитите компьютер под управлением Windows Windows от вирусов и вредоносных программ:
Центр антивирусных решений и безопасности
Локальная поддержка для вашей страны или региона:
Международная поддержка
Дополнительные сведения
Известные проблемы и дополнительные сведения об этом обновлении для системы безопасности
В следующих статьях содержатся дополнительные сведения об этом обновлении для системы безопасности применительно к отдельным версиям продуктов. Эти статьи могут содержать сведения об известных проблемах. В этом случае известная проблема указана под каждой ссылкой на статью.
-
MS14-025: описание обновления системы безопасности для средств удаленного администрирования сервера Windows для систем с установленным 2919355 обновления: 13 мая 2014 г.
-
MS14-025: описание обновления системы безопасности для средств удаленного администрирования сервера Windows для систем, на которых не установлены 2919355 обновления: 13 мая 2014 г.
Параметры групповой политики
Обзор
Некоторые параметры групповой политики могут хранить пароль. Эта функция удалена, так как пароль хранился в небезопасном месте. В этой статье описаны изменения пользовательского интерфейса и все доступные обходные пути.
Следующие параметры групповой политики больше не позволяют сохранять имена пользователей и пароли:
- Приложение "Карты дисков"
- Локальные пользователи и группы
- Запланированные задачи
- Услуги
- Источники данных
Это повлияет на поведение любых существующих объектов групповой политики в вашей среде, которые зависят от паролей, содержащихся в этих параметрах. Это также предотвратит создание новых предпочтений групповой политики с помощью этой функции.
Для карт Диска, локальных пользователей и групп и служб аналогичные цели можно достичь с помощью других, более безопасных функций в Windows.
Для запланированных задач и источников данных вы не сможете достичь тех же целей, которые были доступны при использовании небезопасной функции паролей предпочтений групповой политики.
Сценарии
Это изменение влияет на следующие параметры групповой политики. Каждое предпочтение рассматривается кратко, а затем более подробно. Кроме того, предусмотрены временные решения, позволяющие выполнять те же задачи.
| Затронутое предпочтение | Применяется к пользователю |
Применимо к компьютеру |
|---|---|---|
| Управление локальными пользователями | Да | Да |
| Подключенные диски | Да | Нет |
| Услуги | Нет | Да |
| Запланированные задачи (повышенный уровень) | Да | Да |
| Запланированные задачи (нижний уровень) | Да | Да |
| Непосредственные задачи (повышенный уровень) | Да | Да |
| Непосредственные задачи (нижний уровень) | Да | Да |
| Источники данных | Да | Да |
Обзор изменений
- Поля паролей во всех затронутых параметрах отключены. Администраторы не могут создавать новые параметры с помощью этих полей паролей.
- Поле имени пользователя отключено в некоторых настройках.
- Существующие настройки, содержащие пароль, нельзя обновить. Их можно удалять и отключать только в зависимости от конкретного предпочтения.
- Поведение действий удаления и отключения не изменилось для предпочтений.
- Когда администратор открывает какой-либо параметр, содержащий атрибут CPassword, он получает следующее предупреждающее диалоговое окно, информирующее его или ее о недавнем прекращении поддержки. Такое же диалоговое окно откроется при попытке сохранить изменения в новых или существующих настройках, для которых требуется атрибут CPassword. Диалоговые окна предупреждений не будут вызваны только действиями "Удалить" и "Отключить".
Сценарий 1. Управление локальными пользователями
Настройка управления локальными пользователями часто используется для создания локальных администраторов, у которых есть известный пароль на компьютере. Эта функция небезопасна из-за того, что параметры групповой политики хранят пароли. Поэтому эта функция больше не доступна. Это затрагивает следующие параметры:
- Конфигурация компьютера -> Параметры панели управления -> Локальные пользователи и группы-> Новый-> Локальный пользователь
- Конфигурация пользователя -> Параметры панели управления -> Локальные пользователи и группы -> Создать -> Локальный пользователь
Важные изменения
Действие: создание или замена
- Поля "Имя пользователя", "Пароль" и "Подтверждение пароля " отключены.
- Диалоговое окно с предупреждением появляется, когда администратор открывает или пытается сохранить изменения в существующей настройке, содержащей пароль.
Действие: обновить
- Поля "Пароль" и " Подтверждение пароля " отключены.
- Диалоговое окно с предупреждением появляется, когда администратор открывает или пытается сохранить изменения в существующей настройке, содержащей пароль.
Действие: удаление
- Без изменений в поведении
Обходные пути
Для тех, кто ранее полагался на предпочтение групповой политики при установке паролей локальных администраторов, в качестве безопасной альтернативы CPassword предоставляется следующий сценарий. Скопируйте и сохраните содержимое в новом файле Windows PowerShell, а затем запустите сценарий, как указано в его файле . ПРИМЕР.
Корпорация Майкрософт предоставляет примеры программирования только для иллюстрации, без явных или подразумеваемых гарантий. Это включает подразумеваемые гарантии товарного состояния или пригодности для конкретной цели, но не ограничивается ими. В этой статье предполагается, что вы знакомы с демонстрируемым языком программирования и инструментами, используемыми для создания и отладки процедур. Специалисты службы поддержки Майкрософт могут помочь объяснить функциональность той или иной процедуры. Однако они не будут изменять эти примеры для предоставления дополнительных функциональных возможностей или создания процедур для удовлетворения ваших конкретных требований.
Invoke-PasswordRoll функции
{
<#
. СИНОПСИС
Этот сценарий можно использовать для установки случайных паролей локальных учетных записей на удаленных компьютерах. Комбинация имя/пароль/сервер будет сохранена в CSV-файле.
Пароли учетных записей, хранящиеся в CSV-файле, можно зашифровать с использованием пароля администраторов, которые выбрали запрет на запись паролей учетных записей в открытом виде на диск.
Зашифрованные пароли можно расшифровать с помощью другой функции в этом файле: ConvertTo-CleartextPassword
Функция: Invoke-PasswordRoll
Автор: Microsoft
Версия: 1.0
. ОПИСАНИЕ
Этот сценарий можно использовать для установки случайных паролей локальных учетных записей на удаленных компьютерах. Комбинация имя/пароль/сервер будет сохранена в CSV-файле.
Пароли учетных записей, хранящиеся в CSV-файле, можно зашифровать с использованием пароля администраторов, которые выбрали запрет на запись паролей учетных записей в открытом виде на диск.
Зашифрованные пароли можно расшифровать с помощью другой функции в этом файле: ConvertTo-CleartextPassword
. ПАРАМЕТР Имя компьютера
Массив компьютеров для запуска сценария с использованием удаленного взаимодействия 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, а пароли учетных записей шифруются AES с использованием пароля "Password1".
. ПРИМЕР
. \Invoke-PasswordRoll.ps1 #Loads функции в этом файле сценария
Invoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator") -TsvFileName "LocalAdminCredentials.tsv" -NoEncryption -PasswordLength 40
Подключается ко всем компьютерам, сохраненным в файле "computerlist.txt". Если в системе присутствует локальная учетная запись "администратор", ее пароль изменяется на случайно сгенерированный
пароль длиной 40. Комбинации "имя пользователя", "пароль" и "сервер" хранятся в папке LocalAdminCredentials.tsv в незашифрованном виде.
. ПРИМЕЧАНИЯ
Требования:
-Должен быть установлен PowerShellv2 или более поздней версии
-Удаленное взаимодействие PowerShell должно быть включено на всех системах, для которых будет выполняться сценарий
Поведение сценария:
-Если локальная учетная запись присутствует в системе, но не указана в параметре LocalAccounts, скрипт напишет предупреждение на экран, чтобы предупредить вас о присутствии этой локальной учетной записи. При этом сценарий продолжит выполняться.
-Если в параметре LocalAccounts указана локальная учетная запись, но учетная запись не существует на компьютере, ничего не произойдет (учетная запись НЕ будет создана).
-Функция ConvertTo-CleartextPassword, содержащаяся в этом файле, может использоваться для расшифровки паролей, которые хранятся в зашифрованном виде в файле TSV.
-Если сервер, указанный в ComputerName, не может быть подключен, PowerShell выведет сообщение об ошибке.
— Microsoft советует компаниям регулярно менять все пароли локальных учетных записей и учетных записей домена.
#>
[CmdletBinding(DefaultParameterSetName="Encryption")]
Парам(
[Параметр(обязательно=$true)]
[Строка[]]
$ComputerName,
[Параметр(обязательно=$true)]
[Строка[]]
$LocalAccounts,
[Параметр(обязательно=$true)]
[Строка]
$TsvFileName,
[Parameter(ParameterSetName="Encryption", Mandatory=$true)]
[Строка]
$EncryptionKey,
[Параметр()]
[ValidateRange(20,120)]
[Инт]
$PasswordLength = 20,
[Parameter(ParameterSetName="NoEncryption", Mandatory=$true)]
[Переключатель]
$NoEncryption
)
#Load всех необходимых классов .NET
Add-Type -AssemblyName "System.Web" -ErrorAction Stop
#This — это блок сценария, который будет выполняться на каждом компьютере, указанном в ComputerName
$RemoteRollScript = {
Парам(
[Параметр(обязательно=$true, позиция=1)]
[Строка[]]
$Passwords,
[Параметр(обязательно=$true, позиция=2)]
[Строка[]]
$LocalAccounts,
#This здесь, чтобы я мог записать, каким было имя сервера, к которому подключался скрипт, иногда DNS-записи путаются, может быть неплохо иметь это.
[Параметр(обязательно=$true, позиция=3)]
[Строка]
$TargettedServerName
)
$LocalUsers = Get-WmiObject Win32_UserAccount -filter "LocalAccount=true" | Foreach {$_. Имя}
#Check, если на компьютере есть учетные записи локальных пользователей, пароли которых не собираются прокручивать этот сценарий
foreach ($User в $LocalUsers)
{
если ($LocalAccounts -inotcontains $User)
{
Write-Warning "Сервер: "$($TargettedServerName)" имеет локальную учетную запись "$($User)", пароль которой НЕ изменяется этим сценарием"
}
}
#For каждой указанной локальной учетной записи, существующей на этом сервере, измените пароль
$PasswordIndex = 0
foreach ($LocalAdmin в $LocalAccounts)
{
$Password = $Passwords[$PasswordIndex]
если ($LocalUsers -icontains $LocalAdmin)
{
пробовать
{
$objUser = [ADSI]"WinNT://localhost/$($LocalAdmin), user"
$objUser.psbase.Invoke("SetPassword", $Password)
$Properties = @{
TargettedServerName = $TargettedServerName
Имя пользователя = $LocalAdmin
Пароль = $Password
RealServerName = $env:имякомпьютера
}
$ReturnData = New-Object PSObject -Property $Properties
Write-Output $ReturnData
}
catch
{
Write-Error "Ошибка при смене пароля пользователя:$($LocalAdmin) на сервере:$($TargettedServerName)"
}
}
$PasswordIndex++
}
}
#Generate пароль на клиенте, запустившем этот сценарий, а не на удаленном компьютере. System.Web.Security недоступен в профиле клиента .NET. Выполнение вызова
# на клиенте, запущенном скриптом, гарантирует, что только на 1 компьютере необходимо установить полную среду выполнения .NET (в отличие от каждой системы, пароль которой перевернут).
Create-RandomPassword функции
{
Парам(
[Параметр(обязательно=$true)]
[ValidateRange(20,120)]
[Инт]
$PasswordLength
)
$Password = [System.Web.Security.Membership]::GeneratePassword($PasswordLength, $PasswordLength / 4)
#This никогда не должен подводить, но я все равно ставлю здесь здравомыслие проверка
если ($Password.Длина -ne $PasswordLength)
{
throw new Exception("Пароль, возвращаемый GeneratePassword, не соответствует требуемой. Требуемая длина: $($PasswordLength). Сгенерированная длина: $($Password.Length)")
}
возврат $Password
}
#Main функциональные возможности — создание пароля и удаленное подключение к компьютерам для изменения пароля указанных локальных учетных записей
if ($PsCmdlet.ParameterSetName -ieq "Encryption")
{
пробовать
{
$Sha 256 = новый объект System.Security.Cryptography.SHA256CryptoServiceProvider
$SecureStringKey = $Sha 256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey))
}
catch
{
Write-Error "Ошибка при создании ключа шифрования TSV" — ErrorAction Stop
}
}
foreach ($Computer в $ComputerName)
{
#Need создать 1 пароль для каждой учетной записи, которую можно изменить
$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 используется шифрование, перед записью на диск зашифруйте пароль с помощью ключа, предоставленного пользователем
если ($Result -ne $null)
{
if ($PsCmdlet.ParameterSetName -ieq "NoEncryption")
{
$Result | Select-Object Имя пользователя,Пароль,TargettedServerName,RealServerName | Export-Csv -Append -Path $TsvFileName -NoTypeInformation
}
иначе
{
#Filters возвращенных записей $null
$Result = $Result | Select-Object Username,Password,TargettedServerName,RealServerName
foreach ($Record в $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
}
}
}
}
}
ConvertTo-CleartextPassword функции
{
<#
. СИНОПСИС
Эта функция может использоваться для расшифровки паролей, которые были сохранены в зашифрованном виде с помощью функции Invoke-PasswordRoll.
Функция: ConvertTo-CleartextPassword
Автор: Microsoft
Версия: 1.0
. ОПИСАНИЕ
Эта функция может использоваться для расшифровки паролей, которые были сохранены в зашифрованном виде с помощью функции Invoke-PasswordRoll.
. ПАРАМЕТР EncryptedPassword
Зашифрованный пароль, сохраненный в TSV-файле.
. ПАРАМЕТР EncryptionKey
Пароль, используемый для шифрования.
. ПРИМЕР
. \Invoke-PasswordRoll.ps1 #Loads функции в этом файле сценария
ConvertTo-CleartextPassword -EncryptionKey "Password1" -EncryptedPassword 76492d1116743f0423413b16050a5345MgB8AGcAZgBaAHUAaQBwADAAQgB2AGgAcABNADMASwBaAFoAQQBzADEAeABjAEEAPQA9AHwAZgBiAGYAMAA1ADYANgA2ADEANwBkADQAZgAwADMANABjAGUAZQAxAGIAMABAB iADkANgBiADkAMAA4ADcANwBhADMAYQA3AGYAOABkADcAMQA5ADQAMwBmAGYANQBhADEAYQBjADcANABkADIANgBhADUANwBlADgAMAAyADQANgA1ADIAOQA0AGMAZQA0ADEAMwAzADcANQAyADUANAAzADYAMAA1AGEANgAzADEAMQA5ADAAYwBmADQAZAA2AGQA"
Расшифровывает зашифрованный пароль, который хранился в файле TSV.
#>
Парам(
[Параметр(обязательно=$true)]
[Строка]
$EncryptedPassword,
[Параметр(обязательно=$true)]
[Строка]
$EncryptionKey
)
$Sha 256 = новый объект System.Security.Cryptography.SHA256CryptoServiceProvider
$SecureStringKey = $Sha 256.ComputeHash([System.Text.UnicodeEncoding]::Unicode.GetBytes($EncryptionKey))
[SecureString]$SecureStringPassword = ConvertTo-SecureString -строка $EncryptedPassword -key $SecureStringKey
Write-Output ([System.Runtime.InteropServices.Marshal]::P trToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($SecureStringPassword)))
}
Администраторы могут добавлять учетные записи локальных администраторов на компьютеры, создав группу Active Directory и добавив ее в локальную группу "Администраторы" с помощью параметров групповой политики -> Локальная группа. Это действие не кэширует учетные данные. Диалоговое окно выглядит примерно следующим образом. Для этого временного решения требуется подключение к доменным службам Active Directory, когда пользователь вошел в систему с этими учетными данными.
Сценарий 2. Подключенные диски
Администраторы используют карты дисков для распределения сетевых расположений пользователям. Функция защиты паролем используется для обеспечения авторизованного доступа к диску. Это затрагивает следующие параметры:
- Конфигурация пользователя -> Параметры Windows -> Карты диска -> Новое -> подключенный диск
Важные изменения
Действие: создание, обновление или замена
- Поля "Имя пользователя", "Пароль" и "Подтверждение пароля " отключены.
Действие: удаление
- Без изменений в поведении
Обходные пути
Вместо использования пароля для проверки подлинности можно использовать обозреватели Windows для управления разрешениями на общий доступ и распределения прав между пользователями. Для управления разрешениями на доступ к папке можно использовать объекты Active Directory.
Сценарий 3. Службы
С помощью настройки служб можно изменить свойства службы таким образом, чтобы они выполнялись в контексте, отличном от исходного контекста безопасности. Это затрагивает следующие параметры:
- Конфигурация компьютера -> Параметры панели управления -> Службы -> Новое -> Служба
Важные изменения
Запуск: без изменений, автоматически или вручную
- Поля "Пароль" и "Подтверждение пароля " отключены.
- Администратор может использовать только встроенные учетные записи.
Запуск: отключено
- Без изменений в поведении
Новое диалоговое окно
- Администраторы, пытающиеся использовать невстроенных пользователей для этой учетной записи", получают следующее предупреждение:
Обходные пути
Службы по-прежнему можно запускать как учетную запись локальной системы. Разрешения служб можно изменять, как описано в следующей статье базы знаний Майкрософт:
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. Если в данном параметре обнаружен XML CPassword, он отображается в этом списке.
Определение настроек CPassword
Этот сценарий должен запускаться из локального каталога на контроллере домена, который вы хотите очистить. Скопируйте и сохраните содержимое в новом файле Windows PowerShell, определите свой системный диск, а затем запустите сценарий, как указано в следующем использовании.
<#
. СИНОПСИС
Объекты групповой политики в домене могут иметь параметры, которые хранят пароли для различных задач, например:
1. Источники данных
2. Приложение "Карты дисков"
3. Локальные пользователи
4. Запланированные задачи (как с XP, так и на более высоком уровне)
5. Услуги
Эти пароли хранятся в SYSVOL в рамках предпочтений GP и не защищены из-за слабого шифрования (32-байтовый AES).
Поэтому рекомендуется не развертывать такие параметры в среде домена и удалить все существующие параметры
предпочтения. Этот скрипт помогает администраторам найти настройки GP в SYSVOL своего домена, содержащем пароли.
. ОПИСАНИЕ
Этот сценарий следует запускать на контроллере домена или клиентском компьютере с установленным RSAT, чтобы напечатать все параметры, которые содержат
пароль с такими сведениями, как GPO, имя предпочтения, путь GPEdit, под которым определяется этот параметр.
Если у вас есть список затронутых предпочтений, эти параметры можно удалить с помощью редактора в консоли управления групповой политикой.
. СИНТАКСИС
Get-SettingsWithCPassword.ps1 [-путь <к строке>]
. ПРИМЕР
Get-SettingsWithCPassword.ps1 -путь %WinDir%\SYSVOL\domain
Get-SettingsWithCPassword.ps1 -путь <Путь к папке резервной копии объекта групповой политики>
. ПРИМЕЧАНИЯ
Если модуль PS групповой политики не найден, выходные данные будут содержать идентификаторы GPO GUID вместо имен GPO. Вы можете запустить
этот сценарий на контроллере домена или перезапустите сценарий на клиенте после установки RSAT и
Включен модуль групповой политики.
Или вы можете использовать GUID объекта групповой политики для получения имен объектов групповой политики с помощью командлета Get-GPO.
. ССЫЛКА
http://go.microsoft.com/fwlink/?LinkID=390507
#>
#----------------------------------------------------------------------------------------------------------------
# Входные параметры #--------------------------------------------------------------------------------------------------------------
param(
[строка]$Path = $(throw "-путь обязателен.") # Путь к каталогу, где находятся GPP.
)
#---------------------------------------------------------------------------------------------------------------
$isGPModuleAvailable = $false
$impactedPrefs = { "Groups.xml", "ScheduledTasks.xml","Services.xml", "DataSources.xml", "Drives.xml" }
#----------------------------------------------------------------------------------------------------------------
# импортируйте модуль групповой политики, если он доступен #----------------------------------------------------------------------------------------------------------------
if (-not (Get-Module -name "GroupPolicy"))
{
если (Get-Module -ListAvailable |
Where-Object { $_. Name -ieq "GroupPolicy" })
{
$isGPModuleAvailable = $true
Import-Module "GroupPolicy"
}
иначе
{
Write-Warning "Не удается импортировать модуль групповая политика для PowerShell. Поэтому будут создаваться отчеты о GUID объекта групповой политики.
Запустите этот сценарий на контроллере домена, чтобы получить имена объектов групповой политики, или используйте командлет Get-GPO (на контроллере домена), чтобы получить имя объекта групповой политики из GUID.
}
}
иначе
{
$isGPModuleAvailable = $true
}
Функция Enum-SettingsWithCpassword ( [строка]$sysvolLocation )
{
# Пути в виде дерева GPMC
$commonPath = " -> Настройки -> панель управления Параметры -> "
$driveMapPath = " -> Настройки -> Параметры Windows -> "
# Рекурсивно получать все xml-файлы в расположении SYVOL
$impactedXmls = Get-ChildItem $sysvolLocation -recurse -filter "*.xml" | Where-Object { $impactedPrefs -cmatch $_. Имя }
# Каждый xml-файл содержит несколько параметров. Пройдитесь по каждому параметру, чтобы проверить, является ли он
# содержит атрибут cpassword и отображает его.
foreach ( $file в $impactedXmls )
{
$fileFullPath = $file. FullName (Полное имя)
# Установите категорию GPP. Если файл находится в папке "Компьютер" в SYSVOL
# параметр определен в конфигурации компьютера, в противном случае
# является пользовательской конфигурацией
if ( $fileFullPath.Contains("Machine") )
{
$category = "Конфигурация компьютера"
}
elseif ( $fileFullPath.Contains("User") )
{
$category = "Конфигурация пользователя"
}
иначе
{
$category = "Неизвестно"
}
# Получение содержимого файла в формате XML
пробовать
{
[xml]$xmlFile = get-content $fileFullPath -erroraction continue
}
catch [исключение]{
Write-Host $_. Exception.Message
}
если ($xmlFile -EQ $null)
{
продолжить
}
ключ ( $file. BaseName )
{
Группы
{
$gppWithCpassword = $xmlFile.SelectNodes("Groups/User") | where-Object { [String]::IsNullOrEmpty($_. Properties.cpassword) -eq $false }
$preferenceType = "Локальные пользователи"
}
Запланированные задачи
{
$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("Диски/Диск") | 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 [исключение]{}
}
}
если ($gppWithCpassword -ne $null)
{
# Построение имени объекта групповой политики из GUID, извлеченного из filePath
$guidRegex = [регулярное выражение]"\{(.*)\}"
$match = $guidRegex.match($fileFullPath)
если ($match. Успех)
{
$gpoGuid = $match.groups[1].value
$gpoName = $gpoGuid
}
иначе
{
$gpoName = "Неизвестно"
}
if($isGPModuleAvailable -eq $true)
{
пробовать
{
$gpoInfo = Get-GPO -GUID $gpoGuid -ErrorAction Continue
$gpoName = $gpoInfo.DisplayName
}
catch [исключение] {
Write-Host $_. Exception.Message
}
}
# Отображение префренсов, содержащих cPassword
foreach ( $gpp в $gppWithCpassword )
{
if ( $preferenceType -eq "Drive Maps" )
{
$prefLocation = $category + $driveMapPath + $preferenceType
}
иначе
{
$prefLocation = $category + $commonPath + $preferenceType
}
$obj = New-Object -typeName PSObject
$obj | Add-Member –membertype NoteProperty –name GPOName –value ($gpoName) –passthru |
Add-Member -MemberType NoteProperty -name Предпочтение -значение ($gpp. Имя) -passthru |
Add-Member -MemberType NoteProperty -name Path -value ($prefLocation)
Write-Output $obj
}
} # end, если $gppWithCpassword
} # end foreach $file
} # end функции Enum-PoliciesWithCpassword
#-----------------------------------------------------------------------------------
# Проверьте допустимость пути. Перечисление всех параметров, содержащих cpassword.
#-----------------------------------------------------------------------------------
если (Test-Path $Path )
{
Enum-SettingsWithCpassword $Path
}
иначе
{
Write-Warning "Нет такого каталога: $Path"
}
Пример использования (предполагается, что системный диск — C)
.\Get-SettingsWithCPassword.ps1 –путь "C:\Windows\SYSVOL\domain" | Format-List
Примечание. Обратите внимание, что любой резервный объект групповой политики также можно настроить для пути , а не для домена.
Сценарий обнаружения создает список, который выглядит примерно так:
Если список длиннее, рекомендуется сохранить выходные данные в файле:
.\Get-SettingsWithCPassword.ps1 –путь "C:\Windows\SYSVOL\domain" | > ConvertTo-Html gpps.html
Удаление настроек CPassword
Чтобы удалить настройки, содержащие данные CPassword, мы предлагаем вам использовать консоль управления групповыми политиками (GPMC) на контроллере домена или из клиента с установленными средствами удаленного администрирования сервера. На этих консолях можно удалить любую настройку за пять действий. Для этого выполните указанные ниже действия.
- В консоли групповой политики откройте параметр, содержащий данные CPassword.
- Измените действие на "Удалить " или "Отключить" в зависимости от параметра.
- Нажмите кнопку OK, чтобы сохранить изменения.
- Дождитесь одного или двух циклов обновления групповой политики, чтобы изменения распространялись на клиенты.
- После вступления изменений в силу на всех клиентах удалите параметр.
- При необходимости повторите шаги 1–5, чтобы очистить всю среду. Если сценарий обнаружения не возвращает никаких результатов, все готово.
Сведения о файловом хэше
| Имя файла | Хэш SHA1 | Хэш SHA256 |
|---|---|---|
| Windows6.0-KB2928120-ia64.msu | B2A74305CB56191774BFCF9FCDEAA983B26DC9A6 | DCE8C0F9CEB97DBF1F7B9BAF76458B3770EF01C0EDC581621BC8C3B2C7FD14E7 |
| Windows6.0-KB2928120-x64.msu | 386457497682A2FB80BC93346D85A9C1BC38FBF7 | 1AF67EB12614F37F4AC327E7B5767AFA085FE676F6E81F0CED95D20393A1D38D |
| Windows6.0-KB2928120-x86.msu | 42FF283781CEC9CE34EBF459CA1EFE011D5132C3 | 016D7E9DBBC5E487E397BE0147B590CFBBB5E83795B997894870EC10171E16D4 |
| Windows6.1-KB2928120-ia64.msu | 5C2196832EC94B99AAF9B074D3938525B7219690 | 9958FA58134F55487521243AD9740BEE0AC210AC290D45C8322E424B3E5EBF16 |
| Windows6.1-KB2928120-x64.msu | EA5332F4E289DC799611EAB8E3EE2E86B7880A4B | 417A2BA34F8FD367556812197E2395ED40D8B394F9224CDCBE8AB3939795EC2A |
| Windows6.1-KB2928120-x86.msu | 7B7B6EE24CD8BE1AB3479F9E1CF9C98982C8BAB1 | 603206D44815EF2DC262016ED13D6569BE13D06E2C6029FB22621027788B8095 |
| Windows8-RT-KB2928120-x64.msu | E18FC05B4CCA0E195E62FF0AE534BA39511A8593 | FCAED97BF1D61F60802D397350380FADED71AED64435D3E9EAA4C0468D80141E |
| Windows8-RT-KB2928120-x86.msu | A5DFB34F3B9EAD9FA78C67DFC7ACACFA2FBEAC0B | 7F00A72D8A15EB2CA70F7146A8014E39A71CFF5E39596F379ACD883239DABD41 |
| Windows8.1-KB2928120-x64.msu | A07FF14EED24F3241D508C50E869540915134BB4 | 6641B1A9C95A7E4F0D5A247B9F488887AC94550B7F1D7B1198D5BCBA92F7A753 |
| Windows8.1-KB2928120-x86.msu | DE84667EC79CBA2006892452660EB99580D27306 | 468EE4FA3A22DDE61D85FD3A9D0583F504105DF2F8256539051BC0B1EB713E9C |
| Windows8.1-KB2961899-x64.msu | 10BAE807DB158978BCD5D8A7862BC6B3EF20038B | EC26618E23D9278FC1F02CA1F13BB289E1C6C4E0C8DA5D22E1D9CDA0DA8AFF51 |
| Windows8.1-KB2961899-x86.msu | 230C64447CC6E4AB3AD7B4D4655B8D8CEFBFBE98 | E3FAD567AB6CA616E42873D3623A777185BE061232B952938A8846A974FFA7AF |