콤푸타/디지털포렌식

[Windows] Jumplist

어둠의다크 2024. 7. 8. 18:13


Jumplist 란
 

Windows 7 으로 버전이 올라가면서 Jumplist라는 기능이 생겼다. 이 기능이 무엇인고 하니

jumplist 1
jumplist 2
jumplist 3

 바로 이런것이다. 특정 어플리케션이 최근(recent) 사용하거나, 자주(frequent) 사용하거나 고정(pin)했거나 하는 작업 또는 파일들에 대해 기록을 남기는 것이다. 왜 이런것들을 남기는걸까? 사실 윈도우 시스템에는 에는 이런 캐싱과 MRU(Most Recently Used)기록이 굉장히 많다. 몇 개 살펴보자면 다음과 같다.

vscode recent
MRU 1
MRU 2

미리 얘기좀 해보자면 이런 MRU데이터들은 점프리스트 또는 레지스트리에 기록되어 있다. 이런 캐싱 기능들은 사실 시스템 구동 또는 운영을 위해서 사요된다기 보다는 사용자의 편의를 위해 제공되는 측면이 크다.

 Jumplist가 기록하는 작업에는 4가지 유형이 있는데 바로 다음과 같다.

1. Recent : 사용자가 최근 접근한 파일이나 폴더

2. Frequent : 사용자가 빈번히 접근한 파일이나 폴더

3. Tasks : 응용프로그램에서 지원하는 작업 목록

4. Pinned : 사용자가 고정 시킨 작업 목록

 4개 모두 사용자의 행위와 관련된 항목이라 볼 수 있다.

참고 : https://whitesnake1004.tistory.com/597

 

Jumplist의 위험성

 포렌식적인 관점을 잠시 내려놓고 일반 사용자의 입장에서 이 점프목록이라는 기능은 편하기보다는 위험하기 짝이없다. 누군가와 컴퓨터를 같이 보다가 최근 사용항목을 보면서 깜짝 놀란적이 있는가? 필자는 종종 그러했다. 바로 개인정보 유출 또는 개인정보 침해가 발생할 수 있는 아티팩트이며 이는 점프리스트라는 아티팩트의 특성을 잘 말해준다.

 사용자의 행위와 관련된 아티팩트이기 때문에 이 컴퓨터를 사용한 사용자를 너무나도 적나라하게 보여주는 아티팩트라다. 따라서 종종  이러한 특징이 굉장히 위험한 상황을 만들어낼 수 있다.

 누군가 필자에게 '가장 공개하기 싫은 아티팩트 3개만 꽃자면 어떤게 있나요?' 라고 물어본다면 필자는 Jumplist, Browser History, Web History 라고 할것이다. 여러분들도 이런 아티팩트가 가지는 특징과 의미에대해서 잘 생각해보기를 바란다.

 

Jumplist 경로

 그럼 본격적으로 Jumplist를 한번 살펴보자. 우선 점프리스트는 다음 경로에 존재한다. 

%APPDATA%\Roaming\Microsoft\Windows\Recent\AutomaticDestinations
%APPDATA%\Roaming\Microsoft\Windows\Recent\CustomDestinations

Jumplist 경로

해당 경로는 숨겨져 있어 숨김 파일 표시 기능을 활성화해도 GUI 로는 확인할 수 없지만. 터미널로는 해당 경로를 확인할 수 있다.

AutomaticDestinations와 CustomDestinations는 기록되는 사용자의 행동 유형이 다르다.

Automatic Destenation에는 최근 사용한 파일 목록(Recent)나 사용자가 시작 화면에 고정한 파일 목록이 기록된다.

CustomDestinations에는 자주 사용되는 프로그램 목록이나(Frequent)나 하단 작업 목록에 고정한 프로그램이(task) 기록된다.

 

Jumplist 분석

우선 Jumplist 파일이 존재하는 AutomaticDestination 경로로 찾아들어가보면 다음과 같은 파일들이 여러개 존재하는 것을 볼 수 있다.

AutomaticDestination

 파일 작명 규칙을 보면 임의의 16자리 문자열 + . + automaticDestinations-ms 라는 규칙으로 이루어져 있다. 이 16자리는 실행파일을 대상으로 한 어떤 임의의 문자열 생성 알고리즘에서 16자리만 잘라온 것으로 추정되나, 어떤 알고리즘인지 명확하게는 확인되지 않았다.

 

 

Automatic Destinations

 사용자가 파일이나 애플리케이션을 열 때 자동으로 생성됩니다. 이 파일은 Microsoft Compound File Binary(CFB) 파일 형식으로, OLE(Object Linking and Embedding) 파일이라고도 합니다. 이 파일에는 개별 16진수 SHLLINK 스트림과 DestList 스트림이 포함되어 있다.

