Freigeben über


Überwachen der Verwendung von Visual C++-Runtime-Versionen

Microsoft Visual C++ Redistributable und Visual Studio C++-Runtime (gemeinsam "VC Runtime") sind wichtige Komponenten vieler Anwendungen. In Ihrem Netzwerk werden möglicherweise weiterhin Anwendungen ausgeführt, die eine out-of-Support-Version der VC-Runtime installieren und verwenden. Sie können die NTFS-Dateiüberwachung verwenden, um eine solche Verwendung zu identifizieren, z. B. einen Schritt, um diese Anwendungen durch diejenigen zu ersetzen, die eine unterstützte Version der VC-Runtime verwenden. Dieser Artikel führt Sie durch das Einrichten der NTFS-Dateiüberwachung, enthält Tipps zur Problembehandlung und hebt die Vorteile regelmäßiger Audits hervor.

Weitere Informationen zu den Versionen der VC-Runtime, die nicht mehr unterstützt werden, finden Sie unter Microsoft Visual C++ Redistributable neueste unterstützte Downloads.

Aktivieren der NTFS-Dateiüberwachung zur Ermittlung der VC-Runtime-Verwendung

Dieser Artikel enthält die Schritte zum manuellen Aktivieren der NTFS-Dateiüberwachung und zum Überprüfen von Überwachungsereignissen, um zu ermitteln, welche Anwendungen die nicht unterstützten Versionen der VC-Runtime aufrufen. Da es mehrere Dateien gibt, die eine Anwendung verwenden kann, zeigt dieser Artikel auch, wie Sie die PowerShell und Cmdlets zum Aktualisieren von Überwachungsberechtigungen verwenden. Weitere Informationen zum Konfigurieren von Überwachungsrichtlinien für eine Datei finden Sie unter Anwenden einer grundlegenden Überwachungsrichtlinie für eine Datei oder einen Ordner.

Manuelles Aktivieren der Objektzugriffsüberwachung auf dem System

Der Objektzugriff muss aktiviert sein, bevor Sie die Überwachung auf Dateiebene aktivieren:

  1. Wählen Sie Windows+R aus, um das Dialogfeld Run zu öffnen. Geben Sie dann den Befehl ein und drücken Sie die Eingabetaste, um den Editor für lokale Gruppenrichtlinien zu öffnen.
  2. Wechseln Sie zu Computerkonfiguration>Windows Einstellungen>Security Settings>Advanced Audit Policy Configuration>System Audit Policies>Object Access.
  3. Klicken Sie doppelt auf Dateisystem überwachen. Wählen Sie im Dialog Eigenschaften von Dateisystem überwachen die Option Die folgenden Ereignisse für die Überwachung konfigurierenErfolgOK.
  4. Schließen Sie den Editor für Lokale Gruppenrichtlinien.

Alternativ können Sie den Objektzugriff aktivieren:

  1. Listet die aktuellen Einstellungen über die Befehlszeile mit auf.
  2. Aktivieren des Objektzugriffs mit .

Manuelles Aktivieren der Überwachung für eine Datei

Um zu überwachen, welcher Prozess auf eine VC-Runtime-Datei zugreift, aktivieren Sie die Überwachung in der VC-Runtime-Datei:

  1. Klicken Sie mit der rechten Maustaste auf die Datei, die Sie überwachen möchten, wählen Sie Eigenschaftenaus, und wählen Sie dann die Registerkarte Sicherheit aus. Weitere Informationen zum Suchen installierter VC-Runtime-Dateien finden Sie unter installierten VC-Runtime-Speicherorte.
  2. Wählen Sie Erweitert.
  3. Wählen Sie im Dialogfeld "Erweiterte Sicherheitseinstellungen " die Registerkarte "Überwachung " und dann " Weiter" aus.
  4. Um eine neue Überwachungsregel hinzuzufügen, wählen Sie Hinzufügen. Wählen Sie im Dialogfeld "Überwachungseintrag" einen Prinzipal aus, und geben Sie dann den Namen des Benutzers oder der Gruppe ein, den Sie hinzufügen möchten, z. B. (Jeder). Klicken Sie anschließend auf OK.
  5. Stellen Sie in "Typ" sicher, dass "Erfolg " ausgewählt ist.
  6. Wählen Sie Erweiterte Berechtigungen anzeigenAlle löschenOrdner durchsuchen / Datei ausführenOK.
  7. Beachten Sie, dass eine neue Zeile in den Überwachungseinträgen dem von Ihnen ausgewählten Entspricht. Wählen Sie OKaus.
  8. Wählen Sie im Dialogfeld "Eigenschaften " "OK" aus.

