Windows Server 이벤트 로그 분석과 활용
Windows Server에서 발생하는 모든 중요한 이벤트는 이벤트 로그에 기록됩니다. 이벤트 로그를 제대로 분석하면 장애 원인 파악, 보안 위협 탐지, 시스템 성능 문제 진단이 가능합니다.
주요 이벤트 로그 채널
| 로그 이름 | 설명 | 주요 이벤트 |
|---|---|---|
| System | OS 및 드라이버 이벤트 | 서비스 시작/중지, 하드웨어 오류 |
| Application | 앱 레벨 이벤트 | 애플리케이션 충돌, 오류 |
| Security | 보안 감사 이벤트 | 로그인 성공/실패, 정책 변경 |
| Setup | 설치 관련 이벤트 | OS 업데이트, 역할 설치 |
| Microsoft-Windows-* | 컴포넌트별 로그 | 세부 기능별 이벤트 |
알아야 할 주요 이벤트 ID
보안 이벤트
| 이벤트 ID | 의미 |
|---|---|
| 4624 | 로그인 성공 |
| 4625 | 로그인 실패 |
| 4648 | 명시적 자격 증명으로 로그인 시도 |
| 4672 | 관리자 권한으로 로그인 |
| 4688 | 새 프로세스 생성 |
| 4698 | 예약된 작업 생성 |
| 4720 | 사용자 계정 생성 |
| 4732 | 로컬 그룹에 구성원 추가 |
시스템 이벤트
| 이벤트 ID | 의미 |
|---|---|
| 6008 | 예기치 않은 시스템 종료 |
| 41 | 커널 전원 이벤트 (강제 재부팅) |
| 7034 | 서비스 비정상 종료 |
| 7036 | 서비스 상태 변경 |
PowerShell로 이벤트 로그 분석
기본 이벤트 조회
# 최근 시스템 로그 오류 확인
Get-EventLog -LogName System -EntryType Error -Newest 20
# 최근 24시간 보안 로그인 실패
$since = (Get-Date).AddHours(-24)
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
StartTime = $since
} | Select-Object TimeCreated, Message | Format-List
브루트포스 공격 탐지
# 로그인 실패 IP 주소별 카운트
$events = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
StartTime = (Get-Date).AddHours(-1)
}
$events | ForEach-Object {
$xml = [xml]$_.ToXml()
$ip = $xml.Event.EventData.Data |
Where-Object { $_.Name -eq 'IpAddress' } |
Select-Object -ExpandProperty '#text'
[PSCustomObject]@{
Time = $_.TimeCreated
IP = $ip
}
} | Group-Object IP |
Sort-Object Count -Descending |
Select-Object Count, Name |
Format-Table -AutoSize
서비스 장애 추적
# 최근 서비스 비정상 종료 이벤트
Get-WinEvent -FilterHashtable @{
LogName = 'System'
Id = 7034
StartTime = (Get-Date).AddDays(-7)
} | Select-Object TimeCreated,
@{N='Service'; E={$_.Properties[0].Value}} |
Format-Table -AutoSize
이벤트 구독(Subscription)으로 원격 수집
# Windows Event Forwarding (WEF) 설정
# 수집 서버에서 실행
winrm quickconfig -quiet
wecutil qc /quiet
# 원격 서버(소스)에서 실행
winrm quickconfig -quiet
# 구독 생성 (수집 서버에서)
wecutil cs subscription.xml
<!-- subscription.xml -->
<Subscription xmlns="http://schemas.microsoft.com/2006/03/windows/events/subscription">
<SubscriptionId>SecurityEvents</SubscriptionId>
<SubscriptionType>SourceInitiated</SubscriptionType>
<Description>보안 이벤트 수집</Description>
<Enabled>true</Enabled>
<Uri>http://schemas.microsoft.com/wbem/wsman/1/windows/EventLog</Uri>
<ConfigurationMode>Normal</ConfigurationMode>
<Query>
<![CDATA[
<QueryList>
<Query Path="Security">
<Select>*[System[EventID=4624 or EventID=4625 or EventID=4720]]</Select>
</Query>
</QueryList>
]]>
</Query>
<EventSources>
<EventSource>
<Address>webserver01.domain.local</Address>
</EventSource>
</EventSources>
</Subscription>
이벤트 로그 자동 알림
# 특정 이벤트 발생 시 이메일 알림 (작업 스케줄러 연동)
$action = New-ScheduledTaskAction `
-Execute "PowerShell.exe" `
-Argument '-Command Send-MailMessage -To "admin@example.com" -From "alert@server.com" -Subject "보안 경고" -Body "관리자 로그인 이벤트 감지" -SmtpServer smtp.example.com'
$trigger = New-ScheduledTaskTrigger `
-AtLogon
Register-ScheduledTask `
-TaskName "SecurityAlert" `
-Action $action `
-Trigger $trigger
이벤트 로그 백업 및 보관
# 이벤트 로그를 EVTX 파일로 내보내기
$exportPath = "D:\EventLogs\$(Get-Date -Format 'yyyyMM')"
New-Item -ItemType Directory -Path $exportPath -Force
wevtutil epl Security "$exportPath\Security.evtx"
wevtutil epl System "$exportPath\System.evtx"
wevtutil epl Application "$exportPath\Application.evtx"
# 로그 최대 크기 설정 (MB)
wevtutil sl Security /ms:1073741824 # 1GB
wevtutil sl System /ms:536870912 # 512MB
이벤트 로그는 서버에서 발생한 모든 일의 기록입니다. 평상시에 정상 패턴을 파악해 두면, 이상 징후를 빠르게 발견하고 대응할 수 있습니다. 중요 이벤트에 대한 알림을 설정하고, 로그를 정기적으로 백업하여 감사 추적에 활용하세요.
댓글남기기