Security/Forensics

[Artifact] 윈도우 포렌식 - 이벤트로그 아티팩트

bonggang 2019. 9. 16. 08:57

이벤트로그


이벤트로그는 윈도우 시스템을 사용하면서 남는 로그를 뜻한다.

로그의 경로는 C:\Windows\System32\winevt\Logs이며 Application/Security/Setup/System 등이 대표적인 윈도우의 로그이다.(윈도우 vista 이상) 로그 저장 형태는 binary 및 XML이며 .evtx의 확장자명을 가진다.

이벤트 로그에서 얻을 수 있는 정보는 외부 IP로부터 로그인 정보, RDP연결, 프로세스 생성/삭제 로그, 힙 영역 손상, 서비스 설치, 시스템 전원 관리 등이 있다.

이를 위해 확인해볼 부분은 날짜, 시간, 사용자(이벤트 발생 시 로그온 되어있는 사용자 이름), 컴퓨터(이벤트 발생 컴퓨터 이름), 이벤트 ID(어떤 이벤트가 발생했는지 식별), 원본(프로그램, 시스템 구성요소), 종류(오류, 경고, 정보, 성공감사, 실패감사), 범주가 있다.

 

응용프로그램 로그(C:\Windows\System32\winevt\Logs\Application.evtx)
응용 프로그램 구동 중 특이사항이 발생될 때 저장되는 로그.

응용프로그램에 의해 제어되기 때문에 응용프로그램 개발자에 의해 정의되는 경우가 많다. 그렇기때문에 모든 응용프로그램이 이벤트 로그를 생성하는 것은 아니다.

 

시스템(C:\Windows\System32\winevt\Logs\System.evtx)
윈도우 시스템을 구동하거나 운영하면서 발생된 충돌이나 에러 등이 저장되는 로그.

주로 하드웨어 장치나 드라이버 오류 정보 및 동작 여부 등이 기록되며 윈도우 시스템 진단 및 문제점 해결을 위해 사용된다.

주의 깊게 살펴보아야 할 정보들은 시간 변경, 시스템 시작/종료, 서비스 시작/종료/실패 등이 있다.

 

보안(C:\Windows\System32\winevt\Logs\Security.evtx)
윈도우 보안과 관련된 정보들이 저장되는 로그.

시스템 로그온, 파일 접근, 인증, 계정 생성, 권한 사용 등의 정보가 대표적이다.

 

설치(C:\Windows\System32\winevt\Logs\Setup.evtx)
어플리케이션 설치 시 발생하는 이벤트를 기록하는 로그.

 


윈도우 이벤트 로그는 vista 이전에는 EVT로 이후부터는 EVTX 확장자로 파일을 생성한다.

 

EVTX

EVTX 파일이 생성되는 위치는 레지스트리에서 확인할 수 있는데 경로는 다음과 같다.

 

컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\

 

본 경로 하위에 있는 항목의 File 값을 통해 각각의 경로를 확인할 수 있다.

 

이벤트 로그에 저장되는 이벤트 종류는 오류, 실패 감사, 성공 감사, 정보, 경고 등이 있다.

 

