본문 바로가기
포렌식/기초부터 따라하는 디지털 포렌식

Registry 개념 및 실습

by SH_L 2022. 7. 17.
반응형

[Windows Artifacts]

 

Windows가 가지고 있는 특유의 기능들과 그 기능을 구현하는데 필요한 요소, Windows의 사용자가 수행하는 활동에 대한 정보를 보유하고 있는 개체라고 할 수 있다.

 

프로세스, 시스템에서 자동으로 생성한 데이터인 생성 증거와 사람이 기록하여 작성한 데이터인 보관 증거가 있는데 Windows Artifacts는 생성 증거에 해당한다고 볼 수 있다. , 사용자의 행위에 따라 자동으로 만들어진 데이터를 추적하여 사용자의 행위를 분석하는 것이 Windows Artifacts의 목적이다.

 

Windows Artifacts의 종류로는 Registry, $MFT, $Logfile, $UsnJrnl, LNK, JumpList, Recycle Bin, Prefetch & Cache(s), Timeline, VSS, 웹브라우저 아티팩트, EventLogs 등이 존재한다.

 

 

 

[Registry]

 

윈도우 운영체제와 응용 프로그램 운영에 필요한 정보를 담고 있는 계층형 데이터베이스이다. 운영체제 및 응용 프로그램의 설정 정보, 서비스의 중요 데이터 등 기록되어 있으며 부팅 과정부터 로그인, 서비스 실행, 응용 프로그램 실행, 사용자 행위 등 모든 활동에 관여한다. , 윈도우 시스템의 모든 정보가 담겨 있기에 윈도우 시스템 분석의 필수 요소이다.

 

Registry에 존재하는 정보로는 시스템 표준 시간 (TimeZone), 시스템 정보 (Systeminfo), 사용자 계정 정보, 환경 변수 정보, 자동 실행 프로그램,응용 프로그램 실행 흔적 (UserAssist, OpenSavePidlMRU, LastVisitedPidlMRU), USB 연결 흔적, 접근한 폴더 정보 (Shellbag) 등이 있다.

 

Registry를 조회하기 위해서는 regedit이라는 레지스트리 편집기를 이용한다. 레지스트리 편집기를 통해 레지스트리 조회 및 편집이 가능하다.

 

 

왼쪽 상단에는 여러 개의 Key로 구성되어 있으며 Key는 Key와 Sub Key로 계층형 구조를 이룬다. 한 가지 예를 들자면 FontsSoftware Sub Key가 되고, Software는 HKEY_CURRENT_CONFIG의 Sub Key가 된다.

 

 

Key를 선택하면 Key에 해당하는 Value, Type, Data를 확인할 수 있다. Value Data를 가지며, Data에 대한 Type이 존재한다.

 

 

이때, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG 5개의 KeyRoot Key라고 부른다.

 

Root Key에 대한 설명은 아래와 같다. 괄호 안에 들어있는 것은 Root Key에 대한 약어이다. Regedit 경로 상에 약어 입력이 가능하다.

 

HKEY_CLASSES_ROOT(HKCR): 파일 확장자 연결 정보, COM 객체 등록 정보

HKEY_CURRENT_USER(HKCU): 현재 시스템에 로그인된 사용자의 프로파일 정보

HKEY_LOCAL_MACHINE(HKLM): 시스템의 하드웨어, 소프트웨어 설정 및 기타 환경 정보

HKEY_USERS(HKU): 시스템의 모든 사용자와 그룹에 관한 프로파일 정보

HKEY_CURRENT_CONFIG(HKCC): 시스템이 시작할 때 사용되는 하드웨어 프로파일 정보

 

여기까지 Registry 정의 및 구조에 대해 살펴보았다. 다음으로 Registry에 존재하는 정보에 대해 하나 하나씩 살펴보자.

 

 

 

[Registry - Timezone]

 

경로: HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

 

 

Bias에서 현재 컴퓨터의 timezone을 확인할 수 있다. 현재 컴퓨터의 설정은 UTC + 9이다.

 

 

 

[Registry - Systeminfo]

 

경로: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

 

 

현재 윈도우 버전, 설치 시간, ProductId 등 시스템과 관련된 정보들을 확인할 수 있다.

 


