So wird's gemacht: Überwachen der Verwendung von Visual C++-Runtime-Versionen
Die Microsoft Visual C++ Redistributable und die Visual Studio C++-Runtime (gemeinsam "VC Runtime") sind wichtige Komponenten vieler Anwendungen. In Ihrem Netzwerk werden möglicherweise weiterhin Anwendungen ausgeführt, die eine nicht mehr unterstützte 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. Dieses Handbuch 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
Dieses Handbuch enthält die Schritte zum manuellen Aktivieren der NTFS-Dateiüberwachung und zum Überprüfen von Überwachungsereignissen, um zu bestimmen, welche Anwendungen die nicht unterstützten Versionen der VC-Runtime aufrufen. Da es mehrere Dateien gibt, die von einer Anwendung verwendet werden können, zeigt dieses Handbuch auch, wie Sie die Get-Acl
von PowerShell und Set-Acl
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:
- Öffnen Sie den Editor für lokale Gruppenrichtlinien, indem Sie
Windows
+R
drücken, um den Dialog Ausführen zu öffnen. Geben Sie danngpedit.msc
ein und drücken Sie Eingabe. - Navigieren Sie zu Computerkonfiguration>Windows-Einstellungen>Sicherheitseinstellungen>erweiterte Überwachungsrichtlinienkonfiguration>Systemüberwachungsrichtlinien>Objektzugriff.
- Klicken Sie doppelt auf Dateisystem überwachen. Wählen Sie im Dialog Eigenschaften von Dateisystem überwachen die Option Die folgenden Ereignisse für die Überwachung konfigurieren>Erfolg>OK.
- Schließen Sie den Editor für lokale Gruppenrichtlinien.
Alternativ können Sie auditpol.exe
verwenden, um den Objektzugriff zu aktivieren:
- Listet die aktuellen Einstellungen über die Befehlszeile mit
AuditPol.exe /get /category:"Object Access"
auf. - Aktivieren des Objektzugriffs mit
AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable
.
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:
- 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.
- Wählen Sie Erweitert.
- Wählen Sie im Dialogfeld erweiterte Sicherheitseinstellungen die Registerkarte Überwachung aus, und wählen Sie dann Weiteraus.
- Um eine neue Überwachungsregel hinzuzufügen, wählen Sie Hinzufügen. Wählen Sie im Dialogfeld Überwachungseintrag ein Prinzipal aus, geben Sie dann den Namen des Benutzers oder der Gruppe ein, die Sie hinzufügen möchten, wie z. B. (Jeder), und wählen Sie dann OK.
- Stellen Sie unter Typ sicher, dass Erfolg ausgewählt ist.
- Wählen Sie Erweiterte Berechtigungen anzeigen>Alle löschen>Ordner durchsuchen / Datei ausführen>OK.
- Es sollte nun eine neue Zeile in den Überwachung-Einträgen erscheinen, die dem entspricht, was Sie ausgewählt haben. Wählen Sie OKaus.
- Wählen Sie im Dialog Eigenschaften OK.
Die Überwachungsregel ist jetzt für die Datei aktiviert.
Manuelles Überprüfen von Überwachungsprotokollen
Die NTFS-Dateiüberwachung generiert "Ereignis 4663: Es wurde versucht, auf ein Objekt zuzugreifen" für jede Datei, die die Überwachungsberechtigung enthält und von einem Prozess aufgerufen wird.
- Öffnen Sie die Ereignisanzeige, indem Sie
Windows
+R
drücken, um das Dialogfeld Ausführen zu öffnen. Geben Sie danneventvwr.msc
ein und drücken Sie Eingabe. - Navigieren Sie zu den Sicherheitsprotokollen in der Ereignisanzeige, indem Sie Windows-Protokolle>Sicherheit erweitern. Im Ergebnisbereich sind Sicherheitsereignisse aufgeführt.
- Suchen Sie die Überwachungsereignisse, indem Sie Aktuelles Protokoll filtern... im Bereich Aktionen wählen. Grenzen Sie die Ereignisse auf Ereignis-ID 4663 (Überwachungserfolg für die Kategorie Dateisystem) ein, indem Sie 4663 in das Textfeld Einschließlich/Ausschließende Ereignis-IDs eingeben.
Ein Beispiel für ein Dateizugriffsüberwachungsereignis 4663 finden Sie unter "4663(S): Es wurde versucht, auf ein Objekt zuzugreifen."
Verwenden von PowerShell zum Überwachen der VC-Runtime-Nutzung
Die Aktualisierung von Dateiüberwachungsberechtigungen mit PowerShell umfasst die folgenden Schritte:
- Definieren Sie die Dateisystemüberwachungsregel, die auf die Datei(n) angewendet werden soll.
- Rufen Sie den Sicherheitsdeskriptor einer Datei mit
Get-Acl
ab. - Wenden Sie die Überwachungsregel auf den Sicherheitsdeskriptor an.
- Wenden Sie den aktualisierten Sicherheitsdeskriptor auf die originale Datei mit
Set-Acl
an. - Sehen Sie sich die Datensätze des Dateizugriffs-Überwachungsereignisses 4663 mit
Get-WinEvent
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 Get-WinEvent
, um Ereignisdatensätze für verschiedene Ereignisprotokolle abzurufen, wie im folgenden PowerShell-Code dargestellt, in dem alle Überwachungsereignis-4663-Einträge in den letzten 24 Stunden aufgelistet sind:
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 die VC 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 unter Visual C++ Redistributable und Runtime Bibliotheken FAQ | Microsoft Learn.
Installationsorte von VC-Runtime
Hier wird jede Version der VC-Runtime installiert:
Visual Studio Version | Installationsort(e) |
---|---|
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 |
Siehe auch
Neuverteilung von Visual C++-Dateien
Die neuesten unterstützten Visual C++-Downloads
häufig gestellte Fragen zum Lifecycle – Visual C++ Redistributable und Laufzeitbibliotheken
C++-Binärkompatibilität zwischen Visual Studio-Versionen