보안/디지털 포렌식

Windows 아티팩트, 레지스트리

hyeppyday 2025. 7. 12. 23:53

1. Windows 아티팩트

 

디지털 포렌식에서 다루는 디지털 증거는 크게 다음 두 가지로 나눌 수 있다.

  1. 보관 증거 (Stored Evidence)
    -> 사용자가 직접 작성한 데이터
  2. 생성 증거 (Generated Evidence)
    -> 사용자의 직접적인 개입 없이, 시스템이 자동으로 생성한 증거

이 중에서 아티팩트(artifact)는 두 번째인 "생성 증거 중에서 일정한 구조로 저장되는 데이터"에 해당한다. 즉, 사용자의 흔적을 남긴 자동 생성 데이터 중, 디지털 포렌식에서 분석 가능한 형태로 구조화되어 저장된 정보를 말한다.

 

Windows Artifacts는 수많은 종류가 있다.

분류 아티팩트 주요 획득 가능 데이터
시스템 파일 레지스트리 시스템 전반에 대한 설정 데이터
시스템 파일 $MFT, $LogFile, $UsnJrnl 파일 경로, 생성/수정/삭제에 대한 흔적
시스템 파일 이벤트 로그 사용자 접속 기록, 외부 침투 흔적
바로가기 바로가기(.lnk), Jumplist 파일 경로, 파일 실행 기록
실행 흔적 Prefetch, MUICache, AmCache 프로그램 실행 시간, 경로 등
브라우저 Chrome/Edge 아티팩트 브라우저 검색 기록, 로그인 기록
이미지 캐시 ThumbnailCache, IconCache 이미지 썸네일, 아이콘 썸네일
복구 휴지통(Recycle Bin), VSS 삭제된 데이터의 복구
Windows 기능 Windows Timeline, Windows Search 최근 사용자 행위, 삭제된 파일 복구

 

아티팩트를 통해 얻을 수 있는 정보는 "누가, 언제, 무엇을 실행했는지"에 대한 단편적 기록이다.

예:

  • A는 08:00에 컴퓨터를 켰다.
  • 악성 프로그램 실행 시간은 08:03이다.

하지만, 이것만으로 "A가 악성 프로그램을 실행했다"는 직접 증거가 되지 않는다. 따라서 이를 실제 행위로 해석하는 작업은 포렌식 분석가가 조합적 증거를 통해 수행해야 한다

 

Windows Artifacts를 분석할 때 유의해야 할 중요한 두 가지 포인트가 있다.

 

첫번째는 사용자의 구체적인 행위에 따라 생성되는 아티팩트의 차이이다.

-> 어떤 아티팩트(흔적)가 생겼다고 해서 항상 똑같은 의미를 가지는 건 아니다.

 

예: 사용자가 행위 A를 했을 때 아티팩트 B가 생성되었다고 가정

  • 그런데 다른 상황에서 비슷한 **행위 A'**를 했을 때에도 B가 생기는지,
  • 혹은 조금 다른 **B'**라는 아티팩트가 생기는지를 꼼꼼히 확인해야 한다.

두번째는  Windows 내부 동작 방식을 이해해야 하는 것이다. Windows는 많은 기능을 사용자에게 제공하면서도,
그 기능의 결과(로그, 설정 등) 를 어디에 저장하는지까지 다 설계되어 있다. 분석자는 이 구조를 이해하고 파악해야 한다.

 

 

2. 레지스트리

레지스트리(Registry)는 Windows 운영체제에서 시스템과 애플리케이션의 설정 정보와 옵션을 저장하는 계층형 데이터베이스이다. 시스템 시간이나 버전과 같은 시스템 정보부터, 사용자 계정, 환경 변수 등 많은 정보가 들어있다. 분석관은 레지스트리로부터 사용자의 응용 프로그램 실행 흔적이나, USB 연결 흔적 역시 파악할 수 있어 디지털 포렌식에서 중요한 개념이다.

 

2.1 레지스트리 편집기(Regedit)

앞서 레지스트리를 계층형 데이터베이스라고 표현했다. 계층형 데이터베이스란, 데이터가 트리 형태의 구조로 조직되어 반복적인 부모-자식 관계를 가지는 것을 말한다. 다소 어려운 표현이지만, 실제로는 직접 한 번 따라하면서 보시면 이해가 쉬운 개념이다.

