Cómo auditar el uso de la versión en tiempo de ejecución de Visual C++
Microsoft Visual C++ Redistributable y Visual Studio C++ Runtime (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. Esta guía 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 esta guía 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 puede usar una aplicación, esta guía también muestra cómo usar los cmdlets Get-Acl
y Set-Acl
de PowerShell 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:
- Abra el Editor de directivas de grupo locales pulsando
Windows
+R
para abrir el cuadro de diálogo Ejecutar. A continuación, escribagpedit.msc
y presione Escriba. - Vaya a Configuración del equipo>Configuración de Windows>Configuración de seguridad>Configuración de directiva de auditoría avanzada>Directivas de auditoría del sistema>acceso a objetos.
- 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ía>Correcto>Aceptar.
- Cierre el Editor de directivas de grupo locales.
Como alternativa, puede usar auditpol.exe
para habilitar el acceso a objetos:
- Enumere la configuración actual de la línea de comandos con
AuditPol.exe /get /category:"Object Access"
. - Habilite el acceso a objetos con
AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable
.
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:
- 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.
- Seleccione avanzado.
- En el cuadro de diálogo Configuración de seguridad avanzada, seleccione la pestaña Auditoría y, a continuación, seleccione Continuar.
- Para agregar una nueva regla de auditoría, seleccione Agregar. En el cuadro de diálogo Entrada de auditoría, seleccione una entidad de seguridad, escriba el nombre del usuario o grupo que desea agregar, como (Todos) y seleccione Aceptar.
- En Tipo, asegúrese de que Correcto esté seleccionado.
- Seleccione Mostrar permisos por adelantado>Borrar todo>Recorrer carpeta / ejecutar archivo>Aceptar.
- Ahora debería haber una nueva fila en las entradas Auditoría que coincida con lo que ha seleccionado. Seleccione Aceptar.
- 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 "Evento 4663: Se intentó acceder a un objeto" para cada archivo que incluye el permiso de auditoría y al que se accede mediante un proceso.
- Abra el Visor de eventos pulsando
Windows
+R
para abrir el cuadro de diálogo Ejecutar. Escribaeventvwr.msc
y pulse Intro. - Navegue hasta los registros de Seguridad en el Visor de eventos expandiendo Registros de Windows>Seguridad. En el panel de resultados se enumeran los eventos de seguridad.
- Busque los eventos de auditoría seleccionando Filtrar registro actual... en el panel Acciones. Limite los eventos a ID de evento 4663 (Éxito de auditoría para la categoría Sistema de archivos) introduciendo 4663 en el cuadro de texto Incluye/Excluye ID de eventos.
Para obtener un ejemplo de un evento 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
Como información general, la actualización de permisos de auditoría de archivos con PowerShell sigue estos pasos:
- Defina la regla de auditoría del sistema de archivos para aplicar a los archivos.
- Obtenga el descriptor de seguridad de un archivo con
Get-Acl
. - Aplicar la regla de auditoría al descriptor de seguridad.
- Aplique el descriptor de seguridad actualizado en el archivo original con
Set-Acl
. - Vea los registros del Evento de Auditoría de Acceso a Archivos 4663 con
Get-WinEvent
.
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 Get-WinEvent
para obtener registros de eventos para varios registros de eventos, como se muestra en el código de PowerShell siguiente que muestra todos los registros del evento de auditoría 4663 en 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 han instalado VC 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 Preguntas más frecuentes sobre bibliotecas redistribuibles y en tiempo de ejecución de Visual C++ | Microsoft Learn.
Ubicaciones de instalación de VC Runtime
Aquí es donde se instala cada versión del entorno de ejecución de VC:
Versión de Visual Studio | Ubicación(es) instalada(s) |
---|---|
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 |
Consulte también
Redistribuir Archivos de Visual C++
las descargas de Visual C++ compatibles más recientes
Preguntas frecuentes sobre el ciclo de vida - Visual C++ Redistributable y bibliotecas de tiempo de ejecución
compatibilidad binaria de C++ entre versiones de Visual Studio