EventLog
1. 개요
이벤트로그(Event Log)는 Windows 운영 체제에서 발생하는 다양한 이벤트와 관련된 정보를 기록한다. 이벤트 로그는 시스템, 보안, 응용 프로그램 등 다양한 유형의 이벤트들을 이벤트 ID, 소스, 로그 이름, 수준, 사용자, 시간 등과 같은 다양한 속성과 함께 기록하기에 여러 용도에 맞게 활용할 수 있다. 즉, 이벤트로그 내 저장된 데이터를 기반으로 시스템에 문제가 있다고 판단했을 때, 관리자가 이를 검토하고 분석하거나 사용자가 특정 시간에 어떤 행위를 했는지 확인하는 법적 증거로 사용된다는 것이다.

디지털 포렌식 및 침해 사고 대응 과정에서 이벤트로그가 왜 중요한 아티팩트인지 자세한 내용은 다음과 같다.
운영체제 별 이벤트로그 정보
이벤트로그는 기록되는 정보에 따라서 여러 파일로 나뉘어 저장된다. 이러한 이벤트로그 파일은 Windows 운영체제 버전에 따라 다른 특징은 가진다.
아래의 표처럼 Windows Vista를 기점으로 저장 경로, 저장 형식들이 달라진다.

주요 이벤트
Windows 시스템은 기본적으로 세 가지 로그(System, Application, Security)를 기록하며 자세한 내용은 다음과 같다.
System
SysEvent.Evt, System.evtx
드라이버나 시스템 서비스 등 Windows 시스템 구성 요소에서 생성한 이벤트를 기록한다.
Application
AppEvent.Evt, Application.evtx
응용 프로그램에서 생성한 이벤트가 기록하며, 각 응용 프로그램은 자신만의 이벤트를 기록한다.
Security
SecEvent.Evt, Security.evtx
보안 관련 이벤트가 기록되며 여기에 로그인 시도, 리소스 사용, 시스템 접근 등의 감사 이벤트를 포함한다.
이벤트 유형
이벤트로그는 이벤트의 형태를 다섯 가지의 유형으로 구분하며 다음과 같다.
Success Audit (성공 감사)
보안 관련 이벤트로, 감사 정책이 성공적으로 실행했을 시 기록
사용자 로그인 성공, 파일 접근 성공 등
Failure Audit (실패 감사)
보안 관련 이벤트로, 감사 정책이 실패했을 시 기록
사용자 로그인 실패, 파일 접근 실패 등
Information (정보)
시스템이나 응용 프로그램이 정상적으로 동작하고 있을 시 기록
서비스가 성공적으로 시작되었거나, 드라이버가 정상적으로 로드된 경우
Warning (경고)
잠재적인 문제가 발생했거나, 주의를 요하는 상황이 생겼을 시 기록
디스크 공간이 부족해질 때
Error (오류)
시스템이나 응용 프로그램이 정상적으로 동작하지 않았을 시 기록
드라이버 로드 실패, 응용 프로그램 충돌 등
이벤트로그 설정
레지스트리
레지스트리에서 주요한 이벤트로그 파일의 저장 경로, 로그 크기 등 설정 값을 확인할 수 있다.
레지스트리 경로: %SystemRoot%\System32\config\system\ControlSet#\Services\EventLog

감사 정책
감사 정책을 설정하면 Windows 시스템은 해당 정책에 따라 특정 이벤트를 추적하여 보안 로그에 기록한다. 예를 들어, 로그온 이벤트 감사 정책이 활성화되면 모든 로그온 시도와 로그오프 시도가 보안 로그에 기록된다. 이러한 이벤트는 로컬 그룹 정책 편집기에서 설정된 감사 정책에 따라 결정된다. 즉, 감사 정책은 어떤 이벤트가 기록될지를 결정하며, 이벤트 로그는 이러한 감사 이벤트를 실제로 기록하여 보관하는 역할한다.

⁕ Windows Vista 감사 정책
Windows Vista의 경우 감사 정책이 설정되어있지 않으면 보안 이벤트로그(Security.evt)에 어떠한 로그도 기록되지 않는다.
아래의 그림처럼 감사 정책을 설정해두고 그에 맞춰 원격 접근을 해보면 로그온/로그오프 관련 감사가 기록된 것을 확인할 수 있다.

