azeus7/Ransomware-Research-and-Incident-Response-Mechanisms
GitHub: azeus7/Ransomware-Research-and-Incident-Response-Mechanisms
该项目构建了一个三阶段全自动的数字取证就绪生态系统,通过主动证据保全、行为蜜罐检测和实时内存取证锁定,专门防御企业 Windows 终端上的勒索软件攻击。
Stars: 0 | Forks: 0
# 🛡️ 数字取证就绪 (DFR) 生态系统 — 勒索软件防御与证据保全框架
**作者:** - Levan Tamazashvili Alexandra Ananskikh
**目标环境:** Windows 企业网络(加入域的终端)
**核心技术栈:** PowerShell 5.1+, WMI, NTFS Raw I/O, RawCopy, DumpIt
**许可证:** MIT(非商业用途)
## 执行摘要
**数字取证就绪 (DFR)** 是一种组织和技术能力,旨在*在*安全事件发生*之前*,最大化利用从企业终端收集的数字证据——确保在检测到攻击时,调查和起诉所需的取证 artifact 已经得到保全、防篡改,并可立即投入使用。
本项目实现了一个三阶段、全自动的 DFR 生态系统,专为对抗勒索软件(当今影响企业最严重的网络犯罪类别)而设计。该框架在内核级别静默运行,无需终端用户交互:它会在系统空闲期间主动收集具有关键取证价值的 NTFS 结构和 Registry 配置单元,部署行为蜜罐以在执行的最早期检测勒索软件,并在确认检测后,执行实时 RAM 镜像捕获,随后进行内核级证据锁定,以防止恶意软件破坏或销毁其自身的取证痕迹。
最终成果是一个可复现、可由系统管理员部署的蓝图,填补了传统被动事件响应中固有的证据收集空缺,使得安全团队能够向法庭和威胁情报平台提供完整、经过 hash 校验的取证监管链——即使在勒索软件成功加密生产数据的情况下也是如此。
## 仓库结构
```
dfr-ecosystem/
│
├── scripts/
│ ├── Script_N1_Proactive_Triage.ps1 # Periodic NTFS artifact harvesting
│ ├── Script_N2_Honeypot_Detection.ps1 # WMI + FSW behavioral detection
│ └── Script_N3_Live_Containment.ps1 # RAM imaging + kernel evidence lock
│
├── docs/
│ ├── workflow.png # End-to-end DFR workflow diagram
│ ├── architecture_overview.png # Component interaction map
│ ├── honeypot_alert_output.png # Sample CLI detection output
│ └── ram_capture_output.png # DumpIt execution screenshot
│
├── playbooks/
│ ├── IR_Playbook_Ransomware.md # Step-by-step IR playbook
│ └── Evidence_Chain_of_Custody.md # Legal chain-of-custody template
│
├── config/
│ └── dfr_config.psd1 # Centralized configuration manifest
│
├── SECURITY.md # Full security disclosure & lab requirements
├── README.md # This document
└── LICENSE
```
## 技术架构

