Registry
1. 개요
레지스트리(Registry)는 Windows의 시스템과 운영 프로그램의 정보 등을 저장하고 있는 계층적 구조의 데이터베이스이다. 레지스트리 내부에는 사용자 설정, 설치된 프로그램, 연결된 하드웨어, 시스템 정책 등 시스템 설정과 다양한 설정 정보가 포함되어 있으며, 많은 정보가 저장된 만큼 포렌식 과정에서 얻고자 하는 정보들도 많이 들어있다. 레지스트리 개념은 Windows 3.1 때부터 등장했으며, 초기에는 .ini 파일처럼 단순한 구조의 개념이었다. 초기의 레지스트리는 각 프로그램 별 .ini 파일이 분산되어 있어 관리가 어렵다는 단점이 존재했다. 이를 보완하기 위해 계층적 구조의 데이터베이스, 현재의 레지스트리(Registry)라는 개념이 등장하게 되었다.
버전 별 저장 경로
레지스트리는 Windows XP 버전 이후부터 %SystemRoot%\\System32\\Config
폴더 내에 이진 파일 형태로 저장된다. 이전 버전에서는 좀 더 단순한 구조로 저장되었으며, Windows XP 이후 부터는 이전 보다는 복잡한 구조로 이루어져 있다. Windows XP 이후 부터는 5개의 SAM, SECURITY, SOFTWARE, SYSTEM, NTUSER.DAT 파일이 기본 구조로 저장되고, 각 정보들은 해당하는 하이브 파일에 키(key) - 값(values) 구조로 저장된다. 이후 버전들도 기본 구조에서 조금씩 더 값들을 세분화하는 등의 업데이트만 이루어지고 앞서 말한 기본 구조는 그대로 유지한다.

2. 구조
전반적인 구조
레지스트리는 키(key) - 값(values) 구조로 구성되어 있으며, 각 키는 루트키, 서브키, 키로 분류
된다. 이때 서브키부터 그 하위 키까지 어우르는 트리 구조를 하이브(hive)
라고 한다.


앞서 말했다시피, 레지스트리는 키(key) - 값(values) 구조로 이루어져 있으므로, 폴더처럼 구성되어 있는 키 내부에는 각 키에 해당하는 데이터들이 저장되어 있는 것을 확인할 수 있다.


레지스트리에는 여러가지 데이터 타입이 존재하는데, 관련 내용은 아래 표와 같다.

루트키 및 서브키
루트키는 HKCR, HKCU, HKLM, HKU, HKCC로 총 5개로 구성되어 있다. 5개의 루트키 중 HKLM과 HKU는 Master Key
로 각 하이브 파일을 읽어 독자적인 값들을 가지고 있는 키이다. 이외의 키들은 Derived Key
로 Master Key의 심볼릭 링크 값들을 가지고 있는 키이다. 그러다보니 HKLM과 HKU만 파일로 존재하고, 나머지 루트키는 파일로 존재하지 않고 메모리 상에만 존재한다. 또한 나머지 루트키는 시스템 전원 상태에 따라 유지되거나 재구성된다.

📌 각 루트키 별 설명
1) HKEY_CALSSES_ROOT
HKLM\\SOFTWARE\\Classes와 HKU\\<SID>\\Classes의 집합
자신만의 서브키가 없고 HKLM과 HKU 의 Classes 서브키를 가져와 자신의 서브키로 만듦
대부분의 서브키는 HKLM의 심볼릭 링크 서브키
파일 확장자와 응용 프로그램의 맵핑 정보 저장 → 특정 서브키에 대한 프로그램 맵핑 데이터 저장

실제로 (기본값)에서 확인할 수 있는 프로그램의 서브키를 보면 전체 경로와 명령어 옵션을 확인할 수 있음
명령어 옵션은 Shell 키의 Open\Command 키에서 확인 가능
2) HKEY_CURRENT_USER
HKU 하위의 유저 중 현재 로그인한 유저의 정보를 서브키로 가짐
HKU 루트키에서 가져온 것들
현재 로그인한 사용자의 정보를 서브키로 가지고 있음 → 현 사용자의 SID 확인 가능

HKCU 서브키 종류

