✔️ 레지스트리
문서 파일의 흔적을 분석할 수 있는 아티팩트 중 하나는 레지스트리이다.
레지스트리 중 NTUSER.DAT의 트리 구조로 된 레지스트리 내에
여러가지 문서 파일의 흔적을 엿볼 수 있다.
① 파일/폴더에 접근한 이력인 RecentDocs
② 윈도우의 다이얼로그를 통해 열거나 저장한 파일의 흔적 OpenSavePidlMRU
③ 오피스의 최근 열람 파일 목록 Office/···/File MRU, Place MRU 등
④ 한글의 최근 열람 파일 목록 Hnc/···/RecentFile
⑤ Pdf의 최근 열람 파일 목록 Adobe/···/cRecentFiles
소프트웨어를 만드는 회사들에서 직접적으로 레지스트리 경로를 설정하기 때문에
직접 분석 혹은 분석된 자료를 가지고 문서 파일의 흔적을 찾을 수 있는 경로를
공부하고 알아두는 것이 좋을 것 같다.
✔️ 바로가기
바로가기 파일은 링크 파일, LNK 파일이라고도 불리는데
영문 명칭으로는 'Windows Shortcut', 공식 명칭은 'Shell Link'이다.
해당 파일은 .lnk라는 확장자명을 가지게 된다.
이러한 바로가기 파일은 다양한 곳에 위치하게 되는데,
보통의 사용자들이 많이 사용하는 Desktop 폴더에 생성될 수 있고
시작 메뉴인 Start Menu 폴더에 생성될 수 있다.
이 외에도 SendTo 폴더라던지, Quick Launch 폴더 등 여러 곳에서
바로가기 파일이 생성되지만 자동적으로 생성된 파일인지,
사용자가 실행했던 파일인지 여부는 정확하게 확인할 수 없기 때문에
증거로 취급하기는 어려움이 존재한다고 한다.
이러한 바로가기 파일은 문서 파일 위치에서도 확인할 수 있는데,
Windows, Office, HNC 폴더의 Recent 폴더에서도 바로가기 파일을 확인할 수 있다.
바로가기 파일은 Shell Link Binary File Format이라는 구조를 가지고 있는데,
[MS-SHLLINK]: Shell Link (.LNK) Binary File Format
Specifies the Shell Link Binary File Format, which contains information that can be used to access another data object. The Shell Link Binary
learn.microsoft.com
해당 주소에서 확인해볼 수 있다.
간단하게 구조를 먼저 살펴보게 되면,
이렇게 영어로 된 목차에서 구조를 확인할 수 있다.
기본적으로 ShellLinkHeader가 최상단에 오는 것을 확인할 수 있는데,
가장 먼저 온만큼 가장 중요하게 볼 수 있다. 이 헤더는 default 설정으로 되어있기 때문에
식별 정보, 타임스탬프 등의 정보가 무조건적으로 존재하게 된다.
이후에 오는 LinkTargetIDList, LinkInfo, StringData, ExtraData는
optional한 정보이기 때문에 존재하거나 존재하지 않거나
혹은 순서가 변경되어 보일 수 있다.
간단하게는 ShellLinkHeader는 FileAttributes, CreationTime 등이 범위에 속해있고,
LinkTargetIDList는 링크 대상의 정보를 리스트 형태로 구성되어 있는 구조이다.
LinkInfo는 구조체 크기, 플래그 등을 확인해볼 수 있고,
VolumeID라고 하는 곳의 VolumeLabel을 확인하면 많은 정보를 획득할 수 있다.
마지막으로 String, Extra는 각각 바로가기의 설명과 링크 대상에 대한 추가 정보를 의미한다.
바로가기 파일의 핵심으로는 생성시간인데, 문서를 열었다거나 파일에 접근했다거나
바로가기를 클릭했다거나 등 바로가기 파일이 생성된 시간을 확인해보는 것이 중요하다고 볼 수 있다.
✔️ 점프 목록
점프 목록이라는 것은 어떠한 파일 등을 응용프로그램 별로 데이터를 확인할 수 있게 하는
리스트로 우리가 윈도우 밑 작업표시줄의 크롬이나 폴더를 우클릭하게 되면,
최근에 작업했다던가 즐겨찾기를 했다거나 하는 데이터를 확인할 수 있게 된다.
이러한 점프 목록은 AutomaticDestinations 폴더와 CustomDestinations 폴더에서
확인할 수 있는데, AutomaticDestinations는 운영체제가 자동으로 남기는 항목으로
최근에 사용한 목록이나 자주 사용되는 목록을 나열한다.
CustomDestinations는 응용프로그램이 자체적으로 관리하는, 사용자의 의도가 반영된
즐겨찾기 등에 해당하는 목록(작업 목록)을 나열한다.
해당 폴더에 들어가서 점프 목록의 파일명을 확인해보게 되면 각 응용프로그램 별로
고유한 ID 값 8바이트 만큼을 사용하여 해쉬처럼 사용하는 APP ID를 확인할 수 있는데,
역연산하는 로직이 존재하여 대입하게 되었을 때 응용프로그램이 어떠한 것인지 확인할 수 있고
List of Jump List IDs를 검색하여 해당 APP ID 위키로 가서 값을 확인해볼 수 있다.
이러한 점프 목록은 OLE라고 하는 파일 구조를 사용하게 되는데,
실제로 에디터를 사용해서 열어보게 되면 리틀엔디안 방식으로 값을 읽을 수 있고
각각의 스트림과 정리된 스토리지를 확인할 수 있다.
이러한 점프 목록을 수집하여 분석하게 되면 OLE 구조의 스트림에 바로가기 파일 형식으로
점프 목록이 저장되어 있는 정보와 해당 바로가기 파일에서 획득 가능한 정보들을 얻을 수 있다.
✔️ 타임라인
윈도우의 타임라인이라고 하는 것은 Windows+Tab을 눌러서 밑으로 내려보게 되면,
사용자의 작업 기록이 최근 순서대로 정렬된 것을 확인할 수 있는데 이것을 타임라인이라고 한다.
Windows에서는 평균적으로 3일 이전의 작업 기록을 확인할 수 있는데,
실제로 모니터에서는 3일치만 보여주고 데이터는 지워지지 않기 때문에
ActivitesCache.db라고 하는 파일에서 작업 이력 아티팩트를 확인할 수 있다.
(이때, 트랜잭션 로그가 존재한다면 Dirty 상태이기 때문에 해당 로그까지 같이 수집하던지
재부팅 이후의 Clean 상태의 데이터베이스를 수집해야할 것이다.)
화이팅 💪