Windows Artifact[6] - EventLog[1]







이번 포스팅에서는 이벤트로그에 대해 알아 보겠으며, 구조, 주요 이벤트 로그에 대해 포스팅을 나눠 알아 보겠습니다.

-------------------------------------------------------------------------------------------------------------------------------------



1.이벤트로그

이벤트로그는 윈도우 시스템을 사용하면서 남는 로그입니다. 이벤트로그의 큰 특성은 아래와 같습니다.


-운영체제에서 발생되는 변화를 기록

-응용프로그램, 보안, Setup, 시스템 등 으로 구성

-이벤트 로그 저장경로 : C:/Windows/System32/winevt/Logs (윈도우 7 이후)

-저장되는 로그의 대표적인 정보로는 사용자 추가/삭제, 로그인 성공/실패, 원격접속 성공/실패, 윈도우 부팅/종료, 애플리케이션 설치 등 기록



  1)이벤트로그 데이터

윈도우 이벤트 로그는 vista 전후로 부분적인 차이점이 존재합니다. vista 이전에는 EVT라는 확장자로 사용되었으며, vista부터는 EVTX 확장자로 파일을 생성합니다. EVT 파일은 생성 시간, 작성 시간을 기록하며 EVTX는 생성시간만 기록합니다. EVT 확장자의 시간은 유닉스 32비트 헥스 타임(Unix 32bit Hex Time)/리틀엔디안(Little-endian)으로 기록되며 EVTX 확장자의 시간은 윈도우 64비트 타임/리틀엔디안(Little-endian)으로 기록됩니다.


추출되는 데이터의 차이점은 아래 표와 같습니다.


구분

속성

설명

 

EVT

Record Number

기록된 이벤트의 번호

Time Generated

이벤트가 작성된 시간

Event ID

특별한 이벤트 유형을 식별하는 값. 예를 들어 6005는 이벤트로그 서비스가 시작될 때 발생되는 이벤트ID.

Event Type

이벤트의 심각도를 분류하여 나타낸다. 정보(Information), 경고(Warning), (오류)Error, (심각)Critical, 성공감사(Success Audit), 실패 감사(Failure Audit) 로 구분.

Event Category

이벤트 카테고리

Event Scource

이벤트를 기록한 소프트웨어 (이벤트가 일어난 프로세스)

Computer

컴퓨터 이름

Strings

설명에 사용된 문자열

[표 1] EVT 데이터



구분

속성

설명

EVTX

Source

이벤트를 기록한 소프트웨어 (이벤트가 일어난 프로세스)

Event ID

특별한 이벤트 유형을 식별하는 값. 예를 들어 6005는 이벤트로그 서비스가 시작될 때 발생되는 이벤트ID.

Level

이벤트의 심각도를 분류하여 나타낸다. 정보(Information), 경고(Warning), (오류)Error, (심각)Critical, 성공감사(Success Audit), 실패 감사(Failure Audit) 로 구분.

User

이벤트 발생에 대한 사용자의 이름

Operational Code

응용 프로그램에서 이벤트가 발생했을 때 활동이나 시점을 식별하는 숫자 값을 포함.

Log

이벤트가 기록된 로그의 이름.

Task Category

이벤트 게시자의 하위 구성요소 또는 활동을 표현하는데 사용.

Keywords

이벤트를 검색하거나 필터링 하는데 사용할 수 있는 범주 또는 태그의 집합. ex) "네트워크", "보안", "리소스를 찾을 수 없습니다."

Computer

이벤트가 발생한 컴퓨터의 이름.

Date and Time

이벤트가 기록된 날짜 및 시간.

Process ID

이벤트를 생성하는 과정에 대한 식별번호.

Thread ID

이벤트 생성 쓰레드의 식별번호.

[표 2] EVTX 데이터


EVT파일은 윈도우즈 2000, 윈도우즈 XP, 윈도우즈 2003시스템에서 사용되는 이벤트 로그를 저장하는 파일의 형식 입니다. 일반적으로 System, Application, Security 이벤트 로그가 기록되며 시스템의 용도에 따라 추가적인 이벤트 로그가 존재할 수 있습니다


[그림 1] EVT 저장경로



EVT파일위치는 레지스트리에서 확인할 수 있습니다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\EventLog\ 레지스트리 경로 하위에 있는 System, Application, Security에서 File 값을 통해 각각 확인 할 수 있으며 일반적으로 “%SystemRoot%\System32\Config\” 하위에 위치합니다.

 

이벤트 로그의 종류는 아래와 같습니다.


구분

설명

시스템(System)

드라이버 로딩 등 시스템 구성 요소가 기록한 이벤트가 기록됩니다.

응용프로그램(Application)

응용프로그램이 기록하는 로그로 프로그램 개발자가 결정합니다.

보안(Security)

로그온 시도 및 성공, 파일 생성, 삭제 등의 이벤트를 기록합니다.

[표 3] EVT 로그 종류


