about_Logging_Windows
간단한 설명
PowerShell은 엔진, 공급자 및 cmdlet의 내부 작업을 Windows 이벤트 로그에 기록합니다.
자세한 설명
PowerShell은 엔진 및 공급자 시작 및 중지, PowerShell 명령 실행과 같은 PowerShell 작업에 대한 세부 정보를 기록합니다.
Windows PowerShell 5.1의 로깅에 대한 자세한 내용은 about_Logging 참조하세요.
PowerShell은 두 가지 범주의 로깅 구성을 지원합니다.
모듈 로깅 - 지정된 모듈의 멤버에 대한 파이프라인 실행 이벤트를 기록합니다. 세션 및 특정 모듈 모두에 대해 모듈 로깅을 사용하도록 설정해야 합니다. 이 로깅을 구성하는 방법에 대한 자세한 내용은 about_PowerShell_Config 참조하세요.
구성을 통해 모듈 로깅을 사용하는 경우 모듈의 LogPipelineExecutionDetails 속성 값을 설정하여 세션에서 특정 모듈에 대한 로깅을 사용하거나 사용하지 않도록 설정할 수 있습니다 .
예를 들어 PSReadLine 모듈에 대한 모듈 로깅을 사용하도록 설정하려면 다음을 수행합니다.
$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails
Name LogPipelineExecutionDetails ---- --------------------------- PSReadLine True
스크립트 블록 로깅 - 명령, 스크립트 블록, 함수 및 스크립트의 처리를 대화형으로 호출하든 자동화를 통해 호출하든 기록합니다.
스크립트 블록 로깅을 사용하도록 설정하면 PowerShell은 처리하는 모든 스크립트 블록의 콘텐츠를 기록합니다. 사용하도록 설정되면 모든 새 PowerShell 세션이 이 정보를 기록합니다. 자세한 내용은 스크립트 블록 로깅 사용 설정을 참조 하세요.
Windows에서 PowerShell 이벤트 공급자 등록
Linux 또는 macOS와 달리 Windows에서는 이벤트를 이벤트 로그에 기록하기 전에 이벤트 공급자를 등록해야 합니다. PowerShell 이벤트 공급자를 사용하도록 설정하려면 관리자 권한 PowerShell 프롬프트에서 다음 명령을 실행합니다.
$PSHOME\RegisterManifest.ps1
Windows에서 PowerShell 이벤트 로그 항목 보기
Windows 이벤트 뷰어 사용하여 PowerShell 로그를 볼 수 있습니다. 이벤트 로그는 애플리케이션 및 서비스 로그 그룹에 있으며 이름이 PowerShellCore입니다. 연결된 ETW 공급자 GUID는 .입니다 {f90714a8-5509-434a-bf6d-b1624c8a19a2}
.
스크립트 블록 로깅을 사용하도록 설정하면 PowerShell은 다음 이벤트를 PowerShellCore/운영 로그에 기록합니다.
필드 | 값 |
---|---|
EventId | 4104 / 0x1008 |
채널 | Operational |
수준 | Verbose |
Opcode | Create |
작업 | CommandStart |
키워드 | Runspace |
Windows에서 PowerShell 이벤트 공급자 등록 취소
이벤트 공급자를 등록하면 이벤트를 디코딩하는 데 사용되는 이진 라이브러리에 잠금이 적용됩니다. 이 라이브러리를 업데이트하려면 이 잠금을 해제하려면 공급자의 등록을 취소해야 합니다.
PowerShell 공급자의 등록을 취소하려면 관리자 권한 PowerShell 프롬프트에서 다음 명령을 실행합니다.
$PSHOME\RegisterManifest.ps1 -Unregister
PowerShell을 업데이트한 후 실행 $PSHOME\RegisterManifest.ps1
하여 업데이트된 이벤트 공급자를 등록합니다.
스크립트 블록 로깅 사용
스크립트 블록 로깅을 사용하도록 설정하면 PowerShell은 처리하는 모든 스크립트 블록의 콘텐츠를 기록합니다. 사용하도록 설정되면 모든 새 PowerShell 세션이 이 정보를 기록합니다.
참고 항목
진단 이외의 다른 용도로 스크립트 블록 로깅을 사용하는 경우 아래에 설명된 대로 보호된 이벤트 로깅을 사용하도록 설정하는 것이 좋습니다.
스크립트 블록 로깅은 그룹 정책 또는 레지스트리 설정을 통해 사용하도록 설정할 수 있습니다.
그룹 정책을 사용 하 여
자동 전사를 사용하도록 설정하려면 관리 템플릿 ->PowerShell Core를 통해 그룹 정책에서 PowerShell 스크립트 블록 로깅 켜기 기능을 사용하도록 설정합니다.
레지스트리 사용
다음 함수를 실행합니다.
function Enable-PSScriptBlockLogging {
$basePath = @(
'HKLM:\Software\Policies\Microsoft'
'PowerShellCore\ScriptBlockLogging'
) -join '\'
if (-not (Test-Path $basePath)) {
$null = New-Item $basePath -Force
}
Set-ItemProperty $basePath -Name EnableScriptBlockLogging -Value "1"
}
PowerShell 구성 파일 사용
PowerShell의 ScriptBlockLogging
동작 방식을 제어하는 옵션을 파일에서 powershell.config.json
설정할 수 있습니다. 자세한 내용은 about_PowerSHell_Config 참조하세요.
보호된 이벤트 로깅
시스템에 대한 로깅 수준을 높이면 기록된 콘텐츠에 중요한 데이터가 포함될 가능성이 높아질 수 있습니다. 예를 들어 스크립트 로깅을 사용하도록 설정하면 스크립트에서 사용하는 자격 증명 또는 기타 중요한 데이터를 이벤트 로그에 쓸 수 있습니다. 중요한 데이터를 기록한 컴퓨터가 손상된 경우 로그는 공격자에게 도달 범위를 확장하는 데 필요한 정보를 제공할 수 있습니다.
이 정보를 보호하기 위해 Windows 10에는 보호된 이벤트 로깅이 도입되었습니다. 보호된 이벤트 로깅을 사용하면 참여 애플리케이션이 이벤트 로그에 기록된 중요한 데이터를 암호화할 수 있습니다. 나중에 보다 안전하고 중앙 집중화된 로그 수집기에서 이러한 로그의 암호를 해독하고 처리할 수 있습니다.
이벤트 로그 콘텐츠는 IETF CMS(암호화 메시지 구문) 표준을 사용하여 보호됩니다. CMS는 공개 키 암호화를 사용합니다. 콘텐츠를 암호화하고 콘텐츠를 해독하는 데 사용되는 키는 별도로 유지됩니다.
공개 키는 광범위하게 공유할 수 있으며 중요한 데이터가 아닙니다. 이 공개 키로 암호화된 모든 콘텐츠는 프라이빗 키로만 암호 해독할 수 있습니다. 공개 키 암호화에 대한 자세한 내용은 Wikipedia - 공개 키 암호화를 참조 하세요.
보호된 이벤트 로깅 정책을 사용하도록 설정하려면 보호할 이벤트 로그 데이터가 있는 모든 컴퓨터에 공개 키를 배포합니다. 해당 프라이빗 키는 중앙 이벤트 로그 수집기 또는 SIEM 집계와 같은 보다 안전한 위치에서 이벤트 로그를 사후 처리하는 데 사용됩니다. Azure에서 SIEM을 설정할 수 있습니다. 자세한 내용은 일반 SIEM 통합을 참조 하세요.
그룹 정책을 통해 보호된 이벤트 로깅 사용
보호된 이벤트 로깅을 사용하도록 설정하려면 다음을 Enable Protected Event Logging
통해 Administrative Templates -> Windows Components -> Event Logging
그룹 정책에서 기능을 사용하도록 설정합니다. 이 설정에는 다음과 같은 여러 가지 형식 중 하나로 제공할 수 있는 암호화 인증서가 필요합니다.
- Base-64로 인코딩된 X.509 인증서의 콘텐츠입니다(예: 인증서 관리자의
Export
옵션에서 제공). - 로컬 컴퓨터 인증서 저장소에서 찾을 수 있는 인증서의 지문입니다(PKI 인프라에서 배포할 수 있습니다).
- 인증서의 전체 경로(로컬 또는 원격 공유일 수 있습니다).
- 인증서 또는 인증서를 포함하는 디렉터리의 경로입니다(로컬 또는 원격 공유일 수 있습니다).
- 로컬 컴퓨터 인증서 저장소에서 찾을 수 있는 인증서의 주체 이름입니다(PKI 인프라에서 배포할 수 있음).
결과 인증서는 향상된 키 사용량(1.3.6.1.4.1.311.80.1
)으로 있어야 Document Encryption
하며 Data Encipherment
키 사용 또는 Key Encipherment
키 사용을 사용하도록 설정해야 합니다.
Warning
프라이빗 키는 머신 로깅 이벤트에 배포해서는 안 됩니다. 메시지의 암호를 해독하는 안전한 위치에 보관해야 합니다.
보호된 이벤트 로깅 메시지 암호 해독
다음 스크립트는 프라이빗 키가 있다고 가정하여 이벤트를 검색하고 암호를 해독합니다.
Get-WinEvent Microsoft-Windows-PowerShell/Operational |
Where-Object Id -eq 4104 | Unprotect-CmsMessage
참고 항목
PowerShell