DFIR용 레지스트리 키¶
한 줄 요약
조사에서 실제로 열어 보는 레지스트리 키를 답하는 질문별로 묶었습니다 — 시스템 정보, 사용자 활동, 프로그램 실행, USB 장치, 네트워크, 지속성.
하이브와 위치¶
| 하이브 (regedit에서 보이는 이름) | 디스크상의 파일 | 범위 |
|---|---|---|
HKLM\SYSTEM |
C:\Windows\System32\config\SYSTEM |
서비스, 드라이버, ControlSet, 마운트된 장치, Shimcache, BAM |
HKLM\SOFTWARE |
C:\Windows\System32\config\SOFTWARE |
설치된 소프트웨어, OS 버전, Run 키(머신), 프로필, 네트워크 목록 |
HKLM\SAM |
C:\Windows\System32\config\SAM |
로컬 계정, RID, 마지막 로그온, 비밀번호 힌트 |
HKLM\SECURITY |
C:\Windows\System32\config\SECURITY |
LSA 시크릿, 캐시된 도메인 자격증명 (SYSTEM 부트키 필요) |
HKU\<SID> |
C:\Users\<user>\NTUSER.DAT |
사용자별: Run 키, MRU 목록, UserAssist, WordWheel, TypedPaths |
HKU\<SID>_Classes |
C:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.dat |
ShellBags, MUI 캐시, 사용자별 COM/클래스 등록 |
HKLM\BCD00000000 |
\Boot\BCD (시스템 파티션) |
부팅 설정 |
| Amcache | C:\Windows\AppCompat\Programs\Amcache.hve |
Amcache |
각 하이브와 함께 트랜잭션 로그(*.LOG1, *.LOG2)를 꼭 가져오세요 — 최근 변경은 하이브에 기록되기 전까지 거기에만 있을 수 있습니다. Registry Explorer / rla.exe 같은 파서가 이를 재생해 줍니다. 오래된 하이브 버전은 C:\Windows\System32\config\RegBack\(최신 Win10+에서는 대개 비어 있음)와 볼륨 섀도 복사본도 확인하세요.
CurrentControlSet은 심볼릭 링크입니다: SYSTEM\Select\Current(보통 1 → ControlSet001)를 읽으세요. LastKnownGood은 이전 것을 가리킵니다.
시스템 정보와 시간¶
| 질문 | 키 | 메모 |
|---|---|---|
| OS 버전, 설치 날짜 | SOFTWARE\Microsoft\Windows NT\CurrentVersion |
ProductName, CurrentBuild, InstallDate (epoch), RegisteredOwner |
| 컴퓨터 이름 | SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName |
|
| 시간대 | SYSTEM\CurrentControlSet\Control\TimeZoneInformation |
ActiveTimeBias (분 단위, 부호 반대), TimeZoneKeyName. 타임라인을 만들기 전에 반드시 확인 |
| 마지막 종료 | SYSTEM\CurrentControlSet\Control\Windows\ShutdownTime |
FILETIME |
| 네트워크 인터페이스 / IP | SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{GUID} |
DhcpIPAddress, DhcpServer, LeaseObtainedTime, DhcpDomain |
| 접속했던 네트워크 (SSID, 처음/마지막 연결) | SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\{GUID} + Signatures\Unmanaged |
ProfileName, DateCreated, DateLastConnected (128비트 SYSTEMTIME), DefaultGatewayMac — BSSID로 위치 추정 |
| 이 PC의 사용자 프로필 | SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\<SID> |
ProfileImagePath, LocalProfileLoadTimeLow/High, LocalProfileUnloadTime |
| 로컬 계정 | SAM\Domains\Account\Users\<RID hex> |
F 값: 마지막 로그온, 비밀번호 마지막 설정, 계정 만료, 잘못된 비밀번호 횟수, 로그온 횟수; V 값: 사용자명, 전체 이름, 설명. RegRipper samparse로 파싱 |
| Prefetch 켜져 있나? | SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters |
EnablePrefetcher |
| 종료 시 페이지 파일 삭제? | ...\Memory Management\ClearPageFileAtShutdown |
안티포렌식 단서 |
| 마지막 접근 타임스탬프 켜져 있나? | SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisableLastAccessUpdate |
Win10 1803+에서 0x80000000–0x80000003 = 시스템 관리 (작은 볼륨에서는 켜짐) |
| RDP 허용? | SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections |
0 = RDP 허용 |
| Defender 변조 | SOFTWARE\Policies\Microsoft\Windows Defender (DisableAntiSpyware, DisableRealtimeMonitoring), ...\Exclusions\Paths |
공격자는 도구를 떨어뜨리기 전에 예외를 추가함 |
| WDigest 평문 자격증명 | SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential |
1 = LSASS가 평문 보관 → Mimikatz 준비 작업 |
| LSA 보호 / RunAsPPL | SYSTEM\CurrentControlSet\Control\Lsa\RunAsPPL |
프로그램 실행 (별도 표시 없으면 사용자별)¶
| 키 | 기록하는 것 | 메모 |
|---|---|---|
UserAssist NTUSER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count |
GUI로 실행한 프로그램(탐색기, 시작 메뉴, 바로가기)과 실행 횟수, 마지막 실행 시각, 포커스 시간 | 값 이름은 ROT-13. {CEBFF5CD-…} = 실행 파일, {F4E57C4B-…} = 바로가기. cmd 콘솔에서 실행한 것은 기록하지 않음 |
BAM / DAM SYSTEM\CurrentControlSet\Services\bam\State\UserSettings\<SID> (Win10 1709+) |
실행된 파일의 전체 경로 + 마지막 실행 시각, 사용자 SID별 | Background Activity Moderator. 사용자가 붙은 몇 안 되는 "마지막 실행" 타임스탬프. Server 2019+에도 있음 |
RecentApps NTUSER\Software\Microsoft\Windows\CurrentVersion\Search\RecentApps |
앱 + 마지막 접근 + 연 파일 (Win10 1607–1709) | 이후 빌드에서 제거됨 |
MUICache UsrClass\Local Settings\Software\Microsoft\Windows\Shell\MuiCache |
실행한 파일의 표시 이름 (버전 리소스에서) | 타임스탬프 없음; 바이너리가 존재했고 탐색기로 실행됐다는 증거 |
AppCompatFlags / Layers NTUSER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers (HKLM에도) |
사용자가 호환성 옵션("관리자 권한으로 실행")을 설정한 프로그램 | |
Store NTUSER\...\AppCompatFlags\Compatibility Assistant\Store |
PCA(프로그램 호환성 관리자)가 관찰한 프로그램 — 실행된 EXE 경로가 보임 | 설치 파일/도구 찾을 때 유용 |
Shimcache SYSTEM\...\Session Manager\AppCompatCache |
Shimcache 참고 | 시스템 전체 |
RunMRU NTUSER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU |
Win+R에 입력한 명령 | MRUList가 순서를 알려 줌 |
TypedPaths NTUSER\...\Explorer\TypedPaths |
탐색기 주소창에 입력한 경로 | |
WordWheelQuery NTUSER\...\Explorer\WordWheelQuery |
탐색기/시작 메뉴 검색창에 입력한 단어 | |
| PowerShell ConsoleHost_history (레지스트리 아님) | %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt |
PS 5.1+의 모든 대화형 PowerShell 명령 — 같은 시점에 찾게 되므로 여기 적어 둠 |
연 파일과 폴더 (사용자별)¶
| 키 | 기록하는 것 | 메모 |
|---|---|---|
RecentDocs NTUSER\...\Explorer\RecentDocs (+ 확장자별 하위 키) |
탐색기/공통 대화상자로 연 파일, 확장자별 | 키 LastWrite = 가장 최근 것; 나머지 순서는 MRUListEx. Recent\의 .lnk 파일과 짝지어 볼 것 |
OpenSavePidlMRU NTUSER\...\Explorer\ComDlg32\OpenSavePidlMRU\<ext> |
열기/저장 대화상자에서 고른 파일 (브라우저 다운로드 "다른 이름으로 저장", 첨부 파일) | |
LastVisitedPidlMRU NTUSER\...\Explorer\ComDlg32\LastVisitedPidlMRU |
열기/저장 대화상자를 어떤 실행 파일이 썼고 마지막으로 어느 폴더를 봤는지 | 프로그램 ↔ 폴더를 연결 |
ShellBags UsrClass\Local Settings\Software\Microsoft\Windows\Shell\BagMRU & Bags; NTUSER\Software\Microsoft\Windows\Shell\BagMRU에도 |
사용자가 탐색기에서 둘러본 폴더(로컬, 네트워크, 이동식, zip 내부)와 보기 설정, 당시 폴더의 MFT 참조 + 타임스탬프 | 폴더가 존재했고 열렸다는 증거 — 삭제됐거나 지금은 빠진 USB라도. SBECmd / ShellBags Explorer로 파싱 |
Office MRU NTUSER\Software\Microsoft\Office\<ver>\<App>\File MRU / Place MRU |
Word/Excel/PowerPoint에서 연 문서와 마지막으로 연 시각 | [F00000000][T01D9A…] — T = FILETIME 16진수 |
Office 신뢰할 수 있는 문서 NTUSER\Software\Microsoft\Office\<ver>\<App>\Security\Trusted Documents\TrustRecords |
사용자가 콘텐츠 사용 / 편집 사용을 누른 문서 | 악성 매크로 문서 → 이 키. 타임스탬프 = 신뢰를 준 시각 |
Reading Locations (Word) ...\Word\Reading Locations |
최근 연 문서의 마지막 위치와 날짜 | |
MountPoints2 NTUSER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 |
사용자가 접근한 볼륨 (USB GUID, 네트워크 공유 포함) | 장치를 사용자와 연결; USB 섹션 참고 |
Map Network Drive MRU NTUSER\...\Explorer\Map Network Drive MRU |
사용자가 매핑한 UNC 경로 |
USB와 이동식 장치 (시스템)¶
| 키 | 기록하는 것 |
|---|---|
SYSTEM\CurrentControlSet\Enum\USBSTOR\<Ven_Prod_Rev>\<SerialNo> |
제조사, 제품, 시리얼 번호 (두 번째 자리가 &이면 실제 시리얼이 아니라 Windows가 만든 ID). 하위 키 Properties\{83da6326-…}\0064 = 처음 설치, 0066 = 마지막 연결, 0067 = 마지막 제거 (Win8+) |
SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_xxxx\<Serial> |
VID/PID 기준의 같은 장치; Properties 타임스탬프는 위와 같음 |
SYSTEM\MountedDevices |
\DosDevices\E:와 \??\Volume{GUID} ↔ 시리얼이 들어 있는 장치 문자열 연결 |
SOFTWARE\Microsoft\Windows Portable Devices\Devices |
장치의 표시 이름 / 볼륨 레이블 |
SOFTWARE\Microsoft\Windows NT\CurrentVersion\EMDMgmt |
ReadyBoost — 볼륨 시리얼 번호 ↔ 장치 (구형 시스템, HDD) |
NTUSER\...\Explorer\MountPoints2\{Volume GUID} |
어느 사용자가 그 볼륨을 마운트했는지 (키 LastWrite = 그 사용자의 마지막 마운트) |
SYSTEM\CurrentControlSet\Enum\SWD\WPDBUSENUM |
휴대용 장치 (휴대폰, 카메라) |
| 그 외 (레지스트리 아님) | C:\Windows\inf\setupapi.dev.log — 처음 연결한 시각과 드라이버 설치 정보 |
자동 시작 / 지속성 (ASEP)¶
| 키 | 메모 |
|---|---|
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, RunOnce, RunOnceEx |
머신 전체, 누가 로그온하든 실행 |
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, RunOnce |
사용자별 |
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run |
64비트의 32비트 뷰 — 자주 잊힘 |
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run과 HKCU 버전 |
정책 기반 Run |
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon |
Shell (explorer.exe여야 함), Userinit (C:\Windows\system32\userinit.exe,여야 함), Notify |
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<exe> |
Debugger 값 → 하이재킹 (예: 고정 키 sethc.exe → cmd.exe); GlobalFlag + SilentProcessExit 조합 |
HKLM\SYSTEM\CurrentControlSet\Services\<name> |
ImagePath, Start (2 = 자동), Type, svchost 호스팅 서비스는 Parameters 아래 ServiceDll. 새 서비스 = System 7045 |
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs (+ LoadAppInit_DLLs) |
user32.dll을 로드하는 모든 프로세스에 DLL 주입 |
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute |
autocheck autochk *만 있어야 함 |
HKLM\SYSTEM\CurrentControlSet\Control\Lsa — Authentication Packages, Security Packages, Notification Packages |
SSP 주입 (Mimikatz memssp, 사용자 정의 비밀번호 필터) |
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree & Tasks\{GUID} |
예약 작업의 레지스트리 쪽; Actions blob에 명령이 있음. C:\Windows\System32\Tasks\* XML과 비교 — Tree에는 없고 Tasks에는 있는 작업은 숨긴 작업 |
HKLM\SOFTWARE\Classes\CLSID\{GUID}\InprocServer32와 HKCU\Software\Classes\CLSID\... |
COM 하이재킹 — HKCU가 HKLM보다 우선 |
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects, ShellExecuteHooks, ShellServiceObjectDelayLoad |
탐색기/IE 확장 지점 |
HKLM\SOFTWARE\Microsoft\Netsh |
Netsh 도우미 DLL |
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Font Drivers, Print\Monitors, Print\Providers |
드문 드라이버 수준 ASEP |
HKCU\Environment\UserInitMprLogonScript |
로그온 시 실행되는 로그온 스크립트 — 고전적이고 조용함 |
HKCU\Software\Microsoft\Command Processor\AutoRun (HKLM에도) |
cmd.exe가 시작될 때마다 실행 |
HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{GUID}\StubPath |
사용자당 로그온 시 한 번 실행 |
| 시작 프로그램 폴더 (레지스트리 아님) | %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup, %ProgramData%\Microsoft\Windows\Start Menu\Programs\StartUp |
Autoruns(autorunsc.exe -a * -c -h -s -v -zip)나 RegRipper의 autoruns 류 플러그인으로 이 모두를 한 번에 훑으세요. 오프라인 이미지라면 Autoruns의 File → Analyze Offline System으로 마운트한 시스템을 분석할 수 있습니다.
파싱¶
# Batch mode with the community "Kroll" batch file — hits most keys above in one go
RECmd.exe -d C:\Case\Registry --bn BatchExamples\Kroll_Batch.reb --csv C:\Case\out --nl
# Replay transaction logs into a clean hive first if the tool complains the hive is dirty
rla.exe -d C:\Case\Registry --out C:\Case\Registry\clean
GUI: Registry Explorer에는 이 페이지의 모든 키가 북마크로 들어 있고, 슬랙 공간에서 삭제된 키/값도 보여 줍니다.
rip.pl -r NTUSER.DAT -f ntuser > ntuser.txt
rip.pl -r UsrClass.dat -f usrclass > usrclass.txt
rip.pl -r SYSTEM -f system > system.txt
rip.pl -r SOFTWARE -f software > software.txt
rip.pl -r SAM -f sam > sam.txt
# single plugins
rip.pl -r NTUSER.DAT -p userassist
rip.pl -r SYSTEM -p bam
rip.pl -r SYSTEM -p usbstor
# Run keys, both hives, both views
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run'
# BAM last-executed per SID
Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Services\bam\State\UserSettings' | ForEach-Object {
$sid=$_.PSChildName; Get-ItemProperty $_.PSPath | Select-Object -Property * -ExcludeProperty PS* |
ForEach-Object { $_.PSObject.Properties | Where-Object { $_.Value -is [byte[]] } |
ForEach-Object { [pscustomobject]@{SID=$sid; Path=$_.Name; Last=[DateTime]::FromFileTimeUtc([BitConverter]::ToInt64($_.Value,0))} } } }
분석 팁¶
모든 키에는 LastWrite 시각이 있습니다 — 활용하세요
타임스탬프 값이 따로 없는 키(MUICache, RecentDocs 하위 키, USBSTOR)도 키가 마지막으로 바뀐 시각은 알려 줍니다. MRU 형태의 키라면 그것이 가장 최근 항목의 시각입니다.
- 시간대부터. 레지스트리 FILETIME은 UTC, 이벤트 로그도 UTC,
$SI타임스탬프도 UTC이지만 사용자가 보는 시간과 많은 애플리케이션 로그는 로컬 시간입니다. 무엇보다 먼저TimeZoneInformation을 확인하세요. - 삭제된 키도 복구됩니다. Registry Explorer와
yarp/regipy는 할당되지 않은 셀을 카빙할 수 있어서, 삭제된 Run 값과 서비스가 살아남는 경우가 많습니다. - COM은 HKCU가 HKLM을 이깁니다.
HKCU\Software\Classes아래 CLSID는 머신 쪽 설정을 조용히 덮어씁니다 — 사용자가 쓸 수 있는 경로를 가리키는InprocServer32값을 찾으세요. - 더티 하이브. 라이브 상태에서 이미징했다면
.LOG1/.LOG2를 적용(rla.exe)하지 않으면 마지막 몇 분의 활동을 놓칠 수 있습니다 — 바로 그때 지속성이 설치되는 경우가 많습니다.