윈도우에는 프리/슈퍼패치라는 파일이 존재한다.
이 파일들은 윈도우 속도향상을 위해 존재하며, 포렌식적으로 의미가 많은 파일이기 때문에 상세히 알아보도록 하겠다.

[프리패치 파일]
프리패치 파일은 윈도우 속도향상을 위해 윈도우는 특정 어플리케이션이 사용하는 시스템 자원을 파일에 저장해놓고 윈도우 부팅시 프리패치 파일을 모두 메모리에 로드한다. 사용자가 메모리에 로드한 패치파일의 시스템 자원을 사용하는 어플리케이션을 실행 할 경우 미리 로드되어 있는 패치파일을 이용하여 어플리케이션을 실행하기 때문에 속도향상의 결과를 얻을 수 있는 것이다. 해당 파일의 관리는 프리패처(Prefetcher)가 하며, 프리패치 파일의 저장 경로는 아래와 같다.

경로 : %SystemRoot%\Prefetch

프리패치는 윈도우 부팅 시, 어플리케이션 실행 시 이 두 경우에 사용이 되는데 각각 어떻게 사용이 되는지 알아보자.

[부트 프리패칭]
윈도우 부팅 시 일어나는 과정의 명칭으로 윈도우는 부팅 시 여러 파일에서 실행코드와 데이터를 읽어오는데 읽어오는 파일들이 저장장치의 여러부분에 나뉘어져 있어 하드디스크의 헤드가 이리저리 빠르게 움직여야 해 하드디스크에 부담을 주게 된다. 이러한 이유로 데이터 읽기 시간은 지연되기 때문에 이러한 현상을 방지 하기 위하여 프리패처는 여러군데 나뉘어져 있는 파일들을 한군데 모아준다. 이러한 과정을 모니터링하고 그 결과를 저장하는 과정이 '부트 프리패칭' 이며 이때 만들어지는 파일이 있는데 이름이 'NTOSBOOT-BOODFAAD.PF' 이다. 

 

[어플리케이션 프리패칭]
어플리케이션 실행 시 일어나는 과정의 명칭으로 프리패처는 프리패치 파일이 없는 어플리케이션의 동작을 10초 동안 모니터링 하고 이 어플리케이션이 메모리에 올린 실행코드의 일부 또는 전부를 프리패치 파일로 만들어 저장한다. 그 후 해당 어플리케이션이 실행하면 윈도우 부팅 시 미리 메모리에 올려져 있는 해당 어플리케이션의 프리패치 파일을 사용하여 어플리케이션을 실행시킨다. 이렇게 함으로써 어플리케이션의 실행 속도는 향상된 결과를 얻게 된다.
이와 같은 과정을 '어플리케이션 프리패칭'이라고 한다.
어플리케이션 프리패칭 과정에서 생성되는 어플리케이션 프리패치 파일의 이름은 다음과 같은 규칙이 적용되어 생성된다.

[그림 1 - 어플리케이션 프리패치 파일 이름 생성 규칙]

* 참고 : 파일위치 hex값은 파일의 전체 경로(명령 옵션 포함)를 MD5로 해쉬한 값이다. 


프리패칭 기능들은 버전마다 기본적으로 사용되는 OS가 다르다.
 - 부트 프리패칭 : Win XP, 2003, Vista, 2008, 7
 - 어플리케이션 프리패칭 : Win XP, Vista, 7


위와 같이 다른 이유는 서버 OS의 경우 어플리케이션 사용 개수가 극히 소수이므로 굳이 어플리케이션 프리패칭 기능을 사용 할 필요가 없는 것이다.

프리패칭 기능은 레지스트리를 통해서 제어 할 수도 있고 서비스 관리를 통해 제어 할 수도 있다.

레지스트리의 경우 아래 키에서 프리패칭 기능을 제어 할 수 있다.

키 : HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
 

[그림 2 - PrefetchParameters 키]

위 키에서 EnablePrefetcher Value를 통해 제어 할 수 있으며, 설정 되는 값마다 의미하는 바가 다르기 때문에 아래에 해당 값들을 나열해 두었다.
 - 0 : 프리패칭을 사용하지 않음
 - 1 : 어플리케이션 프리패칭만 사용
 - 2 : 부트 프리패칭만 사용
 - 3 : 모두 사용(Defalut)


다음은 서비스 관리를 통한 프리패칭 제어 방법이다.

[그림 3 - Task 스케쥴러 서비스]

위 서비스가 중지되면 프리패칭 기능도 중지 된다.


