레지스트리
레지스트리
- Windows 운영체제에서 사용자, 시스템, 프로그램 실행과 관련된 수많은 설정들을 저장할 수 있는 계층형 데이터베이스
- 시스템 시간이나 버전과 같은 시스템 정보, 사용자 계정, 환경 변수 등 많은 정보 포함
*계층형 데이터베이스: 데이터가 트리 형태의 구조로 조직되어 반복적인 부모-자식 관계를 가지는 것
레지스트리 편집기(Regedit)

- 실행창(Windows+R)에서 regedit를 입력하면 레지스트리 편집기 실행
- 사진처럼 레지스트리 경로와 값을 확인 가능
- 왼쪽 계층형 구조를 보면 상위 폴더와 하위 폴더가 부모-자식 관계를 이루며 이어짐

- 상단 레지스트리 경로에 아래 값을 입력하면 직접 이동
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
- 설치된 Windows 버전과 사용자 정보를 확인 가능
레지스트리 구조
- 5개의 루트 키(Root Key) 존재
- 루트 키: 윈도우 레지스트리 중 가장 상위 레벨에 있는 레지스트리 키

- 사진 좌측에 5개의 루트 키
| 루트 키 | 약어 | 설명 |
| HKEY_CLASSES_ROOT | HKCR | 파일 확장자 연결 정보, COM 객체 등록 정보 |
| HKEY_CURRENT_USER | HKCU | 현재 시스템에 로그인된 사용자의 프로파일 정보 |
| HKEY_LOCAL_MACHINE | HKLM | 시스템의 하드웨어, 소프트웨어 설정 및 기타 환경 정보 |
| HKEY_USERS | HKU | 시스템의 모든 사용자와 그룹에 관한 프로파일 정보 |
| HKEY_CURRENT_CONFIG | HKCC | 시스템이 시작될 때 사용되는 하드웨어 프로파일 정보 |
- 약어는 상단 입력창에 직접 입력 가능
- 특히 HKCU와 HKLM에 주요 사용자 데이터 많이 저장
- 5개의 루트 키가 서로 독립적이지 않음
- 현재 로그인한 사용자 정보를 담는 HKCU는 모든 사용자 정보를 담고 있는 HKU의 하위 키로 존재
- 유사하게 HKCC와 HKLM과 완전히 동일하지 않지만, 대부분의 데이터가 유사
주요 레지스트리 경로
Timezone
경로: HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
- Bias 값은 현재 시스템 시간과 UTC 시간이 얼마나 차이나는지를 분 단위로 나타냄

- 위 사진에서 Bias 값은 음수로 표시됨(-540)
- 540 = 9시간으로 해석, 현재 시스템 시간에서 9시간을 빼면 UTC가 됨
Bias = -540 ==> 시스템 시간: UTC+9
Systeminfo
경로: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

- InstallDate 필드와 InstallTime 필드는 시간데이터를 담고 있음
- Dcode: 시간 값을 쉽게 변환하는 기능 지원

1)데이터 형식 설정 2)값 입력 3)Decode 버튼 4)해당하는 값 적절히 선택
- 가벼운 검색으로 올바른 데이터 형식 탐색 및 다른 단서로 올바른 값 찾기 가능
- 보통 원본데이터로부터 얻은 값: Little-Endian, 레지스트리 편집기 같이 도구로부터 얻은 값: Big-Endian인 경우가 많음
레지스트리로 얻어낸 값
InstallDate: 2023-11-28 23:12:26.0000000 +09:00
InstallTime: 2023-11-28 23:12:26.2528285 +09:00
- InstallDate 필드는 Unix timestamp 방식으로 시간 값 전달하므로 초 단위 이하 데이터는 제공x
- Unix Timestamp: 1970년 1월 1일 기준으로 현재까지 흘러간 초를 계산해 시간 값을 제공하는 방법
- 또는 systeminfo 명령어로도 획득 가능

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
- 실제 Windows 시작 프로그램 설정 화면에 들어가면 같은 이름들이 확인됨
사용자 계정
- 시스템에 존재하는 모든 사용자의 계정 목록 획득
경로: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

- 위 사진의 ProfileList 중 사용자가 만든 계정은 단 1개
- 이유는 Windows에서 기본으로 만들어주는 계정이 존재하기 때문