HKCU 서브키 중 HKCU\software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist 아래에 있는 서브키들은 값을 ROT-13 방식으로 저장
레지스트리 중 유일하게 ROT-13 방식으로 저장
3) HKEY_LOCAL_MACHINE
하드 디스크에 있는 하이브 파일들과 메모리에 있는 하이브 모음(= 대부분 응용 프로그램 관련)
자체 하이브를 가지고 있음
일부 하이브는 시스템 계정으로만 접근 가능 (관리자 계정으로도 접근 불가)
시스템 하드웨어, 소프트웨어 드라이버의 환경 설정 정보를 가지고 있음
HKLM 하이브 목록

HKLM\SYSTEM 하위에 ControlSet : 시스템 환경 설정 정보를 담고 있는 키, 보통 2개 이상 존재
HKLM\SYSTEM\Select 경로에 Current 값의 데이터가 1이면 ControlSet001로 부팅되었다는 의미
4) HKEY_USER
NTUSER.DAT 파일의 집합
시스템의 모든 계정 정보를 담고 있음
루트키와 각 서브키의 계정 프로파일이 있다는 것을 제외하면 HKU 서브키들은 HKCU 서브키와 동일
HKU 하이브 목록

5) HKEY_CURRENT_CONFIG
HKLM\\CurrentControlSet\\Hardware Profiles\\Current에서 부팅 시 사용한 하드웨어 프로파일의 집합
시스템이 시작할 때 사용되는 하드웨어 프로파일을 저장
하이브
하이브 파일에서 사용되는 단위는 Block와 Hive Bin이 있다. 두 단위 다 논리적 단위이지만 Block은 메모리 상에서, Hive Bin은 파일 단에서 사용되는 단위이다. 상세 개념은 아래 내용과 같다.
📌 Block과 Hive Bin의 개념
1) Block
하이브의 논리적 단위 (파일시스템 내 클러스터와 비슷한 개념)
크기 : 4KB
파일 크기 증가 기준이 논리적 바이트이기 때문에
파일의 물리적 크기가 항상 4 byte씩 증가
cf. 파일시스템의 경우 클러스터가 4KB일 경우, 모든 파일의 물리적 크기가 4KB씩 증가 / 클러스터가 1bit일 경우, 모든 파일의 물리적 크기가 1bit씩 증가
2) Hive Bin
하이브 파일 내부에 생성되는 논리적 단위
Block 크기(4KB)랑 Hive Bin(4KB)의 크기가 동일
다음 Hive Bin까지 상대적 거리를 저장함
Windows는 레지스트리를 읽을 때 Hive Bin을 기본 단위로 삼음
첫번째 Root Cell 위치 전 = 0x1000 ~ 0x1020

3) Block vs Hive Bin

하이브 파일 구조는 크게 하이브 헤더(Base Block이라고도 불림)와 데이터 영역으로 구성되어 있으며, 데이터 영역 안에 있는 Hive Bin안에 여러 Cell들이 구성되어 있는 구조이다. 상세 내용은 다음과 같다.

1) Base Block
하이브 파일의 첫번째 블록 (하이브 파일의
헤더 역할
)시그니처가 다르기 때문에 Hive Bin 이라 부르지 않고, Base Block라고 불림
📌 Base Block 시그니처(regf) vs Hive Bin 시그니처(hbin)


Base Block 구조 중 상세 내용
Sequence Number
하이브 파일이 정상적으로 저장되고 닫히면 #1과 #2의 값은 동일함
But, 시스템 충돌이나 비정상적인 종료, 하이브 파일 손상이 발생하면 #1과 #2 값은 동일하지 않음
📌 Sequence Number가 1 byte만 다른 경우
➡️ 특정 쓰기 작업 도중 파일이 손상되었거나 중단되었음을 나타냄
Start of Root Cell
Start of Root Cell + 0x1000 = 첫번째 Root Cell 위치
ex. 0x20 + 0x1000 = 0x1020
2) Cell Structure
Cell : 실제 레지스트리 데이터를 저장할 때 사용되는 단위
Hive Bin 보다 더 작은 논리적 저장 단위
헤더에는 Cell의 전체 길이가 저장됨
(무조건 8byte의 배수)
📌 (참고 개념) Cell map
레지스트리를 불러올 시 하이브 파일에 매번 접근하지 않기 위해 사용하는 것
하이브 파일의 일부를 메모리에 매핑하여 그때그때 데이터를 읽어들이는 방식
출처 : Forensic-Proof(FT-15-레지스트리-포렌식-분석.pdf)
a) Root Cell
Key Cell의 첫번째를 가르키는 포인터 역할
b) Key Cell
레지스트리 키를 가지고 있는 가장 기본적인 Cell (
Key Node
라고 불림)가장 최근에 키를 수정한 시간 기록
Base Block에서 계산한 첫번째 Root Cell 위치부터 시작