* 참고 : 윈도우 XP의 프리패치 파일의 개수는 최대 128개이며 초과시 오래된 프리패치 파일은 삭제된다. 이와 같은 이유로 라이브 리스폰스 과정에서 실행된 어플리케이션의 프리패치 파일이 시스템의 오래되고 중요할지도 모르는 프리패치 파일을 지울 수 있어 이 점을 꼭 기억해 두고 있어야 한다.

프리패치 파일을 분석해주는 도구(Windows File Analyzer, Prefatch Paser)가 있지만 구조 공부를 하고 도구를 사용하는 것이 더욱 정보를 쉽고 정확하게 분석 할 수 있는 것이기 때문에 프리패치 파일의 구조를 알아보겠다.
다음 이미지는 프리패치 파일 구조 오프셋을 표시한 이미지이다.
* 참고 : Win XP와 Win 7의 경우 프리패치 파일의 구조가 달라 오프셋 표시 이미지가 두개이다.

 

[그림 4 - Win 7의 프리패치 파일 구조 offset]

[그림 5 - Win XP의 프리패치 파일 구조 offset]

[포렌식 관점에서의 프리패치 파일]
프리패치 파일은 실행파일의 여러가지 정보를 담고 있어 포렌식적 의미가 높으며 그 중에서도 포렌식적으로 활용 될 수 있는 정보는 아래와 같다.
1. 실행파일의 이름
2. 실행파일의 실행 회수
3. 실행파일의 마지막 실행 시간
4. 프리패치 파일의 타임라인(생성, 수정 접근)

 
이제 슈퍼패치에 대해서 알아 볼 차례이다.

[슈퍼패치 파일]
슈퍼패치 파일은 프리패치 파일의 추가적인 정보를 저장하는 파일이면서 프리패치 파일의 문제점을 해결하기 위해 만들어진 파일이기도 하다.
프리패칭의 과정 중 메모리에 프리패치 파일을 로드하는 과정이 있는데 이 과정에서 메모리 용량의 한계로 프리패치 파일이 페이지 파일로 Swap되면 추후에 어플리케이션 실행 시 다시 페이지 파일에서 메모리로 로드해야 한다는 점에서 속도 저하를 발생시킨다. 이러한 단점을 해결하기 위해 슈퍼패치 파일이란 것을 추가하였으며, 슈퍼패치 파일에는 사용자의 프로그램 실행 패턴을 기록한다.
슈퍼패치 파일은 프리패치 파일과 동일한 경로에 저장되며, 파일명은 Ag로 시작하고 확장자는 '.db' 이다.
슈퍼패칭 기능의 제어는 프리패치와 동일하게 레지스트리와 서비스 관리에서 할 수 있다.
레지스트리의 키 경우 프리패칭과 동일하며, Value만 다르다.

[그림 6 - 슈퍼패칭 Value]
 
프리패칭 기능을 제어하는 Value와 마찬가지로 여러 값을 가질 수 있으며 해당 값들은 아래와 같다.
 - 0 : 사용하지 않음
 - 1 : 어플리케이션 프리패칭 시 사용
 - 2 : 부트 프리패칭 시 사용
 - 3 : 모두 사용 



[그림 7 - 슈퍼패치 서비스]

슈퍼패치 파일은 여러가지가 있는데 이 파일들은 압축 파일과 비압축 파일로 나뉘며 아래와 같이 정리 할 수 있다.
1. 압축
    - AgAppLaunch.db
    - AgRobust.db
    - AgCx_SC[number].db
2. 비압축
    - AgGlFaultHistory.db
    - AgGlFgAppHistory.db 
    - AgGlGlobalHistory.db 
    - AgGlUAD_P_<SID>.db
    - AgGlUAD_<SID>.db

 

파일 구조는 간단하게 알아보도록 하겠다.(데이터 압축 크기가 가변적이어서 앞부분만 살펴보도록 하겠다)

[그림 8 - 슈퍼패치 파일 구조 offset]

슈퍼패치는 ntdll.dll 파일의 임포트 함수목록 중 RtlCompressBuffer(), RtlDeCompressBuffer() 함수에 의해 압축, 압축해제가 되며 함수에 들어가는 인자(COMPRESSION_FORMAT_LZNT1, COMPRESSION_FORMAT_XPRESS or COMPRESSION_FORMAT_XPRESS_HUFF)에 따라 압축 방식이 달라진다.


이 외에도 레디부스트라는 Vista 이후 버전에 추가된 기능이 있는데 이 기능은 다음에 다루도록 하겠다.

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

Web Browser  (0) 2012.01.13
썸네일(Thumbnail) 파일 분석  (2) 2012.01.12
프리/슈퍼패치 파일  (0) 2012.01.12
바로가기(LNK) 파일  (0) 2012.01.11
이벤트 로그  (1) 2012.01.11

+ Recent posts