실행(Windows + r) 창에서 regedit을 입력해 레지스트리 편집기를 켜준다. 아래 사진과 같이 레지스트리 경로, 레지스트리 값을 확인할 수 있다. 왼쪽 계층형 구조는 폴더 아이콘처럼 표시되어 있는데, 상위 폴더와 하위 폴더가 각각 부모-자식 관계를 이루면서 이어지는 모습이다.

 

 

 

직접 경로를 찾아 이동해보겠다. 상단 레지스트리 경로에 아래 값을 붙여넣어 직접 이동해보자. 그 결과 아래 사진과 같이 설치된 Windows 버전과 사용자 정보가 저장되어 있음을 볼 수 있다.

• HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

 

 

 

레지스트리는 다음과 같이 5개의 루트 키(Root key)가 존재한다. 루트 키는 윈도우 레지스트리 중 가장 상위레벨에 있는 레지스트리 키를 의미한다.

각 루트 키의 역할을 정리한 표이다.

루트 키 약어 설명
HKEY_CLASSES_ROOT HKCR 파일 확장자 연결 정보, COM 객체 등록 정보
HKEY_CURRENT_USER HKCU 현재 시스템에 로그인된 사용자의 프로파일 정보
HKEY_LOCAL_MACHINE HKLM 시스템의 하드웨어, 소프트웨어 설정 및 기타 환경 정보
HKEY_USERS HKU 시스템의 모든 사용자와 그룹에 관한 프로파일 정보
HKEY_CURRENT_CONFIG HKCC 시스템이 시작될 때 사용되는 하드웨어 프로파일 정보

 

 

앞선 레지스트리 편집기를 이용한 실습에서 HKEY_LOCAL_MACHINE 대신에 HKLM을 사용했다. 이렇듯 약어는 상단 입력 창에 직접 입력도 가능하다. 위 루트 키들 중에서도 특히 HKCU와 HKLM 내에 주요한 사용자 데이터가 많이 저장된다.

특이한 점은 5개의 루트 키가 서로 독립적이지 않다는 것이다. 아래 사진처럼 현재 로그인한 사용자 정보를 담고 있는 HKCU는 모든 사용자 정보를 담고 있는 HKU의 하위 키로 존재한다. 이와 유사하게, HKCC는 HKLM과 완전히 동일하지는 않지만, 대부분의 데이터가 유사하다.

 

 

 

2.2 주요 레지스트리 경로

2.2.1 Timezone

현재 시스템의 Timezone을 알아낼 수 있는 레지스트리 경로는 아래와 같다.

• HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

Bias 값은 현재 시스템 시간과 UTC 시간이 얼마나 차이나는지를 분 단위로 나타낸다.

 

 

 

위 사진에서 Bias 값은 음수로 표시되는데, 아래 사진과 같이 알기 쉬운 값으로 변환할 수 있다. Bias 값이 -540이기 때문에 540분을 9시간으로 해석하여, 현재 시스템 시간에서 9시간을 빼면 UTC가 된다고 이해하면 됩니다. 즉 Bias가 -540이라 는 것은 시스템 시간이 UTC+9임을 나타냅니다.

 

2.2.2 Systeminfo

현재 시스템의 다양한 정보들을 알 수 있는 경로이다.

• HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

 

 

 

이름 설명
BuildLab OS 버전
InstallDate Windows 설치 시간→ 해당 컴퓨터를 사용하기 시작한 시간 추측 가능
InstallTime Windows 설치 시간 상세
DisplayVersion Windows 버전

 

InstallDate 필드와 InstallTime 필드는 시간 데이터를 담고 있다. 시간 데이터를 저장하는 몇몇 알려진 형식들이 있습니다. DCode 도구는 시간 값을 쉽게 변환할 수 있도록 기능을 지원한다.

 

DCode™ – Timestamp Decoder - Digital Detective

 

DCode™ – Timestamp Decoder - Digital Detective

DCode™ is a FREE forensic tool for decoding data found during digital forensic examinations into human-readable timestamps.

www.digital-detective.net

 

 

 

도구 사용 방법은 위 사진과 같이 ① 데이터 형식을 설정해주고 ② 값을 입력하고 ③ Decode 버튼을 누른 뒤에 ④ 해당하는 값을 적절히 선택한다.

데이터 형식 부분의 선택이 어려울 수 있지만, 가벼운 검색을 통해 올바른 데이터 형식을 찾아내거나 다른 단서들을 통해 얻은 정보들을 이용해 올바른 값을 찾아낼 수 있다. 보통 원본 데이터로부터 얻은 값들은 Little-Endian인 경우가 많고, 레지스트리 편집기와 같이 도구로부터 획득된 값들은 Big-Endian인 경우가 많다.

