본문 바로가기

[+] Forensic

이벤트 로그

모든 OS에는 OS에서 이루어지는 모든 활동에 대한 기록을 남기는 기능이 있는데 이 기능의 결과물을 로그라고 한다.

윈도우에서는 특정 동작을 이벤트라고 하는데 이벤트에 대한 기록을 이벤트 로그라고 부른다.

이벤트 로그에는 응용 프로그램 로그, 보안로그, 시스템로그 3가지로 분류되며 각 이벤트 로그의 설명은 다음과 같다.

[이벤트 로그]
1. 응용 프로그램 로그 
    - 시스템 구성 요소를 제외한 모든 응용 프로그램이 만드는 알림 메시지나, 오류, 비정상 종료등을 기록 함
    - 로그의 일정 형식이나 규칙은 없음.
2. 보안 로그
    - 로그인 성공/실패, 시스템 리소스에 대한 잘못된 접근, 보안정책 변경등을 기록 함
    - 보안 로그는 응용 프로그램이 남길수는 없으며, Lsass.exe만이 남길 수 있다. 
3. 시스템 로그
    - 시스템 구성 요소들의 이벤트를 기록 함 


이벤트 로그는 이벤트 뷰어로 볼 수 있다.

[그림 1 - 이벤트 뷰어]

이벤트 뷰어로 이벤트 로그들을 보면 빨간 박스가 되어 있는 것처럼 여러가지 정보를 볼 수 있는데 대부분 직관적인 항목들이어서 따로 설명하지 않아도 이해가 될 것이다.

각 항목 중 이벤트ID라는 부분이 있는데 이부분에 대해서는 조금 이야기를 해야 한다.

[이벤트 ID]
이벤트 ID는 이벤트를 기록한 서비스나 어플리케이션이 이벤트를 구별하기 위해 부여한 고유한 번호이다. 하지만 이 번호를 부여한 자의 관점에서만 고유한 번호이며 시스템 전체의 이벤트 로그를 보았을 때에는 고유하지 않다.
하지만 보안로그와 시스템 로그는 로그를 남길 수 있는 대상이 한정적이어서 실제로 이벤트 ID가 중복될 경우는 발생하지 않는다.

 

이벤트 ID로 문제의 원인을 파악하려면 이벤트 ID에 대한 정보를 제공받아야 하는데 이러한 정보는 MS에서도 제공하나 그 정보가 한정적이어서 실제로는 그렇게 도움되는 정보를 얻지 못한다.

eventid.net 이라고 하는 이벤트 ID의 정보를 DB화 하여 제공하는 사이트를 이용하는 것이 좋다.

[그림 2 - eventid.net]



이 곳은 이벤트 ID와 이벤트 소스로 검색하는 방법을 제공한다.

이곳은 정보를 기본적으로 무료로 제공하기는 하지만, 좀 더 정확한 정보에 대해서는 유료로 제공한다.


이벤트 로그 파일의 구조를 알아 볼 차례이다.

Win XP 버전과 Win 7 버전의 이벤트 로그 파일 구조는 조금씩 달라 일단 XP 버전을 알아 본 뒤 7 버전의 이벤트 로그 파일 구조를 알아보도록 하겠다.

[Win XP 이벤트 로그 파일 구조]
구조를 크게 나누었을 때 3가지로 나눌 수 있으며 가식화하면 아래와 같다.

[그림 3 - 이벤트 파일 구조(Win XP)]

 
EOF의 경우 꼭 마지막에 위치하는 것이 아닌 중간에 위치 할수도 있음을 참고로 알아두면 좋겠다.

아래 이미지는 이벤트 로그 헤더 오프셋에 대한 설명이다.

[그림 4 - 이벤트 로그 헤더 offset]

다음은 이벤트 레코드 오프셋에 대한 설명이다.

[그림 5 - 이벤트 로그 레코드 offset]

마지막으로 이벤트 레코드의 EOF offset 이다.

[그림 6 - EOF offset]

위에서 설명한 3가지 영역의 오프셋들 중 고정값이 있는데 시그니처나 매직넘버 앞에 있는 각 영역의 크기를 나타내는 부분은 고정값이어서 시그니처나 매직넘버와 같이 각 영역에 헤더라고 봐도 무방하다. 



이번에는 Win 7에 이벤트 파일 구조를 알아보자.

[Win 7 이벤트 파일 구조]
Win 7의 경우 크게 보면 이벤트 파일 헤더, Chunk로 나뉘고 세부적으로 보면 Chunk 부분에 레코드가 포함되어 있다.
그림으로 표현하면 아래와 같다.

[그림 7 - 이벤트 파일 구조(Win 7)]

아래 이미지는 이벤트 로그 파일 헤더의 offset이다.

[그림 8 - 이벤트 로그파일 헤더 offset]

아래 이미지는 Chunk의 offset이다.

 

[그림 9 - Chunk offset]

위에서 언급하지 않은 부분이 있다.

마지막 Chunk의 offset을 알아내는 방법을 언급하지 않았는데 이 방법은 다음과 같다.

 - Last Chunk offset = (ChunkSize * NumberOfChunks) + Event Log Header Size
    * 참고 : Chunk는 크기가 언제나 0x10000 == 65536 이다.


 
마지막으로 레코드 offset이다.

[그림 10 - 레코드 offset]

레코드 부분을 찾는 방법은 RecordSeparator의 경우 레코드의 시그니처라고 보면 되고 RecordCount는 

Chunk offset의 RecordsCount를 참고해서 검색하면 나온다.

모든 부분을 표시한 것은 아니니 그냥 참고로만 활용하면 되겠다. 


이벤트 로그파일의 레코드 저장방식은 '순환 버퍼' 방식이어서 로그 용량을 초과하면 가장 오래된 레코드가 삭제되고 EOF가

한칸 뒤로 밀려나면서 새로운 레코드가 자리잡게 된다.

위처럼 분석을 해도 되지만 시간이 오래 걸리기 때문에 Log 분석 도구를 사용하는 것이 제일 좋으며 무료도구와 상용도구가

있으니 적절히 자신에게 맞는 도구를 선택하여 사용하면 된다.
 

'[+] Forensic' 카테고리의 다른 글

프리/슈퍼패치 파일  (0) 2012.01.12
바로가기(LNK) 파일  (0) 2012.01.11
휴지통 분석  (0) 2012.01.10
윈도우 계정  (0) 2012.01.10