이벤트 로그에 저장되는 이벤트 종류는 아래와 같습니다.


구분

설명

오류(Error)

오류 이벤트 로그는 데이터나 기능 손실 서비스 시작 실패와 같은 중요한 문제에 대해 기록 합니다.

실패 감사(Failure Audit)

감사대상에 대한 접근 시도가 실패했을 경우 기록됩니다. 예를 들어 시스템에 대한 로그인실패가 발생했을 경우 기록됩니다.

성공 감사(Success Audit)

실패 감사와는 반대로 감사대상에 대한 접근 시도가 성공했을 경우 기록됩니다.

정보(Information)

어플리케이션, 드라이버, 서비스의 성공적인 이벤트에 대하여 기록합니다. : 네트워크 드라이버가 성공적으로 로드 되었을 때 기록됩니다.

경고(Warning)

디스크 사용량이 많을 때와 같이 어플리케에서 데이터나 기능 손실 없이 회복할 수 있는 심각하지 않지만 추후 문제가 발생할 수 있는 문제에 대해 기록합니다

[표 4] 이벤트 종류


 

EVTX파일은 윈도우즈 비스타 이후 시스템에서 사용되는 이벤트 로그를 저장하는 파일의 형식 입니다. 일반적으로 System, Application, Security 이벤트 로그와 같은 전역 로그 이외에 인터넷 익스플로러, 윈도우 파워셸, 하드웨어 이벤트, 윈도우 구성 요소 이벤트 등 100여 개의 이벤트 로그 파일을 확인할 수 있습니다.


[그림 2] EVTX 저장경로


EVTX파일위치는 레지스트리에서 확인할 수 있습니다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\EventLog\ 레지스트리 경로 하위에 있는 System, Application, Security에서 File 값을 통해 각각 확인 할 수 있으며 일반적으로

“%SystemRoot%\System32\winevt\Logs 하위에 위치합니다.



구분

설명

시스템(System)

드라이버 로딩 등 시스템 구성 요소가 기록한 이벤트가 기록됩니다.

응용프로그램(Application)

윈도우 번들 소프트웨어를 비롯해서 사용자의 어플리케이션의 이벤트를 저장합니다.

보안(Security)

이 로그는 보안 관련된 이벤트 로그만을 기록합니다. 보안 관련된 프로그램의 동작을 모니터링하면서 그 외에도 윈도우 로그온, 네트워크 등 다양한 보안 로드들이 기록됩니다.

설치(Setup)

어플리케이션 설치 시 발생하는 이벤트를 기록합니다. 프로그램이 잘 설치되었는지 그리고 호환성문제가 일어나지 않는지 이 기록을 보면 알 수 있습니다.

[표 5] EVTX 로그 종류



이벤트 로그에 저장되는 이벤트 종류는 아래와 같습니다.


구분

설명

오류(Error)

오류 이벤트 로그는 데이터나 기능 손실 서비스 시작 실패와 같은 중요한 문제에 대해 기록 합니다.

실패 감사(Failure Audit)

감사대상에 대한 접근 시도가 실패했을 경우 기록됩니다. 예를 들어 시스템에 대한 로그인실패가 발생했을 경우 기록됩니다.

성공 감사(Success Audit)

실패 감사와는 반대로 감사대상에 대한 접근 시도가 성공했을 경우 기록됩니다.

정보(Information)

어플리케이션, 드라이버, 서비스의 성공적인 이벤트에 대하여 기록합니다. : 네트워크 드라이버가 성공적으로 로드 되었을 때 기록됩니다.

경고(Warning)

디스크 사용량이 많을 때와 같이 어플리케이션에서 데이터나 기능 손실 없이 회복할 수 있는 심각하지 않지만 추후 문제가 발생할 수 있는 문제에 대해 기록합니다

[표 6] 이벤트 종류




    1) EVT 구조


이벤트 로그에 저장되는 내용은 중요한 키워드만 포함되고 있으며 이벤트 뷰어와 같은 분석 툴에 표시될 때는 미리 지정된 템플릿을 활용하여 표시합니다


[그림 3] EVT 구조



EVT파일은 이벤트로그의 시작을 의미하는 Header Record를 시작으로 각각의 Event Record가 연속되어 있는 형태이며 마지막 Event Record가 생성되면 해당 레코드 다음에 이벤트로그의 마지막을 의미하는 Cursor Record가 생성됩니다


[그림 4] EVT 구조



① Header Record

헤더 레코드는 총 48bytes(0x30)으로 구성되어 있으며 해당 로그 파일의 사이즈, 가장 오래된 레코드 즉 첫 이벤트번호 그리고 현재 레코드, 즉 다음 이벤트 번호 등이 포함되어 있습니다.

아래는 실제 이벤트로그의 Header Record의 예입니다.


[그림 5] Header Record 구조



Header Record를 분석하면 아래와 같습니다.




②Event Record