레지스트리 값을 통해 얻어낸 값은 아래와 같다. InstallDate 필드는 Unix timestamp 방식으로 시간 값을 전달하기 때문에 초 단위 이하 데이터는 제공하지 않는 것을 볼 수 있다.

• InstallDate: 2023-11-28 23:12:26.0000000 +09:00
• InstallTime: 2023-11-28 23:12:26.2528285 +09:00

 

레지스트리로 얻은 값은 아래 사진과 같이 systeminfo 명령어로도 획득할 수 있다. 디스크 이미지를 통해 분석할 때에는 레지스트리에서 값을 획득하고, 활성 시스템을 분석할 때에는 아래 사진처럼 명령어를 통해 정보를 획득한다.

 

 

 

 

2.2.3 Autoruns

Autoruns는 컴퓨터가 재부팅될 때 자동으로 실행하는 프로그램을 의미한다. 해당 경로는 사용자 설정에 따라 변경되기도 하지만, 악성코드가 시스템에 침투했을 경우 해당 경로에 실행 파일을 넣어두고 컴퓨터가 재부팅될 때마다 되살아나도록 하기 위해 자주 사용된다.

Autoruns 경로는 아래와 같다.

• HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
• HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
• HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
• HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
• HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
• HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

 

2.2.4 사용자 계정

아래 경로에서는 시스템에 존재하는 모든 사용자의 계정 목록을 획득할 수 있다.

• HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

 

 

위 ProfileList 중에서 사용자가 만든 계정은 단 1개 뿐이다. 그 이유는 아래와 같이 Windows에서 기본으로 만들어주는 계정이 존재하기 때문이다.

■ 시스템 계정
• S-1-5-18 : systemprofile
• S-1-5-19 : LocalService
• S-1-5-20 : NetworkService

■ 사용자 계정
• S-1-5-21-2597749115-38508017851-3674950291-1001

ProfileImagePath 필드에서는 사용자의 홈 디렉토리, Sid 필드에서는 Windows 계정의 SID (Security ID) 값을 획득할 수 있다.

SID는 하나의 Windows 시스템에서 사용자 별로 고유하게 부여되는 ID 값이다. SID 값에서는 맨 마지막 숫자 값에 주목해야 한다. 관리자 계정(Administrator)이 500, 게스트 계정(Guest)이 501, 일반 사용자 계정은 1000 이상의 값을 갖는다. 위 사진에서 제가 사용하는 gold 라는 계정은 1001 값을 갖는 일반 계정이다.

 

SID 끝자리:

  • 500: 관리자
  • 501: 게스트
  • 1000+: 일반 사용자

LocalProfileLoadTimeHigh 필드와 LocalProfileLoadTimeLow 필드를 조합하는 것으로 사용자 계정의 최종 로그인 시각을,  
LocalProfileUnloadTimeHigh 필드와 LocalProfileUnloadTimeLow 필드를 조합하는 것으로 사용자 계정의 최종 로그오프 시각을 알 수 있다.  


High 값(0x01da7a06)과 Low 값(0x34dc09ea)의 조합은 아래 사진 우측의 Value Input 패널의 Value 값(0x01da7a0634dc09ea)을 통해 확인할 수 있다. 이러한 시간 데이터는 DCode 등의 도구를 통해 계산할 수 있다.

 

 

 

2.2.5 환경 변수

환경 변수는 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임이다. 좀 더 쉽게 설명하면, 프로세스가 컴퓨터에서 잘 동작할 수 있도록 시스템에 미리 설정해 둔 변수라고 이해하면 된다. 환경 변수의 경로는 아래와 같다.

● 사용자 계정 환경 변수  
  ○ HKCU\Environment

● 시스템 환경 변수  
  ○ HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

악성코드에서 스크립트를 실행할 때에 환경 변수에 특정 값들을 숨겨놓는 경우가 종종 있기 때문에 환경 변수 역시 주요하게 수집해야 할 데이터이다.

 

 

2.2.6 기기 연결 흔적

디지털 포렌식 분석 과정에서 가장 주목해야 할 데이터 중 하나가 바로 기기 연결 흔적이다. 분석 대상자는 USB를 통해 회사 기밀 자료를 외부로 유출하거나, USB를 통해 악성코드를 유포했을 수도 있다. 한편, 압수·수색에 앞서 다른 저장 장치를 연결하고 기존 저장 장치는 숨겨둘 수도 있다. 또한 USB 연결 흔적을 통해 사용자의 타임라인을 구축하는 데에 도움을 받을 수도 있다.