Byte order little-endian
Date and time values FILETIME in UTC
Character strings Unicode 문자열은 UTF-16 little-endian(without byte order mark(BOM)

 

구조

EVTX 파일은 다수의 청크(Chunk)가 이어져 있는 형태로 구성되어 있다. 이 청크 내부에 이벤트 레코드 기록이 존재하며 이러한 로그 기록들을 추출하여 피해시스템 분석에 활용할 수 있다.

 

EVTX의 구조를 그림으로 표현하면 다음과 같다.

 

 

 

File Header는 4096Byte

Chunk는 65536 Byte

Chunk Header는 512 Byte

 

 

 

 

File Header

파일 헤더에 포함된 정보는 다음과 같다.

signature 8(사이즈)char[8] 시그니처(45 6C 66 46 69 6C 65 00) 0x00
oldset Chunk Num 8int64_t 첫 번째 청크 넘버 0x08
current Chunk Num 8int64_t 마지막 청크 넘버 0x10
next Record Num 8int64_t 다음 레코드 식별자 0x18
header Length 4uint32_t 헤더 사이즈 0x20
minor Version 2uint16_t Minor Version 0x24
major Version 2uint16_t Major Version 0x26
header Size 2uint16_t 헤더 블록 사이즈 0x28
chunk Count 2uint16_t 청크 개수 0x2a
unKnown 76char[76] 빈 값 0x2c
flags 4uint32_t 파일 플래그 0x78
checksum 4uint32_t 체크섬 0x7c

File Flags

0x0001 is dirty
0x0002 is full

 

Chunk Header

청크 헤더에 포함된 정보는 자기 자신에 대한 정보이다. 청크 헤더에 대한 자세한 정보는 다음과 같다.

signature 8(사이즈)char[8] 시그니처(45 6C 66 43 68 6E 6B 00) 0x00
first Log Record Num 8int64_t 첫 번째 이벤트 레코드 넘버 0x08
last Log Record Num 8int64_t 마지막 이벤트 레코드 넘버 0x10
first File Record Num 8int64_t 첫 번째 이벤트 레코드 식별자 0x18
last File Record Num 8int64_t 마지막 이벤트 레코드 식별자 0x20
tables Offset 4uint32_t 헤더 사이즈 0x28
last Record Offset 4uint32_t 마지막 이벤트 레코드 데이터 offset(상대적 위치) 0x2c
next Record Offset 4uint32_t free space offset 0x30
data CRC 4uint32_t 이벤트 레코드 체크섬 0x34
unKnown 68char[68] 빈 값 0x38
header CRC 4uint32_t 체크섬 0x7c

 

 

Record

각각의 레코드에는 실제 로그 데이터가 들어있다.

signature 4(사이즈)char[4] 시그니처(2A 2A 00 00) 0x00
size 4uint32_t 이벤트 레코드 크기 0x04
Event Record Identifier 8uint64_t 이벤트 레코드 식별자 0x08
Written Date and Time 8uint64_t 이벤트 레코드 작성 날짜와 시간 0x10
Event ... 레코드 정보가 포함된 바이너리 XML 0x18
Copy of size 4uint32_t 사이즈 복사본 ...

 

 

Binary XML

BinaryXML는 Prologue(0 or 1), Fragment(0 or N), 기타(0 or 1), End of file token를 포함하고 있다.

 

Fragment

fragment 헤더와 element로 구성되어 있다.

 

fragment header

Fragment header token 1(사이즈) 0x00(offset) 0x0f(value)
Major version 1 0x01 0X01
Minor Version 1 0x02 0x01
Flags 1 0x03 0x00

 

element

비어있을 수도 채워져있을 수도 있다.

1) 비워져있는 경우

<Provider Name="Provider"/>

위와 같이 element start, close empty element token만 존재한다.

 

2) 채워져 있는 경우 

<EventID>400</EventID>

위와 같이 element start, close start element token, 내용, end element token이 존재한다.

 

element start

Open start element tag token 1(사이즈) 0x00(offset) 0x01/0x41(value)
Dependency identifier 2 0x01  
Data size 4 0x03  
Element name offset 4 0x07  
Arrtibute list ... 0x11  

attribute list

Data size 4(사이즈) 0x00(offset)
Array of attributes ... 0x04

attribute

Attribute token 1(사이즈) 0x00(offset) 0x06/0x46(value)
Attribute name offset 4 0x01  
Attribute data ... 0x05  

attribute data

value text, substitution, character entity reference, entity reference가 포함된다.

 


참고 자료

https://github.com/libyal/libevtx/blob/master/documentation/Windows%20XML%20Event%20Log%20(EVTX).asciidoc

http://blog.naver.com/PostView.nhn?blogId=kdi0373&logNo=220524577856&parentCategoryNo=&categoryNo=172&viewDate=&isShowPopularPosts=true&from=search

http://it-jaemins.blogspot.com/2013/07/windows.html

https://kali-km.tistory.com/entry/Windows-Event-Log-1

http://it-jaemins.blogspot.com/2013/07/windows.html

https://horae.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%A1%9C%EA%B7%B8