Key Cell 구조 중 상세 내용
Cell Size
0x100000000 - Cell Size = Cell 크기
ex. 0x100000000 - 0xFFFFFFA8 = 0x58
Cell Flag
16진수에서 2진수로 변환한 후 각 비트에 해당하는 상태나 속성 확인
ex. 0x2C → 00101100 = 임시 키, 휘발성 키, 심볼릭 링크
비트 별 플래그 의미
비트플래그 의미비트 0 (0x01)
볼륨 섀도우 복사본에 포함되어 있는지
비트 1 (0x02)
삭제된 상태인지
비트 2 (0x03)
하이브의 임시 키인지
비트 3 (0x04)
심볼릭 링크인지
비트 4 (0x05)
로드된 하이브의 루트 키인지
비트 5 (0x06)
휘발성 키인지
비트 6 (0x07)
예약됨 (일반적으로 사용되지 않음)
비트 7 (0x08)
예약됨 (일반적으로 사용되지 않음)
Key Name
아스키 코드 형식으로 저장되어 있음
NULL이 문자열의 끝을 의미함
Key Cell 내부에는 Subkey List Cell (List Cell)과 Value Cell의 인덱스 목록을 가지고 있는 Subkey List Cell과 Value-list Cell의 내용도 같이 포함
하고 있다.
Subkey List Cell (List Cell)
특정 키에 연결된 하위 키의 인덱스 목록
Value-list Cell
Velue Cell들의 인덱스 목록
c) Value Cell
value와 data, data의 타입이 들어 있는 셀
파일 역할을 하는 셀 (cf. Key Cell = 파일 시스템의 디렉토리 역할)
시그니처 : vk

Value Cell 구조 중 상세 내용
Value Type
d) Security Cell (Security-descriptor Cell)
보안 정보를 저장하고 관리하는 셀
레지스트리에 대한 액세스 제어를 정의하는 데에 필요한 정보를 포함하고 있음
시그니처 : sk

해당 셀을 공유하고 있는 모든 키 노드의 개수도 같이 기록되어 있음
e) Data Cell
레지스트리의 Data를 저장하고 있는 셀
실제 데이터를 저장하고 있음

Data Cell은 저장하는 데이터의 크기에 따라 총 3가지 셀로 구분됨
Big Data Cell
크기가 큰 데이터를 직접 저장하지 않고 해당 데이터가 어디에 있는지 알려주는 Big Data Indirect Cell의 위치 값을 저장
Big Data Indirect Cell
실제 데이터가 저장되어 있는 Data Cell의 위치를 저장
Data Cell
실제 데이터 저장
3. 분석 방안
레지스트리는 키 종류와 하이브 파일 구조 내 담는 데이터의 종류만 봐도, 사용자 PC에 대한 정보를 다양하게 모두 저장하고 있는 것을 알 수 있다. 레지스트리는 Windows의 모든 정보가 기록된다는 점에서 디지털 포렌식 분석에 있어 중요한 역할을 하므로, 이에 대해 주요 데이터 분석 내용을 익힐 필요가 있다.
레지스트리 분석 단계
다음과 같은 방법으로 레지스트리를 분석할 수 있다.
레지스트리 파일 수집 : 분석 대상 PC에서 하이브 파일을 수집한다.
분석 방향 결정 : 사고 유형별 우선 분석할 레지스트리 정보를 결정한다.
시스템 정보 및 필요 정보 확인 : 특정 경로에 저장되어 있는 키 값과 데이터를 확인한다.
이상 행위 탐지 : 정상적인 시스템 레지스트리와 비교해 의심 가는 드라이버 정보, 필수 키 값 삭제 등의 이상 행위를 탐지한다.
📌 다른 아티팩트 분석과 레지스트리 분석의 차이점
레지스트리
대상 초기 정보 확인, 분석에 필요한 정보 확인 등
다른 아티팩트 (ex. 이벤트로그, 프리패치, 점프리스트 등)
이상 행위 분석, 타임라인 생성 등
➡️ 레지스트리 분석의 경우, 다른 아티팩트 분석과 달리 대상의 기본 정보를 확인하고 앞으로 분석에서 필요한 정보를 확인하거나 이상 징후를 발견하는 등 분석 대상 확인에 가깝다.
레지스트리 분석
레지스트리 키를 이용한 기본적인 정보 확인을 하는 방법은 다음과 같다.
1) 시스템 정보
키 경로 = HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
확인 가능한 내용 : OS명, 설치 날짜, 빌드 버전, 시스템 경로 등