우리는 레지스트리 분석을 통해 USB 제품명, 시리얼 번호, 최초 연결 시각, 마지막 연결 시각을 알아낼 수 있다. 기기 연결 흔적을 저장하는 레지스트리 경로는 아래와 같다. ?는 변할 수 있는 값으로 직접 해당 경로를 살펴보면서 정해야 하는 값이다.

• HKLM\SYSTEM\ControlSet00?\Enum\USB
• HKLM\SYSTEM\ControlSet00?\Enum\USBSTOR
• HKLM\SOFTWARE\Microsoft\Windows Portable Devices\Devices
• C:\Windows\INF\setupapi.dev.log

1. HKLM\SYSTEM\ControlSet00?\Enum\USB

아래 사진에서 VID_XXXX&PID_XXXX 형태의 구조가 보일 것이다. 해당 구조는 USB의 제조사(Vendor) ID와 제품(Product) ID를 의미하며, VID와 PID를 통해 연결된 USB 장치를 식별할 수 있다.

 

예를 들어 VID_1EA7&PID_0064 는 사진에서 볼 수 있듯이 Sharkoon 사의 2.4GHz Wireless rechargeable vertical mouse 제품을 의미한다. 검색을 통해 VID, PID와 일치하는 USB 장치를 식별할 수 있다.

 

 

2. HKLM\SYSTEM\ControlSet00?\Enum\USBSTOR

한편 USB 중 저장 장치는 아래 경로에 저장된다. 마찬가지로 Ven_XXXXX&Prod_XXXXX&Rev_XXX 형태를 가진다. 이는 순서대로 제조사, 제품, 버전을 의미한다. 아래 사진에서 Ven_Generic&Prod_Flash_Disk 라는 정보를 얻을 수 있으나, 해당 정보를 통해 특정한 저장장치를 식별할 수는 없었다.

 

 

 

 

3. HKLM\SOFTWARE\Microsoft\Windows Portable Devices\Devices

아래 경로에서는 FriendlyName 필드에서 시스템에 마운트된 볼륨 이름을 확인할 수 있다. 표시된 영역에 있는 특이한 구조는 고유 인스턴스 ID 값으로 아래에 설명을 추가했다.

 

 

[고유 인스턴스 ID (Unique Instance Identifier)]
같은 모델이라도 제품마다 고유하게 부여된 장치의 번호로, 시리얼 번호를 이용해 생성한 값
시리얼 번호가 있는지 여부에 따라 값의 형식이 아래와 같이 달라진다.

• 시리얼 번호가 있을 때: #{SerialNumber}&{?}#
• 시리얼 번호가 없을 때: #{?}&{RandomNumber}&{?}#

 

 

 

4. C:\Windows\INF\setupapi.dev.log

한편, 레지스트리 이외의 파일에서도 USB 연결 흔적과 관련된 많은 정보를 획득할 수 있다.

아래 사진과 같이 USB 디바이스가 시스템에 설치된 시각을 로그로 남겨주고 있다. 이는 해당 USB가 시스템에 처음 연결된 시각을 의미한다.

 

 

2.3 레지스트리 수집 방법

앞서 주요 레지스트리 경로를 살펴보았다. 그런데, 레지스트리는 Windows에서 어떤 파일로 저장되는 걸까?

레지스트리는 하나의 파일로 저장되는 것이 아니라, 아래와 같은 파일들로 나뉘어 저장된다. 레지스트리 편집기에서는 이러한 파일들을 모아서 마치 하나의 레지스트리 데이터베이스인 것처럼 보여주는 것이다. 참고로 레지스트리 파일들을 레지스트리 하이브라고도 부른다.

• 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

 

 

레지스트리 파일은 시스템 파일이기 때문에 시스템이 동작하고 있을 때에 일반적인 방법으로는 복사해올 수가 없다. 예를 들어 아래 사진과 같이 레지스트리를 복사해 가져오려 하면, 아래와 같이 실패한다.

 

 

활성 시스템에서 파일들을 수집하기 위해 가장 쉬운 방법은 FTK Imager를 이용해 파일을 추출하는 것이다. FTK Imager에서 아래와 같이 Logical Drive → 운영체제가 설치된 볼륨(일반적으로 C:\)를 선택해 볼륨을 로드해 준다.

 

 

 

 

이후 아래 경로의 파일들을 추출해서 별도의 경로에 저장해준다. FTK Imager는 C:\와 같은 드라이브 레터 대신 [root]라는 이름을 사용한다.

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

