Compartir a través de


Auditar el uso de la versión en tiempo de ejecución de Visual C++

Microsoft Visual C++ Redistributable y Visual Studio Runtime de C++ (colectivamente, "VC Runtime") son componentes críticos de muchas aplicaciones. En toda la red, es posible que las máquinas sigan ejecutando aplicaciones que instalen y usen una versión fuera de soporte técnico del entorno de ejecución de VC. Puede usar la auditoría de archivos NTFS para identificar el uso como un paso para reemplazar esas aplicaciones por las que usan una versión compatible del entorno de ejecución de VC. Este artículo le guía a través de la configuración de la auditoría de archivos NTFS, proporciona sugerencias de solución de problemas y resalta las ventajas de las auditorías normales.

Para obtener más información sobre las versiones de VC Runtime que ya no se admiten, consulte descargas compatibles más recientes de Microsoft Visual C++ Redistributable.

Habilitación de la auditoría de archivos NTFS para determinar el uso de VC Runtime

En este artículo se proporcionan los pasos para habilitar manualmente la auditoría de archivos NTFS y revisar los eventos de auditoría para determinar qué aplicaciones llaman a las versiones no admitidas del entorno de ejecución de VC. Dado que hay varios archivos que una aplicación puede usar, en este artículo también se muestra cómo usar PowerShell y cmdlets para actualizar los permisos de auditoría. Para obtener más información sobre cómo configurar directivas de auditoría para un archivo, consulte Aplicar una directiva de auditoría básica en un archivo o carpeta.

Habilitar manualmente la auditoría de acceso a objetos en el sistema

El acceso a objetos debe estar habilitado antes de habilitar la auditoría de nivel de archivo:

  1. Seleccione Windows+R para abrir el cuadro de diálogo Run. A continuación, escriba [instrucción específica] y presione la tecla Enter para abrir el Editor de directivas de grupo local.
  2. Vaya a Configuración del equipo>Configuración de Windows>Configuración de seguridad>Configuración de la directiva de auditoría avanzada>Directivas de auditoría de sistema>Acceso a Objetos.
  3. Haga doble clic en Auditar sistema de archivos. En el cuadro de diálogo Propiedades del sistema de archivos de auditoría, seleccione Configurar los siguientes eventos de auditoríaCorrectoAceptar.
  4. Cierre el Editor de directiva de grupo local.

Como alternativa, puede usar para habilitar el acceso a objetos:

  1. Enumere la configuración actual de la línea de comandos con .
  2. Habilite el acceso a objetos con .

Habilitar manualmente la auditoría en un archivo

Para supervisar qué proceso accede a un archivo vc Runtime, habilite la auditoría en el archivo vc Runtime:

  1. Haga clic con el botón derecho en el archivo que desea auditar, seleccione Propiedadesy, a continuación, seleccione la pestaña de Seguridad. Para obtener más información sobre cómo buscar archivos de VC Runtime instalados, consulte ubicaciones de instalación de VC Runtime.
  2. Seleccione avanzado.
  3. En el cuadro de diálogo Configuración de seguridad avanzada , seleccione la pestaña Auditoría y, a continuación, seleccione Continuar.
  4. Para agregar una nueva regla de auditoría, seleccione Agregar. En el cuadro de diálogo Entrada de auditoría, seleccione un principal y escriba el nombre del usuario o grupo que desea añadir, como "Todos". Después, seleccione Aceptar.
  5. En Tipo, asegúrese de que Éxito está seleccionado.
  6. Seleccione Mostrar permisos por adelantadoBorrar todoRecorrer carpeta / ejecutar archivoAceptar.
  7. Observe cómo una nueva fila de las entradas de auditoría coincide con lo que has seleccionado. Seleccione Aceptar.
  8. En el cuadro de diálogo Propiedades , seleccione Aceptar.

La regla de auditoría ahora está habilitada para el archivo.

Revisar manualmente los registros de auditoría

La auditoría de archivos NTFS genera el evento 4663: se intentó obtener acceso a un objeto para cada archivo que incluye el permiso de auditoría y al que se accede mediante un proceso.

  1. Seleccione Windows+R para abrir el cuadro de diálogo Run. A continuación, escriba eventvwr.msc y seleccione Enter para abrir Visor de eventos.
  2. Acceda a los logs de Seguridad en el Visor de eventos desplegando Registros de Windows>Seguridad. En el panel de resultados se enumeran los eventos de seguridad.
  3. Busque los eventos de auditoría seleccionando Filtrar registro actual... en el panel Acciones. Para restringir los eventos al ID de evento 4663 (Éxito de auditoría para la categoría del sistema de archivos), escriba 4663 en el cuadro de texto Identificadores de evento de inclusión y exclusión.

Para ver un ejemplo de auditoría de acceso a archivos 4663, vea 4663(S): Se intentó acceder a un objeto .

Uso de PowerShell para auditar el uso de VC Runtime

Para actualizar los permisos de auditoría de archivos con PowerShell, siga estos pasos:

  1. Defina la regla de auditoría del sistema de archivos que se aplicará a los archivos.
  2. Obtenga el descriptor de seguridad de un archivo con .
  3. Aplicar la regla de auditoría al descriptor de seguridad.
  4. Aplique el descriptor de seguridad actualizado en el archivo original con .
  5. Vea los registros del Evento de Auditoría de Acceso a Archivos 4663 con .

