Você está offline; aguardando reconexão

MS14-025: Uma vulnerabilidade nas preferências da Política de Grupo pode permitir a elevação de privilégio: 13 de maio de 2014

INTRODUCTION
A Microsoft lançou o boletim de segurança MS14-025. Para saber mais sobre este boletim de segurança:

Como obter ajuda e suporte para esta atualização de segurança

Ajuda ao instalar atualizações:Suporte para o Microsoft Update

Soluções de segurança para profissionais de TI:Suporte e solução de problemas de segurança do TechNet

Ajude a proteger seu computador baseado em Windows contra vírus e malware:Centro de Segurança e Solução de Vírus

Suporte local de acordo com seu país:Suporte Internacional

Mais Informações

Problemas conhecidos e mais informações sobre esta atualização de segurança

Os artigos a seguir contêm mais informações sobre esta atualização de segurança pois se relaciona com versões de produto individuais. Os artigos podem conter informações sobre problemas conhecidos. Se esse for o caso, o problema conhecido estará listado abaixo de cada link de artigo.
  • 2928120 MS14-025: Descrição da atualização de segurança das Ferramentas de Administração do Servidor Remoto do Windows para sistemas que têm a atualização 2919355 instalada: 13 de maio de 2014
  • 2961899 MS14-025: Descrição da atualização de segurança das Ferramentas de Administração do Servidor Remoto do Windows para sistemas que não têm a atualização 2919355 instalada: 13 de maio de 2014
Preferências da Diretiva de Grupo

Visão Geral

Algumas preferências da Política de Grupo podem armazenar uma senha. Essa funcionalidade está sendo removida porque a senha foi armazenada sem proteção. Este artigo descreve as alterações na interface do usuário e as soluções alternativas disponíveis.

As seguintes preferências da Política de Grupo não permitirão mais que os nomes de usuário e senhas sejam salvos:
  • Mapas de unidade
  • Usuários e grupos locais
  • Tarefas agendadas
  • Serviços
  • Fontes de dados
Isto afetará o comportamento de qualquer Objetos de Política de Grupo (GPOs) em seu ambiente que dependa de senhas que estiverm contidas nestas preferências. Também impedirá a criação de novas preferências de Política de Grupo usando essa funcionalidade.

Para Mapas de unidade, Grupos de usuários locais e Serviços, você talvez possa alcançar objetivos semelhantes por meio de outra funcionalidade mais segura do Windows.

Para Tarefas agendadas e Fontes de dados, você não poderá alcançar os mesmos objetivos que estavam disponíveis por meio da funcionalidade não segura das senhas da preferências da Política de Grupo.
Cenários
As seguintes preferências de Política de Grupo são afetadas por essa alteração. Cada preferência é abordada rapidamente e, em seguida, em mais detalhes. Além disso, as soluções alternativas são fornecidas para permitir que você realize as mesmas tarefas.
Preferência afetada Aplica-se ao usuárioAplica-se ao computador
Gerenciamento de usuários locaisSimSim
Unidades mapeadasSim
Não
Serviços
Não
Sim
Tarefas agendadas (nível superior)SimSim
Tarefas agendadas (nível inferior)SimSim
Tarefas imediatas (nível superior)SimSim
Tarefas imediatas (nível inferior)SimSim
Fontes de dadosSimSim

Resumo das alterações

  • Campos de senha em todas as preferências afetadas estão desabilitados. Os administradores não podem criar novas preferências usando esses campos de senha.
  • O campo de nome de usuário está desabilitado em algumas preferências.
  • As preferências existentes que contenham uma senha não podem ser atualizadas. Elas só podem ser excluídas ou desabilitadas, conforme apropriado para a preferência específica.
  • O comportamento para ações Excluir e Desabilitar não mudaram para as preferências.
  • Quando um administrador abre qualquer preferência que contém o atributo CPassword, o administrador recebe a seguinte caixa de diálogo para informá-lo da substituição recente. As tentativas de salvar alterações às preferências novas ou existentes que necessitam de um atributo CPassword disparará a mesma caixa de diálogo. Apenas as ações Excluir e Desabilitar não dispararão caixas de diálogo de aviso.





Cenário 1: Gerenciamento de usuários locais