이 때 주의할 점은 아래 사진과 같이 수집 대상 파일에 대응되는 .LOG1, .LOG2 파일을 같이 수집해야 한다는 것이다. .LOG1, .LOG2 파일은 레지스트리 파일을 변경하기 이전의 트랜잭션 데이터를 잠시 보관하는 파일이다. 이러한 파일들은 시스템에 따라 존재할 수도 있고, 존재하지 않을 수도 있으나 존재한다면 수집해야 한다.

파일들을 우클릭한 후에 export 버튼을 눌러 하나의 폴더로 모아주어야 한다.

 

 

위 방법대로 레지스트리를 수집하게 되면, 사용 중이던 레지스트리가 정리되지 않은 상태로 시스템에 복사된다. 이러한 레지스트리를 dirty 상태라고 부른다. dirty 상태인 레지스트리는 아직 쓰여지지 않은 데이터가 존재하고, 이러한 데이터들은 LOG1, LOG2 파일에 아직 남아 있다. 따라서 LOG1, LOG2에 남아 있는 데이터를 레지스트리에 통합하는 과정을 거쳐야 한다.

RLA 도구는 이러한 일련의 과정을 지원한다. RLA 도구의 설명에서, 아래와 같은 기능을 제공함을 볼 수 있다.

Replay transaction logs and update Registry hives so they are no longer dirty.

 

 

Eric Zimmerman's tools

 

RLA 도구를 링크에서 다운로드하여, dirty 상태의 레지스트리를 LOG 파일과 통합해보도록 하겠다. RLA 도구를 cmd에서 실행하면 아래와 같이 실행 방법을 확인할 수 있다.

 

 

 

사용 방법에 따라 커맨드를 입력해보면 아래와 같다. 참고로 -f 옵션은 파일 단위로 통합을 진행하고, -d 옵션은 폴더에 속한 파일 전체에 대해 통합을 진행한다.

PS C:\Users\gold\Documents\2024_dreamhack_tmp> mkdir registry_clean


    디렉터리: C:\Users\gold\Documents\2024_dreamhack_tmp


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2024-04-03  오후 11:38                registry_clean


PS C:\Users\gold\Documents\2024_dreamhack_tmp> dir


    디렉터리: C:\Users\gold\Documents\2024_dreamhack_tmp


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2024-04-03  오후 11:21                registry
d-----      2024-04-03  오후 11:38                registry_clean


PS C:\Users\gold\Documents\2024_dreamhack_tmp> C:\Tools\rla\rla.exe -d .\registry\ --out .\registry_clean\

rla version 2.0.0.0

Author: Eric Zimmerman (saericzimmerman@gmail.com)
https://github.com/EricZimmerman/RECmd

Note: Enclose all strings containing spaces with double quotes

Command line: -d .\registry\ --out .\registry_clean\

        Hives found: 5

Processing hive .\registry\SOFTWARE
Two transaction logs found. Determining primary log...
Primary log: .\registry\SOFTWARE.LOG2, secondary log: .\registry\SOFTWARE.LOG1
Replaying log file: .\registry\SOFTWARE.LOG2
Replaying log file: .\registry\SOFTWARE.LOG1
At least one transaction log was applied. Sequence numbers have been updated to 0x9682. New Checksum: 0x550E920B
        Saving updated hive to .\registry_clean\.\registry\SOFTWARE

Processing hive .\registry\SECURITY
        Hive .\registry\SECURITY is not dirty, but --ca is True. Copying...
        Saving updated hive to .\registry_clean\.\registry\SECURITY

Processing hive .\registry\NTUSER.DAT
Two transaction logs found. Determining primary log...
Primary log: .\registry\ntuser.dat.LOG1, secondary log: .\registry\ntuser.dat.LOG2
Replaying log file: .\registry\ntuser.dat.LOG1
Replaying log file: .\registry\ntuser.dat.LOG2
At least one transaction log was applied. Sequence numbers have been updated to 0x4D9C. New Checksum: 0x66A9BD3
There was an error: Index was outside the bounds of the array.
System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at rla.Program.DoWork(String f, String d, String out, Boolean ca, Boolean cn, Boolean debug, Boolean trace)

Processing hive .\registry\SYSTEM
Two transaction logs found. Determining primary log...
Primary log: .\registry\SYSTEM.LOG2, secondary log: .\registry\SYSTEM.LOG1
Replaying log file: .\registry\SYSTEM.LOG2
Replaying log file: .\registry\SYSTEM.LOG1
At least one transaction log was applied. Sequence numbers have been updated to 0x6FD2. New Checksum: 0x515183DF
        Saving updated hive to .\registry_clean\.\registry\SYSTEM