PowerShell: Auditar archivos fuera de soporte de VC Runtime

El siguiente código de PowerShell le permite auditar los archivos de VC Runtime instalados que ya no se admiten.

function Get-AuditRuleForFile {
    $auditRuleArguments =   'Everyone'              <# identity #>,
                            'ExecuteFile, Traverse' <# fileSystemRights #>,
                            'Success'               <# flags #>
    $auditRule = New-Object System.Security.AccessControl.FileSystemAuditRule($auditRuleArguments)

    return $auditRule
}

function Set-FileAuditRule {
    param (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]$file,
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [System.Security.AccessControl.FileSystemAuditRule]$auditRule
    )

    $existingAcl = Get-Acl -Path $file
    $existingAcl.AddAuditRule($auditRule) | Out-Null
    Set-Acl -Path $file -AclObject $existingAcl
}

$newAuditRule = Get-AuditRuleForFile

# Visual Studio Redistributable for 2005 (VC++ 8.0) and 2008 (VC++ 9.0)
Get-ChildItem "$ENV:SystemRoot\WinSxS\Fusion" -filter '*.dll' -ErrorAction SilentlyContinue -Recurse |
Where-Object FullName -IMatch 'microsoft\.vc[89]0' |
ForEach-Object {
    Set-FileAuditRule $_.FullName $newAuditRule
}

# Visual Studio Redistributable for 2010 (VC++ 10.0), 2012 (VC++ 11.0) and 2013 (VC++ 12.0)
$languageCodes = 'chs|cht|deu|enu|esn|fra|ita|jpn|kor|rus'
$versions = '(1[012]0)'
$regex = "^((atl|msvc[pr]|vcamp|vccorlib|vcomp)$versions|mfc$versions(u|$languageCodes)?|mfcm$versions(u)?)\.dll$"
Get-ChildItem "$ENV:SystemRoot\SysWOW64","$ENV:SystemRoot\System32" -filter '*.dll' |
Where-Object Name -imatch $regex |
ForEach-Object {
    Set-FileAuditRule $_.FullName $newAuditRule
}

PowerShell: Visualización de eventos de auditoría de archivos

PowerShell proporciona un comando para obtener registros de diferentes logs de eventos, como se muestra en el siguiente script de PowerShell que enumera todos los registros del Evento de Auditoría de Acceso a Archivos 4663 de las últimas 24 horas:

function Get-AuditEntries {
    param (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [System.DateTime]$oldestTime
    )
    Get-WinEvent -FilterHashtable @{LogName='Security';Id=4663;StartTime=(Get-Date $oldestTime)} |
    ForEach-Object {
        $record = [ordered]@{}
        $record['TimeCreated'] = $_.TimeCreated
        $accessName = ($_.Message |
            Select-String -Pattern "Accesses:[\t\s]+(?<Accesses>.+)").Matches.Groups[1]
        ([xml]$_.ToXML()).Event.EventData.ChildNodes |
        ForEach-Object -Begin {
            $record[$accessName.Name]=$accessName.Value.Trim()
        } -Process {
            $record[$_.Name] = $_.'#text'
        }
        [PSCustomObject]$record
    } |
    Where-Object { $_.ObjectName -imatch '\.dll$'}
}

Get-AuditEntries -oldestTime (Get-Date).AddHours(-24)
TimeCreated : 11/20/2024 5:00:11 AM
Accesses : Execute/Traverse
SubjectUserSid : \*\*\*\*\*
SubjectUserName : \*\*\*\*\*
SubjectDomainName : WORKGROUP
SubjectLogonId : \*\*\*\*\*
ObjectServer : Security
ObjectType : File
ObjectName : C:\\Windows\\WinSxS\\amd64\_microsoft.vc90.crt\_1fc8b3b9a1e18e3b\_9.0.30729.9635\_none\_08e2c157a83ed5da\\msvcr90.dll
HandleId : 0x93c
AccessList : %%4421
AccessMask : 0x20
ProcessId : 0x24d4
ProcessName : C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe
ResourceAttributes : S:AI

Pasos siguientes después de auditar el uso de VC Runtime

Después de determinar qué procesos usan los archivos de VC Runtime o qué aplicaciones instalaron Visual C++ Redistributable, desinstale esas aplicaciones o actualícelas a versiones más recientes que no dependen de los entornos de ejecución de VC no admitidos.

Algunas aplicaciones de Microsoft requieren versiones heredadas del entorno de ejecución de VC. Para obtener más información, consulte las preguntas más frecuentes sobre las bibliotecas redistribuibles y en tiempo de ejecución de Visual C++.

Ubicaciones de instalación de VC Runtime

En la tabla siguiente se muestra dónde está instalada cada versión del entorno de ejecución de VC.

versión de Visual Studio Ubicaciones de instalación
Visual Studio 2013 (VC++ 12.0) %SystemRoot%\\System32, %SystemRoot%\\SysWOW64
Visual Studio 2012 (VC++ 11.0) %SystemRoot%\\System32, %SystemRoot%\\SysWOW64
Visual Studio 2010 (VC++ 10.0) %SystemRoot%\\System32, %SystemRoot%\\SysWOW64
Visual Studio 2008 (VC++ 9.0) %SystemRoot%\\WinSxS\\Fusion
Visual Studio 2005 (VC++ 8.0) %SystemRoot%\\WinSxS\\Fusion