키 경로 = HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName
확인 가능한 내용 : 컴퓨터 명

2) 시간 정보
키 경로 = HKLM\SYSTEM\ControlSet001\Control\TimeZoneInformation
확인 가능한 내용 : 컴퓨터에서 사용하는 표준 시간대 정보

3) 연결된 네트워크 정보
키 경로 = HKLM\Microsoft\Windows NT\CurrentVersion\NetworkList
확인 가능한 내용 : 연결되어 있는 네트워크 정보

NerworkList 키 하위의 Profiles 키에서 각 네트워크 별 세부 정보를 확인할 수 있음

4) 마지막 로그온한 사용자
키 경로 = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI
확인 가능한 내용 : 마지막 로그인한 사용자 이름

5) 시스템 마지막 종료 시간
키 경로 = HKLM\SYSTEM\ControlSet001\Control\Windows
확인 가능한 내용 : 시스템 마지막 종료 시간

상황 별 분석
상황 별로 집중적으로 분석해야 할 레지스트리 키 종류와 분석 내용은 아래와 같다.
1) 원격 연결 이력 확인
키 경로 = NTUSER.dat\Software\Microsoft\Terminal Server Client\Default
확인 가능한 내용 : 분석 대상에서 원격 접속 시도한 IP 목록

Serves 키 하위엔 원격 접속을 시도한 IP 명으로 키가 생성되는데, 해당 키에선 원격 접속 시도한 IP의 Username을 확인할 수 있음

2) 최근 실행 이력
최근 실행한 문서
키 경로 = NTUSER.dat\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs
확인 가능한 내용 : 종류(문서, 폴더), 실행 파일 명
RecentDocs 하위에 각 확장자 별 키가 생성된 것을 확인할 수 있음
생성된 키 내부에는 해당 확장자에 맞는 문서 및 폴더 실행 이력이 포함되어 있음
최근 실행한 명령어
키 경로 =NTUSER.dat\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
확인 가능한 내용 : ctrl + R (’실행’ 대화 상자)를 통해 실행한 명령어
최근 실행한 프로그램
키 경로 = NTUSER.dat\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist
확인 가능한 내용 : 실행한 프로그램 명, 실행 횟수, 마지막 실행 시간
3) 삭제된 프로그램 정보
키 경로 = UsrClass.dat\Local Settings\Software\Microsoft\Windows\Shell\MuiCache
확인 가능한 내용 : 한번이라도 실행된 프로그램 목록
윈도우에서 사용되는 기본 프로그램과 평소에 실행하지 않았던 프로그램 목록 포함
한번이라도 실행되었으면 해당 키 하위에 value로 기록되며, 사용자가 임의로 삭제하지 않는 이상 계속 남아 있음
이를 이용해 삭제된 프로그램 정보를 파악할 수 있음 (해당 목록과 실제 프로그램 이력 비교 분석 진행)
4) 자동 실행 등록 이력
시스템 및 관리자 권한의 자동 실행 프로그램
키 경로 = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
확인 가능한 내용 : 시스템 및 관리자 권한으로 등록된 자동 실행 프로그램 명, 경로
위 사진 상 Everything의 경우 해당 경로에 자동 실행 프로그램으로 기록되어 있으므로, 관리자 권한으로 자동 실행되는 프로그램인 것을 알 수 있음
로그인한 사용자 계정으로 등록한 자동 실행 프로그램
키 경로 = NTUSER.dat\Software\Microsoft\Windows\CurrentVersion\Run
확인 가능한 내용 : 로그인한 사용자가 등록한 자동 실행 프로그램 명, 경로
5) USB 연결 흔적
연결된 USB의 드라이브 문자열 및 일련번호
키 경로 = HKLM\SYSTEM\MountedDevices
확인 가능한 내용 : USB 별 부여된 드라이브 문자열 및 일련번호
라이브 시스템 상의 USB 연결 흔적
키 경로 = HKLM\SYSTEM\ControlSet001\Enum\USB
확인 가능한 내용 : 라이브 시스템 상의 USB 연결 흔적
cmd 명령어를 통해 출력할 수도 있음
4. 분석 도구
레지스트리는 별도의 도구 없이 regedit를 이용해 키 확인 및 편집을 할 수 있다. regedit는 윈도우에서 기본적으로 제공하는 레지스트리 편집기로, 윈도우 + R 키 혹은 윈도우 키
를 눌러 검색해 사용할 수 있다. regedit는 기본적으로 관리자 권한으로 실행되기 때문에, 별도의 설정 없이도 쉽게 레지스트리를 변경 및 추가할 수 있다. 레지스트리 편집기에서는 특정 값을 임의로 생성 및 수정할 수 있으며, 별도의 레지스트리 파일(.reg, 하이브 파일)을 가져오기 기능을 이용해 대상 PC에 삽입할 수도 있다. 단, 무분별한 레지스트리 편집은 컴퓨터 오류를 발생 시킬 수 있으므로, 이점 유의해서 레지스트리를 편집해야 한다.

