Prefetch는, HDD의 읽기 속도를 높이기 위해 정보들을 미리 메모리에 가져오는 Microsoft의 기술이다. 자료를 미리 불러와서 저장해놓고, 필요할 때 마다 사용하는 캐시로도 볼 수 있다. 확장자는 .pf이고, 크게 2가지로 구분할 수 있다.
1. 부팅 시 prefetch
Windows Xp에 처음 도입되어, 자주 사용되는 시스템 설정 파일을 최적화하여 일정 영역에 미리 저장하여, 그 파일들을 부팅 시에 읽음으로써 부팅을 빠르게 하는 기능을 수행한다. (Window XP, 2003, Vista, 2008, 7, 8, 8.1)
부트 프리패치는 부팅에 필요한 자원들을 한 곳으로 모아서 로드한다. 정보들이 HDD에 일렬로 나열되어 있는 것이 아니라 여기저기 분산되어 있기에, 산재해있는 파일을 읽기 위해서는 Head의 움직임이 그만큼 많아지고, 속도가 감소하게 될 것이다. 이 때 부트 프리패치를 이용하면 Head의 움직임을 최소화할 수 있는 것이다.
분석 관점에서, 시스템이 부팅될 때 로드되는 파일들의 목록을 확인할 수 있다.
Winprefetch를 통한 pf 분석
C:\Windows\Prefetch 폴더에 존재하고 있다.
Key: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Value: EnablePrefetch
0 : 비활성화
1 : 부트 파일 Prefetch
2 : 응용프로그램 Prefetch
3 : 부트 파일와 응용프로그램 모두 Prefetch
Superfetch는 Prefetch의 한계점들은 보완하고 개선한 것이다. 동일한 경로에 (C:\Windows\Prefetch) .db 확장자를 가지고 존재한다.
1. 사용자의 사용 패턴을 기록한다.
2. 자주 사용하는 프로그램이 페이징되어 메모리 밖으로 나갔을 때 페이징을 야기한 프로그램이 종료되었을 경우 이를 감지하여 페이징된 프로그램의 데이터를 메모리로 이동시킨다.
Superfetch의 설정은 Prefetch와 마찬가지로 레지스트리에서 가능하다.
Key: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Value: EnableSuperfetch
0 : 비활성화
1 : 부트 파일 Superfetch
2 : 응용프로그램 Superfetch
3 : 부트 파일와 응용프로그램 모두 Superfetch
Prefetch와 다르게, Superfetch는 WinPrefetch에서 분석할 수 없다.
SuperfetchList, SuperfetchTree, Prefetch and Superfetch 등의 도구를 통해 분석 가능하다.
.pf파일의 시그니처는 다음과 같다.
11 00 00 00 53 43 43 41
S C C A
하지만 사진에서 확인할 수 있는 것처럼, SCCA는 어디가고, MAM이 있다. 뭘까? 압축이 되어 있기 때문에 그렇다.
https://gist.github.com/EricZimmerman/95be73f6cd04882e57e6
늘 그렇듯이, github와 google에는 없는게 없다. 누군가 압축해제 알고리즘을 짜서 줬다.
python을 통해 압축을 해제 완료한다.
기존과 달리 SCAA 시그니처를 정상적으로 확인할 수 있다.
그럼 이제 각각 어떠한 값이 어떤 정보를 의미하는지 알아보자.
Vista/7
Prefetcher Version : 0x1E
Signature : SCAA (0x41 43 43 53)
Prefetcher Management(Prefetch 서비스 버전) : 0x00 00 00 11
File Size : 0x01 1A 5C
Disk volume정보 (MetadataInfoOffset) : 0x 01 01 C8
최종 실행 시간 : 0x01 D8 02 FF AD 16 19 72
실행횟수 : 0x00
출처/참고
https://portable-forensics.blogspot.com/2014/11/prefetch-and-superfetch.html