여러 사이트들 참고 및 직접 분석 결과 30~40 가지 정도 Column이 확인이 된다. 그 중 Eric Zimmerman 선생님의 'JLECmd.exe' 프로그램 실행 결과를 기준으로 설명하겠다. 

  • 애플리케이션 ID - 애플리케이션 ID.
  • 애플리케이션 이름 - 애플리케이션 이름.
  • 공통 경로 - 공통 경로.
  • 목적지 목록 버전 - 목적지 목록 버전.
  • 구동 유형 - 구동 유형.
  • 항목 접근 날짜/시간 - 수정 날짜/시간.
  • 항목 생성 날짜/시간 - 생성 날짜/시간.
  • 참가 번호 - 참가 번호.
  • 추가 블록 있음 - 추가 블록이 있습니다.
  • 파일 속성 - 파일 속성.
  • 파일 탄생 드로이드 - 파일 탄생 드로이드.
  • 파일 드로이드 - 파일 드로이드.
  • 파일 크기 - 파일 크기.
  • 헤더 플래그 - 헤더 플래그.
  • 호스트 이름 - 호스트 이름.
  • 상호작용 수 - 상호작용 수.
  • 마지막 사용 항목 번호 - 마지막 사용 항목 번호.
  • 로컬 경로 - 로컬 경로.
  • MAC 주소 - MAC 주소.
  • MRU - MRU.
  • 경로 - 경로.
  • 고정 상태 - 사용자가 파일을 고정했는지 여부입니다.
  • 상대 경로 - 상대 경로.
  • 소스 접근 날짜/시간 - 소스 접근 날짜/시간.
  • 소스 생성 날짜/시간 - 소스 생성 날짜/시간.
  • 소스 수정 날짜/시간 - 소스 수정 날짜/시간.
  • 타겟 접속 날짜/시간 - 타겟 접속 날짜/시간.
  • 타겟 생성 날짜/시간 - 타겟 생성 날짜/시간.
  • 대상 수정 날짜/시간 - 대상 수정 날짜/시간.
  • 추적기 생성 날짜/시간 - 추적기 생성 날짜/시간.
  • 볼륨 탄생 드로이드 - 볼륨 탄생 드로이드.
  • 볼륨 드로이드 - 볼륨 드로이드.
  • 볼륨 레이블 - 볼륨 레이블.
  • 볼륨 일련 번호 - 볼륨 일련 번호.
  • 작업 디렉토리 - 작업 디렉토리.

 

 

SourceFile - 소스 파일 경로 ( *Destinations-ms 파일)
SourceCreated - 소스 파일 생성 일시 ( *Destinations-ms 파일)
SourceModified - 소스 파일 수정 일시 ( *Destinations-ms 파일)
SourceAccessed - 소스 파일 마지막 접근 일시  ( *Destinations-ms 파일)
AppId - Windows OS에 의해 생성되는 어플리케이션 고유번호 16자리
AppIdDescription
HasSps
DestListVersion
LastUsedEntryNumber
MRU
EntryNumber
CreationTime - 생성 시각 (무슨 의미인지 정확하게는 모르겠음)
LastModified - 마지막 수정 일시 (무슨 의미인지 정확하게는 모르겠음)
Hostname - 호스트 이름(컴퓨터 이름)
MacAddress - 호스트 맥 주소(윈도우 기본 폴더나 작업 응용프로그램들은 맥주소가 다르게 표기)
Path - 경로 ( 쉘폴더의 경우 고유 쉘 UUID 확인가능)
InteractionCount - 상호 작용 카운트
PinStatus - 사용자가 고정했는지
FileBirthDroid
FileDroid
VolumeBirthDroid
VolumeDroid
TargetCreated - 타겟 파일 생성 일시
TargetModified - 타겟 파일 수정 일시
TargetAccessed - 타겟 파일 마지막 접근 일시
FileSize - 타겟 파일 사이즈
RelativePath - 상대 경로
WorkingDirectory - 작업 경로
FileAttributes
HeaderFlags
DriveType - 드라이브 유형
VolumeSerialNumber - 볼륨 시리얼 넘버 (디스크가 아니고 볼륨이다, cmd 에서 vol c: )
VolumeLabel
LocalPath - 로컬에서의 경로(인코딩 방식에 따라 경로 문자열이 깨져보일 수 있음)
CommonPath
TargetIDAbsolutePath - 어플리케이션 별 경로(인코딩 방식에 따라 경로 문자열이 깨져보일 수 있음)
TargetMFTEntryNumber
TargetMFTSequenceNumber
MachineID - 호스트 이름(컴퓨터 이름)
MachineMACAddress - 호스트 맥 주소(윈도우 기본 폴더나 작업 응용프로그램들은 맥주소가 다르게 표기)
TrackerCreatedOn
ExtraBlocksPresent
Arguments - 타겟 파일을 실행하는데 추가적으로 사용된 인자
Notes