Processing hive .\registry\SAM
        Hive .\registry\SAM is not dirty, but --ca is True. Copying...
        Saving updated hive to .\registry_clean\.\registry\SAM

Total processing time: 0.537 seconds

 

 

 

registry_clean 폴더에 들어가보면, 아래 사진과 같이 레지스트리가 clean 된 것을 볼 수 있다. 로그 기록을 보았을 때, NTUSER.DAT 파일은 도구에서 처리 중에 에러가 난 것으로 보이는데, 이런 경우에는 해당 파일의 RLA 처리를 생략하거나, LOG1/LOG2 파일에서 특이사항이 있는지 직접 점검하기도 한다.

 

 

 

 

2.4 Registry Explorer

본 단락에서는 레지스트리를 분석할 수 있는 GUI 도구인 Registry Explorer를 소개하겠다. Registry Explorer는 레지스트리를 사용자가 볼 수 있게 도와주는 도구로 Windows에 내장된 레지스트리 편집기와 달리 검색 기능을 지원하고, 자주 사용하는 레지스트리 경로에 대해 북마크를 지정할 수 있어 더 빠른 분석을 가능하게 한다.

아래 사진과 같이 상단 File 탭 → Load Hive 버튼을 누르고 수집한 레지스트리를 넣어준다. 그러면 아래 사진과 같은 화면이 출력된다.

 

 

얼핏 보기에 레지스트리 편집기(regedit)과도 비슷한 화면이지만, Registry Explorer는 전체 레지스트리 키를 대상으로 검색을 할 수 있다. 상단 북마크 탭에는 일반적으로 많이 이용되는 레지스트리 키가 등록되어 있어 빠르게 찾아갈 수 있다. 마지막으로 레지스트리 편집기와는 달리 이미 별도로 수집된 레지스트리를 프로그램에 입력하였기 때문에, 시스템에서 사용 중일 때에는 접근이 어려운 레지스트리 값들도 획득할 수 있다.

 

 

 

2.5 Regripper

Regripper는 CLI 기반의 레지스트리 분석 도구이다. Registry Explorer가 단순히 레지스트리 구조를 사용자가 직접 확인할 수 있게 도와주는 도구인 점과 달리, Regripper는 도구가 원본 데이터에서 필요하다고 생각되는 부분들을 직접 분석해 결과를 출력해 준다.

이런 방식에는 장점과 단점이 명확하다. Regripper를 이용하면 출력된 결과만을 이용해 분석을 빠르게 수행할 수 있다. 다만 도구가 제대로 작동하지 않아 결과를 찾을 수 없을 때도 있고, 때로는 도구 출력 결과에 오류가 있을 수 있다. 반면 Registry Explorer는 속도가 조금 느리긴 해도 원본 데이터를 보기 때문에 보다 정확하게 분석할 수 있다.

링크에서 Regripper를 다운로드하고 rr.exe 파일을 실행해준다. 아래 사진과 같이 Hive File에는 수집한 레지스트리 하이브 파일을 넣고, Report File에는 수집된 로그가 저장될 파일을 넣는다. 이후 하단 Rip! 버튼을 눌러주면 분석이 완료되며, 하이브 파일 각각에 대해 작업을 반복해서 수행한다.

 

Regripper는 여러 개의 플러그인이 작동하면서 각 목적에 맞는 데이터를 추출하고 분석하는 방식으로 동작한다. 예를 들어 `msis`라는 플러그인은 MSI 인스톨러로 설치한 프로그램 목록과 시간을 출력해 준다.

 

특히 USB 연결 흔적은 여러 플러그인에서 지원하고 있다. 대표적으로 USBStor 플러그인의 실행 결과를 보면 직관적으로 정보를 획득할 수 있다.

  • FriendlyName: USB 저장장치의 이름
  • First InstallDate: USB 저장장치가 처음으로 설치된 시간
  • InstallDate: USB 저장장치의 설치 시간
  • Last Arrival: USB 저장장치가 마지막으로 제거된 시간

 

 

'보안 > 디지털 포렌식' 카테고리의 다른 글

휴지통 및 파일 복구  (2) 2025.07.27
프리패치 및 캐시  (1) 2025.07.27
웹 브라우저 아티팩트  (1) 2025.07.27
파일 시스템  (1) 2025.07.12