디지털 포렌식 #9 (Prefetch)

0

디지털포렌식

목록 보기
79/115

1. Prefetch

Prefetch는, HDD의 읽기 속도를 높이기 위해 정보들을 미리 메모리에 가져오는 Microsoft의 기술이다. 자료를 미리 불러와서 저장해놓고, 필요할 때 마다 사용하는 캐시로도 볼 수 있다. 확장자는 .pf이고, 크게 2가지로 구분할 수 있다.
1. 부팅 시 prefetch
Windows Xp에 처음 도입되어, 자주 사용되는 시스템 설정 파일을 최적화하여 일정 영역에 미리 저장하여, 그 파일들을 부팅 시에 읽음으로써 부팅을 빠르게 하는 기능을 수행한다. (Window XP, 2003, Vista, 2008, 7, 8, 8.1)
부트 프리패치는 부팅에 필요한 자원들을 한 곳으로 모아서 로드한다. 정보들이 HDD에 일렬로 나열되어 있는 것이 아니라 여기저기 분산되어 있기에, 산재해있는 파일을 읽기 위해서는 Head의 움직임이 그만큼 많아지고, 속도가 감소하게 될 것이다. 이 때 부트 프리패치를 이용하면 Head의 움직임을 최소화할 수 있는 것이다.

분석 관점에서, 시스템이 부팅될 때 로드되는 파일들의 목록을 확인할 수 있다.

  1. 프로그램 실행 시 prefetch
    자주 사용하는 프로그램을 자동으로 파악해서 일정공간에 "실행되는 프로그램 파일에 대한 정보를 저장"하고 일정부분을 저장한다. 프로그램을 다시 실행시키면, 미리 읽어놓은 파일들 때문에 빠르게 실행되는 것이다.
  • 문제점
    Prefetch 기술은 파일과 데이터를 응용 프로그램 요청 전에 미리 로딩해 놓는 기술이었다. 그러나, 가상 메모리는 한정된 용량을 가지고 있기에 다른 응용 프로그램이 메모리를 필요로 할 경우, Prefetch 해놓은 데이터를 하드 디스크 내 페이징 파일로 이동시켜야만한다. 이러한 이동 역시도 자원을 소모하는 것이기 때문에, 결국 성능 향상에 약점으로 이어지게 된다. (메모리에 상주하지 못하고 반복하여 In-Out을 반복한다면 효율 저하로 이어질 것이다.)

Winprefetch를 통한 pf 분석

  • 실행 파일 이름
  • 실행 파일의 실행 횟수
  • 실행 파일의 마지막 실행 시간
  • .pf의 생성 시간
  • 실행된 Volume 정보
  • 실행 시 참조하는 file들의 목록
    들을 알 수 있다.
    이러한 pf파일들의 주소는,

C:\Windows\Prefetch 폴더에 존재하고 있다.

Key: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Value: EnablePrefetch
0 : 비활성화
1 : 부트 파일 Prefetch
2 : 응용프로그램 Prefetch
3 : 부트 파일와 응용프로그램 모두 Prefetch

2. Superfetch

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 등의 도구를 통해 분석 가능하다.


HxD를 통해 분석해보자.

.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

  • Window XP/2003과 Vista/7 에 있어 pf 파일의 포맷은 차이가 난다. 오늘은 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://github.com/proneer/Slides/blob/master/Windows/(FP)%20%ED%94%84%EB%A6%AC,%EC%8A%88%ED%8D%BC%20%ED%8C%A8%EC%B9%98%20%ED%8F%AC%EB%A0%8C%EC%8B%9D%20(Prefetch%20&%20Superfetch%20Forensics).pdf

https://portable-forensics.blogspot.com/2014/11/prefetch-and-superfetch.html

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

0개의 댓글