다음을 통해 공유


Visual C++ 런타임 버전 사용을 감사하는 방법

Microsoft Visual C++ 재배포 가능 패키지 및 Visual Studio C++ 런타임(전체적으로 "VC 런타임")은 많은 애플리케이션의 중요한 구성 요소입니다. 네트워크 전체에서 컴퓨터는 지원되지 않는 버전의 VC 런타임을 설치하고 사용하는 애플리케이션을 계속 실행하고 있을 수 있습니다. NTFS 파일 감사를 사용하여 해당 애플리케이션을 지원되는 버전의 VC 런타임을 사용하는 애플리케이션으로 바꾸는 단계와 같은 사용량을 식별할 수 있습니다. 이 가이드에서는 NTFS 파일 감사를 설정하고 문제 해결 팁을 제공하며 정기적인 감사의 이점을 강조 표시합니다.

더 이상 지원되지 않는 VC 런타임 버전에 대한 자세한 내용은 microsoft Visual C++ 재배포 가능 최신 지원 다운로드 참조하세요.

NTFS 파일 감사를 사용하도록 설정하여 VC 런타임 사용량 확인

이 가이드에서는 NTFS 파일 감사를 수동으로 사용하도록 설정하고 감사 이벤트를 검토하여 지원되지 않는 버전의 VC 런타임을 호출하는 애플리케이션을 확인하는 단계를 제공합니다. 애플리케이션에서 사용할 수 있는 파일이 여러 개 있으므로 이 가이드에서는 PowerShell의 Get-AclSet-Acl cmdlet을 사용하여 감사 권한을 업데이트하는 방법도 보여 줍니다. 파일에 대한 감사 정책을 구성하는 방법에 대한 자세한 내용은 파일 또는 폴더기본 감사 정책 적용을 참조하세요.

시스템에서 개체 액세스 감사를 수동으로 사용하도록 설정

파일 수준 감사를 사용하려면 먼저 개체 액세스를 사용하도록 설정해야 합니다.

  1. Windows + 눌러 R 열고 실행 대화 상자를 엽니다. 그런 다음 gpedit.msc 입력하고 엔터 누릅니다.
  2. 컴퓨터 구성>Windows 설정>보안 설정>고급 감사 정책 구성>시스템 감사 정책>개체 액세스이동합니다.
  3. 파일 시스템 감사을 두 번 클릭합니다. 감사 파일 시스템 속성 대화 상자에서 다음 감사 이벤트 구성>를 선택한 후, 성공>확인버튼을 누릅니다.
  4. 로컬 그룹 정책 편집기닫습니다.

대안으로, 개체 액세스를 가능하게 하기 위해 auditpol.exe를 사용할 수 있습니다.

  1. 명령줄의 현재 설정을 AuditPol.exe /get /category:"Object Access"나열합니다.
  2. AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable사용하여 개체 액세스를 사용하도록 설정합니다.

파일에 수동으로 감사 로그 설정을 활성화하는 방법

VC 런타임 파일에 액세스하는 프로세스를 모니터링하려면 VC 런타임 파일에서 감사를 사용하도록 설정합니다.

  1. 감사할 파일을 마우스 오른쪽 단추로 클릭하고 속성선택한 다음 보안 탭을 선택합니다. 설치된 VC 런타임 파일을 찾는 방법에 대한 자세한 내용은 VC 런타임 설치 위치참조하세요.
  2. 고급 선택합니다.
  3. 고급 보안 설정 대화 상자에서 감사 탭을 선택한 다음 계속선택합니다.
  4. 새 감사 규칙을 추가하려면 추가를 선택합니다. 감사 항목 대화 상자에서 보안 주체를 선택한 다음, (모든 사용자)와 같은 추가하려는 사용자 또는 그룹의 이름을 입력하고 확인을 선택합니다.
  5. 형식에서, 성공가 선택되어 있는지 확인합니다.
  6. 고급 사용 권한 표시>모든>트래버스 폴더 지우기/파일 실행>확인선택합니다.
  7. 이제 선택한 항목과 일치하는 감사 항목에 새 행이 있어야 합니다. 확인선택합니다.
  8. 속성 대화 상자에서 확인을 선택합니다.

이제 파일에 대해 감사 규칙을 사용할 수 있습니다.

감사 로그 수동 검토

NTFS 파일 감사는 감사 권한을 포함하고 프로세스에서 액세스하는 각 파일에 대해 "이벤트 4663: 개체에 액세스하려고 했습니다"를 생성합니다.

  1. Windows + 눌러 R 열고 실행 대화 상자를 엽니다. 그런 다음 eventvwr.msc을 입력하고 Enter을 누릅니다.
  2. Windows 로그보안를 확장하여 > 에서 보안 로그로 이동합니다. 결과 창에는 보안 이벤트가 나열됩니다.
  3. 필터 현재 로그...작업 항목 창에서 선택하여 감사 이벤트를 찾습니다. 포함/제외 이벤트 ID 텍스트 상자에 4663을 입력하여 이벤트 ID 4663(파일 시스템 범주에 대한 감사 성공) 이벤트 범위를 좁힐 수 있습니다.

파일 액세스 감사 이벤트 4663의 예는 "4663(S): 개체에 액세스하려고 했습니다."를 참조하세요."

PowerShell을 사용하여 VC 런타임 사용을 감사하기

개요로 PowerShell을 사용하여 파일 감사 권한을 업데이트하는 단계는 다음과 같습니다.

  1. 파일에 적용할 파일 시스템 감사 규칙 정의합니다.
  2. Get-Acl사용하여 파일의 보안 설명자를 가져옵니다.
  3. 보안 설명자에 감사 규칙 적용합니다.
  4. Set-Acl사용하여 원래 파일에 업데이트된 보안 설명자를 적용합니다.
  5. Get-WinEvent사용하여 파일 액세스 감사 이벤트 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 코드와 같이 다양한 이벤트 로그에 대한 이벤트 레코드를 가져오는 Get-WinEvent 제공합니다.

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 런타임 파일을 사용하는 프로세스 또는 VC 재배포 가능 패키지를 설치한 애플리케이션을 결정한 후 해당 애플리케이션을 제거하거나 지원되지 않는 VC 런타임에 종속되지 않는 최신 버전으로 업그레이드합니다.

일부 Microsoft 애플리케이션에는 레거시 버전의 VC 런타임이 필요합니다. 자세한 내용은 Visual C++ 재배포 가능 패키지 및 런타임 라이브러리 FAQ를 참조하세요. | Microsoft Learn.

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++ 바이너리 호환성