Поделиться через


Аудит использования версий среды выполнения Visual C++

Распространяемый компонент Microsoft Visual C++ и среда выполнения Visual Studio C++ (коллективно "Среда выполнения VC") являются критически важными компонентами многих приложений. В вашей сети компьютеры по-прежнему могут использовать приложения, которые устанавливают и применяют неподдерживаемую версию среды выполнения VC. Вы можете использовать аудит файлов NTFS для определения такого использования как шага по замене этих приложений на те, которые используют поддерживаемую версию среды выполнения VC. В этом руководстве описано, как настроить аудит файлов NTFS, получить советы по устранению неполадок и выделить преимущества регулярных аудита.

Дополнительные сведения о версиях среды выполнения VC, которые больше не поддерживаются, см. в разделе последние поддерживаемые загрузки Microsoft Visual C++ Redistributable.

Включение аудита файлов NTFS для определения использования среды выполнения VC

В этом руководстве приведены инструкции по ручному включению аудита файлов NTFS и проверке событий аудита, чтобы определить, какие приложения вызывает неподдерживаемые версии среды выполнения VC. Поскольку существует несколько файлов, которые могут быть использованы приложением, в этом руководстве также показано, как использовать командлеты PowerShell Get-Acl и Set-Acl для обновления разрешений проверки. Дополнительные сведения о настройке политик аудита для файла см. в статье Применение базовой политики аудита к файлу или папке.

Включение аудита доступа к объектам вручную в системе

Перед включением аудита на уровне файлов необходимо включить доступ к объектам:

  1. Откройте редактор локальной групповой политики, нажав Windows + R, чтобы открыть диалоговое окно запуска . Затем введите gpedit.msc и нажмите ВВОД.
  2. Перейдите к Конфигурация компьютера>Настройки Windows>Параметры безопасности>Конфигурация расширенной политики аудита>Политики системного аудита>Доступ к объектам.
  3. Дважды щелкните Audit File System. В диалоговом окне "Свойства файловой системы аудита" выберите Настройте следующие события аудита>Успех>ОК.
  4. Закройте редактор локальной групповой политики.

Кроме того, можно использовать auditpol.exe для включения доступа к объектам:

  1. Выведите список текущих параметров в командной строке с помощью AuditPol.exe /get /category:"Object Access".
  2. Включите доступ к объекту с помощью AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable.

Включение аудита в файле вручную

Чтобы отслеживать, какой процесс обращается к файлу среды выполнения VC, включите аудит в файле среды выполнения VC:

  1. Щелкните правой кнопкой мыши файл, который вы хотите проанализировать, выберите Свойства, а затем выберите вкладку Безопасность. Чтобы получить дополнительную информацию о поиске установленных файлов среды выполнения VC, см. расположение установленных VC Runtime.
  2. Выберите Advanced.
  3. В диалоговом окне Дополнительные параметры безопасности выберите вкладку Аудит и нажмите кнопку "Продолжить".
  4. Чтобы добавить новое правило аудита, выберите Добавить. В диалоговом окне аудита выберите субъект, а затем введите имя пользователя или группы, которую нужно добавить, например (все), а затем нажмите кнопку ОК.
  5. В введите типи убедитесь, что выбран Успех.
  6. Выберите Показать предварительные разрешения>Очистить все>Обход папок / Выполнение файлов>ОК.
  7. Теперь в секции аудиторских записей должна появиться новая строка, соответствующая выбранным вами элементам. Выберите ОК.
  8. В диалоговом окне Свойства нажмите ОК.

Теперь правило аудита включено для файла.

Проверка журналов аудита вручную

Аудит файлов NTFS создает "Событие 4663: предпринята попытка получить доступ к объекту" для каждого файла, включающего разрешение аудита и доступ к которому осуществляется процессом.

  1. Откройте средства просмотра событий, нажав Windows + R, чтобы открыть диалоговое окно запуска . Затем введите eventvwr.msc, и нажмите ВВОД.
  2. Перейдите к журналам безопасности в средства просмотра событий, расширив журналы Windows>безопасность. В панели результатов перечислены события безопасности.
  3. Найдите события аудита, выбрав Фильтр текущего журнала... в области действий. Сузьте выборку событий до событий с идентификатором 4663 (успешное выполнение аудита для категории файловой системы), введя 4663 в текстовое поле "Включить/Исключить идентификаторы событий".

Пример события аудита доступа к файлам 4663 см. в "4663(S): попытка получить доступ к объекту".

Использование PowerShell для аудита использования среды выполнения VC

В качестве обзора обновление разрешений аудита файлов с помощью PowerShell выполняет следующие действия.

  1. Определите правило аудита файловой системы для применения к файлам.
  2. Получите дескриптор безопасности файла с Get-Acl.
  3. Применить правило аудита к дескриптору безопасности.
  4. Примените обновленный дескриптор безопасности к исходному файлу с Set-Acl.
  5. Посмотреть записи аудита доступа к файлам события 4663 с Get-WinEvent.

PowerShell: аудит файлов VC Runtime, которые не поддерживаются

Следующий код PowerShell позволяет выполнять аудит установленных файлов среды выполнения VC, которые больше не поддерживаются.

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: просмотр событий аудита файлов

PowerShell предоставляет Get-WinEvent для получения записей событий для различных журналов событий, как показано в следующем коде PowerShell, который перечисляет все записи события аудита 4663 за последние 24 часа:

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

Дальнейшие действия после аудита использования среды выполнения VC

После определения того, какие процессы используют файлы среды выполнения VC или какие приложения установили распространяемый компонент VC, удалите эти приложения или обновите их до более новых версий, которые не зависят от неподдерживаемых сред выполнения VC.

Для некоторых приложений Майкрософт требуются устаревшие версии среды выполнения VC. Дополнительные сведения см. в статье Распространяемые библиотеки Visual C++ и часто задаваемые вопросы о библиотеках среды выполнения | Microsoft Learn.

Расположения установки среды выполнения VC

Вот где установлена каждая версия среды выполнения VC:

Версия Visual Studio Установленное местоположение(-я)
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

См. также

перераспределение файлов Visual C++
Последние поддерживаемые загрузки Visual C++
Часто задаваемые вопросы о жизненном цикле — распространяемые библиотеки Visual C++ и библиотеки среды выполнения
двоичная совместимость C++ между версиями Visual Studio