Event Record에는 레코드의 사이즈, 레코드 넘버, 시간, 카테고리 등 각각의 이벤트에 대한 정보가 포함되어 있으며 시작과 마지막에 레코드의 사이즈가 표시됩니다. 로그분석 시 실제 이벤트가 저장되는 가장 핵심적인 부분입니다.

아래는 이벤트로그의 Event Record의 예입니다.


[그림 6] Event Record



Event Record를 분석하면 아래와 같습니다.





③Cursor Record

Cursor Record는 이벤트로그의 마지막을 표시하는 레코드로서 이벤트로그의 가장 처음과 마지막에 대한 정보가 포함되어 있습니다. One, Two, Three, Four값을 시그니처로 구분할 수 있으며 자세한 포함 내용은 아래 표와 같습니다.

아래는 이벤트로그의 Cursor Record의 예입니다.


[그림 7] Cursor Record


Cursor Record를 분석하면 아래와 같습니다.





    2) EVTX 구조


EVTXEVT 파일의 진화된 형태로, 더 많은 이벤트 ID(Event ID) 필드를 포함하고 있습니다. EVTX 파일은 다수의 청크(Chunk)가 이어져 있는 형태로 구성되어 있습니다. 이 청크 내부에는 이벤트 레코드 기록이 존재하며 이러한 로그 기록들을 추출하여 피해시스템 분석에 활용할 수 있습니다.

 

이벤트 로그(EVTX)의 전체적인 구조는 다음과 같습니다

[그림 8] EVTX 구조




①File header

EVTX 파일 헤더에는 각각의 오프셋에 시그니처, 청크(Chunk) 개수, 체크섬 등의 정보가 포함되어 있습니다. 각 오프셋에 대한 정보는 다음과 같습니다.


오프셋

사이즈

설명

0x00

8

ElfFile0x00

시그니처

0x08

8

 

첫 번째 청크(chunk) 넘버

0x10

8

 

마지막 청크(chunk) 넘버

0x18

8

 

다음 레코드 식별자

0x20

4

128

헤더 사이즈

0x24

2

1

Minor version

0x26

2

3

Major version

0x28

2

4096

헤더 블록 사이즈

0x2a

2

 

청크(chunk) 개수

0x2c

76

 

빈 값

0x78

4

 

파일 플래그

0x7c

4

 

체크섬(Checksum)

[표 7] File Header 오프셋 정보



EVTXElfFile 이라는 시그니처로 시작됩니다. 청크 사이즈는 청크 하나의 크기이며, 기본적으로 1000h의 크기를 가지게 됩니다. 청크 카운트(Chunk Count)EVTX 파일 안에 몇 개의 청크가 들어있는지 나타내며 본 예시 이벤트 파일은 94개의 청크를 가지고 있습니다. 또한 Checksum CRC를 통해 데이터 변조에 대한 검증이 가능합니다.


[그림 9] File Header 구조


File Header 구조를 분석 하면 아래와 같습니다.


[그림 10] File Header 구조 분석



②Chunk header

각각의 청크 안에는 자기 자신에 대한 정보가 기록되어 있습니다. 해당 기록은 청크 내에 기록된 레코드의 시작 번호와 마지막 번호 등을 담고 있기 때문에 해당 청크가 몇 개의 레코드를 기록하고 있는지 알 수 있다. 본 예시의 청크는 124개의 레코드를 기록하고 있음을 확인할 수 있습니다. 각각의 청크 안에 체크섬이 있기 때문에 데이터 변조에 대한 검증이 가능합니다.

각 오프셋에 대한 정보는 다음과 같습니다.


오프셋

사이즈

설명

0x00

8

시그니처

0x08

8

첫 번째 이벤트 레코드 넘버

0x10

8

마지막 이벤트 레코드 넘버

0x18

8

첫 번째 이벤트 레코드 식별자

0x20

8

마지막 이벤트 레코드 식별자

0x28

4

헤더 사이즈

0x2c

4

마지막 이벤트 레코드 데이터 오프셋

0x30

4

여유 공간 오프셋

0x34

4

이벤트 레코드 체크섬

0x38

64

빈 값

0x78

4

알려지지 않음

0x7c

4

체크섬

(처음 120바이트와 청크의 128바이터 512바이트 사이의 데이터에 대한 오프셋)

[표 8] Chunk Header 오프셋 정보



[그림 11] Chunk Header 구조



Chunk Header 구조를 분석하면 아래와 같습니다.





③Event record

각각의 레코드에는 실제 로그 데이터가 들어있습니다. 실제로 레코드 내부의 바이너리 XML 영역을 분석하여 분석에 필요한 데이터를 추출하게 됩니다.

이벤트 레코드의 오프셋에 대한 정보는 다음과 같습니다.


[그림 12] Event record 오프셋 정보



[그림 13] Event record 분석





지금까지 이벤트 로그와 관련하여 저장경로, 각각의 구조에 대해 살펴 보았으며 다음 포스팅에서 이어서 이벤트로그 분석방법에 대해 알아 보겠습니다.

이 글을 공유하기

댓글(0)