Windows Artifacts

qwq·2026년 1월 2일

Forensics

목록 보기
3/5
post-thumbnail

Windows Artifacts

개요

Artifacts란 사용자의 직접적인 개입 없이, 자동으로 생성된 데이터 중 일정한 구조를 띄는 데이터이다.

레지스트리(Registry)

레지스트리는 Windows 운영체제에서 사용자, 시스템, 프로그램 실행과 관련된 설정을 저장하는 데이터베이스이다. Win+R 키를 누른 후 'regedit'을 입력해 레지스트리 편집기를 실행할 수 있다.

위와 같이 5개의 루트 키가 존재하는 계층구조로 되어 있는데 각각의 역할은 아래와 같다.

  • HKEY_CLASSES_ROOT(HKCR) - 파일 확장자에 대한 연결 프로그램 정보
  • HKEY_CLASSES_USER(HKCU) - 현재 로그인 된 사용자의 정보
  • HKEY_LOCAL_MACHINE(HKLM) - 컴퓨터 전체 설정
  • HKEY_USERS(HKU) - 모든 사용자와 그룹에 대한 정보
  • HKEY_CURRENT_CONFIG(HKCC) - 시스템이 시작될 때 사용되는 하드웨어 정보

HKCU가 HKU의 하위에 있는 등 각각의 루트 키가 서로 독립적이지 않으며, 겹치는 데이터가 있을 수 있다.

레지스트리의 위치 및 수집

이 레지스트리는 하나의 파일이 아니며, 다음과 같은 파일로 나뉘어 저장된다.

  • C:\Users\[Username]\NTUSER.DAT
  • C:\Users\[Username]\AppData\Local\Microsoft\Windows\UsrClass.dat
  • C:\Windows\System32\config\DEFAULT
  • C:\Windows\System32\config\SAM
  • C:\Windows\System32\config\SECURITY
  • C:\Windows\System32\config\SOFTWARE
  • C:\Windows\System32\config\SYSTEM

해당 파일을 복제하려면 드라이브를 이미징한 후 추출해야 한다. 이때 적용되지 않은 dirty 레지스트리가 .LOG1, .LOG2 파일에 남아있을 수 있는데, 여기에서 RLA라는 프로그램을 이용해 이 dirty 레지스트리를 clean하게 만들어야 한다.

rla.exe -d "[dirty 레지스트리 디렉토리]" --out "[clean 레지스트리 디렉토리]"

위와 같이 명령어를 사용하면 레지스트리가 clean하게 바뀐다.

레지스트리 분석

Regripper 라는 프로그램을 사용해 레지스트리를 쉽게 분석할 수 있다. CLI 기반으로, 내장된 플러그인이 목적에 맞는 데이터를 추출하여 원하는 레지스트리 정보를 탐색하는데 도움을 준다.

Hive File:에는 레지스트리 하이브 파일을 넣고, Report File:에는 로그가 저장될 파일을 넣은 후 Rip! 버튼을 누르면 분석이 완료되고, 이후 여러 명령어를 통해 상세 정보를 확인할 수 있다.

주요 레지스트리

레지스트리내용
HKLM\SYSTEM\ControlSet00?\Control\Windows부팅 횟수, Crash 정보
HKLM\SYSTEM\CurrentControlSet\Enum\USBUSB 연결 기록
HKLM\SYSTEM\CurrentControlSet\Enum\USBSTORUSB 장치 연결 기록
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache실행된 프로그램 목록
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces네트워크 인터페이스 기록
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion현재 시스템의 정보
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList시스템에 존재하는 모든 사용자의 계정 목록
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall어떤 프로그램이 설치되어 있었는지
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run부팅 시 자동으로 실행되는 프로그램
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer파일 탐색기 관련 활동
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Applets최근 실행된 프로그램
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs최근 연 문서
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\UserAssist프로그램 실행 기록
HKCU\SOFTWARE\Microsoft\Windows\Shell폴더 탐색 흔적
HKCU\Environment현재 사용자의 환경 변수
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment시스템 환경 변수

CurrentControlSet은 ControlSet00?을 가리키는 가상 링크이다.

자동 실행프로그램의 경우, Run이 아닌 RunOnceRunOnceEx에서도 탐색해 볼 수도 있고, HKLM이 아닌 HKCU키의 하위에서 탐색할 수도 있다.

메타데이터 아티팩트

$LogFile

파일 시스템의 저널링(Journaling: 오류 발생 시 복구할 수 있도록 데이터의 변경을 디스크에 반영하기 전에 행위를 기록하는 것) 기능을 위해 기록되는 파일이다.
저널링의 단위인 트랜잭션(Transaction)을 기록하며, root 바로 하위에 위치한다.

이 사이트에서 "NTFS Log Tracker"를 설치해 $LogFile을 분석할 수 있다. $LogFile의 경로와 $MFT의 경로를 넣고 Parse 버튼을 누르면 알아서 분석해 준다.