2. 구조
EVT 형식
Windows 이벤트 로그(EVT) 형식은 Microsoft Windows에서 시스템 로그 정보를 저장하는 데 사용되었다. EVT 형식은 Windows Vista 이후로 더 이상 사용되지 않지만, EVTX 데이터 구조와 비교하고 해당 버전의 기기를 분석해야 하는 경우를 대비하여 간단하게 살펴보고자 한다. EVT 파일 구조는 그림처럼 이벤트 로그 파일의 시작을 알리는 File Header로 시작하며, 각 Event Record가 연속적으로 존재한다. Event Record의 끝을 나타내는 End of Record 이후에는 빈 값들이 존재한다.
File Header 구조
File Header는 EVT 파일의 시작 부분에 위치하며, 로그 파일에 대한 기본 정보를 포함한다. 여기에는 파일 형식, 버전, 로그 파일의 크기, 이벤트 레코드의 수 등이 포함된다. Header의 크기는 총 48 바이트(0x30)이며 구조는 다음과 같다.
EVT 파일의 가장 큰 특징을 File Header를 통해 확인할 수 있다. EVT는 Signature가 나오기 이전에 해당 영역의 크기를 먼저 명시하며, 데이터의 앞 뒤에 배치되어 데이터를 싸고 있는 형태를 가진다.

▶ 상세 구조
구조를 보면 알 수 있듯이 Header의 크기인 0x30이 먼저 나오고 Header의 Signature인 ‘LfLe’가 따라오는 것을 볼 수 있다. 그 안에 기록되어있는 메타데이터들 중에서 File flags를 보면 현재 파일의 상태를 알 수 있다.

Event Record 구조
Event Record는 실제 이벤트 로그 항목을 저장하는 부분이다. 각 이벤트 레코드는 고유한 구조를 가지며, 일반적으로 다음과 같은 정보를 포함한다.
이벤트 ID: 이벤트의 고유 식별자
이벤트 종류: 정보, 경고, 오류 등 이벤트의 종류
소스 이름: 이벤트를 생성한 응용 프로그램 또는 서비스의 이름
사용자 SID: 이벤트를 생성한 사용자의 보안 식별자 (SID)
이벤트 데이터: 이벤트에 대한 추가 정보 및 설명
이벤트 데이터 영역에는 가변적인 데이터를 저장한다는 특징이 존재한다.

▶ 상세 구조
EVT는 시간 값을 저장할 때 UNIX TIME (Little Endian) 체계를 따르고 있다. 이를 유념하여 생성시간과 마지막 수정 시간을 디코드해야한다.
Event identifier는 0x0000457로 0000 0000 0000 0000 1000 0100 0101 0111와 동일하다. 이를 제일 뒤에서부터 저장되어있는 데이터를 확인해보면 (Facility + Customer code + Error)와 같다.

이벤트 데이터 영역에는 이벤트 뷰어에서 확인할 수 있는 정보(원본, 컴퓨터명, 데이터 등)들이 저장된다.

End of Record 와 Empty Values
End of Record는 말 그대로 EVT 파일의 마지막 부분을 명시하기 위해 존재하는 Record이다. EVT 파일의 경우 설정을 통해 저장 크기를 64 바이트로 설정하면 처음부터 64바이트 크기의 파일이 생성된다. 그 안에 데이터를 저장하는 것이기 때문에 어디까지 데이터가 기록되었는지 표시하기 위한 End of Record가 필요한 것이다.
그 뒤로는 0으로 패딩되는 Empty Values 공간이 따로온다. 이는 로그 파일의 여유 공간을 의미하며, 로그 파일이 추가 데이터로 확장될 수 있도록 준비된 공간이다.

▶ 상세 구조
시작 레코드 Offset과 마지막 레코드 Offset을 확인할 수 있다.

EVTX 형식
EVTX 파일은 Windows Vista 이후 버전에서 사용되는 이벤트 로그 파일 형식이다.
EVTX 파일의 구조를 보면 1 개의 Header와 여러 개의 Chunk들로 구성되고 각 Chunk에는 다수의 이벤트 레코드 기록이 존재한다. 첫 Chunk의 시작은 0x1000 Offset이고, 각 Chunk의 크기가 0x10000인 점을 고려하면 Chunk의 위치를 쉽게 계산하여 이동할 수 있다.

File Header 구조
File Header는 EVTX 파일의 시작 부분에 위치하며, 파일 형식, 버전, 파일 크기 등의 기본 정보를 포함한다.

▶ 상세 구조
Windows 10 환경에서 추출한 이벤트로그 파일이라 Major/Minor 버전에서 3.2(Windows 10 이후 버전임을 의미) 값을 가진다. 추가로, 파일의 상태와 같은 정보를 나타내는 File flag 값이 0인 것을 알 수 있다. 이는 File flag가 따로 설정되지 않았음을 의미한다.

Chunk Header 구조
Chunk Header는 로그 파일을 청크 단위로 나누어 관리한다. 각 청크는 여러 이벤트 레코드를 포함하며, 청크 헤더는 해당 청크의 메타데이터(기본 정보)를 포함한다.