Windows PowerSell에서 확인할 수 있는 시스템 정보와 레지스트리 편집기에서 확인할 수 있는 시스템 정보가 서로 일치하는 것을 알 수 있다.

 

InstallTime 값을 확인하기 위한 실습을 진행하기 위해 Dcode를 다운로드 한다.

 

https://www.digital-detective.net/dcode/

 

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

 

 

레지스트리 편집기에서 InstallTime을 더블 클릭한 다음 해당하는 값 데이터를 가져온다.

 

 

Value Input에 값 데이터를 집어넣고, Format을 Hexadecimal (Big-Endian)으로 설정한 다음에 Decode 버튼을 클릭한다. 왼쪽 하단의 Windows Filetime에서 데이터를 확인할 수 있는데 해당 데이터는 Windows PowerSell에서 확인한 원래 설치 날짜와 일치한다.

 

InstallDate 값을 확인하기 위한 실습을 진행하기 위해 Epoch Converter에 접속한다.

 

https://www.epochconverter.com//

 

Epoch Converter

Convert Unix Timestamps (and many other date formats) to regular dates.

www.epochconverter.com

 

 

레지스트리 편집기에서 InstallDate을 더블 클릭한 다음 해당하는 값 데이터를 가져온다.

 

 

값 데이터를 집어넣고 Timestamp to Human date 버튼을 클릭한다. Windows PowerSell에서 확인한 원래 설치 날짜와 일치한다.

 

 

 