이때 Event항목은

  • Creating File/Directory - 파일/디렉토리 생성
  • Writing Resident Data - 약 700바이트 이하의 파일 데이터 변경
  • Writing NonResident Data - 약 700바이트 이상의 파일 데이터 변경
  • Deleting File/Directory - 파일/디렉토리 삭제
  • Renaming File/Directory - 파일/디렉토리 이름 변경
  • Moving File/Directory - 파일/디렉토리 이동

이며, EvectTime 열을 통해 이벤트 발생 시간을 알 수도 있다.

$UsnJrnl

응용 프로그램이 특정 파일의 변경 여부를 파악하기 위해 사용하는 로그로, 복원 목적으로 작성되는 $LogFile과 달리 파일/디렉토리에 변화가 있었다는 내용을 작성한다.
root디렉토리에서 $Extend\$UsnJrnl\$J에 위치한다. $LogFile과 같이 NTFS Log Tracker를 이용해 분석할 수 있다.

Event 항목은 $LogFile과 비슷하나, 파일/디렉토리의 암/복호화, 열림/닫힘 등 조금 더 상세한 내용으로 작성되어 있다.

$MFT

NTFS 시스템에서의 파일/디렉토리의 전체 메타데이터가 있다. 파일이 삭제되어도 메타데이터는 남아있기 때문에 삭제된 파일을 복구할 때 유용할 수 있다.

여기에서 MFTECmd(CLI) 혹은 MFTExplorer(GUI)를 설치해 $MFT를 분석가능하다.

이벤트 로그

Windows가 시스템에서 발생하는 일을 기록하는 로그로, C:\Windows\System32\winevt\Logs\ 위치에 .evtx확장자로 저장되어 있다. 각 이벤트 종류마다 이벤트 ID가 지정되어 있어, 원하는 이벤트를 탐색하기 용이하다. 주요 로그는 다음과 같다.

  • System.evtx - 장치 연결/제거, 시스템 시작/종료, 오류 및 경고 등 시스템과 밀접한 관련이 있는 이벤트의 로그가 저장된다.
  • Security.evtx - 사용자 인증, 사용자의 권한 등 사용자의 계정 관련 활동을 기록한다.
  • Application.evtx - 응용프로그램에서 발생한 이벤트로, 동작 성공 시 혹은 오류 발생 시 생기는 이벤트의 로그가 저장된다.

이벤트 ID를 모두 외우기는 어렵기 때문에 여기에서 카테고리 별로 분류된 이벤트 ID와 각 이벤트별 간략한 내용을 볼 수 있다.

웹 브라우저 아티팩트

웹 브라우저의 사용자가 브라우저를 통해 하는 검색, 로그인, 파일 다운로드 등의 활동에 대해 웹 브라우저 아티팩트가 생성된다.

  • History - 사용자가 방문한 URL과 방문 시간을 저장한다.
  • Cache - 사용자가 방문한 웹 페이지의 이미지나 파일을 임시로 저장한다.
  • Cookies - 로그인 세션과 접속 정보를 저장한다.
  • Downloads - 웹 브라우저를 통해 다운로드한 파일을 저장한다.
  • LocalStorage/SessionStorage - HTML5 기반의 저장소로, Cookies와 유사한 기능을 함
  • Form Data/Autofill - 입력한 검색어, 주소, 로그인 정보를 저장한다.
  • Favicons - 브라우저의 탭에 띄워지는 아이콘을 저장한다.

브라우저 별 아티팩트 위치

브라우저경로
ChromeC:\Users\<username>\AppData\Local\Google\Chrome\User Data\Default
EdgeC:\Users\<username>\AppData\Local\Microsoft\Edge\User Data\Default
FirefoxC:\Users\<username>\AppData\Roaming\Mozilla\Firefox\Profiles\
Internet ExplorerC:\Users\<username>\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat

Chrome, Edge의 경우 User Data\ 아래에 Default가 아닌 profile 폴더를 찾아 사용자 프로필 별 아티팩트를 확인할 수 있다.

프리패치

프리패치(Prefetch)는 Windows에서 다시 실행될 가능성이 높은 프로그램을 효율적으로 실행하기 위해 만드는 캐시 파일이다. C:\Windows\prefetch에서 그 목록을 확인할 수 있으며, 원래의 프로그램 이름을 uppercase 한 상태로 표기된다.

프로그램 실행 후 10초를 초과할 시 생성되고, 최대 개수는 1024개로, 그 이상이 되면 오래된 프리패치부터 자동으로 삭제된다.

위 사진에서 보이는 .pf파일은 현재 압축된 상태로, 파일을 Hex Editor로 열어보면 MAM이라는 시그니처를 확인할 수 있고, 해제 시 SCCA라는 시그니처를 확인할 수 있다.

WinPrefetchView라는 툴을 이용해 열어볼 수 있다. 기본적으로 로컬의 프리패치 파일을 불러오는데, 상단 테이블은 로컬 프리패치 파일을 나타내고, 하단 테이블은 각 .pf 파일에서 가져온 프로그램 동작 시 로드했던 파일의 목록이다.

상단 테이블의 "Run Counter" 열은 프로그램이 실행된 횟수, 하단 테이블의 "Index"는 각 파일이 몇 번째로 로드되었는지를 나타낸다.

캐시

MUICache

