次の方法で共有


Visual C++ ランタイム バージョンの使用状況を監査する

Microsoft Visual C++ 再頒布可能パッケージと Visual Studio C++ ランタイム (総称して"VC ランタイム") は、多くのアプリケーションの重要なコンポーネントです。 ネットワーク全体で、VC ランタイムのサポート外バージョンをインストールして使用するアプリケーションがマシンで引き続き実行されている可能性があります。 NTFS ファイル監査を使用して、サポートされているバージョンの VC ランタイムを使用するアプリケーションに置き換える手順として、このような使用状況を特定できます。 この記事では、NTFS ファイル監査の設定、トラブルシューティングのヒント、および通常の監査の利点について説明します。

サポートされなくなった VC ランタイムのバージョンの詳細については、 Microsoft Visual C++ 再頒布可能パッケージの最新のサポートされているダウンロードを参照してください。

NTFS ファイル監査を有効にして VC ランタイムの使用状況を判断する

この記事では、NTFS ファイルの監査を手動で有効にし、監査イベントを確認して、サポートされていないバージョンの VC ランタイムを呼び出しているアプリケーションを特定する手順について説明します。 アプリケーションで使用できるファイルがいくつか存在するため、この記事では、PowerShell と コマンドレットを使用して監査アクセス許可を更新する方法についても説明します。 ファイルの監査ポリシーを構成する方法の詳細については、「ファイル またはフォルダーに基本的な監査ポリシーを適用する」を参照してください。

システムでオブジェクト アクセス監査を手動で有効にする

ファイル レベルの監査を有効にする前に、オブジェクト アクセスを有効にする必要があります。

  1. Windows+R を選択して、Run ダイアログを開きます。 次に、「 」と入力し、Enter キーを 押 して ローカル グループ ポリシー エディターを開きます。
  2. に移動します。Computer ConfigurationWindows SettingsSecurity SettingsAdvanced Audit Policy ConfigurationSystem Audit PoliciesObject Access
  3. [ ファイル システムの監査] をダブルクリックします。 [ ファイル システムのプロパティの監査 ] ダイアログで、[ 次の監査イベントの構成SuccessOK を選択します。
  4. ローカル グループ ポリシー エディターを閉じます。

または、 を使用してオブジェクト アクセスを有効にすることもできます。

  1. を使用して、コマンド ラインから現在の設定を一覧表示します。
  2. を使用してオブジェクト アクセスを有効にします。

ファイルの監査を手動で有効にする

VC ランタイム ファイルにアクセスするプロセスを監視するには、VC ランタイム ファイルの監査を有効にします。

  1. 監査するファイルを右クリックし、[ プロパティ] を選択し、[ セキュリティ ] タブを選択します。インストールされている VC ランタイム ファイルの検索の詳細については、「 VC ランタイムのインストール場所」を参照してください。
  2. [Advanced] \(詳細設定) を選択します。
  3. [ セキュリティの詳細設定] ダイアログで、[監査] タブ を 選択し、[ 続行] を選択します。
  4. 新しい監査規則を追加するには、[追加] を選択 します。 [ 監査エントリ ] ダイアログでプリンシパルを選択し、追加するユーザーまたはグループの名前 ( [すべてのユーザー] など) を入力します。 その後、OK を選択します。
  5. [ 種類] で、[ 成功] が選択されていることを確認します。
  6. 詳細権限を表示すべてクリアフォルダーの移動 / ファイルの実行OKを選択します。
  7. 監査エントリの新しい行が、選択した行と一致することを確認します。 [OK] を選択.
  8. [ プロパティ ] ダイアログで、[ OK] を選択します。

これで、ファイルに対して監査規則が有効になりました。

監査ログを手動で確認する

NTFS ファイル監査では 、イベント 4663 が生成されます 。監査アクセス許可を含み、プロセスによってアクセスされる各ファイルのオブジェクトへのアクセスが試行されました。

  1. Windows+R を選択して、Run ダイアログを開きます。 次に、「eventvwr.msc」と入力し、Enter を選択して イベント ビューアー を開きます。
  2. Windows Logs を展開し、イベント ビューアーSecurityログに移動してSecurityを展開します。 結果ウィンドウには、セキュリティ イベントが一覧表示されます。
  3. [アクション] ペインで、[現在のログをフィルター...] を選択し、監査イベントを見つけます。 イベントをイベント ID 4663 (ファイル システム カテゴリの監査成功) に絞り込むには、[イベント ID を含める/除外する] テキスト ボックスに「4663」と入力します。

ファイル アクセス監査イベント 4663 の例については、「 4663(S): オブジェクトへのアクセスが試行されました。」を参照してください。

PowerShell を使用して VC ランタイムの使用状況を監査する

PowerShell でファイル監査アクセス許可を更新するには、次の手順に従います。

  1. ファイルに適用する ファイル システム監査規則 を定義します。
  2. を使用してファイルのセキュリティ記述子を取得します。
  3. セキュリティ記述子に監査規則を適用 します。
  4. を使用して、更新されたセキュリティ記述子を元のファイルに適用します。
  5. を含むファイル アクセス監査イベント 4663 レコードを表示します。

PowerShell: サポート対象外の VC ランタイム ファイルを監査する

次の 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 には、過去 24 時間のすべてのファイル アクセス監査イベント 4663 レコードを一覧表示する次の PowerShell コードに示すように、さまざまなイベント ログのイベント レコードを取得するための が用意されています。

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 ランタイム ファイルを使用するプロセス、または Visual C++ 再頒布可能パッケージをインストールしたアプリケーションを特定したら、それらのアプリケーションをアンインストールするか、サポートされていない VC ランタイムに依存しない新しいバージョンにアップグレードします。

一部の Microsoft アプリケーションでは、VC ランタイムのレガシ バージョンが必要です。 詳細については、 Visual C++ 再頒布可能ライブラリとランタイム ライブラリに関する FAQ を参照してください。

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++ ダウンロード
  • ライフサイクルに関する FAQ: Visual C++ 再頒布可能ライブラリとランタイム ライブラリ
  • Visual Studio バージョン間の C++ バイナリの互換性