- ProfileImagePath 필드에서 사용자의 홈 디렉토리, Sid 필드에서 Windows 계정의 SID(Security ID)값 획득
- SID: 하나의 Windows 시스템에서 사용자 별로 고유하게 부여되는 ID 값
- 마지막 숫자가 중요 => 관리자:500, 게스트 계정:501, 일반 사용자 계정:1000이상
- LocalProfileLoadTimeHigh 필드와 LocalProfileLoadTimeLow 필드를 조합해 사용자 계정의 최종 로그온 시각 확인 가능
- LocalProfileUnloadTimeHigh 필드와 LocalProfileUnloadTimeLow를 조합해 사용자 계정의 최종 로그오프 시각 확인 가능
- High 값(0x01da7a06)과 Low 값(0x34dc09ea)의 조합은 아래 사직 우측 ValueInput 패널의 Value 값(0x01da7a0634dc09ea)으로 확인 가능
- 이러한 시간 데이터는 Dcode 등의 도구로 계산 가능

환경 변수
- 환경 변수: 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임
사용자 계정 환경 변수
HKCU\Environmnet
시스템 환경 변수
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environmnet
기기 연결 흔적
- 디지털 포렌식 분석 과정에서 가장 주목해야 할 데이터 중 하나
- 레지스트리 분석으로 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_XXX 형태 구조는 USB 제조사 ID와 제품 ID를 의미
- VID와 PID를 통해 연결된 USB 장치 식별 가능

2. HKLM\SYSTEM\ControlSet00?\Enum\USBSTOR
- USB 중 저장 장치는 아래 경로에 저장됨
- Ven_XXXX&Prod_XXXXX&Rev_XXX 형태
- 순서대로 제조사, 제품, 버전 의미
- 아래 사진에서 Ven_Generic&Prod_Flash_Disk라는 정보 획득 가능
- but 해당 정보로 특정 저장장치 식별x

3. HKLM\SOFTWARE\Microsoft\Windows Portable Devices\Devices
- 아래 경로에서 FriendlyName 필드에서 시스템에 마운트된 볼륨 이름 확인 가능
- 표시된 영역의 특이한 구조: 고유 인스턴스 ID 값

고유 인스턴스 ID
- 같은 모델이라도 제품마다 고유하게 부여된 장치 번호
- 시리얼 번호로 생성한 값
- 시리얼 번호 유무에 따라 값의 형식이 달라짐
- 있을 때: #{SerialNumber}&{?}#
- 없을 때: #{?}&{RandomNumber}&{?}#
4. C:\Windows\INF\setupapi.dev.log
- 레지스트리 이외 파일에서도 USB 연결 흔적과 관련된 정보 획득 가능
- 아래 사진처럼 USB 디바이스가 시스템에 설치된 시각을 로그로 남겨줌

레지스트리 수집 방법
레지스트리 파일
- 하나의 파일로 저장하지 않고 나뉘어 저장
- 레지스트리 편집기에서 파일들을 모아 하나의 데이터베이스처럼 보여줌
- 레지스트리 파일 모음 = 레지스트리 하이브
- 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로 파일을 추출" 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 파일: 레지스트리 파일 변경을 위해 이전 트랜잭션 데이터를 잠시 보관하는 파일
- 시스템에 따라 존재할 수 있고, 존재하지 않을 수도 있음 (존재하면 수집)

레지스트리 수집 후 처리
- 레지스트리를 수집하면 사용 중이던 레지스트리가 정리되지 않은 상태로 시스템에 복사됨(dirty 상태)
- dirty 상태 레지스트리는 아직 쓰여지지 않은 데이터가 존재하고 LOG1, LOG2파일에 남아있음
- 이 데이터등르 레지스트리에 통합하는 과정 필요
- RLA 도구가 이 과정을 지원

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
- -f: 파일 단위로 통합 진행
- -d: 폴더에 속한 파일 전체에 대한 통합 진행
- registry_clean 폴더에 들어가보면 아래 사진과 같이 레지스트리가 clean이 됨
- 로그 기록을 보면 NTUSER.DAT 파일은 도구에서 처리 중에 에러 발생이 보임
- => 이런 경우 해당 파일의 RLA 처리를 생략하거나 LOG1/LOG2 파일에 특이사항이 있는지 직접 점검

Registry Explorer
- 레지스트리를 분석할 수 있는 GUI 도구
- 레지스트리 편집기와 달리 검색 기능 지원 및 자주 사용하는 레지스트리 경로 북마크 지정

- File => Load Hive 버튼을 누르고 수집한 레지스트리를 넣으면 위 사진 출력
- 레지스트리 편집기와 유사하지만 Registry Explorer는 전체 레지스트리 키를 대상으로 검색 가능
- 레지스트리 편집기와 달리 별도로 수집된 레지스트리를 프로그램에 입력했기 때문에 시스템에서 사용 중일 때 접근이 어려운 레지스트리 값도 획득 가능
Regripper
- CLI 기반의 레지스트리 분석 도구
- 도구가 원본 데이터에서 필요하다고 생각되는 부분들을 직접 분석해 결과 출력
- 출력된 결과만을 이용해 분석을 빠르게 수행 가능
- but 제대로 작동하지 않아 찾을 수 없을 때나 오류가 발생할 수 있음
- 반면 Registry Explorer는 속도가 조금 느리지만 원본 데이터를 보기 때문에 보다 정확하게 분석 가능
- Regripper 다운로드하고 rr.exe 파일 실행
- 아래 사진처럼 Hive File에 수집한 레지스트리 하이브 파일을 넣고, Report File에 수집된 로그가 저장된 파일을 넣음
- 이후 하단 Rip! 버튼을 누르면 분석 완료되고 각각 하이브 파일에 대해 작업을 반복 수행