Windows에서 다중 언어을 지원하기 위한 캐시로, 레지스트리의 한 종류다.
HKCU\SOFTWARE\Classes\Local Settings\MuiCache 혹은 \HKCU\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache에서 볼 수 있고, 위 사진에서 볼 수 있듯이 Windows를 사용하다 보면 볼 수 있는 문자열이 저장되어 있다.

프로그램이 한번이라도 실행되어 이 MUICache에 저장되었다면, 사용자가 삭제하지 않는 한 자동으로 삭제되지 않기 때문에, 어떤 프로그램이 실행된 적이 있는지 확인하기 좋고, 실행되었던 프로그램의 경로도 확인할 수 있다.

AmCache

현재 PC에서 실행된 프로그램과 파일의 상세 메타데이터를 기록한 캐시다.

C:\Windows\appcompat\Programs에 위치해 있으며, .hve파일이므로 레지스트리 편집기로 열람 가능하다. PC가 실행 중일때는 열 수 없기 때문에, 이미징 후 추출해야 한다. .LOG1.LOG2 파일도 같이 추출한 후 RLA로 병합하도록 하자.

열어보면 다음과 같은 것들이 있다.

  • DeviceCensus - 펌웨어 정보, 운영체제, 네트워크 어댑터, 등 여러 하드웨어 정보가 있다.
  • InventoryApplication[%TYPE%] - 전체적으로 설치된 프로그램에 대한 정보를 가지고 있다.
  • InventoryDevice[%TYPE%] - 장치/드라이버에 관한 정보를 가지고 있다.
  • InventoryMiscellaneous[%TYPE%] - 기타 인벤토리 정보를 가지고 있다.

ShimCache

프로그램 간의 호환성 문제를 해결하기 위해 생성된 파일로, 특성상 실행 파일의 경로, 실행 여부, 최근 수정 시간 등의 정보를 저장하기 때문에 프로그램의 실행 흔적을 분석할 때 유용하다.

AppCompatCache라고도 하며, HKLM\SYSTEM\CurrentControlSet 혹은 HKLM\SYSTEM\ControlSet00? 하위의 Control\Sesssion Manager\AppCompatCache\AppCompatCache에 위치해 있다.

여기에서 AppcompatCacheParser를 설치해 ShimCache를 csv 파일로 변환할 수 있다.

cmd에서 --csv 옵션으로 결과로 나올 csv 파일을 넣을 폴더를 만들면 로컬의 레지스트리에서 값을 파싱하고, -f 옵션으로 수집한 ShimCache를 지정할 수도 있다.

휴지통

Windows에서 파일을 삭제하면 일반적으로 이동하는 곳이다. 보통 Windows에서 파일을 삭제할 때 마우스 오른쪽 클릭->삭제 혹은 Del 키를 눌러 삭제하는데, 이 경우 휴지통으로 이동하며 Shift+Del 키를 이용해 삭제할 경우 휴지통 이동없이 삭제된다.

위 사진은 cmd를 관리자 권한으로 열고 <drive>\$Recycle.Bin에 있는 휴지통으로 이동한 결과다. dir /a를 통해 경로를 탐색한 후 그 중 하나로 들어가 보면, 이름이 $I로 시작하는 파일과 $R로 시작하는 파일을 볼수 있는데, 해당 접두사 뒤의 6자리 문자열이 각 파일을 식별하는 식별자가 되며, 그러므로 같은 식별자를 가진 $I와 $R 파일은 항상 같은 확장자를 가진다.

$R 파일에는 원본 파일의 내용이 그대로 저장되어 있으며, $I파일에는 그에 대응하는 원본 파일의 이름을 포함한 메타데이터가 저장되어 있다.
PC에서 데이터 삭제 시 $R, $I 파일이 휴지통에 생성되고 휴지통을 비울 경우 $R, $I 파일이 모두 있는 데이터만 삭제되며, 휴지통에서 데이터를 복원할 때는 $R 파일만 원래 위치로 이동한다. 그러므로 한번 복원한 적이 있는 데이터는 휴지통을 비우더라도 메타데이터($I)가 휴지통에서 사라지지 않는다.

메타데이터인 $I 파일의 구조는 아래와 같다.

  • Signature - Windows 버전에 따라 01 00 00 00 00 00 00 00 혹은 02 00 00 00 00 00 00 00
  • File Size - 파일의 크기
  • Delete Time - 파일이 삭제된 시간
  • Origin File Path Length - 원본 파일 경로의 길이
  • Origin File Path - 원본 파일 경로

요약

아티팩트설명
레지스트리시스템 설정 데이터
$LogFile시스템에서의 파일 데이터 변경 내역
$UsnJrnl프로그램에서의 파일 데이터 변경 내역
$MFT파일 메타 데이터
이벤트 로그시스템 이벤트 기록
웹 브라우저 아티팩트브라우저 사용(로그인, 검색) 기록
프리패치실행된 프로그램의 흔적
캐시(MUICache, AmCache, ShimCache)실행된 프로그램의 흔적
휴지통삭제된 파일 복구

+ 적절한 아티팩트 선택에 도움을 주는 자료:

profile
QwQ

0개의 댓글