Partager via


Comment auditer l’utilisation de la version du runtime Visual C++

Microsoft Visual C++ Redistributable et visual Studio C++ Runtime (collectivement, « VC Runtime ») sont des composants critiques de nombreuses applications. Sur votre réseau, les machines peuvent toujours exécuter des applications qui installent et utilisent une version hors prise en charge du runtime VC. Vous pouvez utiliser l’audit de fichiers NTFS pour identifier l’utilisation, par exemple, pour remplacer ces applications par celles qui utilisent une version prise en charge du runtime VC. Ce guide vous guide tout au long de la configuration de l’audit des fichiers NTFS, fournit des conseils de dépannage et met en évidence les avantages des audits réguliers.

Pour plus d'informations sur les versions de VC Runtime qui ne sont plus prises en charge, voir Microsoft Visual C++ Redistributable derniers téléchargements pris en charge.

Activer l’audit des fichiers NTFS pour déterminer l’utilisation du runtime VC

Ce guide fournit les étapes permettant d’activer manuellement l’audit des fichiers NTFS et de passer en revue les événements d’audit pour déterminer quelles applications appellent les versions non prises en charge du runtime VC. Étant donné qu’il existe plusieurs fichiers qui peuvent être utilisés par une application, ce guide montre également comment utiliser les Get-Acl powerShell et les applets de commande Set-Acl pour mettre à jour les autorisations d’audit. Pour plus d’informations sur la configuration des stratégies d’audit pour un fichier, consultez Appliquer une stratégie d’audit de base sur un fichier ou un dossier.

Activer manuellement l’audit de l’accès aux objets sur le système

L’accès aux objets doit être activé avant d’activer l’audit au niveau du fichier :

  1. Ouvrez l'éditeur de stratégie de groupe local en appuyant sur Windows + R pour ouvrir la boîte de dialogue Exécuter. Tapez ensuite sur gpedit.msc et appuyez sur Entrée.
  2. Accédez à Configuration de l'ordinateur>Paramètres Windows>Paramètres de Sécurité>Configuration avancée des stratégies d’audit>Stratégies d’audit système>Accès aux objets.
  3. Double-cliquez sur Audit du système de fichiers. Dans la boîte de dialogue Propriétés du système de fichiers d’audit, sélectionnez Configurer les événements d’audit suivants>Succès>OK.
  4. Fermez l'éditeur de stratégie de groupe locale.

Vous pouvez également utiliser auditpol.exe pour activer l’accès aux objets :

  1. Répertoriez les paramètres actuels à partir de la ligne de commande avec AuditPol.exe /get /category:"Object Access".
  2. Activez l’accès aux objets avec AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable.

Activer manuellement l’audit sur un fichier

Pour surveiller le processus qui accède à un fichier VC Runtime, activez l’audit sur le fichier VC Runtime :

  1. Cliquez avec le bouton droit sur le fichier à auditer, sélectionnez Propriétés, puis sélectionnez l’onglet Sécurité. Pour plus d’informations sur la recherche de fichiers VC Runtime installés, consultez Emplacements installés VC Runtime.
  2. Sélectionnez avancé.
  3. Dans la boîte de dialogue Paramètres de sécurité avancés, sélectionnez l’onglet Audits, puis sélectionnez Continuer.
  4. Pour ajouter une nouvelle règle d’audit, sélectionnez Ajouter. Dans la boîte de dialogue d’entrée d’audit, sélectionnez un principal, puis tapez le nom de l’utilisateur ou du groupe que vous souhaitez ajouter, par exemple (Tout le monde), puis sélectionnez OK.
  5. Dans Type, assurez-vous que l'option Succès est sélectionnée.
  6. Sélectionnez Afficher les autorisations préalables>Effacer tout>dossier Traverse/ exécuter le fichier>OK.
  7. Il devrait maintenant y avoir une nouvelle ligne dans les entrées d'audit correspondant à ce que vous avez sélectionné. Sélectionnez OK.
  8. Dans la boîte de dialogue Propriétés, sélectionnez OK.

La règle d’audit est désormais activée pour le fichier.

Examiner manuellement les journaux d’audit

L’audit des fichiers NTFS génère « Événement 4663 : Une tentative d’accès à un objet » pour chaque fichier qui inclut l’autorisation d’audit et est accessible par un processus.

  1. Ouvrez l'Observateur d'événements en appuyant sur Windows + R pour ouvrir la boîte de dialogue Exécuter. Tapez ensuite eventvwr.msc, et appuyez sur Entrée.
  2. Accédez aux journaux de sécurité dans l'observateur d'événements en développant Journaux Windows>Security. Le volet de résultats répertorie les événements de sécurité.
  3. Recherchez les événements d'audit en choisissant Filtrer le journal actuel... dans le volet Actions. Limitez les événements à l'ID d'événement 4663 (Réussite de l'audit pour la catégorie Système de fichiers) en saisissant 4663 dans la zone de texte Inclut/Exclut les ID d'événements.

Pour obtenir un exemple d’événement d’audit d’accès aux fichiers 4663, consultez « 4663(S) : Une tentative a été effectuée pour accéder à un objet ».

Utiliser PowerShell pour auditer l’utilisation du runtime VC

Pour obtenir une vue d’ensemble, la mise à jour des autorisations d’audit de fichiers avec PowerShell suit les étapes suivantes :

  1. Définissez la règle d’audit du système de fichiers à appliquer au ou aux fichiers.
  2. Obtenez le descripteur de sécurité d’un fichier avec Get-Acl.
  3. Appliquer la règle d’audit au descripteur de sécurité.
  4. Appliquez le descripteur de sécurité mis à jour sur le fichier d’origine avec Set-Acl.
  5. Affichez les enregistrements de l'événement d'audit d'accès aux fichiers 4663 avec Get-WinEvent.

PowerShell : Audit des fichiers d'exécution VC non pris en charge

Le code PowerShell suivant vous permet d’auditer les fichiers VC Runtime installés qui ne sont plus pris en charge.

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 : Afficher les événements d’audit de fichier

PowerShell fournit Get-WinEvent pour obtenir des enregistrements d’événements pour différents journaux d’événements, comme indiqué dans le code PowerShell suivant qui liste tous les enregistrements de l’événement d’audit 4663 des dernières 24 heures :

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

Étapes suivantes après l’audit de l’utilisation du runtime VC

Une fois que vous avez déterminé quels processus utilisent les fichiers VC Runtime ou quelles applications ont installé vc Redistributable, désinstallez ces applications ou mettez-les à niveau vers des versions plus récentes qui ne dépendent pas des runtimes VC non pris en charge.

Certaines applications Microsoft nécessitent des versions héritées du runtime VC. Pour plus d'informations, voir Visual C++ Redistributable and runtime libraries FAQ | Microsoft Learn.

Emplacements d’installation VC Runtime

Voici où chaque version du runtime VC est installée :

Version de Visual Studio Emplacement(s) installé(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

Voir aussi

Redistribuer des fichiers Visual C++
Les derniers téléchargements de Visual C++ pris en charge
FAQ sur le cycle de vie - Bibliothèques redistribuables et runtime Visual C++
Compatibilité binaire C++ entre les versions de Visual Studio