▶ 상세 구조
Chunk Header임을 보여주는 Signature ‘ElfChnk’ 값이 제일 처음에 존재한다.

Event Record 구조
이벤트 레코드는 개별 로그 항목을 저장하는 부분이다. EVTX 파일에서는 이벤트 레코드가 더 구조화되고 효율적으로 저장된다. 각 레코드는 이벤트 ID, 이벤트 종류, 소스 이름, 사용자 SID, 이벤트 데이터 등을 포함한다.

▶ 상세 구조
실제 로그와 관련된 데이터가 들어있는 만큼 시간 값도 함께 확인할 수 있다. EVTX는 Windows 타임스탬프로 시간 값을 저장하기때문에 이를 고려하여 디코드해야한다.
또한, 이벤트 뷰어를 통해 확인할 수 있는 이벤트 정보는 Binary XML 영역에 저장된다.

3. 분석 방안
Windows 이벤트로그는 Windows 운영체제에서 발생하는 다양한 활동을 기록하고, 이를 Record 단위로 저장한다. 이벤트 로그는 침해사고 사이 발생한 행위를 볼 수 있는 중요한 단서로써, 꼼꼼하게 분석할 필요가 있다.
이벤트로그 분석 단계
다음과 같은 방법으로 이벤트로그 파일을 분석할 수 있다.
로그 파일 수집: 대상 시스템에서 로그 파일을 수집한다. 이때, 이벤트로그 파일(evt, evtx 파일들)을 모두 수집한다.
분석 방향 결정: 사고 유형별 분석할 이벤트로그를 결정한다.
필터링 및 검색: 특정 시간 범위, 이벤트 ID, 사용자 계정 등을 기준으로 로그를 필터링하고 검색한다.
이상 행위 탐지: 정상적인 시스템 활동 패턴과 비교하여 이상 행위를 탐지한다. 예를 들어, 비정상적으로 많은 실패한 로그온 시도, 예상치 못한 시간대의 활동 등을 확인한다.
타임라인 생성: 사건의 시간 순서를 정리하여 타임라인을 생성한다. 이를 통해 사건의 전후 관계를 명확히 파악할 수 있다.

이벤트 ID 분석
이벤트 ID는 특정 사건이나 활동을 식별하는 데 매우 유용하다. 각 이벤트 ID는 특정 유형의 문제를 나타내므로, 이벤트 ID를 통해 사용자가 어떤 행위를 했는지 판별할 수 있다.
이벤트 ID와 행위에 대한 예시는 다음과 같다.
Event ID 4624: 성공적인 로그온
Event ID 4625: 실패한 로그온
Event ID 4634: 로그오프
Event ID 4688: 새로운 프로세스 생성
Event ID 4697: 서비스 설치
Event ID 4720: 사용자 계정 생성
Event ID 4722: 사용자 계정 활성화
위의 ID 외 다른 이벤트 ID를 알고 싶으면, 다음의 사이트를 참고한다.
사례 별 분석
사례 별로 집중적으로 분석해야 할 이벤트로그 종류와 분석 내용은 다음 페이지에 서술되어있다.
원격 유입응용프로그램 실행4. 분석 도구
추천하는 EVTX 파일 분석 도구는 Microsoft의 Message Analyzer 도구이다.
Microsoft Message Analyzer는 2016년 10월을 마지막으로 추가 개발이 이루어지지 않아 지원을 중단하게 되었으며, 2019년 11월 25일에 microsoft.com에서 제공하던 다운로드 링크는 제거되었다.
다만 마지막 버전의 설치 프로그램은 깃허브를 통해 다운로드 및 설치 가능하다.
Message Analyzer는 네트워크 문제 해결 및 기타 진단 시나리오에서 프로토콜 메시징 트래픽, 이벤트 및 기타 시스템 또는 애플리케이션 메시지를 캡처, 표시 및 분석하는 데 사용되는 강력한 도구이다. 해당 도구를 이벤트로그를 볼 때 사용하는 이유는 컬럼별로 그룹을 지을 수 있는 기능과 별도의 칼럼 추가 기능과 필터링 기능으로 이벤트로그의 ID 별로 행위를 확인할 수 있다는 점 때문이다. 또한, 자체 내장된 쿼리 기능을 이용하여 용량이 큰 로그에서도 쉽게 원하는 로그를 검색 할 수 있다는 장점이 존재한다.


추가적인 사용 방법을 확인하고 싶다면 다음의 Microsoft 공식 가이드를 확인해보기를 추천한다.
5. 참조
Last updated
Was this helpful?