Security & Forensic

반응형

prefetch 분석

 

윈도우의 프리패칭은 부팅할 때나 응용프로그램을 시작할 때 성능을 향샹시키기 위해 구현된 기능이다. 부팅 시에는 120초를 모니터링하고 응용프로그램 시작 시에는 10초를 모니터링 한 후, 모니터링한 정보로 프리패치 파일을 생성한다. 생성된 프리패치 파일은 재부팅할 때나 응용프로그램을 재실행할 때 속도 향상을 위해 사용된다.


프리패치 파일은 “%SystemRoot%\Prefetch” 폴더에 저장되는데 최대 128개의 파일을 유지한다. 새로운 응용프로그램이 실행되면 LRU 알고리즘에 의해 가장 오래 사용하지 않은 응용프로그램의 프리패치 파일이 삭제되고 새 응용프로그램 프리패치 파일이 추가된다. 오래된 프리패치 파일의 삭제는 일반 삭제이므로 비할당영역에서 프리패치 파일을 카빙해보면 상당히 많은 파일을 발견할 수 있다. 저장장치를 여유롭게 사용했다면 윈도우 설치 시점부터 현재까지의 응용프로그램 실행 이력을 확인할 수도 있다

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


프리패치 파일에서 획득 가능한 정보는 다음과 같다.
- 응용프로그램 이름
- 응용프로그램 실행 횟수
- 응용프로그램의 최초 실행 시간은 프리패치 파일 생성시간
- 응용프로그램 마지막 실행 시각
- 응용프로그램 파일의 파일시스템 시간 정보
- 응용프로그램이 위치한 볼륨 정보 
- 응용프로그램이 참조하는 파일 목록(DLL 및 일반 파일) 

 

특정 시스템에서 디지털 포렌식 분석을 수행할 때 사고가 일어난 후 많은 시간이 지나지 않았다면 프리패치 파일에 저장되는 위 정보에서 참조 목록의 순서를 나타내는 Index로 정렬하여 사용자 행위나 공격 흐름을 재구성할 수 있다. 물론, 프리패치 파일만으로는 한계가 있으므로 다양한 시스템 아티팩트를 종합하여 통합 타임라인 분석을 수행해야 한다.

 

한두개의 아티팩트나 이벤트만으로 분석하면 사건의 흐름이나 연관성을 분석하는데 제한적이고 한계가 있으므로 다양한 아티팩트나 이벤트를 대상으로 타임라인 분석을 수행한다


프리패치 분석 중 고려해야 할 몇 가지 사항
들이 있다.

1) 오래된 프리패치 파일은 삭제되어 비할당 영역에 존재할 수 있으므로 카빙을 통해 분석이 가능하다.

2) 원본 실행파일이 제거되어도 프리패치 파일은 시스템에 남아있다. 프리패치 파일은 있는데 실행 파일이 없는 경우

   : 실행 후 실행파일을 삭제한 경우나 psexec 또는  net use 명령으로 원격 실행한 경우

3) 프리패치파일이 존재하지 않는다고 특정 프로그램이 실행되지 않았다는 의미는 아니다.

   실행된 exe 파일을 지웠거나 pxexec 같은 tool을 통해 원격으로 실행한 경우일 수 있다.
   pxexec 같은 tool을 통해 원격으로 실행한 경우에는 프리패치 파일이 생성되지 않는다.

4) 윈도우 XP이후의 모든 운영체제에서 프리패치 파일을 생성하는 것은 아니다.

   윈도우 7이상의 운영체제에서 SSD를 사용할 경우 메모리 최적화 기능으로 인해 프리패치 생성이
   비활성화 되있을 수 있으며, 운영체제의 세부적인 버전별로 차이가 존재한다. 

   또한 프리패치 관련 레지스트리(HKLM\SYSTEM\ControlSet00#\Control\Session Manager\Memory
   Management\Prefetch Parameter\EnablePrefetcher)에서 비활성화  되어 있을 경우도 존재한다.

4) 참조 목록에서 실행가능한 파일이 있는지 확인 : scr, exe, lnk, bat, vbs, js, com, ps1 등

5) 실행 파일이 아닌 워드, 엑셀, pdf 등의 일반 파일에서 cmd.exe, screen.scr, cscript 등을 참조하는 경우 사에
   분석 필요 
