Compartilhar via


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 artigo explica como configurar a auditoria de arquivos do 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 artigo 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 um aplicativo pode usar, este artigo também mostra como usar o PowerShell e os cmdlets 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 a objetos deve ser habilitado antes de habilitar a auditoria em nível de arquivo:

  1. Selecione Windows+R para abrir a caixa de diálogo Run. Em seguida, insira e selecione Enter para abrir o Editor de Política de Grupo Local.
  2. Vá para 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>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ÊxitoOK.
  4. Feche o Editor de Política de Grupo Local.

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

  1. Listar as configurações atuais da linha de comando com .
  2. Habilitar o acesso ao objeto com .

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 selecione Continuar.
  4. Para adicionar uma nova regra de auditoria, selecione Adicionar. Na caixa de diálogo Entrada de Auditoria, selecione um principal e insira o nome do usuário ou grupo que você deseja adicionar, como (Todos). Em seguida, selecione OK.
  5. No campo Tipo, certifique-se de que Sucesso está selecionado.
  6. Selecione Mostrar permissões avançadasLimpar tudoPercorrer pasta / executar arquivoOK.
  7. Observe que uma nova linha nas entradas de auditoria corresponde 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 arquivo NTFS gera o 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. Selecione Windows+R para abrir a caixa de diálogo Run. Em seguida, insira eventvwr.msc e selecione Enter para abrir Visualizador de Eventos.
  2. Vá para os logs de Security no Visualizador de Eventos expandindo os Logs do Windows>Security. O painel de resultados lista eventos de segurança.
  3. Localize os eventos de auditoria selecionando Filtrar Log Atual... no painel Ações. Para restringir os eventos à ID do evento 4663 (Sucesso de Auditoria para a Categoria do Sistema de Arquivos), insira 4663 na caixa de texto Inclui/Exclui IDs de Evento.

Para obter um exemplo do 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

Para atualizar as permissões de auditoria de arquivos com o PowerShell, siga 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 .
  3. Aplicar a regra de auditoria ao descritor de segurança.
  4. Aplique o descritor de segurança atualizado no arquivo original com .
  5. Exibir registros do Evento de Auditoria de Acesso ao Arquivo 4663 com .

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 uma maneira de obter registros de eventos para vários logs de eventos. Isso é demonstrado no seguinte código do PowerShell, que lista todos os registros do Evento de Auditoria de Acesso a Arquivos 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 usam os arquivos do VC Runtime ou quais aplicativos instalaram o Redistribuível do Visual C++, 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 mais informações, consulte as perguntas frequentes sobre bibliotecas redistribuíveis e de runtime do Visual C++.

Locais de instalação do VC Runtime

A tabela a seguir lista onde cada versão do Vc Runtime está instalada.

Visual Studio versão Localizações instaladas
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