Prefetch & Superfetch

개요

윈도우 에서는 프로그램의 실행 속도를 빠르게 하기 위해서 캐싱될 데이터를 하드디스크에 미리 저장해 놓는 용도로 사용되는 기능이다. 슈퍼 패치도 유사하게 실행될 프로그램이 사용하는 파일과 데이터를 메모리에 빠르게 적재할 수 있도록 하는 기능이다. 부팅을 빠르게 해준다는 점에서 큰 의미가 있지만, SSD가 상용화되는 요즘 추세에는 그 사용이 효율적이라고 말할 수는 없겠다.
하지만 포렌식 관점에서 바라보았을 때 프리패치와 슈퍼패치를 이용한다면 최근에 어떤 프로그램을 실행 했는지에 대한 정보를 확인할 수 있다. 이를 확인할 수 있는 여러 방법이 있지만 가장 흔하면서도 많이 이용되는 것이 프리패치&슈퍼패치다.
프리패치가 널리 활용되는 이유로는 간접적인 정보를 통해 논리적으로 파일이 실행되었음을 이끌어내야 하는 다른 아티팩트와는 다르게 직관적으로 언제 특정 프로그램을 실행했고, 몇 번 실행했는지 확인할 수 있기 때문이다.
슈퍼패치는 최근 SSD 보급률이 워낙 좋아졌기 때문에 따로 다루지 않을 예정이다. 추가적인 내용 글이 있으면 좋겠다는 의견들이 있으면 그때 다뤄 보도록 하겠다.

파일 경로 및 설정 방법

프리패치 파일 경로
C:\Windows\Prefetch\*.pf
Bash
복사
Q : 왜 지워진 파일이 있나요? A : 프리패치는 최대 128개의 파일만을 저장하고, 추가 업데이트가 있을 시 오래된 프리패치를 삭제한다.
프리패치 설정 레지스트리 경로
컴퓨터\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Bash
복사
이 때 키 값에 따라 여러 의미를 가진다
0 : prefetch 비활성화
1 : 응용 프로그램 캐싱만 사용
2 : 부트 캐싱만 사용
3 : 응용 프로그램 및 부트 캐싱 사용 (Default)

프리패치 파일 구조

파일 구조는 자체적으로 카빙을 하고 싶거나, 분석 도구를 만들어 볼 사람의 경우 참고하면 되겠다. 필수적으로 알아야 하는 내용이 아니고, 관련 도구를 이용해서 충분히 파싱할 수 있으니 목적에 따라 걸러서 보도록 하자.
공부 방법 추천 1. 근데 아티팩트를 파싱하는 도구를 한번쯤 만들어보면 전체적인 구조를 이해하는데 도움이 되고 코딩 실력이나 이래저래 도움이 많이 되니 개인적으로는 해보는 것을 추천한다.
파일 헤더
Offset
Size
Description
0x00
4
Version
0x04
4
Signature : “SCCA”
0x08
4
Unknown
0x0C
4
프리패치파일 크기
0x10
60
파일 이름
0x4C
4
파일 이름에 대한 해시
데이터 종류는 버전 별로 상이하다. 각 버전별 프리패치 데이터가 갖고 있는 구조체 정보를 나열해 보았다.
17version
23version
26version
30version

프리패치 내 데이터

그럼 아마 이 글을 읽는 사람들이 궁금해 할 정보에 대해서 소개할 차례이다. 앞의 내용을 모두 읽었다면 프리패치가 어떤 조건에서 생성이 되는지 알았을 것이다. 이번 장에서는 프리패치 파일 안에는 어떤 데이터가 있는지 소개해 보도록 하겠다. 소개 부분에서 프리패치는 파일을 언제 실행했는지 알 수 있다고 했는데, 이 정보를 비롯해 부가적으로 확인할 수 있는 정보는 다음과 같다.
분석하는 목적에 따라 봐야하는 정보가 다르다. 단순히 어떤 프로그램을 실행 했다는 정보가 필요하다면 실행 횟수와 실행 시각 정보들을 위주로 보면 된다. 예를 들어 악성 코드를 특정 프로그램이 실행한 경우 어떤 DLL 을 참조해서 실행했는지 직접 리버싱해 보지 않아도 알 수 있으므로 어떤 프로그램뿐만 아니라 연관된 프로그램까지 실행되는 것을 알 수 있겠다.
실행 파일 이름
실행 파일 경로
실행 횟수
마지막 실행 시각
최초 실행 시각
사용하는 DLL
볼륨 이름 및 VSN
모든 정보를 적지는 않았다. 가장 주요하다고 생각되는 부분들을 적었고, 모든 정보를 알고 싶다면 파일 구조에 대해 읽어보고 오자.

ADS
ADS로 실행파일이 붙어 있는 경우 ADS에 대한 프리패치 파일이 생성된다.
C:\Windows\System32\sample.exe:evil.exe C:\Windows\Prefetch\sample.exe:evil.pf
JavaScript
복사

분석 도구

WinPrefetchView

Conclusion

윈도우 아티팩트 중 가장 유용하게 쓰는 아티팩트가 아닌가 생각이 든다. 뭔가 명확하게 남아있기도 하고, 얻을 수 있는 정보가 많으니, 케이스 분석할 때 필수적으로 작성해야 하는 설치된 응용프로그램과 연결지을때도 유용하다. 매칭되는 응용 프로그램이 몇번 실행되었는지, 어떤 dll을 참조하는지 기호에 맞게 분석하면 좋다.
앵간한 분석 도구에서는 프리패치를 분석해주는게 기본 옵션으로 들어가 있는 경우가 많다. autopsy 에서 해주는지는 잘 기억이 안나지만,,,,(안해줬던거 같다) 기타 많이 사용하는 유료 도구에서는 거의다 지원을 해주니 별 생각없이 출력해주는 결과만 읽은 기억이 있을 것이다. 때로는 출력해주는 정보가 전부라는 함정에 빠질 때가 있는데 항상 전체 중 보기 편하게 만들어주는게 “툴”의 결과물이라는 것을 잊지 않고 분석에 임하면 좋을 것 같다.