该生态系统由三个运行独立但相互依赖的 PowerShell 自动化模块组成。每个脚本都针对 PICERL 事件响应生命周期的特定阶段。
### 组件概述
| 脚本 | 阶段 | 触发器 | 主要功能 |
|---|---|---|---|
| `Script_N1` — 主动分流 | **准备** | 任务计划程序 (空闲时) | 通过内核级 raw I/O 提取被锁定的 NTFS artifact;复制到仅追加服务器 |
| `Script_N2` — 蜜罐与检测 | **识别** | 持续 (WMI + FSW) | 行为欺骗陷阱;确认检测到勒索软件时生成 `trigger.flag` |
| `Script_N3` — 实时控制 | **控制** | 事件驱动 (标志轮询) | 通过 DumpIt 获取易失性 RAM 镜像;对转储文件应用 `FileShare::None` 内核锁 |
### 脚本 N1 — 主动分流 (事件发生前的 Artifact 收集)
**目标:** 获取在实时系统运行期间通常被 Windows 内核锁定的、具有关键取证价值的 NTFS 结构。
**方法:**
- 利用 **RawCopy**(低级别原始磁盘读取器)绕过 NTFS 内核锁并提取:
- `$MFT` — 主文件表(完整的文件系统元数据映射)
- `SYSTEM`, `SOFTWARE`, `SAM`, `SECURITY` — Registry 配置单元
- `$LogFile`, `$UsnJrnl:$J` — NTFS 日志文件(文件操作历史记录)
- 专门在**系统空闲时间**(CPU < 阈值)执行,以最大程度减少对用户的影响。
- 使用仅写入服务账户,将所有 artifact 复制到安全服务器上**强化的、仅追加的 NFS/SMB 共享**中——防止勒索软件覆盖之前的捕获记录。
- 在收集时为每个捕获的 artifact 计算并记录 **SHA-256 hash**。
```
# 概念提取流程 (Script N1)
$artifacts = @("\\.\C:\`$MFT", "\\.\C:\Windows\System32\config\SYSTEM")
foreach ($artifact in $artifacts) {
& RawCopy.exe /FileNamePath:$artifact /OutputPath:$SecureShare
$hash = (Get-FileHash "$SecureShare\$(Split-Path $artifact -Leaf)" -Algorithm SHA256).Hash
Add-Content $HashLog "$hash $(Split-Path $artifact -Leaf) $(Get-Date -Format o)"
}
---
### Script N2 — Desktop Honeypot 与检测引擎
**Objective:** Detect ransomware at the earliest possible point of execution — before significant file encryption occurs — using behavioral deception.
**Method:**
- Creates a set of **canary files** (honeypot decoys) with high-entropy names and extensions commonly targeted by known ransomware strains, placed in high-probability attack directories.
- Registers a **WMI `__InstanceCreationEvent`** subscriber to monitor process instantiation for known ransomware behavioral signatures.
- Deploys a **.NET `FileSystemWatcher`** on the honeypot directory to detect any unauthorized read, write, rename, or delete event against the canary files.
- Upon confirmed detection, the script:
1. Fires a **real-time alert** (Event Log entry + optional SIEM webhook).
2. Writes a `trigger.flag` file to the append-only secure server, which is continuously polled by Script N3.
```powershell
# 概念性 FSW 监控 (Script N2)
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $HoneypotDirectory
$watcher.EnableRaisingEvents = $true
Register-ObjectEvent $watcher "Changed" -Action {
Write-EventLog -LogName Security -Source "DFR-Honeypot" -EventId 9001 -EntryType Warning -Message "RANSOMWARE DETECTED: $($Event.SourceEventArgs.FullPath)"
New-Item -Path "$SecureShare\trigger.flag" -ItemType File -Force
}
```
### 脚本 N3 — 实时控制与证据锁定
**目标:** 在确认存在勒索软件的瞬间,捕获受感染终端的完整易失性内存状态,并在内核级别使取证 artifact 变为不可变。
**方法:**
- 以可配置的间隔(默认:30 秒)轮询安全服务器是否存在 `trigger.flag`。
- 检测到标志后,立即调用 **DumpIt** 将完整的物理内存获取到安全共享中,捕获:
- 活动进程列表和内存映射
- 网络套接字状态
- 勒索软件进程可能保存在 RAM 中的加密密钥
- 完整的内核和用户模式内存页
- DumpIt 完成后,使用 .NET `FileStream` 并设置 `FileShare::None` 打开生成的 `.raw` 文件——这是一种内核级的独占锁,可防止任何其他进程(包括勒索软件本身)打开、读取、修改或删除转储文件。
- 记录内存转储的最终 **SHA-256 hash**,用于监管链文档记录。
```
# 概念性内核锁 (Script N3)
& DumpIt.exe /output "$SecureShare\memdump_$env:COMPUTERNAME_$(Get-Date -Format yyyyMMddHHmmss).raw"
$dumpPath = Get-ChildItem "$SecureShare\memdump_*.raw" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
$stream = [System.IO.File]::Open($dumpPath.FullName, [System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)
# $stream 保持打开状态 — 内核锁将持续存在,直到 IR 团队将其释放
```
## 实施指南
### 前置条件
在部署之前,请确认所有节点均已满足以下要求。
**终端要求(加入 Windows 域的工作站/服务器):**
| 要求 | 规格 |
|---|---|
| 操作系统 | Windows 10 / Server 2016 或更高版本 |
| PowerShell | 版本 5.1 或更高版本 |
| 执行策略 | `RemoteSigned` 或 `Bypass` (通过 GPO 强制执行) |
| 权限 | 本地管理员 (脚本 N1, N3);域用户 (脚本 N2) |
| RawCopy | 部署到 `C:\DFR\tools\RawCopy.exe` |
| DumpIt | 部署到 `C:\DFR\tools\DumpIt.exe` |
| .NET Framework | 4.7.2 或更高版本 |
**安全服务器要求:**
| 要求 | 规格 |
|---|---|
| 操作系统 | Windows Server 2019+ 或强化的 Linux (Samba) |
| 共享协议 | SMB 3.1.1(传输中加密) |
| 服务账户 | 仅写入,无删除/修改权限 (通过 ACL 强制执行) |
| 存储 | 至少为每日快照大小的 2 倍;首选支持 WORM 的存储 |
| 网络隔离 | 可从终端访问;无出站互联网连接 |
**工具下载:**
- RawCopy: [https://github.com/jschicht/RawCopy](https://github.com/jschicht/RawCopy)
- DumpIt: [https://www.magnetforensics.com/resources/magnet-dumpit-for-windows/](https://www.magnetforensics.com/resources/magnet-dumpit-for-windows/)
**SOC 操作手册**
### 步骤 1 — 服务器端设置:仅追加存储
必须对安全服务器进行配置,使终端能够**写入和创建** artifact,但**不能修改或删除**之前写入的文件。这是整个 DFR 生态系统的基础完整性控制措施。
```
# 在 Secure Server 上运行 (管理员)
# 1. 创建 DFR 共享目录
New-Item -Path "D:\DFR_Evidence" -ItemType Directory
# 2. 创建一个专用的只写服务账户
New-LocalUser -Name "dfr_writer" -Password (ConvertTo-SecureString "P@ssw0rd!DFR" -AsPlainText -Force) -PasswordNeverExpires $true
# 3. 设置 NTFS ACL: dfr_writer 可以 Create Files/Write Data,但不能 Delete 或 Modify
$acl = Get-Acl "D:\DFR_Evidence"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
"dfr_writer",
"CreateFiles, AppendData, WriteExtendedAttributes, WriteAttributes",
"ContainerInherit, ObjectInherit",
"None",
"Allow"
)
$acl.SetAccessRule($rule)
Set-Acl "D:\DFR_Evidence" $acl
# 4. 共享该文件夹
New-SmbShare -Name "DFR_Secure" -Path "D:\DFR_Evidence" -FullAccess "Administrators" -ChangeAccess "dfr_writer"
```
### 步骤 2 — 终端配置
**2a. 部署工具二进制文件**
```
# 通过 GPO 启动脚本或 SCCM 部署运行
New-Item -Path "C:\DFR\tools" -ItemType Directory -Force
Copy-Item "\\DomainSysvol\DFR\RawCopy.exe" -Destination "C:\DFR\tools\"
Copy-Item "\\DomainSysvol\DFR\DumpIt.exe" -Destination "C:\DFR\tools\"
Copy-Item "\\DomainSysvol\DFR\scripts\*" -Destination "C:\DFR\scripts\"
```
**2b. 配置核心设置 (`config\dfr_config.psd1`)**
```
@{
SecureShare = "\\SECURE-SRV\DFR_Secure"
ServiceAccount = "DOMAIN\dfr_writer"
HashLogPath = "\\SECURE-SRV\DFR_Secure\hash_manifest.log"
HoneypotDir = "C:\DFR\honeypot"
IdleCpuThreshold = 10 # Percent — N1 runs only below this
FlagPollInterval = 30 # Seconds — N3 polling rate
DumpItPath = "C:\DFR\tools\DumpIt.exe"
RawCopyPath = "C:\DFR\tools\RawCopy.exe"
}
```
### 步骤 3 — 任务计划程序集成
所有三个脚本均注册为 Windows 计划任务。脚本 N2 和 N3 作为持久后台服务运行;脚本 N1 在空闲时触发运行。
**注册脚本 N1(主动分流 — 空闲触发器):**
```
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NonInteractive -ExecutionPolicy Bypass -File C:\DFR\scripts\Script_N1_Proactive_Triage.ps1"
$trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Hours 6) -Once -At (Get-Date)
$settings = New-ScheduledTaskSettingsSet -RunOnlyIfIdle -IdleDuration (New-TimeSpan -Minutes 10) -IdleWaitTimeout (New-TimeSpan -Hours 1)
Register-ScheduledTask -TaskName "DFR-ProactiveTriage" -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -User "SYSTEM"
```
**注册脚本 N2(蜜罐 — 登录时启动,持久运行):**
```
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File C:\DFR\scripts\Script_N2_Honeypot_Detection.ps1"
$trigger = New-ScheduledTaskTrigger -AtLogOn
Register-ScheduledTask -TaskName "DFR-HoneypotMonitor" -Action $action -Trigger $trigger -RunLevel Highest -User "SYSTEM"
```
**注册脚本 N3(控制 — 启动时运行,标志轮询):**
```
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File C:\DFR\scripts\Script_N3_Live_Containment.ps1"
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName "DFR-LiveContainment" -Action $action -Trigger $trigger -RunLevel Highest -User "SYSTEM"
```
### 步骤 4 — 验证与测试
**测试 1:验证 N1 Artifact 提取**
```
# 手动触发 N1 并确认 artifacts 和 hashes 出现在安全共享上
& "C:\DFR\scripts\Script_N1_Proactive_Triage.ps1" -Force
# 验证 artifacts 存在
Get-ChildItem "\\SECURE-SRV\DFR_Secure\" | Where-Object { $_.Name -match "MFT|SYSTEM|SAM" }
# 验证 hash 日志已写入
Get-Content "\\SECURE-SRV\DFR_Secure\hash_manifest.log" | Select-Object -Last 10
```
**测试 2:触发蜜罐(模拟勒索软件)**
```
# 模拟针对 canary 文件的勒索软件写入事件
$canaryFile = Get-ChildItem "C:\DFR\honeypot\" | Select-Object -First 1
Rename-Item $canaryFile.FullName "$($canaryFile.FullName).encrypted"
# 确认 trigger.flag 已在安全服务器上创建
Test-Path "\\SECURE-SRV\DFR_Secure\trigger.flag" # Expected: True
# 确认 Security Event Log 条目
Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 9001 } | Select-Object -First 1
```
**测试 3:确认 N3 RAM 镜像捕获与内核锁**
```
# 确认在触发后已创建 .raw dump 文件
Get-ChildItem "\\SECURE-SRV\DFR_Secure\" -Filter "memdump_*.raw"
# 尝试打开/删除 dump (应该会失败 — 内核锁已激活)
Remove-Item "\\SECURE-SRV\DFR_Secure\memdump_*.raw" -ErrorAction SilentlyContinue
# 预期输出: "Access to the path is denied" — 锁已确认
```
## 取证完整性与监管链
该框架的证据价值完全取决于**加密完整性验证**。DFR 生态系统捕获的每个 artifact 在获取时都会使用 **SHA-256** 进行 hash 计算,并带有 UTC ISO-8601 时间戳记录到仅追加清单中。
### Hash 清单格式
```
# DFR Hash Manifest — 自动生成。请勿修改。
# 格式: SHA256_HASH FILENAME ACQUISITION_TIMESTAMP(UTC)
A3F1C9... $MFT_2025-06-17T03:00:01Z 2025-06-17T03:00:04.112Z
8B2D4E... SYSTEM_HIVE_2025-06-17T03:00:01Z 2025-06-17T03:00:05.334Z
C7A0F2... memdump_WORKSTATION01_20250617.raw 2025-06-17T07:42:18.891Z
```
### 完整性验证(事件发生后)
```
# IR 团队在分析前验证 artifact 完整性
$manifest = Import-Csv "\\SECURE-SRV\DFR_Secure\hash_manifest.log" -Delimiter "`t" -Header "Hash","File","Timestamp"
foreach ($entry in $manifest) {
$filePath = "\\SECURE-SRV\DFR_Secure\$($entry.File)"
$currentHash = (Get-FileHash $filePath -Algorithm SHA256).Hash
if ($currentHash -ne $entry.Hash) {
Write-Warning "INTEGRITY FAILURE: $($entry.File) — artifact may be tampered."
} else {
Write-Host "[VERIFIED] $($entry.File)" -ForegroundColor Green
}
}
```
### 取证可靠性的重要性
| 控制措施 | 机制 | 取证价值 |
|---|---|---|
| 仅追加共享 | ACL 仅允许写入-创建;禁止删除/修改 | 防止勒索软件或内部威胁销毁证据 |
| SHA-256 Hashing | 获取时进行,记录到不可变清单中 | 在法律诉讼中证明 artifact 的真实性 |
| `FileShare::None` 锁定 | .NET 内核独占句柄 | 确保内存转储在捕获后无法被打开或更改 |
| 空闲时获取 | CPU 阈值控制 | 最大限度地减少因获取操作引起 I/O 而造成的取证污染 |
| RawCopy 提取 | 绕过 NTFS 内核锁 | 捕获处于实时、未修改状态的 `$MFT` 和配置单元 |
## 事件响应操作手册参考
如需查看旨在与该框架配合使用的、基于场景的完整 IR 操作手册,请参阅 [`playbooks/IR_Playbook_Ransomware.md`](./playbooks/IR_Playbook_Ransomware.md)。
如需查看符合 ISO/IEC 27037 和 ACPO 良好实践指南标准的监管链文档模板,请参阅 [`playbooks/Evidence_Chain_of_Custody.md`](./playbooks/Evidence_Chain_of_Custody.md)。
## 限制与已知约束
| 约束 | 详情 |
|---|---|
| **内核锁持久性** | N3 持有的 `FileShare::None` 流会在进程终止或系统重启时释放。请确保 N3 以 SYSTEM 身份运行,并配置了“失败后重启”策略。 |
| **RawCopy 权限要求** | `$MFT` 提取需要本地管理员或 `SeBackupPrivilege` 权限。请通过 GPO 强制执行此要求。 |
| **DumpIt 32/64 位匹配** | 请使用与终端操作系统架构相匹配的 DumpIt 二进制文件。不匹配会导致转储不完整。 |
| **蜜罐规避** | 能够枚举金丝雀文件签名的高级勒索软件变体可能会逃避检测。请定期随机更改蜜罐文件的名称和扩展名。 |
| **大内存终端** | 内存超过 64 GB 的终端将生成相应大小的转储文件。请预先配置充足的存储空间并监控共享容量。 |
## 参考文献
- ACPO 数字证据良好实践指南 (v5)
- NIST SP 800-86:将取证技术整合到事件响应中的指南
- ISO/IEC 27037:2012 — 识别、收集、获取和保全数字证据的指南
- Carrier, B. (2005). *文件系统取证分析*. Addison-Wesley.
- Microsoft Docs: [FileSystemWatcher Class](https://docs.microsoft.com/en-us/dotnet/api/system.io.filesystemwatcher)
- Microsoft Docs: [WMI Event Subscriptions](https://docs.microsoft.com/en-us/windows/win32/wmisdk/receiving-a-wmi-event)
标签:AI合规, IPv6, Libemu, PowerShell, Windows运维, 勒索软件防御, 数字取证, 自动化脚本, 证据保全