MS14-025: Una vulnerabilidad en las preferencias de directivas de grupo podría permitir la elevación de privilegios: 13-05-14

INTRODUCCIÓN
Microsoft ha publicado el boletín de seguridad MS14-025. Para obtener más información acerca de este boletín de seguridad:

Obtención de ayuda y asistencia para esta actualización de seguridad

Ayuda para la instalación de actualizaciones:Soporte técnico de Microsoft Update

Soluciones de seguridad para profesionales de TI:Soporte técnico y solución de problemas de TechNet Security

Ayuda para la protección de su equipo basado en Windows frente a virus y malware:Centro de seguridad y soluciones para virus

Soporte local según el país:Soporte internacional

Más información

Problemas conocidos e información adicional acerca de esta actualización de seguridad

En los siguientes artículos podrá encontrar más información sobre esta actualización de seguridad relacionada con las versiones de productos individuales. Los artículos pueden contener información sobre problemas conocidos. De ser así, el problema conocido aparece debajo del vínculo de cada artículo.
  • 2928120 MS14-025: Descripción de la actualización de seguridad para herramientas de administración de servidor remoto de Windows para sistemas que tienen la actualización 2919355 instalada: 13-05-14
  • 2961899 MS14-025: Descripción de la actualización de seguridad para herramientas de administración de servidor remoto de Windows para sistemas que no tienen la actualización 2919355 instalada: 13-05-14
Preferencias de directivas de grupo

Descripción general

Algunas de las preferencias de directivas de grupo pueden almacenar una contraseña. Esta función se está quitando porque la contraseña no se ha almacenado de forma segura. Este artículo describe los cambios de la interfaz de usuario y las soluciones alternativas disponibles.

Los nombres de usuario y las contraseñas que se guarden ya no permitirá las siguientes preferencias de directivas de grupo:
  • Asignaciones de unidades
  • Usuarios locales y grupos
  • Tareas programadas
  • Servicios
  • Orígenes de datos
Esto afectará al comportamiento de cualquier objeto de directivas de grupo (GPO) en su entorno que confíe en contraseñas contenidas en estas preferencias. También evitará la creación de nuevas preferencias de directivas de grupo con esta función.

Para Asignaciones de unidades, Usuarios locales y Grupos, y Servicios, puede conseguir objetivos similares a través de otras funciones más seguras en Windows.

Para Tareas programadas y Orígenes de datos, no podrá conseguir los mismos objetivos que estaban disponibles a través de la función no segura de las contraseñas de preferencias de directivas de grupo.
Escenarios
Las siguientes preferencias de directivas de grupo se ven afectadas por este cambio. Cada preferencia se trata brevemente y, a continuación, en más detalle. Además, las soluciones alternativas que se ofrecen siempre le permiten realizar las mismas tareas.
Preferencia afectada Se aplica al usuarioSe aplica al equipo
Administración de usuarios locales
Unidades asignadas
No
Servicios
No
Tareas programadas (nivel superior)
Tareas programadas (nivel inferior)
Tareas inmediatas (nivel superior)
Tareas inmediatas (nivel inferior)
Orígenes de datos

Resumen de cambios

  • Los campos de contraseña en todas las preferencias afectadas están desactivados. Los administradores no pueden crear nuevas preferencias mediante el uso de estos campos de contraseña.
  • El campo nombre de usuario está deshabilitado en algunas preferencias.
  • No se pueden actualizar preferencias existentes que contengan una contraseña. Sólo pueden ser eliminadas o deshabilitadas, según la preferencia específica.
  • El comportamiento para desactivar y eliminar acciones no han cambiado para las preferencias.
  • Cuando un administrador abre cualquier preferencia que contenga el atributo CPassword, el administrador visualiza el siguiente cuadro de diálogo de advertencia para informarle de la degradación reciente. Los intentos de guardar los cambios en preferencias nuevas o existentes que necesiten el atributo CPassword activarán el mismo cuadro de diálogo. Solo eliminar y desactivar acciones no activará los cuadros de diálogo de advertencia.





Situación 1: Administración de usuarios locales

