Extracts and analyzes Windows registry hives from forensic images to uncover user activity, installed software, autostarts, USB devices, and intrusion evidence using RegRipper and python-registry.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 在事件期间调查 Windows 系统上的用户活动时
Extracts and analyzes Windows Registry hives with RegRipper to uncover user activity, installed software, autostarts, and compromise evidence in forensic investigations.
Extracts and analyzes Windows Registry hives from forensic images using RegRipper to uncover user activity, installed software, autostarts, and compromise indicators.
Conducts disk forensics investigations using forensic imaging, filesystem analysis, artifact recovery, and timeline reconstruction with FTK Imager, Autopsy, and The Sleuth Kit for incident response cases.
Share bugs, ideas, or general feedback.
# 以只读方式挂载取证镜像
mkdir /mnt/evidence
mount -o ro,loop,offset=$((2048*512)) /cases/case-2024-001/images/evidence.dd /mnt/evidence
# 复制系统注册表配置单元
cp /mnt/evidence/Windows/System32/config/SAM /cases/case-2024-001/registry/
cp /mnt/evidence/Windows/System32/config/SYSTEM /cases/case-2024-001/registry/
cp /mnt/evidence/Windows/System32/config/SOFTWARE /cases/case-2024-001/registry/
cp /mnt/evidence/Windows/System32/config/SECURITY /cases/case-2024-001/registry/
cp /mnt/evidence/Windows/System32/config/DEFAULT /cases/case-2024-001/registry/
# 复制用户特定配置单元
cp /mnt/evidence/Users/*/NTUSER.DAT /cases/case-2024-001/registry/
cp /mnt/evidence/Users/*/AppData/Local/Microsoft/Windows/UsrClass.dat /cases/case-2024-001/registry/
# 复制事务日志(用于脏配置单元恢复)
cp /mnt/evidence/Windows/System32/config/*.LOG* /cases/case-2024-001/registry/logs/
# 对所有提取的配置单元进行哈希
sha256sum /cases/case-2024-001/registry/* > /cases/case-2024-001/registry/hive_hashes.txt
# 安装 RegRipper
git clone https://github.com/keydet89/RegRipper3.0.git /opt/regripper
# 对 NTUSER.DAT(用户配置文件)运行 RegRipper
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-f ntuser > /cases/case-2024-001/analysis/ntuser_report.txt
# 对 SYSTEM 配置单元运行
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-f system > /cases/case-2024-001/analysis/system_report.txt
# 对 SOFTWARE 配置单元运行
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SOFTWARE \
-f software > /cases/case-2024-001/analysis/software_report.txt
# 对 SAM 配置单元(用户账户)运行
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SAM \
-f sam > /cases/case-2024-001/analysis/sam_report.txt
# 运行特定插件
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p userassist > /cases/case-2024-001/analysis/userassist.txt
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p usbstor > /cases/case-2024-001/analysis/usbstor.txt
# 使用 python-registry 进行有针对性的提取
pip install python-registry
python3 << 'PYEOF'
from Registry import Registry
# 打开 SOFTWARE 配置单元
reg = Registry.Registry("/cases/case-2024-001/registry/SOFTWARE")
# 检查 Run 键(自启动)
autorun_paths = [
"Microsoft\\Windows\\CurrentVersion\\Run",
"Microsoft\\Windows\\CurrentVersion\\RunOnce",
"Microsoft\\Windows\\CurrentVersion\\RunServices",
"Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run",
"Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run"
]
for path in autorun_paths:
try:
key = reg.open(path)
print(f"\n=== {path} (Last Modified: {key.timestamp()}) ===")
for value in key.values():
print(f" {value.name()}: {value.value()}")
except Registry.RegistryKeyNotFoundException:
pass
# 检查已安装的服务
key = reg.open("Microsoft\\Windows NT\\CurrentVersion\\Svchost")
print(f"\n=== Svchost Groups ===")
for value in key.values():
print(f" {value.name()}: {value.value()}")
PYEOF
# 检查 NTUSER.DAT 中的用户特定自启动
python3 << 'PYEOF'
from Registry import Registry
reg = Registry.Registry("/cases/case-2024-001/registry/NTUSER.DAT")
user_autorun = [
"Software\\Microsoft\\Windows\\CurrentVersion\\Run",
"Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce",
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApproved\\Run"
]
for path in user_autorun:
try:
key = reg.open(path)
print(f"\n=== {path} (Last Modified: {key.timestamp()}) ===")
for value in key.values():
print(f" {value.name()}: {value.value()}")
except Registry.RegistryKeyNotFoundException:
pass
PYEOF
# 提取 UserAssist 数据(使用 ROT13 编码的程序执行历史)
python3 << 'PYEOF'
from Registry import Registry
import codecs, struct, datetime
reg = Registry.Registry("/cases/case-2024-001/registry/NTUSER.DAT")
ua_path = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\UserAssist"
key = reg.open(ua_path)
for guid_key in key.subkeys():
count_key = guid_key.subkey("Count")
print(f"\n=== {guid_key.name()} ===")
for value in count_key.values():
decoded_name = codecs.decode(value.name(), 'rot_13')
data = value.value()
if len(data) >= 16:
run_count = struct.unpack('<I', data[4:8])[0]
focus_count = struct.unpack('<I', data[8:12])[0]
timestamp = struct.unpack('<Q', data[60:68])[0] if len(data) >= 68 else 0
if timestamp > 0:
ts = datetime.datetime(1601,1,1) + datetime.timedelta(microseconds=timestamp//10)
print(f" {decoded_name}: Runs={run_count}, Focus={focus_count}, Last={ts}")
else:
print(f" {decoded_name}: Runs={run_count}, Focus={focus_count}")
PYEOF
# 提取最近文档(MRU 列表)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p recentdocs > /cases/case-2024-001/analysis/recentdocs.txt
# 提取已输入的 URL(浏览器)
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p typedurls > /cases/case-2024-001/analysis/typedurls.txt
# 提取资源管理器中的已输入路径
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/NTUSER.DAT \
-p typedpaths > /cases/case-2024-001/analysis/typedpaths.txt
# 从 SYSTEM 配置单元获取计算机名和操作系统版本
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p compname > /cases/case-2024-001/analysis/system_info.txt
# 网络接口和配置
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p nic2 >> /cases/case-2024-001/analysis/system_info.txt
# 无线网络历史
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SOFTWARE \
-p networklist > /cases/case-2024-001/analysis/network_history.txt
# 时区配置
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p timezone > /cases/case-2024-001/analysis/timezone.txt
# 关机时间
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SYSTEM \
-p shutdown > /cases/case-2024-001/analysis/shutdown.txt
# 从 Uninstall 键提取已安装软件
perl /opt/regripper/rip.pl -r /cases/case-2024-001/registry/SOFTWARE \
-p uninstall > /cases/case-2024-001/analysis/installed_software.txt
| 概念 | 描述 |
|---|---|
| 注册表配置单元(Registry hive) | 存储注册表某一部分的二进制文件(SAM、SYSTEM、SOFTWARE、NTUSER.DAT) |
| MRU(Most Recently Used,最近使用) | 跟踪最近访问的文件、命令和搜索词的列表 |
| UserAssist | 使用 ROT13 编码记录带时间戳的程序执行的注册表条目 |
| ShimCache | 记录已执行程序的应用程序兼容性缓存 |
| AmCache | 详细的执行历史,包含可执行文件的 SHA-1 哈希 |
| BAM/DAM | 在 Windows 10+ 中追踪程序执行的后台/桌面活动调节器 |
| 最后写入时间(Last Write Time) | 注册表键上的时间戳,表明上次修改时间 |
| 事务日志(Transaction logs) | 允许在异常关机后恢复注册表状态的日志文件 |
| 工具 | 用途 |
|---|---|
| RegRipper | 使用插件架构自动提取注册表取证痕迹 |
| Registry Explorer | Eric Zimmerman 用于交互式注册表分析的 GUI 工具 |
| python-registry | 用于编程化注册表配置单元解析的 Python 库 |
| RECmd | Eric Zimmerman 命令行注册表分析工具 |
| yarp | 用于 Python 分析的另一种注册表解析器 |
| AppCompatCacheParser | 专用 ShimCache/AppCompatCache 解析器 |
| AmcacheParser | 专用 AmCache.hve 分析工具 |
| ShellBags Explorer | 用于分析 ShellBag 取证痕迹的专用工具 |
场景 1:恶意软件持久化调查 提取 SOFTWARE 和 NTUSER.DAT 配置单元,检查所有 Run/RunOnce 键中的未授权条目,检查服务中的可疑添加,检查计划任务注册表键,将自启动时间戳与恶意软件执行时间线关联。
场景 2:用户活动重建 分析 UserAssist 获取程序执行历史,检查 RecentDocs 获取已访问文件,检查 TypedPaths 获取资源管理器导航记录,提取 ShellBag 获取文件夹访问模式,围绕事件窗口构建用户活动时间线。
场景 3:未授权软件检测 解析 Uninstall 键获取所有已安装应用程序,与批准的软件基线比较,检查 BAM/DAM 获取批准列表之外最近执行的程序,检查 AppCompatCache 获取即使在卸载后也有的执行证据。
场景 4:USB 数据外泄调查 从 SYSTEM 配置单元提取 USBSTOR 条目获取已连接设备,将设备序列号与 MountedDevices 关联,检查 NTUSER.DAT MountPoints2 获取用户访问可移动介质的记录,检查 SetupAPI 日志获取首次连接时间戳。
Registry Analysis Summary:
System: DESKTOP-ABC123 (Windows 10 Pro Build 19041)
Timezone: Eastern Standard Time (UTC-5)
Last Shutdown: 2024-01-18 23:45:12 UTC
Autorun Entries:
HKLM Run: 5 entries (1 suspicious: "updater.exe" -> C:\ProgramData\svc\updater.exe)
HKCU Run: 3 entries (all legitimate)
Services: 142 entries (2 unknown: "WinDefSvc", "SysMonAgent")
User Activity (NTUSER.DAT):
UserAssist Programs: 234 entries
Recent Documents: 89 entries
Typed URLs: 45 entries
Typed Paths: 12 entries
USB Devices Connected:
- Kingston DataTraveler (Serial: 0019E06B4521) - First: 2024-01-10, Last: 2024-01-18
- WD My Passport (Serial: 575834314131) - First: 2024-01-15, Last: 2024-01-15
Installed Software: 127 applications
Suspicious Findings: 3 items flagged for review