6) 참조 목록에서 경로가 일반 드라이브 문자가 아닌 \\Device 또는 \\Device\HARDDISKVOLUME??으로
   시작하거나 고정형 디스크 드라이브 문자 외의 문자로 시작하는 경우 유심히 살펴봐야 한다.

   즉 Full Path의 경로가 로컬의 또 다른 볼륨인지 외장 볼륨인지는 레지스트리에 마운트된 볼륨 정보와 함께
   판단할 필요가 있다.

7) 참조 목록에 별도의 시간 정보가 기록되지 않아 정상 파일을 패치하여 동작하는 부류의 악성코드는 찾기 힘들다는
   한계
가 있다.

 

<참고>

어플리케이션 프리패치는 "[실행파일명] – [파일 위치에 대한 해쉬].pf"와 같은 이름으로 생성된다.

프리패치와 슈퍼패치는 기본적으로 보조기억장치와 주 기억장치의 속도 차이를 극복하기 위해 사용되는 기술이므로

보조 기억 장치의 속도가 빠르다면 불필요한 기술이라고도 볼 수 있다.

 

윈도우 7이상의 운영체제나 윈도우 서버군 OS에서는 SSD를 사용할 경우, 메모리 관리 기술을 자동으로 최적화하는 기능이 추가되었다. 그러므로 실제로 SSD가 사용된 시스템을 조사하다보면 프리패치 파일이 생성되지 않는 환경이 많다.

 

서버 제품군에서 응용프로그램 프리패칭을 사용하지 않는 이유는 응용프로그램이 반복적으로 실행되기 보다는 한번 실행되면 오랫동안 유지되는 환경이기 때문이다.

하지만 Windows 7이상의 모든 운영체제에서 프리패치나 슈퍼패치를 비활성화 하는 것은 아닌 것으로 보인다. 운영체제의 세부적인 버전 별로 자동 설정 여부가 다른 것으로 확인되므로, 우선적으로 프리패치와 슈퍼패치의 존재 여부를 확인한 후, 존재하지 않는다면, 아래 레지스트리와 서비스의 설정 상태를 확인하여 의도적으로 삭제한 것인지 원래 존재하지 않는 것인지를 판단하여 복구 여부를 결정하는 절차로 분석을 진행할 수 있도록 하자.

 

레지스트리 경로

프리패치 생성 여부 레지스트리 경로

* HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnablePrefetcher

* HKLM\SYSTEM\ControlSet00#\Control\Session Manager\Memory Management\Prefetch Parameter\EnablePrefetcher 
* HKLM\SYSTEM\ControlSet00X\Control\Session Manager\Memory Management\Prefetch Parameter\EnableSuperfetch 

 

각각의 키의 값은 아래의 의미를 가진다. 
0 : 사용 하지 않음. 
1 : 응용프로그램 캐싱만 사용 
2 : 부트 캐싱만 사용 
3 : 응용프로그램/부트 캐싱 모두 사용(기본 설정) 

 

C:\>reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters"


관련 서비스 
아래 서비스의 동작 여부를 확인
* Event Log | Windows Event Log (Prefetch 생성에 영향) <- 서비스명 eventlog
* Task Scheduler (Prefetch 생성에 영향) <- 서비스명 schedule
* Superfetch (Superfetch 생성에 영향) <- 최근 서비스명이 sysmain으로 변경

 

프리패치 파일 목록

F:\tool\forensic\RegRipper2.8>dir %windir%\prefetch\*.pf /a-d /o-d
2020-03-04  오후 04:40             9,716 SPPSVC.EXE-7B160CA5.pf
2020-03-04  오후 04:40            12,561 GNDUMP.EXE-7354CC54.pf
2020-03-04  오후 04:39             4,209 SEARCHFILTERHOST.EXE-10E4267C.pf

......

 

PECmd Tool

F:\tool\forensic\RegRipper2.8>F:\script\batch\PECmd.exe -f "c:\windows\prefetch\WINWORD.EXE-A4E0DB06.pf"

일괄 분석

C:\>PECmd.exe -d c:\Windows\prefetch > c:\temp\prefetchAnalyze.lst

 

WinprefetchView Tool
GUI

CLI

C:\>WinPrefetchView.exe /folder %windir%\prefetch /sort "~Modified Time" /sxml f:\temp\winpretchview.xml

 

C:\>LogParser.exe -h -i:xml "f:\temp\winpretchview.xml" -headerrow:on

......

Fields: 

  filename (S)        created_time (S) modified_time (S) file_size (S)
  process_exe (S)     process_path (S) run_counter (I)   last_run_time (S)
  missing_process (S)
......

 

C:\>LogParser.exe -stats:off -i:xml "select * from 'f:\temp\winpretchview.xml'"

반응형