다음을 통해 공유


Visual C++ 런타임 버전 사용 감사

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

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

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

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

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

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

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

또는 개체 액세스를 활성화하기 위해 다음을 사용할 수 있습니다:

  1. 명령줄의 현재 설정을 나열합니다.
  2. 사용하여 개체 액세스를 사용하도록 설정합니다.

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

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

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

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

감사 로그 수동 검토

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

  1. Windows+R를 선택하여 대화 상자를 엽니다. 그런 다음 eventvwr.msc 입력하고 Enter을 선택하여 이벤트 뷰어 엽니다.
  2. Windows 로그를 확장하여 이벤트 뷰어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++ 이진 호환성