msis v.20200517
(Software) Determine MSI packages installed on the system
Classes\Installer\Products
LastWrite Time 2024-02-18 09:27:25Z
2024-04-02 14:00:48Z
Adobe Acrobat (64-bit);C:\Program Files\Common Files\Adobe\Acrobat\Setup\{AC76BA86-1033-1033-7760-BC15014EA700}\AcroPro.msi
2024-02-18 09:27:25Z
Microsoft Windows Desktop Runtime - 6.0.27 (x64);C:\ProgramData\Package Cache\{E634F316-BEB6-4FB3-A612-F7102F576165}v48.108.8836\windowsdesktop-runtime-6.0.27-win-x64.msi
2024-02-18 09:26:54Z
Microsoft .NET Host - 6.0.27 (x64);C:\ProgramData\Package Cache\{3A96B93E-763F-41E7-85C7-1F3CCC37EF27}v48.108.8828\dotnet-host-6.0.27-win-x64.msi
2024-02-18 09:26:36Z
Microsoft .NET Host FX Resolver - 6.0.27 (x64);C:\ProgramData\Package Cache\{7447A794-FA2E-42BE-BA9A-5FCBD54C5DF3}v48.108.8828\dotnet-hostfxr-6.0.27-win-x64.msi
2024-02-18 09:26:18Z
Microsoft .NET Runtime - 6.0.27 (x64);C:\ProgramData\Package Cache\{79043ED0-7ED1-4227-A5E5-04C5594D21F7}v48.108.8828\dotnet-runtime-6.0.27-win-x64.msi
2024-02-13 18:02:07Z
Adobe Refresh Manager;C:\Program Files (x86)\Common Files\Adobe\ARM\1.0\Cache\Arm_018244601067_13454720979378491438484343241356736687.msi
2024-01-22 06:48:32Z
AccessData FTK Imager;C:\Users\gold\AppData\Local\Temp\{CD24E695-5C6F-4762-BC40-197263497508}\AccessData_FTK_Imager_(x64).msi
USB 연결 흔적
- 대표적으로 USBStor 플러그인의 실행 결과를 보면 직관적인 정보 획득 가능
FriendlyName: USB 저장장치 이름
First InstallDate: USB 저장장치가 처음으로 설치된 시간
InstallDate: USB 저장장치의 설치 시간
Last Arrival: USB 저장장치 마지막으로 제거된 시간
usbstor v.20200515
(System) Get USBStor key info
USBStor
ControlSet001\Enum\USBStor
Disk&Ven_Generic&Prod_Flash_Disk&Rev_8.07 [2024-01-22 07:22:05]
S/N: 03A49E66&0 [2024-03-26 13:19:42Z]
Device Parameters LastWrite: [2024-01-22 07:22:05Z]
Properties LastWrite : [2024-01-22 07:22:05Z]
FriendlyName : Generic Flash Disk USB Device
First InstallDate : 2024-01-22 07:22:05Z
InstallDate : 2024-01-22 07:22:05Z
Last Arrival : 2024-04-03 13:55:40Z
Disk&Ven_SCSI&Prod_DISK&Rev_1.00 [2024-01-19 03:57:41]
S/N: 6&13f18313&0 [2024-01-19 03:57:41Z]
Device Parameters LastWrite: [2024-01-19 03:57:41Z]
Properties LastWrite : [2024-01-19 03:57:42Z]
FriendlyName : SCSI DISK USB Device
First InstallDate : 2024-01-19 03:57:41Z
InstallDate : 2024-01-19 03:57:41Z
Last Arrival : 2024-02-26 14:04:41Z
Last Removal : 2024-02-26 22:51:56Z'SWUFORCE > 드림핵' 카테고리의 다른 글
| Track_the_file(시스템 로그 실습) (0) | 2026.05.19 |
|---|---|
| 시스템 로그 (0) | 2026.05.17 |
| 파일 시스템 (0) | 2026.04.29 |
| 디지털 데이터와 디지털 장치 (0) | 2026.04.01 |
| [Digital Forensics Basics] 디지털 증거(디스크 이미징, 메모리 덤프, 해시함수) (0) | 2026.03.27 |