A preferência de Gerenciamento de usuários locais é usada com frequência para criar administradores locais que têm uma senha conhecida em um computador. Esse recurso não é seguro devido ao modo como as preferências de Política de Grupo armazena as senhas. Portanto, essa funcionalidade não está mais disponível. As seguintes preferência foram afetadas:
  • Configuração do Computador -> Configurações do Painel de Controle -> Grupos de usuários locais-> Novo-> Usuário local
  • Configuração do usuário -> Configurações do Painel de Controle -> Grupos de usuários locais-> Novo-> Usuário local

Alterações importantes

Ação: Criar ou Substituir
  • Os campos Nome de usuário, Senha e Confirmar senha estão desabilitados.
  • A caixa de diálogo de aviso aparece quando o administrador abre ou tenta salvar qualquer alteração para uma preferência existente que contém uma senha.




Ação: Atualizar
  • Os campos Senha e Confirmar senha estão desabilitados.
  • A caixa de diálogo de aviso aparece quando o administrador abre ou tenta salvar qualquer alteração para uma preferência existente que contém uma senha.




Ação: Excluir
  • Nenhuma alteração no comportamento

Soluções alternativas

Para aqueles que antes dependiam da preferência da Política de grupo para definir senhas de administrador local, o script a seguir é fornecido como uma alternativa segura ao CPassword. Copie e salve o conteúdo em um novo arquivo do Windows PowerShell e depois execute o script conforme indicado na seção .EXAMPLE.

