[Artifact] 윈도우 포렌식 - 이벤트로그 아티팩트
이벤트로그
이벤트로그는 윈도우 시스템을 사용하면서 남는 로그를 뜻한다.
로그의 경로는 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가 포함된다.
참고 자료
http://it-jaemins.blogspot.com/2013/07/windows.html
https://kali-km.tistory.com/entry/Windows-Event-Log-1