La preferencia de Administración de usuarios locales se utiliza con frecuencia para crear administradores locales que tienen una contraseña conocida en un equipo. Esta característica no es segura debido a la forma en que las preferencias de directivas de grupo almacena las contraseñas. Por lo tanto, esta función no está disponible. Esto afecta a las siguientes preferencias:
  • Configuración del equipo -> - Configuración del Panel de Control> Usuarios locales y grupos -> Nueva> Usuario local
  • Configuración de usuario -> - Configuración del Panel de Control> Usuarios locales y grupos -> Nueva> Usuario Local

Cambios importantes

Acción: Crear o Reemplazar
  • Los campos Nombre de usuario, Contraseña y Confirmar contraseña están deshabilitados.
  • El cuadro de diálogo de advertencia aparece cuando un administrador abre o intenta guardar los cambios en una preferencia existente que contiene una contraseña.




Acción: Actualizar
  • Los campos Contraseña y Confirmar contraseña están deshabilitados.
  • El cuadro de diálogo de advertencia aparece cuando un administrador abre o intenta guardar los cambios en una preferencia existente que contiene una contraseña.




Acción: Eliminar
  • Ningún cambio de comportamiento

Soluciones alternativas

Para aquellos que hayan confiado previamente en la Preferencia de las directivas de grupo para definir contraseñas locales de administrador, se proporciona el siguiente script como alternativa segura a CPassword. Copie y guarde el contenido en un nuevo archivo de Windows PowerShell y después ejecute el script como se indica en su sección .EXAMPLE.

