Compartilhar via


Como auditar o uso da versão do Runtime do Visual C++

O Microsoft Visual C++ Redistribuível e o Runtime do Visual Studio C++ (coletivamente, "VC Runtime") são componentes críticos de muitos aplicativos. Em toda a rede, os computadores ainda podem estar executando aplicativos que instalam e usam uma versão sem suporte do Vc Runtime. Você pode usar a auditoria de arquivo NTFS para identificar esse uso como uma etapa para substituir esses aplicativos por aqueles que usam uma versão com suporte do Vc Runtime. Este guia orienta você pela configuração da auditoria de arquivos NTFS, fornece dicas de solução de problemas e destaca os benefícios das auditorias regulares.

Para obter mais informações sobre as versões do VC Runtime que não têm mais suporte, consulte Downloads redistribuíveis mais recentes do Microsoft Visual C++.

Habilitar a auditoria de arquivos NTFS para determinar o uso do VC Runtime

Este guia fornece as etapas para habilitar manualmente a auditoria de arquivos NTFS e examinar eventos de auditoria para determinar quais aplicativos estão chamando as versões sem suporte do Runtime de VC. Como há vários arquivos que podem ser usados por um aplicativo, este guia também mostra como usar os cmdlets Get-Acl e Set-Acl do PowerShell para atualizar as permissões de auditoria. Para obter mais informações sobre como configurar políticas de auditoria para um arquivo, consulte Aplicar uma política de auditoria básica em um arquivo ou pasta.

Habilitar manualmente a auditoria de acesso a objetos no sistema

O acesso ao objeto deve ser habilitado antes de habilitar a auditoria no nível do arquivo:

  1. Abra o editor de política de grupo local pressionando Windows + R para abrir a caixa de diálogo Executar. Em seguida, digite gpedit.msc e pressione Enter.
  2. Navegue até Configuração do Computador>Configurações do Windows>Configurações de Segurança>Configuração Avançada de Política de Auditoria>Políticas de Auditoria do Sistema>de Acesso a Objetos.
  3. Clique duas vezes em Sistema de Arquivos de Auditoria. Na caixa de diálogo Propriedades do Sistema de Arquivos de Auditoria, selecione Configurar os seguintes eventos de auditoria>Êxito>OK.
  4. Feche o Editor de Política de Grupo Local.

Como alternativa, você pode usar auditpol.exe para habilitar o acesso ao objeto:

  1. Listar as configurações atuais da linha de comando com AuditPol.exe /get /category:"Object Access".
  2. Habilitar o acesso ao objeto com AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable.

Habilitar manualmente a auditoria em um arquivo

Para monitorar qual processo acessa um arquivo do VC Runtime, habilite a auditoria no arquivo de runtime de VC:

  1. Clique com o botão direito do mouse no arquivo que você deseja auditar, selecione Propriedadese, em seguida, selecione a guia Segurança. Para obter mais informações sobre como localizar arquivos do VC Runtime instalados, consulte locais de instalação do VC Runtime.
  2. Selecione Avançado.
  3. Na caixa de diálogo Configurações de Segurança Avançada, selecione a guia Auditoria e depois selecione Continuar.
  4. Para adicionar uma nova regra de auditoria, selecione Adicionar. Na caixa de diálogo Auditoria de Entrada, selecione um principal, depois digite o nome do usuário ou grupo que deseja adicionar, como (Todos), e selecione OK.
  5. Em Tipo, certifique-se de que Êxito esteja selecionado.
  6. Selecione Mostrar permissões avançadas>Limpar tudo>Percorrer pasta / executar arquivo>OK.
  7. Agora deve haver uma nova linha nas entradas Auditoria correspondentes ao que você selecionou. Selecione OK.
  8. Na caixa de diálogo Propriedades, selecione OK.

A regra de auditoria agora está habilitada para o arquivo.

Revisar manualmente os logs de auditoria

A auditoria de arquivos NTFS gera "Evento 4663: Foi feita uma tentativa de acessar um objeto" para cada arquivo que inclui a permissão de auditoria e é acessado por um processo.

  1. Abra o Visualizador de Eventos pressionando Windows + R para abrir a caixa de diálogo Executar. Em seguida, digite eventvwr.msc e pressione Enter.
  2. Navegue até os logs de Segurança no Visualizador de Eventos expandindo Logs do Windows >Segurança. O painel de resultados lista eventos de segurança.
  3. Localize os eventos de auditoria selecionando Filtrar Log Atual... no painel Ações. Restrinja os eventos para ID de Evento 4663 (Audit Success for the File System Category) digitando 4663 na caixa de texto Inclui/Exclui IDs de Evento.

Para obter um exemplo de um evento de auditoria de acesso a arquivos 4663, consulte "4663(S): foi feita uma tentativa de acessar um objeto".

Usar o PowerShell para auditar o uso do VC Runtime

Como visão geral, a atualização das Permissões de Auditoria de Arquivos com o PowerShell segue estas etapas:

  1. Defina a regra de auditoria do sistema de arquivos a ser aplicada aos arquivos.
  2. Obter o descritor de segurança de um arquivo com Get-Acl.
  3. Aplicar a regra de auditoria ao descritor de segurança.
  4. Aplique o descritor de segurança atualizado no arquivo original com Set-Acl.
  5. Exibir registros do Evento de Auditoria de Acesso ao Arquivo 4663 com Get-WinEvent.

PowerShell: auditar arquivos de tempo de execução do VC sem suporte

O código do PowerShell a seguir permite auditar arquivos do VC Runtime instalados que não têm mais suporte.

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: exibir eventos de auditoria de arquivo

O PowerShell fornece Get-WinEvent para obter registros de eventos para vários logs de eventos, conforme mostrado no seguinte código do PowerShell que lista todos os registros do Evento de Auditoria 4663 nas ú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

Próximas etapas após a auditoria do uso do VC Runtime

Depois de determinar quais processos estão usando os arquivos do VC Runtime ou quais aplicativos instalaram o VC Redistributable, desinstale esses aplicativos ou atualize-os para versões mais recentes que não dependem de runtimes de VC sem suporte.

Alguns aplicativos da Microsoft exigem versões herdadas do Vc Runtime. Para obter detalhes, consulte Perguntas frequentes sobre bibliotecas redistribuíveis e de runtime do Visual C++ | Microsoft Learn.

Locais de instalação do VC Runtime

Aqui é onde cada versão do Vc Runtime está instalada:

Versão do Visual Studio Local(is) instalado(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 também

Redistribuindo arquivos do Visual C++
Os downloads mais recentes do Visual C++ com suporte
Perguntas frequentes sobre o ciclo de vida das bibliotecas redistribuíveis e de runtime do Visual C++
compatibilidade binária do C++ entre versões do Visual Studio