기본적으로 제공되는 regedit는 레지스트리 편집에는 유용하게 쓰일 수 있지만, 실제 분석에서는 상용 도구인 Registry Explorer, RECmd, REGA를 사용한다. Registry Explorer와 RECmd는 Eric Zimmerman이 만든 레지스트리 분석 및 추출 도구로, Eric Zimmerman의 Github에서 실행 파일 형태로 다운 받을 수 있다.
Eric Zimmerman Github : https://ericzimmerman.github.io/#!index.md
Registry Explorer는 레지스트리 뷰어로서, regedit와 유사하다. 하지만, Registry Explorer는 삭제된 키 값 복구, 북마크 기능을 지원하는 등 regedit보다 더욱 강력한 기능
을 제공해 실 분석에서 좀 더 유용하게 쓰인다.

RECmd는 CLI 기반
의 레지스트리 추출 및 분석 도구이다. --csv 명령어와 --json 명령어를 이용해 다양한 파일 포맷으로 레지스트리를 저장
할 수 있으며, 이외의 다양한 옵션 값으로 특정 키 찾기, 특정 바이트 암호화하기, 삭제된 키 및 값 복구하기 등의 분석도 지원한다. 하지만, CLI 기반이다 보니, 실 분석에서 사용하기에는 어려움이 있다.
RECmd 옵션 참고 Github : https://github.com/EricZimmerman/RECmd
REGA는 고려대 DFRC에서 만든 레지스트리 수집 및 분석 도구로서, DFRC 홈페이지 내에서 실행 파일 형태로 다운 받을 수 있다. 레지스트리 파일 수집 기능과 파일 열기 기능을 통해 대상 PC의 레지스트리를 수집하거나 삭제된 레지스트리 키를 복구할 수 있으며, 레지스트리 분석 기능을 이용해 수집한 레지스트리 파일에 대해 상세 분석을 진행할 수 있다. REGA의 좋은 점은 특정 활동에 대한 정보(ex. 윈도우 설치 정보, 응용프로그램 정보, 사용자 활동 정보 등)에 대한 레지스트리 키 값을 카테고리화
해, 직접 경로로 들어가 확인하지 않아도 바로 분석이 가능하다는 점이다.
REGA - 고려대 DFRC 사이트 : https://dfrc.korea.ac.kr/infra_dfrc_tools

레지스트리 분석 시 사용할 수 있는 도구는 여러가지가 있지만, 가장 추천하는 분석 도구는 Registry Explorer와 REGA이다. 두 도구 모두 상세 분석 기능을 지원할 뿐만 아니라, 북마크 기능과 키워드 검색 기능과 같은 기능들로 레지스트리 분석을 용이하게 하기 때문이다. 특히 Registry Explorer의 경우 다른 도구들보다 간편하게 사용할 수 있다는 점과, REGA의 경우 레지스트리 키 값을 카테고리화 해 특정 활동에 대한 분석이 바로 가능하다는 점에서 분석 도구로 추천한다.
5. 참조
[Digital Forensic] Registry 분석
Registry Hive File Structure Analysis
Windows Registry Forensics Part II 2018 — Crucial Artefacts | Lucideus
Last updated
Was this helpful?