Microsoft proporciona ejemplos de programación únicamente con fines ilustrativos, sin ninguna garantía expresa ni implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. En este artículo se da por supuesto que ya conoce el lenguaje de programación que se muestra, así como las herramientas empleadas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden ayudar a explicar la función de un procedimiento en particular. Sin embargo, no modificarán estos ejemplos para proporcionar una función adicional o crear procedimientos que cumplan sus requisitos específicos.

 function Invoke-PasswordRoll{<#.SYNOPSISEste script puede utilizarse para establecer las contraseñas aleatorias de cuentas locales en equipos remotos. La combinación de nombre de usuario/contraseña/servidor se guardarán en un archivo CSV.Las contraseñas de la cuenta almacenadas en el archivo CSV pueden cifrarse utilizando una contraseña de los administradores eligiendo garantizar que las contraseñas de la cuenta en texto sin cifrar no se escriban en el disco.Las contraseñas cifradas se pueden descifrar mediante otra función de este archivo: ConvertTo-CleartextPasswordFunción: Invoke-PasswordRollAutor: MicrosoftVersión: 1.0.DESCRIPTIONEste script puede utilizarse para establecer las contraseñas aleatorias de cuentas locales en equipos remotos. La combinación de nombre de usuario/contraseña/servidor se guardará en un archivo CSV.Las contraseñas de la cuenta almacenadas en el archivo CSV pueden cifrarse utilizando una contraseña de los administradores eligiendo garantizar que las contraseñas de la cuenta en texto sin cifrar no se escriban en el disco.Las contraseñas cifradas se pueden descifrar mediante otra función de este archivo: ConvertTo-CleartextPassword.PARAMETER ComputerNameUna matriz de equipos para ejecutar el script utilizando comunicación remota de PowerShell..PARAMETER LocalAccountsMatriz de cuentas locales cuya contraseña se deba cambiar..PARAMETER TsvFileNameEl archivo de salida para las combinaciones de nombre de usuario/contraseña/servidor..PARAMETER EncryptionKeyPara cifrar el archivo TSV con una contraseña. Utiliza el cifrado AES. Sólo se cifrarán las contraseñas almacenadas en el archivo TSV, el nombre de usuario y nombre de servidor es texto sin cifrar..PARAMETER PasswordLengthLa longitud de las contraseñas que se generará aleatoriamente para las cuentas locales..PARAMETER NoEncryptionNo cifrar las contraseñas de la cuenta almacenadas en el archivo TSV. Esto hará que las contraseñas de texto sin cifrar se escriban en el disco.	.EXAMPLE. .\Invoke-PasswordRoll.ps1    Carga las funciones de este archivo de scriptInvoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator","CustomLocalAdmin") -TsvFileName "LocalAdminCredentials.tsv" -EncryptionKey "Password1"Se conecta a todos los equipos almacenados en el archivo "computerlist.txt". Si la cuenta local "administrador" y/o "CustomLocalAdmin" están presentes en el sistema, su contraseña se cambiaa una contraseña aleatoria generada de longitud 20 (predeterminada). Las combinaciones de nombre de usuario/contraseña/servidor se almacenan en LocalAdminCredentials.tsv, y las contraseñas de cuenta son cifradas AES con la contraseña "Password1"..EXAMPLE. .\Invoke-PasswordRoll.ps1    Carga las funciones de este archivo de scriptInvoke-PasswordRoll -ComputerName (Get-Content computerlist.txt) -LocalAccounts @("administrator") -TsvFileName "LocalAdminCredentials.tsv" -NoEncryption -PasswordLength 40Se conecta a todos los equipos almacenados en el archivo "computerlist.txt". Si la cuenta local "administrador" está presente en el sistema, su contraseña se cambia a una contraseña aleatoria generadade longitud 40. Las combinaciones de nombre de usuario/contraseña/servidor se almacenan en LocalAdminCredentials.tsv sin cifrar..NOTESRequisitos: - Debe instalarse PowerShellv2 o superior- Debe activarse la función remota de PowerShell en todos los sistemas en los que se ejecutará el scriptComportamiento del script:-Si existe una cuenta local en el sistema, pero no está especificada en el parámetro LocalAccounts, el script escribirá una advertencia en la pantalla para alertarle de la presencia de esta cuenta local. El script se seguirá ejecutando cuando esto ocurra.-Si se especifica una cuenta local en el parámetro LocalAccounts, pero la cuenta no existe en el PC, no ocurrirá nada (NO se creará ninguna cuenta).-La función ConvertTo-CleartextPassword, contenida en este archivo, puede usarse para descifrar contraseñas que se almacenan cifradas en el archivo TSV.-Si no puede conectarse un servidor especificado en ComputerName, PowerShell generará un mensaje de error.-Microsoft aconseja a las empresas a cambiar periódicamente todas las contraseñas de cuentas locales y de dominio.#>    [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    )    Cargar las clases .net necesarias    Add-Type -AssemblyName "System.Web" -ErrorAction Stop    Este es el bloque de script que se ejecutará en todos los equipos especificados en ComputerName    $RemoteRollScript = {        Param(            [Parameter(Mandatory=$true, Position=1)]            [String[]]            $Passwords,            [Parameter(Mandatory=$true, Position=2)]            [String[]]            $LocalAccounts,            Me permite registrar el nombre del servidor al que estaba conectado el script, algunas veces los registros DNS se mezclan y esta característica resulta útil.            [Parameter(Mandatory=$true, Position=3)]            [String]            $TargettedServerName        )        $LocalUsers = Get-WmiObject Win32_UserAccount -Filter "LocalAccount=true" | Foreach {$_.Name}        Compruebe si el PC tiene cuentas locales de usuario cuyas contraseñas no vayan a ser desplegadas por este script        foreach ($User in $LocalUsers)        {            if ($LocalAccounts -inotcontains $User)            {                Write-Warning "Servidor: '$($TargettedServerName)"tiene una cuenta local"$($User)' cuya cuenta NO se cambiará por este script"            }        }        Para cada cuenta local especificada que existe en este servidor, cambiar la contraseña        $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 al cambiar la contraseña para el usuario:$($LocalAdmin) en el servidor:$($TargettedServerName)"                }            }            $PasswordIndex++        }    }    Generar la contraseña en el cliente que ejecuta este script, no en el equipo remoto. System.Web.Security no está disponible en el perfil del cliente de. NET. La realización de esta llamada    #    en el cliente que ejecuta el script garantiza que solo un equipo necesite tener el tiempo de ejecución de .NET completo instalado (a diferencia de los sistemas que despliegan la contraseña).    function Create-RandomPassword    {        Param(            [Parameter(Mandatory=$true)]            [ValidateRange(20,120)]            [Int]            $PasswordLength        )        $Password = [System.Web.Security.Membership]::GeneratePassword($PasswordLength, $PasswordLength / 4)        No debe fallar, pero voy a poner una comprobación aquí de todos modos        if ($Password.Length -ne $PasswordLength)        {            throw new Exception("La contraseña devuelta por GeneratePassword no tiene la longitud requerida. Longitud requerida: $($PasswordLength). Longitud generada: $($Password.Length)")        }        return $Password    }    Función principal - Generar una contraseña y establecer comunicación remota con los equipos para cambiar la contraseña de cuentas locales 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 "Error al crear la clave de cifrado de TSV" -ErrorAction Stop        }    }    foreach ($Computer in $ComputerName)    {        Necesidad de generar 1 contraseña para cada cuenta que se podía cambiar        $Passwords = @()        for ($i = 0; $i -lt $LocalAccounts.Length; $i++)        {            $Passwords += Create-RandomPassword -PasswordLength $PasswordLength        }        Write-Output "Conectando con el servidor "$($Computer)" para desplegar las contraseñas de administrador local especificadas"        $Result = Invoke-Command -ScriptBlock $RemoteRollScript -ArgumentList @($Passwords, $LocalAccounts, $Computer) -ComputerName $Computer        Si se utiliza el cifrado, cifrar la contraseña con la clave proporcionada por el usuario antes de escribir en el 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 función puede utilizarse para descifrar contraseñas que se almacenan cifradas por la función PasswordRoll de Invoke.Función: ConvertTo-CleartextPasswordAutor: MicrosoftVersión: 1.0.DESCRIPTIONEsta función puede utilizarse para descifrar contraseñas que se almacenan cifradas por la función Invoke-PasswordRoll..PARAMETER EncryptedPasswordLa contraseña cifrada que se ha almacenado en un archivo TSV..PARAMETER EncryptionKeyLa contraseña que utiliza para realizar el cifrado..EXAMPLE. .\Invoke-PasswordRoll.ps1    #Carga las funciones de este archivo de scriptConvertTo-CleartextPassword -EncryptionKey "Password1" -EncryptedPassword 76492d1116743f0423413b16050a5345MgB8AGcAZgBaAHUAaQBwADAAQgB2AGgAcABNADMASwBaAFoAQQBzADEAeABjAEEAPQA9AHwAZgBiAGYAMAA1ADYANgA2ADEANwBkADQAZgAwADMANABjAGUAZQAxAGIAMABiADkANgBiADkAMAA4ADcANwBhADMAYQA3AGYAOABkADcAMQA5ADQAMwBmAGYANQBhADEAYQBjADcANABkADIANgBhADUANwBlADgAMAAyADQANgA1ADIAOQA0AGMAZQA0ADEAMwAzADcANQAyADUANAAzADYAMAA1AGEANgAzADEAMQA5ADAAYwBmADQAZAA2AGQA"Descifra la contraseña cifrada que se ha almacenado en el archivo 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)))}
Los administradores pueden agregar cuentas locales de administrador a los PC creando un grupo de Active Directory y añadiéndolo al grupo de administradores locales por medio de las Preferencias de directivas de grupo -> Grupo local. Esta acción no almacena las credenciales en caché. El cuadro de diálogo es similar al siguiente. Esta solución alternativa no requiere una conexión a los servicios de dominio de Active Directory cuando el usuario inicia sesión utilizando estas credenciales.





Escenario 2: Unidades asignadas

Los administradores utilizan asignaciones de unidades para asignar ubicaciones de red a los usuarios. La característica de protección de la contraseña se utiliza para asegurar el acceso autorizado a la unidad. Esto afecta a las siguientes preferencias:
  • Configuración de usuario -> Configuración de Windows -> Asignaciones de unidades -> Nueva -> Unidad asignada

Cambios importantes

Acción: Crear, Actualizar o Reemplazar
  • Los campos Nombre de usuario, Contraseña y Confirmar contraseña están deshabilitados.



Acción: Eliminar
  • Ningún cambio de comportamiento

Soluciones alternativas

En lugar de utilizar el método de contraseña para la autenticación, puede utilizar el Explorador de Windows para administrar los permisos compartidos y asignar derechos a los usuarios. Puede utilizar los objetos de Active Directory para controlar los permisos de la carpeta.


Escenario 3: Servicios

Puede usar la preferencia de Servicios para cambiar las propiedades de los servicios de forma que se ejecuten en un contexto, en lugar de en su contexto de seguridad original. Esto afecta a las siguientes preferencias:
  • Configuración del equipo -> Configuración del Panel de Control> Servicios -> Nuevo -> Servicio

Cambios importantes

Inicio: Ningún cambio, Automático o Manual
  • Los campos Contraseña y Confirmar contraseña están deshabilitados.
  • El administrador puede utilizar solo cuentas integradas.



Inicio: Deshabilitar
  • Ningún cambio de comportamiento
Cuadro de diálogo nuevo
  • Los administradores que intenten utilizar usuarios no integrados para esta cuenta recibirán la siguiente advertencia:




Soluciones alternativas

Pueden ejecutar servicios como cuenta de sistema local. Los permisos de servicio pueden modificarse como se indica en el siguiente artículo en Microsoft Knowledge Base:
256345 Cómo configurar directivas de grupo para establecer la seguridad para servicios del sistema

Nota
Si el servicio que quiere configurar no existe, debe configurar los ajustes en un PC que tenga este servicio en ejecución.


Escenario 4: Tareas programadas e inmediatas (nivel superior)

Se utilizan para ejecutar las tareas programadas en un contexto de seguridad específico. La posibilidad de almacenar credenciales para tareas programadas para ejecutarlas como un usuario arbitrario cuando el usuario no ha iniciado sesión, ya no está disponible. Esto afecta a las siguientes preferencias: (Tenga en cuenta que en algunas plataformas, "al menos Windows 7" se sustituyen por "Windows Vista y versiones posteriores").
  • Configuración del equipo -> Configuración del Panel de Control -> Tareas programadas -> Nueva-> Tarea programada (al menos Windows 7)
  • Configuración del equipo -> Configuración del Panel de Control -> Tareas programadas -> Nueva-> Tarea inmediata (al menos Windows 7)
  • Configuración del usuario -> Configuración del Panel de Control -> Tareas programadas -> Nueva-> Tarea programada (al menos Windows 7)
  • Configuración del usuario -> Configuración del Panel de Control -> Tareas programadas -> Nueva-> Tarea inmediata (al menos Windows 7)

Cambios importantes

Acción: Crear, Actualizar o Reemplazar
  • Al seleccionar la opción Ejecutar, con independencia de si el usuario ha iniciado sesión, el cuadro de diálogo deja de aparecer para pedir las credenciales al administrador.
  • La casilla de verificación No almacenar contraseña está desactivada. De manera predeterminada, la casilla también está activada.



Acción: Eliminar

Ningún cambio de comportamiento

Soluciones alternativas

Para las tareas "Tarea programada (al menos Windows 7)" y "Tarea inmediata (al menos Windows 7)", los administradores pueden utilizar las cuentas de usuario cuando el usuario ha iniciado sesión. O bien, solo pueden tener acceso a los recursos locales como ese usuario. Estas tareas se pueden ejecutar en el contexto del servicio local.



Situación 5: Tareas programadas y de forma inmediatas (nivel inferior)

Se trata de la versión de nivel inferior de las preferencias utilizadas para ejecutar las tareas programadas en un contexto de seguridad específico. La posibilidad de almacenar credenciales para tareas programadas para ejecutarlas como un usuario arbitrario cuando el usuario no ha iniciado sesión, ya no está disponible. Esto afecta a las siguientes preferencias:
  • Configuración del equipo -> Configuración del Panel de Control -> Tareas programadas -> Nueva -> Tarea programada
  • Configuración del equipo -> Configuración del Panel de Control -> Tareas programadas - > Nueva -> Tarea inmediata (Windows XP)
  • Configuración del usuario -> Configuración del Panel de Control -> Tareas programadas -> Nueva -> Tarea programada
  • Configuración del usuario -> Configuración del Panel de Control -> Tareas programadas -> Nueva -> Tarea inmediata (Windows XP)

Cambios importantes

Acción: Crear, Actualizar o Reemplazar
  • La casilla de verificación Ejecutar como está desactivada. Por lo tanto, los campos Nombre de usuario, Contraseña y Confirmar contraseña están deshabilitados.



Acción: Eliminar

Ningún cambio de comportamiento

Soluciones alternativas

Para los elementos "Tarea programada" y "Tarea inmediata (Windows XP)", las tareas programadas se ejecutan con los permisos que están disponibles actualmente para el servicio local.


Escenario 6: Orígenes de datos

La preferencia Orígenes de datos se utiliza para asociar un origen de datos con un PC o un usuario. Esta característica ya no almacena credenciales para habilitar el acceso a orígenes de datos que están protegidas por una contraseña. Esto afecta a las siguientes preferencias:
  • Configuración del equipo -> Configuración del Panel de Control -> Orígenes de datos
  • Configuración de usuario -> Configuración del Panel de Control -> Orígenes de datos

Cambios importantes

Acción: crear, actualizar o reemplazar
  • Los campos Nombre de usuario, Contraseña y Confirmar contraseña están deshabilitados:



Acción: Eliminar
  • Ningún cambio de comportamiento

Soluciones alternativas

No hay soluciones alternativas disponibles. Esta preferencia ya no almacena credenciales para permitir el acceso a orígenes de datos que estén protegidos por una contraseña.


Degradación de CPassword

Eliminación de CPassword

El script de Windows PowerShell que está incluido en este artículo de Microsoft Knowledge Base detecta si un dominio contiene alguna preferencia de directivas de grupo que pueda usar CPassword. Si se detecta CPassword XML en una preferencia determinada, se muestra en esta lista.


Detección de preferencias CPassword

Este script debe ejecutarse desde un directorio local en el controlador de dominio que desee limpiar. Copie y guarde el contenido en un nuevo archivo de Windows PowerShell, determine la unidad del sistema y después ejecute el script como se indica en la utilización siguiente.

 <#.SYNOPSISLos objetos de directivas de grupo en su dominio pueden tener preferencias que almacenan contraseñas para las distintas tareas, como las siguientes:    1. Orígenes de datos    2. Asignaciones de unidades    3. Usuarios locales    4. Tareas programadas (tanto en XP como en nivel superior)    5. ServiciosEstas contraseñas se almacenan en SYSVOL como parte de las preferencias GP y no son seguras porque tienen un cifrado débil (AES de 32 bits). Por lo tanto, recomendamos que no implemente estas preferencias en su entorno de dominio y que elimine estas preferencias existentes. Este script ayuda al administrador a encontrar preferencias GP en su SYSVOL de dominio que contiene las contraseñas. .DESCRIPTIONEste script debe ejecutarse en un controlador de dominio o un equipo de cliente que esté instalado con RSAT para imprimir todas las preferencias que contienen contraseñas con información como el GPO, Nombre de preferencia y la ruta GPEdit bajo la cual se define la preferencia.Después de tener la lista de preferencias afectadas, estas preferencias pueden eliminarse utilizando el editor en la Consola de administración de directivas de grupo. .SYNTAXGet-SettingsWithCPassword.ps1 [-Path  <String>] .EXAMPLEGet-SettingsWithCPassword.ps1 -Path %WinDir%\SYSVOL\domainGet-SettingsWithCPassword.ps1 -Path  <Ruta de la carpeta para copia de seguridad de GPO> .NOTESSi el módulo PS de directivas de grupo no se encuentra, el resultado contendrá los GUID de GPO en lugar de los nombres de GPO. Puede ejecutar este script en un controlador de dominio o volver a ejecutar el script en el cliente después de instalar RSAT y activar el módulo de directivas de grupo.O bien, puede utilizar los GUID de GPO para obtener los nombres de GPO mediante el cmdlet Get-GPO. .LINKhttp://go.microsoft.com/fwlink/?LinkID=390507 #>#----------------------------------------------------------------------------------------------------------------# Parámetros de entrada#--------------------------------------------------------------------------------------------------------------param(    [string]$Path = $(throw "-Path is required.") # Ruta del directorio en el que se ubican las categorías GPP. )#---------------------------------------------------------------------------------------------------------------$isGPModuleAvailable = $false$impactedPrefs = { "Groups.xml", "ScheduledTasks.xml","Services.xml", "DataSources.xml", "Drives.xml" }#----------------------------------------------------------------------------------------------------------------# Importar módulo de directivas de grupo si está disponible#----------------------------------------------------------------------------------------------------------------if (-not (Get-Module -name "GroupPolicy")){   if (Get-Module -ListAvailable |          Where-Object { $_.Name -ieq "GroupPolicy" })    {        $isGPModuleAvailable = $true        Import-Module "GroupPolicy"    }    else    {        Write-Warning "No es posible importar módulo de directivas de grupo para PowerShell. Por lo tanto, se notificarán los GUID de GPO.                        Ejecute este script en el controlador de dominio para obtener los nombres de GPO, o utilice el cmdlet Get-GPO (en el controlador de dominio) para obtener el nombre del GPO a partir del GUID de GPO."    }}else{    $isGPModuleAvailable = $true}Function Enum-SettingsWithCpassword ( [string]$sysvolLocation ){    # GPMC tree paths    $commonPath = " -> Preferences -> Control Panel Settings -> "    $driveMapPath = " -> Preferences -> Windows Settings -> "        Obtener de forma recursiva todos los archivos xml dentro de la ubicación de SYVOL    $impactedXmls = Get-ChildItem $sysvolLocation -Recurse -Filter "*.xml" | Where-Object { $impactedPrefs -cmatch $_.Name }            Cada archivo xml contiene varias preferencias. Iterar a través de cada preferencia para comprobar si    # contiene el atributo cpassword y lo muestra.    foreach ( $file in $impactedXmls )    {        $fileFullPath = $file.FullName                Establecer la categoría GPP. Si el archivo se encuentra en la carpeta Machine en SYSVOL        # el ajuste se define en la configuración del equipo; de lo contrario, el         # ajuste es una configuración del usuario          if ( $fileFullPath.Contains("Machine") )        {            $category = "Computer Configuration"        }        elseif ( $fileFullPath.Contains("User") )        {            $category = "User Configuration"        }        else        {            $category = "Unknown"        }        Obtener el contenido del archivo 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            {   # borrar gppWithCpassword y preferenceType para el siguiente elemento.                try                {                    Clear-Variable -Name gppWithCpassword -ErrorAction SilentlyContinue                    Clear-Variable -Name preferenceType -ErrorAction SilentlyContinue                }                catch [Exception]{}            }        }        if ($gppWithCpassword -ne $null)        {            Crear nombre de GPO del GUID extraído de la ruta del archivo             $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                }            }            mostrar preferencias que contienen 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 si $gppWithCpassword    } # finalizar para cada $file} # finalizar funciones Enum-PoliciesWithCpassword#-----------------------------------------------------------------------------------# Comprobar si Path es una ruta válida. Enumerar todas las configuraciones que contienen cpassword. #-----------------------------------------------------------------------------------if (Test-Path $Path ){    Enum-SettingsWithCpassword $Path}else{    Write-Warning "No es tal directorio: $Path"}  


Ejemplo de uso (se supone que la unidad del sistema es C)

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

Nota Tenga en cuenta que también puede dirigir cualquier copia de seguridad de GPO para la ruta en lugar del dominio.

El script de detección genera una lista similar a la siguiente:



Para listas más largas, considere la posibilidad de guardar el resultado en un archivo:

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

Eliminación de preferencias de CPassword

Para poder eliminar las preferencias que contienen datos CPassword, le sugerimos que utilice la Consola de administración de directivas de grupo (GPMC) en el controlador de dominio o desde un cliente que tenga las Herramientas de administración del servidor remoto instaladas. Puede quitar cualquier preferencia en cinco pasos en estas consolas. Para ello, realice los siguientes pasos:
  1. En GPMC, abra la preferencia que contiene datos de CPassword.
  2. Cambiar la acción a Eliminar o Deshabilitar, según corresponda a la preferencia.
  3. Haga clic en Aceptar para guardar los cambios.
  4. Espere uno o dos ciclos de actualización de directivas de grupo para permitir que los cambios se propaguen a los clientes.
  5. Después de que los cambios se apliquen a todos los clientes, elimine la preferencia.
  6. Repita los pasos 1 a 5 según sea necesario para limpiar todo su entorno. Cuando el script de detección devuelva cero resultados, habrá finalizado.

Información de hash de los archivos

Nombre de archivoHash 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
Propiedades

Id. de artículo: 2962486 - Última revisión: 10/02/2015 18:26:00 - Revisión: 6.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
Comentarios