Partilhar via


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

O Microsoft Visual C++ Redistributable e o Visual Studio C++ Runtime (coletivamente, "VC Runtime") são componentes críticos de muitos aplicativos. Em toda a rede, as máquinas podem ainda estar a executar aplicações que instalam e utilizam uma versão fora de suporte do VC Runtime. Pode utilizar a auditoria de ficheiros NTFS para identificar essa utilização como um passo para substituir essas aplicações por outras que utilizem uma versão suportada do VC Runtime. Este guia orienta você na configuração da auditoria de arquivos NTFS, fornece dicas de solução de problemas e destaca os benefícios de auditorias regulares.

Para obter mais informações sobre as versões do VC Runtime que não são mais suportadas, consulte os downloads suportados mais recentes do Microsoft Visual C++ Redistributable.

Ativar a auditoria de ficheiros NTFS para determinar a utilização do VC Runtime

Este guia fornece as etapas para habilitar manualmente a auditoria de arquivos NTFS e revisar eventos de auditoria para determinar quais aplicativos estão chamando as versões sem suporte do VC Runtime. 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 a objetos deve ser habilitado antes de habilitar a auditoria no nível de arquivo:

  1. Abra o Editor de Diretiva 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>Acesso a Objetos.
  3. Clique duas vezes em Audit File System. 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 Diretiva de Grupo Local.

Como alternativa, você pode usar auditpol.exe para habilitar o acesso a objetos:

  1. Liste as configurações atuais na linha de comando com AuditPol.exe /get /category:"Object Access".
  2. Habilite o acesso a objetos com AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable.

Habilitar manualmente a auditoria em um arquivo

Para monitorizar qual o processo que acede a um ficheiro de runtime VC, ative a auditoria no ficheiro de runtime VC.

  1. Clique com o botão direito do rato no ficheiro que pretende auditar, selecione Propriedadese, em seguida, selecione o separador Segurança. Para obter mais informações sobre como localizar ficheiros VC Runtime instalados, consulte localizações instaladas do VC Runtime.
  2. Selecione Avançado .
  3. Na caixa de diálogo Configurações Avançadas de Segurança, selecione o separador Auditoria e, em seguida, selecione Continuar.
  4. Para adicionar uma nova regra de auditoria, selecione Adicionar. Na caixa de diálogo Entrada de Auditoria, selecione uma entidade de segurança, digite o nome do usuário ou grupo que deseja adicionar, como (Todos)e, em seguida, selecione OK.
  5. Em Tipo, certifique-se de que Sucesso esteja selecionado.
  6. Selecione Mostrar permissões avançadas>Limpar tudo>Atravessar pasta / executar ficheiro>OK.
  7. Agora deve haver uma nova linha nas entradas de Auditoria correspondentes ao que o utilizador seleccionou. 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 do pressionando Windows + R para abrir a caixa de diálogo Executar. Em seguida, digite eventvwr.msce pressione Enter.
  2. Navegue até os registros de Segurança no Visualizador de Eventos expandindo Logs do Windows>Segurança. O painel de resultados lista eventos de segurança.
  3. Encontre os eventos de auditoria escolhendo Filtrar Log Atual... no painel Ações. Limite os eventos para ID de Evento 4663 (Sucesso de Auditoria para a Categoria do Sistema de Arquivos) ao inserir 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 Arquivo com o PowerShell segue estas etapas:

  1. Defina a regra de auditoria do sistema de arquivos para aplicar ao(s) arquivo(s).
  2. Obtenha o descritor de segurança de um ficheiro com Get-Acl.
  3. Aplique 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 4663 de Auditoria de Acesso a Arquivos com Get-WinEvent.

PowerShell: Auditar ficheiros VC Runtime sem suporte

O código do PowerShell a seguir permite auditar arquivos VC Runtime instalados que não são mais suportados.

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 arquivos

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 auditar o uso do VC Runtime

Depois de determinar que processos estão a utilizar os ficheiros VC Runtime ou que aplicações instalaram o VC Redistributable, desinstale essas aplicações ou atualize-as para versões mais recentes que não dependam de VC Runtimes não suportados.

Algumas aplicações Microsoft requerem versões herdadas do VC Runtime. Para obter detalhes, consulte Perguntas frequentes sobre bibliotecas de tempo de execução e redistribuíveis 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 Localização(õ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

Ver também

Redistribuindo arquivos do Visual C++
Os últimos downloads suportados do Visual C++
Perguntas frequentes sobre o ciclo de vida do - Visual C++ Redistribuível e bibliotecas de tempo de execução
compatibilidade binária C++ entre versões do Visual Studio