Sdílet prostřednictvím


Jak auditovat využití verze modulu runtime Visual C++

Distribuovatelné součásti Microsoft Visual C++ a Visual Studio C++ Runtime (souhrnně "VC Runtime") jsou důležitými komponentami mnoha aplikací. V síti můžou počítače stále spouštět aplikace, které instalují a používají verzi modulu VC Runtime, která není podporována. Auditování souborů NTFS můžete použít k identifikaci takového použití jako kroku k nahrazení těchto aplikací těmi, které používají podporovanou verzi modulu runtime VC. Tato příručka vás provede nastavením auditování souborů NTFS, získáte tipy pro řešení potíží a zvýrazní výhody pravidelných auditů.

Další informace o verzích modulu runtime VC, které již nejsou podporovány, naleznete v tématu Microsoft Visual C++ Redistributable nejnovější podporované soubory ke stažení.

Povolení auditování souborů NTFS k určení využití modulu runtime VC

Tato příručka obsahuje postupy pro ruční povolení auditování souborů NTFS a kontrolu událostí auditu, abyste zjistili, které aplikace volají nepodporované verze modulu runtime VC. Vzhledem k tomu, že aplikace může používat několik souborů, ukazuje tento průvodce také použití Get-Acl PowerShellu a rutin Set-Acl k aktualizaci oprávnění auditování. Další informace o tom, jak nakonfigurovat zásady auditu pro soubor, najdete v tématu Použití základních zásad auditu u souboru nebo složky.

Ruční povolení auditování přístupu k objektům v systému

Aby bylo možné povolit auditování na úrovni souborů, musí být povolený přístup k objektům:

  1. R, a otevřete dialogové okno Spustit. Potom zadejte gpedit.msc a stiskněte Enter.
  2. Přejděte na Konfigurace počítače>Nastavení systému Windows>Nastavení zabezpečení>Konfigurace rozšířených zásad auditu>Zásady auditu systému>Přístup k objektům.
  3. Dvakrát klikněte na Audit systém souborů. V dialogovém okně Vlastnosti auditování systému souborů vyberte Nakonfigurujte následující auditní události>Úspěšné>OK.
  4. Zavřete Editor místních zásad skupiny.

Případně můžete pomocí auditpol.exe povolit přístup k objektům:

  1. Zobrazte seznam aktuálních nastavení z příkazového řádku s AuditPol.exe /get /category:"Object Access".
  2. Povolte přístup k objektům pomocí AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable.

Ruční povolení auditování souboru

Pokud chcete monitorovat, který proces přistupuje k souboru modulu runtime VC, povolte auditování v souboru modulu runtime VC:

  1. Klikněte pravým tlačítkem myši na soubor, který chcete auditovat, vyberte Vlastnostia pak vyberte kartu Zabezpečení. Další informace o vyhledání nainstalovaných souborů modulu runtime VC naleznete v tématu nainstalované umístění modulu VC Runtime.
  2. Vyberte Rozšířené.
  3. V dialogovém okně Upřesnit nastavení zabezpečení vyberte kartu Auditování a pak vyberte Pokračovat.
  4. Pokud chcete přidat nové pravidlo auditování, vyberte Přidat. V dialogovém okně Položka auditování vyberte objekt zabezpečení, zadejte jméno uživatele nebo skupiny, které chcete přidat, například (Všichni), a pak vyberte OK.
  5. V Typzajistěte, že je vybrán Úspěch.
  6. Vyberte Zobrazit pokročilá oprávnění>Vymazat vše>Procházet složky / spouštět soubory>OK.
  7. V Auditování by teď měl být nový řádek položek odpovídajících tomu, co jste vybrali. Vyberte OK.
  8. V dialogovém okně Vlastnosti vyberte OK.

Pro soubor je teď povolené pravidlo auditu.

Ruční kontrola protokolů auditu

Auditování souborů NTFS generuje Událost 4663: Došlo k pokusu o přístup k objektu pro každý soubor, který zahrnuje oprávnění auditu a který je přístupný procesem.

  1. Otevřete Prohlížeč událostí stisknutím Windows + R pro otevření dialogového okna Spustit. Potom zadejte eventvwr.msca stiskněte klávesu Enter.
  2. V Prohlížeče událostí přejděte na protokoly Zabezpečení zabezpečení protokoly systému Windows>Zabezpečení . V podokně výsledků jsou uvedeny události zabezpečení.
  3. Události auditu najdete tak, že v podokně Akce zvolíte Filtrovat aktuální protokol.... Zúžte výběr událostí na ID události 4663 (úspěch auditu pro kategorii systému souborů) zadáním čísla 4663 do textového pole Vložení/Vyřazení ID událostí.

Příklad události auditování přístupu k souborům 4663 najdete v tématu 4663(s): Došlo k pokusu o přístup k objektu."

Auditování využití modulu runtime VC pomocí PowerShellu

Jako přehled, aktualizace oprávnění auditování souborů pomocí PowerShellu probíhá podle následujících kroků:

  1. Definujte pravidlo auditování systému souborů , které se mají použít u souborů.
  2. Získejte popisovač zabezpečení souboru pomocí Get-Acl.
  3. Použít pravidlo auditu na popisovač zabezpečení.
  4. Použijte aktualizovaný popisovač zabezpečení v původním souboru s Set-Acl.
  5. Zobrazte záznamy auditování přístupu k souborům 4663 s Get-WinEvent.

PowerShell: Audit souborů modulu runtime VC bez podpory

Následující kód PowerShellu umožňuje auditovat nainstalované soubory VC Runtime, které se už nepodporují.

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: Zobrazení událostí auditu souborů

PowerShell poskytuje Get-WinEvent k získání záznamů událostí pro různé protokoly událostí, jak je znázorněno v následujícím kódu PowerShellu, který uvádí všechny záznamy auditování události 4663 za posledních 24 hodin:

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

Další kroky po auditování využití modulu runtime VC

Jakmile zjistíte, které procesy používají soubory modulu runtime VC nebo které aplikace nainstalovaly distribuovatelné součásti VC, odinstalujte tyto aplikace nebo je upgradujte na novější verze, které nezávisí na nepodporovaných modulech runtime VC.

Některé aplikace Microsoftu vyžadují starší verze modulu runtime VC. Podrobnosti najdete v tématu Nejčastější dotazy k redistribuovatelným knihovnám visual C++ a knihoven modulu runtime | Microsoft Learn.

Umístění instalace prostředí VC Runtime

Tady je místo, kde je nainstalovaná každá verze modulu runtime VC:

verze sady Visual Studio Nainstalované místo(a)
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

Viz také

redistribuce souborů Visual C++
nejnovější podporované soubory visual C++ ke stažení
Nejčastější dotazy k životnímu cyklu – Distribuovatelné knihovny visual C++ a knihovny modulu runtime
binární kompatibilita C++ mezi verzemi sady Visual Studio