Die Überwachungsregel ist jetzt für die Datei aktiviert.

Manuelles Überprüfen von Überwachungsprotokollen

Die NTFS-Dateiüberwachung erzeugt Ereignis 4663: Für jede Datei, die Überwachungsberechtigungen enthält und von einem Prozess darauf zugegriffen wird, wurde versucht, auf ein Objekt zuzugreifen.

  1. Wählen Sie Windows+R aus, um das Dialogfeld Run zu öffnen. Geben Sie dann eventvwr.msc ein, und wählen Sie Enter aus, um Ereignisanzeige zu öffnen.
  2. Wechseln Sie zu den Protokollen Security im Ereignisanzeige indem Sie Windows Logs>Security erweitern. Im Ergebnisbereich sind Sicherheitsereignisse aufgeführt.
  3. Suchen Sie die Überwachungsereignisse, indem Sie Aktuelles Protokoll filtern... im Bereich Aktionen wählen. Um die Ereignisse auf die Ereignis-ID 4663 (Überwachungserfolg für die Kategorie Dateisystem) einzugrenzen, geben Sie 4663 in das Textfeld "Ein-/Ausschließen-Ereignis-IDs" ein.

Ein Beispiel für die Dateizugriffsüberwachung 4663 finden Sie unter 4663(S): Es wurde versucht, auf ein Objekt zuzugreifen.

Verwenden von PowerShell zum Überwachen der VC-Runtime-Nutzung

Führen Sie die folgenden Schritte aus, um Dateiüberwachungsberechtigungen mit PowerShell zu aktualisieren:

  1. Definieren Sie die Dateisystemüberwachungsregel , die auf die Dateien angewendet werden soll.
  2. Rufen Sie den Sicherheitsdeskriptor einer Datei mit ab.
  3. Wenden Sie die Überwachungsregel auf den Sicherheitsdeskriptor an.
  4. Wenden Sie den aktualisierten Sicherheitsdeskriptor auf die originale Datei mit an.
  5. Sehen Sie sich die Datensätze des Dateizugriffs-Überwachungsereignisses 4663 mit an.

PowerShell: Überwachen nicht unterstützter VC-Runtime-Dateien

Mit dem folgenden PowerShell-Code können Sie installierte VC-Runtime-Dateien überwachen, die nicht mehr unterstützt werden.

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: Anzeigen von Dateiüberwachungsereignissen

PowerShell bietet die Möglichkeit, Ereignisdatensätze für verschiedene Ereignisprotokolle abzurufen, wie im folgenden PowerShell-Code gezeigt, der alle Protokolle des Dateizugriffsüberwachungsereignisses 4663 der letzten 24 Stunden auflistet.

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

Nächste Schritte nach der Überwachung der VC-Runtime-Nutzung

Nachdem Sie ermittelt haben, welche Prozesse die VC-Runtime-Dateien verwenden oder welche Anwendungen visual C++ Redistributable installiert haben, deinstallieren Sie diese Anwendungen, oder aktualisieren Sie sie auf neuere Versionen, die nicht von nicht unterstützten VC-Runtimes abhängen.

Einige Microsoft-Anwendungen erfordern ältere Versionen der VC-Runtime. Weitere Informationen finden Sie in den häufig gestellten Fragen zu Visual C++ Redistributable- und Runtime-Bibliotheken.

Installationsorte von VC-Runtime

In der folgenden Tabelle ist aufgeführt, wo jede Version der VC-Runtime installiert ist.

Visual Studio Version Installierte Speicherorte
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