Prefetch Format

Kail-KM
|2015. 9. 11. 21:45

Prefetch File


프리패치는 부팅할 때나 응용프로그램을 실행할 때 속도를 높이기 위해 사용한다. 윈도우에서 메모리를 효율적으로 관리하기 위한 한 방법이기도 하다. 실행파일이 사용하는 시스템 자원을 프리패치 파일에 저장해두고 부팅, 응용프로그램 실행시 미리 저장된 정보를 메모리에서 실행하여 속도를 향상시킨다. 부팅시에는 120동안 모니터링하고, 응용프로그램 시작시에는 10초를 모니터링 한 후, 모니터링한 정보로 프리패치 파일을 생성한다. 경로는 %Systemroot%Prefetch 에 저장이 된다.

응용프로그램의 경우 프리패치 파일이 남기 위해서는 10초간 메모리에 올라가있어야한다는 말이며, 개수에 있어서도 제한이 있는데 128개의 프리패치를 갖으며, 이 개수를 초과할 경우 오래된 프리패치 파일부터 삭제가 되어 새로운 pf 파일이 형성이 된다.




Windows 10 


프리패치 파일에 공부를 하기 위하여 자료를 찾던 중 Prefetch Format을 내 PC에서 확인하기 위하여 파일을 HxD로 확인하였을 때 많이 당황하게 되었다. SCCA 시그니쳐가 보여야하는데 보이지 않고 이상한 MAM 시그니쳐만 확인이 되었다.

이에 대하여 알아보니 이전에는 바로 내용들이 보였지만 최근의 운영체제에선 압축을 하여 바로 원하는 문자열들을 확인할 수가 없다. 하지만 간단한 툴들이나 코드를 이용해 바로 확인이 가능하도록 할 수가 있다.

아래는 Python으로 Decompree 한 상태이다. 이제서야 본격적인 공부를 시작할 수가 있다. 이를 해제하기 위한 Python 코드는 블로그에 올렸으니 확인을 한 후 어떤 코드가 사용되었는지 한번 보는 것이 좋다. 참고로 GrtHub에서 퍼온 것이다.             http://kali-km.tistory.com/entry/XPRESS-Decompress-by-Python

*winprefetchview를 통하여 확인할 경우 위와 같은 디컴프레스 과정이 필요없이 바로 내용을 확인이 가능하다. 



Registry


프리패치에 대한 설정은 레지스트리를 통하여 변경할 수가 있다. 아래에 보면 EnablePrefetcher라는 키가 있는데 값이 0x3으로 설정되어있다. 이 값에 따라 사용하지 않거나 어플리케이션이나 부트 프리칭만을 사용하거나 둘다 사용하도록 설정 할 수가 있다.

0x0 : 프리패칭을 사용하지 않음 

0x01 : 어플리케이션 프리패칭만 사용 

0x02 : 부트 프리패칭만 사용 

0x03 : 모두 사용  

기본값으로 0x3이 설정 되어있기 떄문에 별도의 수정을 하지 않는 이상 프리패치 파일들이 형성되며 이를 통하여 추가적인 분석이 가능하다.



외장 저장장치 사용흔적 확인


프리패치 파일에는 실행한 프로그램의 경로 또한 나타내어진다. 이를 통하여 해당 프로그램의 위치를 알 수가 있는데, 만약 프로그램이 USB에 담겨있던 프로그램이라면 이 또한 확인이 가능하다. 아래 사진에서와 같이 다른 프로그램들은 C:\로 시작하지만 이 경우에 있어선 독특하게 \VOLUME으로 시작하는것을 확인할 수가 있다. 이를 통해 우리는 외부저장장치에 있던 프로그램이 실행되었단 흔적을 찾을 수가 있다.




Format


운영체제에 따라 해당 오프셋의 위치가 다르긴 하지만 항목은 같다는 것을 알 수가 있다. 우선 첫 4바이트는 운영체제에 따른 Prefetch 버전을 나타내며 윈도우 XP의 경우 0x11이며 윈도우7의 경우 0x17등 버전은 아래의 표와 같다.

17 (0x11)

Used in: Windows XP, Windows 2003

23 (0x17)

Used in: Windows Vista, Windows 7

26 (0x1A)

Used in: Windows 8.1

30 (0x1E)

Used in: Windows 10

그 후SSCA 시그니처와 pf파일의 크기와 이름이 나오며 0x4C에 있는 4바이트의 값은 파일의 경로에 대한 MD5 해시값이다. 그리고 0x58의 위치에는 파일을 실행하기 위해서 메모리에 올라가야할 파일의 수를 나타내며 이 파일들의 목록은 0x64에서 가리키는 값의 오프셋에서 확인할 수가 있다. 그리고 0x6C에는 봄륨에 대한 정보 블록을 가리키는 오프셋이 나와 있다.


프리패치 파일을 통하여 확인할 수 있는 것들은 아래와 같이 정리해볼 수가 있다. 외장저장장치 사용흔적은 위에서 언급을 하였으니 확인을 할 수가 있다. 또한 SCCA 시그니처를 통해 파일 카빙을 할 수가 있으며, 삭제된 pf 파일이더라도 카빙이 가능하다. 악성코드의 흔적은 이름과 응용프로그램 실행 과정 등 종합적으로 고려하여 여부를 파악할 수가 있다.

프로그램 이름 

악성코드 흔적 

프로그램 실행 횟수 

외장저장장치 사용 흔적 

참조목록

프로그램 마지막 실행시간 

파일 시스템 시간(생성,수정,접근시간) 

부팅/응용프로그램 실행 과정



추가

http://kali-km.tistory.com/entry/Windows-10-Prefetch-Parser  ; 윈도우 10 프리패치 분석 도구


참고


https://github.com/libyal/libscca/blob/master/documentation/Windows%20Prefetch%20File%20%28PF%29%20format.asciidoc

http://www.forensicswiki.org/wiki/Windows_Prefetch_File_Format

http://maj3sty.tistory.com/857

http://forensicswiki.org/wiki/Prefetch

http://blog.digital-forensics.it/2015/06/a-first-look-at-windows-10-prefetch.html

http://forensic-proof.com/wp-content/uploads/2013/07/FP-%ED%94%84%EB%A6%AC%EC%8A%88%ED%8D%BC-%ED%8C%A8%EC%B9%98-%ED%8F%AC%EB%A0%8C%EC%8B%9D-Pre-Superfetch-Forensics.pdf

http://forensic-proof.com/archives/6103

'Forensic > Theory' 카테고리의 다른 글

Thumbnail Forensics (썸네일 분석)  (0) 2015.09.13
File Recovery  (2) 2015.09.12
File Signature  (0) 2015.09.12
Live Forensic 점검 항목  (0) 2015.09.11
Live Response  (0) 2015.09.09