[Registry - 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

 

 

자동 실행 프로그램을 확인할 수 있다. 이때, 자동 실행 프로그램 중에서도 Run, RunOnce, RunOnceEx가 존재한다.

 

Run: 레지스트리에 계속 남아서 컴퓨터가 실행될 때마다 실행된다.

RunOnce: 한 번 실행된 다음 레지스트리가 삭제된다.

RunOnceEx: RunOnce와 기능은 같지만 삭제 타이밍이 다르다.

 

 

설정\시스템\앱\시작 프로그램에서도 자동 실해 프로그램을 확인할 수 있다. 레지스트리 편집기에서 확인한 자동 실행 프로그램과 일치한다.

 

 

 

[Registry - User Account]

 

경로: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

 

 

ProfileList에는 4가지 종류가 존재한다. 각각에 대한 설명은 아래와 같다.

S-1-5-18: systemprofile
S-1-5-19: LocalService
S-1-5-20: NetworkService
S-1-5-21: 사용자가 만든 계정으로 1000 이상은 user 권한을 의미하고, 500은 administrator를 의미한다.

 

 

S-1-5-21에서 LocalProfileLoadTimeHigh의 데이터와 LocalProfileLoadTimeLow의 데이터를 이어붙인 값을 DCode로 확인하면 사용자의 최종 로그인 시간을 구할 수 있다.

 

 

LocalProfileLoadTimeHigh의 데이터와 LocalProfileLoadTimeLow의 데이터를 이어붙인 값을 집어넣고, Format을 Hexadecimal (Big-Endian)으로 설정한 다음에 Decode 버튼을 클릭한다. 왼쪽 하단의 Windows Filetime에서 사용자의 최종 로그인 시간을 확인할 수 있다.

 

 

 

[Registry - Environment Variables]

 

경로

사용자 환경 변수: HKU\{SID}\Environment

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

 

 

SIDUser Account에서 확인했던 ID를 의미한다. HKEY_USERS\S-1-5-21\Environment으로 들어가면 사용자 환경 변수를 확인할 수 있다.

 

 

일반적으로 시스템 환경 변수에 값을 많이 입력하기에 시스템 환경 변수에 정보가 더 많이 존재한다.

 

 

시스템 환경 변수 편집으로 들어가면 사용자 환경 변수와 시스템 환경 변수가 위아래 나뉘어진 부분을 확인할 수 있다.

 

 

 

[Registry - Executable]

 

응용 프로그램(exe) 실행에 따른 흔적을 확인할 수 있다. 응용 프로그램을 실행하면 Registry에 흔적이 남게 되는데 해당 흔적에는 UserAssist, OpenSavePidlMRU, LastVisitedPidlMRU 총 3가지 종류가 존재한다. 각각에 대한 설명은 아래와 같다.

 

1. UserAssist: 최근에 실행한 프로그램 목록, 마지막 실행 시간, 실행 횟수

경로: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist

 

 

{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}와 같은 값을 CLS ID라고 한다. CLS ID는 임의로 지정되는 값이 아닌 각각 의미를 가진 예약된 값이다. 그 중 {CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}에서는 실행 파일 실행 기록을 확인할 수가 있고, {F4E57C4B-2036-45F0-A9AB-443BCFE33D9F}에서는 바로 가기 실행 기록을 확인할 수 있다.

 

 

이때, 값들이 인코딩 되어있는 것을 확인할 수 있다.

 

인코딩 된 값을 확인하기 위해 rot13.com에 접속한다.

 

https://rot13.com/

 

rot13.com

rot13.com Please enable JavaScript to use this page. ↓ ROT1 ROT2 ROT3 ROT4 ROT5 ROT6 ROT7 ROT8 ROT9 ROT10 ROT11 ROT12 ROT13 ROT14 ROT15 ROT16 ROT17 ROT18 ROT19 ROT20 ROT21 ROT22 ROT23 ROT24 ROT25 ↓

rot13.com

 

 

인코딩 된 값을 붙여넣으면 위와 같이 디코딩 된 값을 확인할 수 있다.

 

2. OpenSavePidlMRU: 열기 혹은 저장 기능으로 사용된 파일

경로: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU

 

 

확장자 별로 파일을 확인할 수 있다.

 

 

이전에 메모리 포렌식에서 사용했던 strings_OSPPSCV.EXE.log 파일을 열었던 흔적을 확인할 수 있다.

 

3. LastVisitedPidlMRU: 열기 혹은 저장 기능을 사용한 응용 프로그램

경로: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU

 

 

OpenSavePidlMRU와 동일하게 MRUListEx를 확인할 수 있다.

 

 

Explorer로 파일을 열었던 흔적을 확인할 수 있다.

 

만약 메모장을 열어 열기 또는 저장을 하게 되면 메모장은 LastVisitedPidlMRU에 흔적이 남게 되고, 메모장을 통해 열기 또는 저장을 한 파일은 OpenSavePidlMRU에 흔적이 남게 된다.

 

 

 

[Registry - USB Connection]

 

경로

모든 USB: HKLM\SYSTEM\ControlSet001\Enum\USB
USB 저장장치: HKLM\SYSTEM\ControlSet001\Enum\USBSTOR
마운트 디바이스: HKLM\SYSTEM\MountedDevices

 

USB 등 외부 저장매체 연결 흔적을 추적 가능하다. USB 제품명, 시리얼 번호, 최초 연결 시각, 마지막 연결 시각 등을 확인할 수 있다.

 

 

먼저 HKLM\SYSTEM\ControlSet001\Enum\USB 경로로 접속하면 시스템에 연결되었던 모든 USB 장치의 정보들을 확인할 수 있다. 이때, VID와 PID를 검색하면 USB의 종류를 알 수 있다. VID와 PID는 각각 제조사를 뜻하는 Vendor ID와 상품 번호를 뜻하는 Product ID를 의미한다.

 

 

다음으로 HKLM\SYSTEM\ControlSet001\Enum\USBSTOR 경로로 접속하면 시스템에 연결되었던 모든 USB 저장 장치의 정보들을 확인할 수 있다.

 

 

마지막으로 HKLM\SYSTEM\MountedDevices 경로로 접속하면 시스템에 마운트되었던 장치의 리스트를 확인할 수 있다.

 

 

 

[Registry - Shellbags]

 

경로

HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags
HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU
HKCU\Software\Microsoft\Windows\Shell\Bags
HKCU\Software\Microsoft\Windows\Shell\BagMRU

 

사용자가 접근한 폴더 정보를 기록한다. 삭제된 폴더의 정보도 찾을 수 있다.

 

 

BagMRU는 폴더의 구조를 계층적 구조로 나타낸다. BagMru에서 0번은 Desktop을 의미한다.

 

 

Bag은 윈도우 사이즈, 위치 등 사용자의 환경 설정을 저장한다.

반응형