A Microsoft fornece exemplos de programação apenas por questões ilustrativas, sem garantias expressas ou implícitas. Isso inclui (mas não está limitado a) garantias implícitas de comercialização ou adequação a um determinado propósito. Este artigo pressupõe que você conhece a linguagem de programação demonstrada e também as ferramentas usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudá-lo, fornecendo a explicação da funcionalidade de um determinado procedimento. Entretanto, eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou criar procedimentos específicos para atender às suas necessidades específicas.

 function Invoke-PasswordRoll{<#.SYNOPSISEsse script pode ser usado para definir as senhas de conta local em máquinas remotas para senhas aleatórias. A combinação de nome de usuário/senha/servidor será salva em um arquivo CSV.As senhas da conta armazenadas no arquivo CSV podem ser criptografadas usando uma senha de administradores que optaram por assegurar que as senhas de conta não criptografadas não sejam gravadas no disco.As senhas criptografadas podem ser descriptografadas usando outra função neste arquivo: ConvertTo-CleartextPasswordFunção: Invoke-PasswordRollAutor: MicrosoftVersão: 1.0.DESCRIÇÃOEsse script pode ser usado para definir as senhas de conta local em máquinas remotas para senhas aleatórias. A combinação de nome de usuário/senha/servidor será salva em um arquivo CSV.As senhas da conta armazenadas no arquivo CSV podem ser criptografadas usando uma senha de administradores que optaram por assegurar que as senhas de conta não criptografadas não sejam gravadas no disco.As senhas criptografadas podem ser descriptografadas usando outra função neste arquivo: ConvertTo-CleartextPassword.PARÂMETRO ComputerNameUma matriz de computadores para executar o script usando a comunicação remota do PowerShell..PARÂMETRO LocalAccountsUma matriz de contas locais cujas senhas devem ser alteradas..PARÂMETRO TsvFileNameO arquivo para inserir as combinações de senha/nome de usuário/servidor..PARÂMETRO EncryptionKeyUma senha para criptografar o arquivo TSV. Usa a criptografia AES. Somente as senhas armazenadas no arquivo TSV serão criptografadas, o nome do usuário e o nome do servidor não serão criptografados..PARÂMETRO PasswordLengthO comprimento das senhas que serão geradas aleatoriamente para contas locais..PARÂMETRO NoEncryptionNão criptografe as senhas de conta armazenadas no arquivo TSV. Isso resultará em senhas de texto não criptografado sendo gravadas no disco.	.EXEMPLO. .\Invoke-PasswordRoll.ps1    #Carrega as funções no arquivo de scriptInvoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator","CustomLocalAdmin") -TsvFileName "LocalAdminCredentials.tsv" -EncryptionKey "Password1"Conecta-se a todos os computadores armazenados no arquivo "computerlist.txt". Se a conta local "administrador" e/ou "CustomLocalAdmin" estão presentes no sistema, a senha é alteradapara uma senha gerada aleatoriamente de comprimento 20 (o padrão). As combinações de nome de usuário/senha/servidor são armazenadas em LocalAdminCredentials.tsv e as senhas de conta são criptografadas usando o AES com a senha "Senha1"..EXEMPLO. .\Invoke-PasswordRoll.ps1    #Carrega as funções no arquivo de scriptInvoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator") -TsvFileName "LocalAdminCredentials.tsv" -NoEncryption -PasswordLength 40Conecta-se a todos os computadores armazenados no arquivo "computerlist.txt". Se a conta local "administrador" está presente no sistema, a senha é alterada para uma gerada aleatoriamente, de comprimento 40. As combinações de senha/nome de usuário/servidor são armazenadas em LocalAdminCredentials.tsv sem criptografia..OBSERVAÇÕESRequisitos: -PowerShellv2 ou superior deve ser instalado-Conexão remota do PowerShell deve ser habilitada em todos os sistemas em que o script será executadoComportamento de script:-Se uma conta local está presente no sistema, mas não está especificada no parâmetro LocalAccounts, o script gravará um aviso na tela para alertar você da presença desta conta local. O script continuará executando quando isso acontece.-Se uma conta local é especificada no parâmetro LocalAccounts, mas a conta não existe no computador, nada acontecerá (uma conta NÃO será criada).-A função ConvertTo-CleartextPassword, contida neste arquivo, pode ser usada para descriptografar senhas que são armazenadas criptografadas no arquivo TSV.-Se um servidor especificado no ComputerName não pode ser conectado, o PowerShell irá gerar uma mensagem de erro.-A Microsoft aconselha as empresas para reverter regularmente todas as senhas de contas locais e de domínio.#>    [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    )    #Carregar qualquer classe .net necessária    Add-Type -AssemblyName "System.Web" -ErrorAction Stop    #Este é o scriptblock que será executado em todos os computadores especificados em ComputerName    $RemoteRollScript = {        Param(            [Parameter(Mandatory=$true, Position=1)]            [String[]]            $Passwords,            [Parameter(Mandatory=$true, Position=2)]            [String[]]            $LocalAccounts,            #Isto está aqui para que eu possa registrar qual o nome do servidor que no qual o script estava conectado, às vezes os registros DNS causam problemas, pode ser bom ter isso.            [Parameter(Mandatory=$true, Position=3)]            [String]            $TargettedServerName        )        $LocalUsers = Get-WmiObject Win32_UserAccount -Filter "LocalAccount=true" | Foreach {$_.Name}        #Verifique se o computador tem qualquer conta de usuário local cujas senhas não serão revertidas por este script.        foreach ($User in $LocalUsers)        {            if ($LocalAccounts -inotcontains $User)            {                Write-Warning "Servidor: '$($TargettedServerName)' possui uma conta local '$($User)' cuja senha NÃO está sendo alterada por este script"            }        }        #For cada conta local especificada que existe no servidor, altere a senha        $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 "Erro ao alterar senha para o usuário:$($LocalAdmin) no servidor:$($TargettedServerName)"                }            }            $PasswordIndex++        }    }    #Gere a senha no cliente que está executando esse script, não no computador remoto. O System.Web.Security não está disponível no perfil de Cliente .NET. Fazer esta chamada    #    no cliente que está executando o script garante que somente o computador 1 precisa de um tempo de execução .NET completo instalado (ao contrário de todos os sistemas que têm a senha revertida).    function Create-RandomPassword    {        Param(            [Parameter(Mandatory=$true)]            [ValidateRange(20,120)]            [Int]            $PasswordLength        )        $Password = [System.Web.Security.Membership]::GeneratePassword($PasswordLength, $PasswordLength / 4)        #Isto não deveria falhar nunca, mas eu estou colocando uma verificação de integridade aqui mesmo assim        if ($Password.Length -ne $PasswordLength)        {            throw new Exception("Senha retornada por GeneratePassword não tem o comprimento exigido. Comprimento exigido: $($PasswordLength). Comprimento gerado: $($Password.Length)")        }        return $Password    }    #Funcionalidade principal - Gere uma senha e faça uma comunicação remota com as máquinas para alterar a senha de contas locais especificadas.    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 "Erro ao criar chave de criptografia TSV" -ErrorAction Stop        }    }    foreach ($Computer in $ComputerName)    {        #Necessidade de gerar 1 senha para cada conta que pode ser alterada        $Passwords = @()        for ($i = 0; $i -lt $LocalAccounts.Length; $i++)        {            $Passwords += Create-RandomPassword -PasswordLength $PasswordLength        }        Write-Output "Conectando-se ao servidor '$($Computer)' para reverter as senhas de administrador local especificado"        $Result = Invoke-Command -ScriptBlock $RemoteRollScript -ArgumentList @($Passwords, $LocalAccounts, $Computer) -ComputerName $Computer        #Se a criptografia estiver sendo usada, criptografar a senha com a chave antes de gravar no disco        if ($Result -ne $null)        {            if ($PsCmdlet.ParameterSetName -ieq "NoEncryption")            {                $Result | Select-Object Username,Password,TargettedServerName,RealServerName | Export-Csv -Append -Path $TsvFileName -NoTypeInformation            }            else            {                #Filters out $null entries returned                $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{<#.SYNOPSISEsta função pode ser usada para descriptografar as senhas que foram armazenadas criptografadas pela função Invoke-PasswordRoll.Função: ConvertTo-CleartextPasswordAutor: MicrosoftVersão: 1.0.DESCRIÇÃOEsta função pode ser usada para descriptografar as senhas que foram armazenadas criptografadas pela função Invoke-PasswordRoll..PARÂMETRO EncryptedPasswordA senha criptografada armazenada em um arquivo TSV..PARÂMETRO EncryptionKeyA senha usada para fazer a criptografia..EXEMPLO. .\Invoke-PasswordRoll.ps1    #Carrega as funções no arquivo de scriptConvertTo-CleartextPassword -EncryptionKey "Password1" -EncryptedPassword 76492d1116743f0423413b16050a5345MgB8AGcAZgBaAHUAaQBwADAAQgB2AGgAcABNADMASwBaAFoAQQBzADEAeABjAEEAPQA9AHwAZgBiAGYAMAA1ADYANgA2ADEANwBkADQAZgAwADMANABjAGUAZQAxAGIAMABiADkANgBiADkAMAA4ADcANwBhADMAYQA3AGYAOABkADcAMQA5ADQAMwBmAGYANQBhADEAYQBjADcANABkADIANgBhADUANwBlADgAMAAyADQANgA1ADIAOQA0AGMAZQA0ADEAMwAzADcANQAyADUANAAzADYAMAA1AGEANgAzADEAMQA5ADAAYwBmADQAZAA2AGQA"Descriptografa a senha criptografada que foi armazenada no arquivo 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)))}
  Os administradores podem adicionar contas de administrador local aos computadores criando um grupo do Active Directory e adicionando-o ao grupo de administradores locais por meio das preferências da Política de Grupo -> Grupo local. Esta ação não armazena em cache as credenciais. A caixa de diálogo é semelhante a seguinte. Esta solução alternativa necessita de uma conexão dos Serviços de Domínio do Active Directory quando o usuário está conectado usando estas credenciais.





Cenário 2: Unidades mapeadas

Os administradores usam mapas de unidade para alocar locais de rede para os usuários. O recurso de proteção de senha é usado para certificar-se de acesso autorizado à unidade. As seguintes preferências foram afetadas:
  • Configuração do usuário -> Configurações do Windows -> Mapas de unidade -> Novo -> Unidade mapeada

Alterações importantes

Ação: Criar, Atualizar ou Substituir
  • Os campos Nome de usuário, Senha e Confirmar senha estão desabilitados.



Ação: Excluir
  • Nenhuma alteração no comportamento

Soluções alternativas

Em vez de usar o método de senha para a autenticação, você pode usar o Windows Explorer para gerenciar permissões de compartilhamento e alocar direitos aos usuários. Você pode usar os objetos do Active Directory para controlar as permissões para a pasta.


Cenário 3: Serviços

Você pode usar a preferência de Serviços para alterar as propriedades do serviço de tal maneira que sejam executadas em um outro contexto além do contexto de segurança original. As seguintes preferências foram afetadas:
  • Configurações do Computador -> Configurações do Painel de Controle -> Serviços -> Novo -> Serviço 

Alterações importantes

Inicialização: Sem alteração, automático ou manual
  • Os campos Senha e Confirmar senha estão desabilitados.
  • O administrador pode usar contas internas.



Inicialização: Desabilitado
  • Nenhuma alteração no comportamento
Caixa de diálogo Novo
  • Os administradores que tentam usar usuários não internos para esta conta" recebem o seguinte aviso:




Soluções alternativas

Os Serviços ainda podem ser executados como uma conta de sistema local. As permissões de serviço podem ser alteradas conforme documentado no seguinte artigo da Base de Dados de Conhecimento da Microsoft:
256345 Como definir as configurações da Política de Grupo para definir segurança para serviços do sistema

Observação
 Se o serviço que deseja configurar não está presente, você deve definir as configurações em um computador que tem o serviço executando. 


Cenário 4: Tarefas agendadas e imediatas (nívelsuperior)

Estas são usadas para executar as tarefas agendadas em um contexto de segurança específico. A capacidade de armazenar credenciais para as tarefas agendadas serem executadas como usuário arbitrário quando aquele usuário não está conectado não está mais disponível. As seguintes preferências foram afetadas. (Lembre-se que em algumas plataformas, "Pelo menos Windows 7" é substituído por "Windows Vista e versões posteriores.")
  •  Configuração do Computador -> Configurações do Painel de Controle -> Tarefas agendadas -> Novo -> Tarefa agendada (Pelo menos Windows 7)
  •  Configuração do Computador -> Configurações do Painel de Controle -> Tarefas agendadas -> Novo -> Tarefa imediata (Pelo menos Windows 7)
  •  Configuração do usuário -> Configurações do Painel de Controle -> Tarefas agendadas -> Novo -> Tarefa agendada (Pelo menos Windows 7)
  •  Configuração do usuário -> Configurações do Painel de Controle -> Tarefas agendadas -> Novo -> Tarefa imediata (Pelo menos Windows 7)

Alterações importantes

Ação: Criar, Atualizar ou Substituir
  • Quando você seleciona a opção Executar estando o usuário conectado ou não, uma caixa de diálogo não solicita mais as credenciais para administrador.
  • A caixa de seleção Não armazenar senha está desabilitada. Por padrão, a caixa também está marcada.



Ação: Excluir

Nenhuma alteração no comportamento

Soluções alternativas

Para as tarefas "Tarefa agendada (pelo menos Windows 7)" e "Tarefa imediata (pelo menos Windows 7)", os administradores podem usar contas de usuário específicas quando determinado usuário está conectado. Ou, eles só podem ter acesso aos recursos locais que aquele usuário. Estas tarefas ainda podem ainda ser executadas no contexto do serviço local. 



Cenário 5: Tarefas agendadas e imediatas (nível inferior)

Esta é a versão de nível inferior das preferências usadas para executar as Tarefas agendadas em um modelo de segurança específico. A capacidade de armazenar credenciais para as tarefas agendadas serem executadas como usuário arbitrário quando aquele usuário não está conectado não está mais disponível. As seguintes preferências foram afetadas:
  •  Configuração do Computador -> Configurações do Painel de Controle -> Tarefas agendadas -> Novo -> Tarefa agendada
  •  Configuração do Computador -> Configurações do Painel de Controle -> Tarefas agendadas -> Novo -> Tarefa imediata (Windows XP)
  •  Configuração do usuário -> Configurações do Painel de Controle -> Tarefas agendadas -> Novo -> Tarefa agendada
  •  Configuração do usuário -> Configurações do Painel de Controle -> Tarefas agendadas -> Novo -> Tarefa imediata (Windows XP)

Alterações importantes

Ação: Criar, Atualizar ou Substituir
  • A caixa de seleção Executar como está desabilitada. No entanto, os campos Nome de usuário, Senha e Confirmar senha estão todos desabilitados.



Ação: Excluir

Nenhuma alteração no comportamento

Soluções alternativas

Para os itens "Tarefa agendada" e "Tarefa imediata (Windows XP)" , as tarefas agendadas são executadas usando as permissões que estão atualmente disponíveis para o serviço local.


Cenário 6: Fontes de dados

A preferência Fonte de dados é usada para associar uma fonte de dado a um computador ou usuário. Esse recurso não armazena credenciais para permitir o acesso a fontes de dados que são protegidas por uma senha. As seguintes preferências foram afetadas:
  • Configuração do Computer -> Configurações do Painel de Controle -> Fontes de dados
  • Configuração do usuário -> Configurações do Painel de Controle -> Fontes de dados

Alterações importantes

Ação: Criar, Atualizar ou Substituir
  • Os campos Nome de usuário, Senha e Confirmar senha estão desabilitados:



Ação: Excluir
  • Nenhuma alteração no comportamento

Soluções alternativas

Nenhuma solução alternativa está disponível. Esta preferência não armazena mais credenciais para permitir o acesso a fontes de dados que são protegidas por uma senha.


Substituição do CPassword

Removendo o CPassword

O script do Windows PowerShell que está incluído neste artigo da Base de Dados de Conhecimento da Microsoft detecta se um domínio contém qualquer preferência da Política de Grupo que pode usar o CPassword. Se o CPassword XML for detectado em uma dada preferência, ele será exibido na lista.


Detectando preferências do CPassword

Este script deve ser executado a partir de um diretório local do controlador de domínio que você deseja limpar. Copie e salve o conteúdo em um novo arquivo do Windows PowerShell, determine sua unidade do sistema e depois execute o script conforme indicado no seguinte uso.

 <#.SYNOPSISOs objetos da Política de Grupo em seu domínio podem ter preferências que armazenam senhas para diferentes tarefas, como a seguinte:    1. Fontes de dados    2. Mapas de unidade    3. Usuários locais    4. Tarefas agendadas (XP e nível superior)    5. ServiçosEstas senhas são armazenadas no SYSVOL como parte das preferências da Política de Grupo e não estão seguras devido a criptografia fraca (AES de 32 bytes). No entanto, recomendamos que você não implante tais preferências em seu ambiente de domínio e remova qualquer preferência existente. Esse script é para ajudar o administrador a encontrar as preferências de Política de Grupo no SYSVOL do domínio que contém senhas. .DESCRIÇÃOEste script deve ser executado em um DC ou um computador cliente que é instalado com o RSAT para imprimir todas as preferências que contêm senha com informações como GPO, Nome de preferência, caminho GPEdit sob as quais essa preferência é definida.Depois de você ter uma lista das preferências afetadas, estas preferências podem ser removidas usando o editor no Console de Gerenciamento da Política de Grupo. .SINTAXEGet-SettingsWithCPassword.ps1 [-Path  <String>] .EXEMPLOGet-SettingsWithCPassword.ps1 -Path %WinDir%\SYSVOL\domainGet-SettingsWithCPassword.ps1 -Path  <Caminho da pasta de Backup de GPO> .OBSERVAÇÕESSe o módulo do PS da Política de Grupo não encontrou a saída que conterá os GUIDs do GPO em vez de nomes do GPO. Você pode executar este script em um controlador de domínio ou executar novamente o script no cliente após instalar o RSAT e ativar o módulo de Política de Grupo.Ou, você pode usar os GUIDs do GPO para obter os nomes do GPO usando o cmdlet Get-GPO. .LINKhttp://go.microsoft.com/fwlink/?LinkID=390507 #>#----------------------------------------------------------------------------------------------------------------# Parâmetros de entrada#--------------------------------------------------------------------------------------------------------------param(    [string]$Path = $(throw "-Path is required.") # Caminho do diretório onde estão localizadas as GPPs. )#---------------------------------------------------------------------------------------------------------------$isGPModuleAvailable = $false$impactedPrefs = { "Groups.xml", "ScheduledTasks.xml","Services.xml", "DataSources.xml", "Drives.xml" }#----------------------------------------------------------------------------------------------------------------# importar o módulo da política de grupo, se disponível#----------------------------------------------------------------------------------------------------------------if (-not (Get-Module -name "GroupPolicy")){   if (Get-Module -ListAvailable |          Where-Object { $_.Name -ieq "GroupPolicy" })    {        $isGPModuleAvailable = $true        Import-Module "GroupPolicy"    }    else    {        Write-Warning "Não é possível importar o módulo da política de grupo para o PowerShell. Portanto, os guids do GPO serão relatados.                        Execute este script no DC para obter os nomes do GPO, ou use o cmdlet Get-GPO (no DC) para obter o nome do GPO do guid do GPO."    }}else{    $isGPModuleAvailable = $true}Function Enum-SettingsWithCpassword ( [string]$sysvolLocation ){    # GPMC tree paths    $commonPath = " -> Preferences -> Control Panel Settings -> "    $driveMapPath = " -> Preferences -> Windows Settings -> "        # Obter recursivamente todos os arquivos xml no local SYVOL    $impactedXmls = Get-ChildItem $sysvolLocation -Recurse -Filter "*.xml" | Where-Object { $impactedPrefs -cmatch $_.Name }            # Cada arquivo xml contém várias preferências. Percorrer cada preferência para verificar se ela    # contém o atributo cpassword e exiba-o.    foreach ( $file in $impactedXmls )    {        $fileFullPath = $file.FullName                # Definir a categoria GPP. Se o arquivo está localizado na pasta da máquina em SYSVOL        # a configuração está definida em configuração do computador, caso contrário a         # configuração é uma configuração de usuário          if ( $fileFullPath.Contains("Machine") )        {            $category = "Computer Configuration"        }        elseif ( $fileFullPath.Contains("User") )        {            $category = "User Configuration"        }        else        {            $category = "Unknown"        }        # Obter o conteúdo do arquivo como 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 { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }                $preferenceType = "Local Users"            }            ScheduledTasks            {                $gppWithCpassword  = $xmlFile.SelectNodes("ScheduledTasks/*") | where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }                $preferenceType = "Scheduled Tasks"            }            DataSources            {                $gppWithCpassword = $xmlFile.SelectNodes("DataSources/DataSource") | where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }                $preferenceType = "Data sources"            }            Drives            {                $gppWithCpassword = $xmlFile.SelectNodes("Drives/Drive") | where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }                $preferenceType = "Drive Maps"            }            Services            {                $gppWithCpassword = $xmlFile.SelectNodes("NTServices/NTService") | where-Object { [String]::IsNullOrEmpty($_.Properties.cpassword) -eq $false }                $preferenceType = "Services"            }            default            {   # limpar gppWithCpassword e preferenceType para o próximo item.                try                {                    Clear-Variable -Name gppWithCpassword -ErrorAction SilentlyContinue                    Clear-Variable -Name preferenceType -ErrorAction SilentlyContinue                }                catch [Exception]{}            }        }        if ($gppWithCpassword -ne $null)        {            # Criar o nome do GPO do GUID extraído do Caminho do arquivo             $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                }            }            # exibir preferências que contém o cpassword            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             }        } # finalizar se $gppWithCpassword    } # finalizar foreach $file} # finalizar funções Enum-PoliciesWithCpassword#-----------------------------------------------------------------------------------# Verifique se o caminho é válido. Enumere todas as configurações que contêm o cpassword. #-----------------------------------------------------------------------------------if (Test-Path $Path ){    Enum-SettingsWithCpassword $Path}else{    Write-Warning "Diretório inexistente: $Path"}  


Exemplo de uso (supõe-se que a unidade do sistema é C)

.\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” | Format-List

Observação Esteja ciente de que você também pode direcionar qualquer GPO de backup para o caminho ao invés do domínio.

O script de detecção gera uma lista semelhante à seguinte:



Para as listas maiores, considere a possibilidade de salvar a saída em um arquivo:

.\Get-SettingsWithCPassword.ps1 –path “C:\Windows\SYSVOL\domain” | ConvertTo-Html > gpps.html

Removendo as preferências do CPassword

Para remover as preferências que contém os dados do CPassword, sugerimos que você use o Console de Gerenciamento da Política de Grupo (GPMC) no controlador de domínio ou de um cliente que tem as Ferramentas de Administração do Servidor Remoto instaladas. Você pode remover qualquer preferência em cinco etapas nestes consoles. Para fazer isso, execute as seguintes etapas: 
  1. No GPMC, abra a preferência que contém dados do CPassword.
  2. Alterar a ação para Excluir ou Desabilitar, conforme aplicável, para a preferência.
  3. Clique em OK para salvar as alterações.
  4. Aguarde um ou dois ciclos de atualização da Política de Grupo para permitir que as alterações sejam propagadas para os clientes.
  5. Depois que as alterações são aplicadas em todos os clientes, exclua a preferência.
  6. Repita as etapas 1 a 5 conforme necessário para limpar o ambiente inteiro. Quando o script de detecção não retorna resultados, você terá concluído.

Informações de hash de arquivo

Nome do arquivoHash SHA1Hash SHA256
Windows6.0-KB2928120-ia64.msuB2A74305CB56191774BFCF9FCDEAA983B26DC9A6DCE8C0F9CEB97DBF1F7B9BAF76458B3770EF01C0EDC581621BC8C3B2C7FD14E7
Windows6.0-KB2928120-x64.msu386457497682A2FB80BC93346D85A9C1BC38FBF71AF67EB12614F37F4AC327E7B5767AFA085FE676F6E81F0CED95D20393A1D38D
Windows6.0-KB2928120-x86.msu42FF283781CEC9CE34EBF459CA1EFE011D5132C3016D7E9DBBC5E487E397BE0147B590CFBBB5E83795B997894870EC10171E16D4
Windows6.1-KB2928120-ia64.msu5C2196832EC94B99AAF9B074D3938525B72196909958FA58134F55487521243AD9740BEE0AC210AC290D45C8322E424B3E5EBF16
Windows6.1-KB2928120-x64.msuEA5332F4E289DC799611EAB8E3EE2E86B7880A4B417A2BA34F8FD367556812197E2395ED40D8B394F9224CDCBE8AB3939795EC2A
Windows6.1-KB2928120-x86.msu7B7B6EE24CD8BE1AB3479F9E1CF9C98982C8BAB1603206D44815EF2DC262016ED13D6569BE13D06E2C6029FB22621027788B8095
Windows8-RT-KB2928120-x64.msuE18FC05B4CCA0E195E62FF0AE534BA39511A8593FCAED97BF1D61F60802D397350380FADED71AED64435D3E9EAA4C0468D80141E
Windows8-RT-KB2928120-x86.msuA5DFB34F3B9EAD9FA78C67DFC7ACACFA2FBEAC0B7F00A72D8A15EB2CA70F7146A8014E39A71CFF5E39596F379ACD883239DABD41
Windows8.1-KB2928120-x64.msuA07FF14EED24F3241D508C50E869540915134BB46641B1A9C95A7E4F0D5A247B9F488887AC94550B7F1D7B1198D5BCBA92F7A753
Windows8.1-KB2928120-x86.msuDE84667EC79CBA2006892452660EB99580D27306468EE4FA3A22DDE61D85FD3A9D0583F504105DF2F8256539051BC0B1EB713E9C
Windows8.1-KB2961899-x64.msu10BAE807DB158978BCD5D8A7862BC6B3EF20038BEC26618E23D9278FC1F02CA1F13BB289E1C6C4E0C8DA5D22E1D9CDA0DA8AFF51
Windows8.1-KB2961899-x86.msu230C64447CC6E4AB3AD7B4D4655B8D8CEFBFBE98E3FAD567AB6CA616E42873D3623A777185BE061232B952938A8846A974FFA7AF
update security_patch security_update security bug flaw vulnerability malicious attacker exploit registry unauthenticated buffer overrun overflow specially-formed scope specially-crafted denial of service DoS TSE
Propriedades

ID do Artigo: 2962486 - Última Revisão: 10/02/2015 18:27:00 - Revisão: 5.0

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 Essentials, Windows Server 2012 Foundation, Windows Server 2012 Standard, Windows 7 Service Pack 1, Windows Server 2008 R2 Service Pack 1, Windows Server 2008 Service Pack 2, Windows Vista Service Pack 2

  • atdownload kbbug kbexpertiseinter kbfix kbsecbulletin kbsecurity kbsecvulnerability KB2962486
Comentários
s.dqid"; document.getElementsByTagName("head")[0].appendChild(m);