Droid in this context refers to CDomainRelativeObjId.

The droid volume identifier can be found in the NTFS $OBJECT_ID attribute of the $Volume file system metadata file. The LSB in the droid volume identifier contains the cross volume move flag. This flag is set if a file is moved across volumes.

The droid file identifier can be found in the NTFS $OBJECT_ID attribute of the corresponding file.

 

 

 

App ID Windows OS에 의해 생성되는 고유번호
Potential App Name 어플리케이션 이름
Linked Path 링크의 타겟 파일 경로
Arguments 타겟 파일을 실행하는데 사용된 인자
Volume Name The name of the volume where the shortcut resides.
Volume Serial Number The Serial Number of the volume.
Target File Created Date/Time – UTC (yyyy-mm-dd) The date and time when the shortcut target file was created.
Target File Last Modified Date/Time – UTC (yyyy-mm-dd) The date and time when the shortcut target file was last modified.
Target File Last Accessed Date/Time – UTC (yyyy-mm-dd) The date and time when the shortcut target file was last accessed.
Jump List Type The type of jump list (Automatic or Custom).
Drive Type The type of drive for this shortcut
Target NetBIOS Name The machine name on the network that the shortcut is on.
Target MAC Address The MAC address of the volume that the shortcut is on.
Target File Size (Bytes) The size of the shortcut file.
Last Accessed Date/Time – UTC (yyyy-mm-dd) The last time that the shortcut entry was accessed.
Entry ID The entry ID.
Data Other data within the shortcut entry.
NetBIOS Name The machine name on the network.
Pin Status Indicates whether the shortcut was pinned in the Dest List.
Access Count The number of times a file is accessed through a Jump List.

 

 

Custom Destinations

 사용자가 작업 표시줄이나 시작 메뉴에 파일이나 애플리케이션을 고정할 때 생성되는 사용자 지정 점프 목록이다.  Automatic Destinations 과는 파일 구조가 다른데, 순차적인 MS-SHLLINK 바이너리 형식의 구조를 따른다

 

  • 생성 날짜 - 생성 날짜.
  • 최종 수정 날짜 - 최종 수정 날짜.
  • 마지막 접속 날짜 - 마지막 접속 날짜.
  • 대상 파일 크기 - 대상 파일 크기.
  • 인수 - 대상 속성.
  • 명령 표시 - 명령을 표시합니다.
  • 대상 파일의 마지막 액세스 날짜 - 대상 파일의 마지막 액세스 날짜.
  • 대상 파일 생성 날짜 - 대상 파일 생성 날짜.
  • 대상 파일의 마지막 수정 날짜 - 대상 파일의 마지막 수정 날짜.
  • 대상 속성 - 대상 속성.
  • 연결된 Pat - 연결된 경로.
  • 볼륨 이름 - 볼륨 이름.
  • 구동 유형 - 구동 유형.
  • 볼륨 일련 번호 - 볼륨 일련 번호.
  • NetBIOS 이름 - NetBIOS 이름.
  • MAC 주소 - MAC 주소.
  • 애플리케이션 ID - 애플리케이션 ID.
  • 위치 - 위치.
  • 잠재적인 앱 이름 - 잠재적인 앱 이름.

 

 

Jumplist 분석 도구

Jumplist 분석을 위해서 파일을 직접 파일을 수집, 파싱을 진행할 수도 있고 파싱후 바로 보여주는Viewer를 사용할 수도 있다.

JLECmd : https://ericzimmerman.github.io/#!index.md

JumpList Explorer : https://ericzimmerman.github.io/#!index.md

SSView : https://www.mitec.cz/ssv.html

이 JLECmd가 바로 직접 파싱을 수행하는 도구이며 나머지 두 개 도구는 바로 GUI를 통해 보여주는 Viewer 도구다.

 

Jumplist 안티 포렌식

Jumplist 안티포렌식을 위해서는 우선 해당 경로를 삭제하는 방법이 있겠다.

%APPDATA%\Roaming\Microsoft\Windows\Recent\AutomaticDestinations
%APPDATA%\Roaming\Microsoft\Windows\Recent\CustomDestinations

 

그리고 이 기능을 비활성화 하는 방법도 있다.

Jumplist 설정 화면

윈도우 11에서는 시작 아이콘 오른쪽 클릭 -> 설정 -> 개인 설정 -> 시작 메뉴, 점프 목록 어쩌고 저쩌고를 끄면 된다.

 

 

참고

https://github.com/EricZimmerman/JumpList/blob/master/JumpList/Resources/AppIDs.txt

에릭 짐머만 선생님의 점프리스트 어플 별 ID 목록

https://belkasoft.com/forensic-analysis-of-lnk-files