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 ``` ## 技术架构 ![DFR 生态系统工作流](https://raw.githubusercontent.com/azeus7/Ransomware-Research-and-Incident-Response-Mechanisms/main/docs/workflow.png) 该生态系统由三个运行独立但相互依赖的 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运维, 勒索软件防御, 数字取证, 自动化脚本, 证据保全