一、概述
离线镜像是主战场,但有一类案子没有关机的那一刻:服务器还在跑、勒索还在加密、业务还在被入侵者登录。
此时任何关机动作都会永久销毁正在发生的犯罪现场——内存中的凭据、已解密的数据、正在运行的恶意进程。
于是产生了在线取证这个两难命题:
| 诉求 |
冲突 |
| 保住现场 |
需要立即采集,尤其内存 |
| 不破坏现场 |
登录、读文件、跑命令本身就是破坏 |
关键认知:在线取证不存在"零影响"操作。你每敲一条命令,目标主机就多一条日志、一次登录记录、一个被更新的 atime。本篇要处理的问题是:
如何让每一处不可避免的痕迹都可解释、可归因、可在报告中明确定位。
这决定了本篇的写作取向:它不是一份"在线取证操作手册",而是一份**"哪些痕迹是我造成的,怎么说清楚"的方法论**。技术命令在第三章,但那只是骨架;真正决定结论能不能被采信的是第四章。
本篇处理的证据形态(按易失程度排序,这个顺序就是采集顺序):
| 证据 |
位置 |
采集窗口 |
手段 |
| 物理内存 |
RAM |
秒级(断电即失) |
WinPmem / LiME / AVML;或 AFU、USB/PCIe 直连采集器 |
| 页面文件 |
pagefile.sys / swapfile.sys |
分钟级 |
与内存镜像同期导出 |
| 运行中进程与网络连接 |
进程表、连接表、监听端口 |
秒级 |
Get-CimInstance / Get-NetTCPConnection / ss |
| 易失日志 |
事件日志、journalctl、Sysmon |
小时级 |
导出 .evtx / 文本 |
| 临时目录与回收站 |
各类临时路径 |
分钟级 |
归档导出 |
| 远程接入通道自身的日志 |
RDP 客户端日志、OpenSSH/Operational、WinRM 活动 |
天级 |
既是痕迹也是证据 |
最后一行值得特别说明:你选择什么通道接入,就在目标机上留下了什么日志。RDP 会产生 4624 类型 10 的登录事件、SSH 相对最干净、WinRM 留痕最多,而商用远控工具留下的痕迹是黑盒——法庭上很难解释"这次连接是不是勘验行为"。通道选择不是技术偏好,是证据能力的选择。
还有一种痕迹几乎所有人都会漏:若你用共享的管理员凭据登录,会更新域控上的 lastLogonTimestamp、触发 Kerberos 票据签发,并留下"有人正在使用这台机器"这个事实——而这本身可能触发攻击者的自毁逻辑或反取证行为。
一条登录动作改变了现场的状态,而现场还在被对方控制。
本篇的操作主链是七步,顺序本身就是纪律:
| 步骤 |
动作 |
关键约束 |
| 1 |
前置准备与授权留痕 |
书面授权先于任何连接 |
| 2 |
先观察,后操作 |
不登录就拿不到的先想清楚;能观察就不要动手 |
| 3 |
优先采内存 |
采集窗口以秒计,这一步永远排第一 |
| 4 |
抽取易失日志 |
事件日志、journal、系统状态 |
| 5 |
远程录屏与命令留痕 |
每条命令都要有可回溯的记录 |
| 6 |
在线检查项清单 |
按"只读、低扰动、可解释"排序逐项执行 |
| 7 |
收工、验证与归档 |
校验所有导出文件、记录目标机最终状态 |
第 2 步"先观察、后操作"是本篇最有价值的一条经验:很多信息在你登录之前通过委托方配合就能拿到(比如让对方管理员导出日志、提供带外访问方式),而不需要你亲手在目标机上留下痕迹。能用带外方式拿到的,就不要登录进去拿。
在取证流程中的位置:本篇是采集环节的一条并行路径,与镜像制作平级。上游是授权与接入准备(远程通道怎么开、委托方配合义务、以及跨境取证的司法边界),见合规授权与法律边界与证据保管链与委托证明。下游是内存分析,本篇的操作直接产出 DigiForensics-mem.raw,分析入口见内存取证总览与内存采集方法;网络连接侧的分析见网络连接与流量痕迹。最终还要回到离线镜像做文件系统与元数据分析——在线不能替代离线,本篇的结论只能作为补充,两类证据必须分节陈述。
系统当前有哪些进程、父子关系是什么、有哪些网络连接与监听端口、有哪些计划任务与自启动项、此刻在场的登录会话是谁、内存里有什么(已解密凭据、注入代码、明文数据)、以及远程接入者在本次勘验之前做过什么。
在线证据无法证明"未发生的行为"。你只能证明"此刻是这个状态",不能证明"某件事没发生过"——系统在全程在线运行,攻击者可以随时删除证据再重建。
其次,在线采集的完整性无法验证(没有可复算的原始态哈希),可重复性也差(状态已改变,不能重来)。这两条限制必须在报告里明写,否则整个在线部分会在质证环节被整体推翻。
读者前提:你需要先掌握远程接入的操作能力(SSH / RDP / WinRM 至少一种)、命令执行的证据留痕习惯(录屏、命令日志、每条操作的时间戳),以及最关键的一条——清楚"只读"指的是"不改变被取证对象的状态语义",而不是"零副作用"。内存采集的具体工具与完整性验证见内存采集方法。如果你还没拿到书面授权,本篇第三章不应该开始执行。
二、核心原理
2.1 远程操作会改变什么
远程接入后,以下变化会在秒级内发生且多数不可撤回:
| 痕迹 |
产生方式 |
对取证的影响 |
| 登录事件 |
RDP/SSH/WinRM 会话建立 |
4624/4625 事件、登录类型 10 |
| 会话与授权 |
LogonSession、Kerberos TGT 签发 |
新增的域凭据使用记录 |
文件 atime |
读取文件即更新访问时间(NTFS 默认延迟更新) |
破坏"最后访问时间"证据 |
| 内存转储 |
写文件会分配页、污染空闲列表 |
内存布局变化、部分内存残留 |
| 远程工具留痕 |
服务、计划任务、注册表 Run |
新增"非原始"痕迹 |
| 事件日志 |
每次查询都产生事件 |
4625 失败登录、Microsoft-Windows-Sysmon 若已装 |
| 网络状态 |
建立连接、会话保活 |
攻击者的现有连接可能被打断 |
最隐蔽的一种:若用共享的管理员凭据登录,会更新域控上的 lastLogonTimestamp、触发 Kerberos 票据签发,并留下"有人正在使用这台机器"的事实。这本身可能触发攻击者的自毁逻辑或反取证。
2.2 只读命令也未必只读
"我只用了 tasklist 和 netstat"是常见辩解,但二者都可能有害:
netstat/Get-NetTCPConnection 枚举连接不打断连接,但向对方暴露了枚举行为,某些攻击者会据此判断"有人在查"。
- 进程枚举 会为每个进程创建句柄,某些自保护驱动会响应。
- 读取
MFT/目录 更新 atime(NTFS 延迟写入,但无法撤销已发生的更新)。
因此"只读"应理解为不改变被取证对象的状态语义,而不是"零副作用"。
2.3 内存是最易失的证据
| 介质 |
内容 |
采集窗口 |
| 物理内存 |
运行进程、解密后的密钥、注入代码、网络连接 |
秒级(断电即失) |
| 页面文件 |
已被换出的部分内容 |
分钟级 |
休眠文件 hiberfil.sys |
休眠前内存快照 |
持久 |
采集内存的代价:写大文件会污染空闲内存池、可能覆盖尚未换出的页。缓解手段是先固定证据再采——用 AFU 或 USB 直连采集器先拷走关键区域,采完立刻做物理内存镜像而非仅转储。
2.4 远程接入通道本身也是证据
选择什么通道,决定了你留下什么痕迹:
| 通道 |
客户端留痕 |
服务端留痕 |
适用性 |
| RDP |
TerminalServices 客户端日志、ClientCore 日志 |
4624 类型 10、TSRemote* 日志 |
需图形界面与录屏 |
| SSH(OpenSSH) |
OpenSSH/Operational 事件 |
4624 类型 5、.bash_history |
最干净,Linux 首选 |
| WinRM/PSRemoting |
Microsoft-Windows-WinRM/Operational |
大量 WMI/WSMan 活动 |
留痕最多,不建议 |
| 商用远控(向日葵/TeamViewer 等) |
工具自身日志 |
服务项、驱动、日志 |
举证时难解释,慎用 |
原则:优先使用操作系统自带、有文档、可逐条对应的通道。商用远控工具的痕迹往往是黑盒,法庭上难以说明"这次连接是不是勘验行为"。
2.5 证据效力:在线 vs 离线
| 维度 |
在线采集 |
离线镜像 |
| 完整性可验证 |
弱(无法与原始态比对) |
强(哈希可复算) |
| 采集时点可证明 |
依赖操作日志与录屏 |
弱(无法知道取证前发生过什么) |
| 内存与易失数据 |
✅ 唯一来源 |
❌ 完全丧失 |
| 可重复性 |
差(状态已改变) |
强(可反复分析) |
| 抗辩能力 |
中(取决于留痕质量) |
高 |
结论:在线采集不能替代离线镜像,只是补充。两者必须分节陈述,并明确"系统全程在线运行,不存在对'未发生行为'的证明力"。
三、操作步骤
3.1 第 1 步:前置准备与授权留痕
远程勘验的前提是书面的、范围明确的授权。开始前必须固定:目标主机、时间窗、允许与禁止的操作、授权人。
每条远程操作都要记录,且与会话录屏时间戳对齐。远程环境的记录要求比本地更严,因为操作人和设备往往不在同一现场,格式见 证据保管链与委托证明。
cat > /lab/remote-session-log.md <<'EOF'
# 远程勘验操作日志 CASE-2026-0142
- 操作人 / 授权人:<姓名 + 授权文书编号> - 目标:DigiForensics-FIN-01 (10.20.5.30)
- 通道:RDP over VPN,全程录屏 - 原则:只读优先;不安装软件;不重启;不修改文件
EOF
录屏从连接前就开始:授权确认、目标确认、每条命令的输入与输出都要在画面里。
3.2 第 2 步:先观察,后操作
连接后的前 60 秒不要敲任何命令:先看屏幕、桌面、告警弹窗、有没有正在传输的进度条。
这本身就是高价值信息,且不产生任何日志。
# 只读基线快照:时间、用户、启动项、会话
Get-Date -Format "yyyy-MM-ddTHH:mm:ssK"
whoami /all
query user
Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime,LocalDateTime
Get-NetTCPConnection -State Established | Select-Object LocalPort,RemoteAddress,OwningProcess
3.3 第 3 步:优先采内存
内存采集必须最先做,因为它最易失。用工具前先确认它是否写盘到目标机。
# 方案 A:AVML(微软官方,内存不足时自动分块写入,兼容性最好)
.\WinPmem.exe /acquiresetting .\DigiForensics-mem.raw 2>&1 | Tee-Object .\acquire-mem.log
# 方案 B:WinPmem(需签名驱动)
.\winpmem_mini_x64_rc2.exe .\DigiForensics-mem.raw
采集后立刻做三件事:计算哈希、记录文件大小、保留采集工具本身的哈希。
sha256sum /evidence/DigiForensics-mem.raw | tee /evidence/DigiForensics-mem.raw.sha256
# 立即把内存镜像复制到干净介质,再继续在线操作
顺序铁律:内存 → 关键日志 → 进程/网络信息 → 最后才考虑全盘。反过来做,内存里的东西就说不清了。
3.4 第 4 步:抽取易失日志
不要试图"导出全部日志"——那会产生大量新事件。只取关键项,且用 -Path 精确指定。
# 安全日志:登录与提权(远程接入的核心痕迹)
wevtutil epl Security D:\Forensics\Security.evtx /ow:true
# 系统日志:服务与网络
wevtutil epl System D:\Forensics\System.evtx /ow:true
# 远程会话专用日志(判断"谁、何时、从哪来")
wevtutil epl Microsoft-Windows-TerminalServices-LocalSessionManager/Operational D:\Forensics\TSLocal.evtx /ow:true
wevtutil epl "Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational" D:\Forensics\RdpCore.evtx /ow:true
# 当前登录会话:按字段名取值,不用 Properties[18] 这类魔法下标(下标随版本变化,靠不住)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 20 | ForEach-Object {
$d = @{}; ([xml]$_.ToXml()).Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
[PSCustomObject]@{ Time=$_.TimeCreated; User=$d.TargetUserName; SrcIP=$d.IpAddress; Type=$d.LogonType }
} | Format-Table -AutoSize
epl 是导出而非渲染,不会像 Get-WinEvent 那样在渲染过程中产生额外事件——这是"在线取证"与"事后离线取证"必须分开的根本原因。
3.5 第 5 步:远程录屏与命令留痕
SSH 用客户端侧 script 记录输入输出;RDP 用宿主机侧录屏。
# SSH:客户端侧记录全部输入输出,不在目标机安装任何东西
ssh -tt dgf-incident@10.20.5.30 |& tee -a /lab/ssh-session.log
# RDP:宿主机侧录屏,帧率 15 足够,文件可控
vlc --intf dummy --sout '#transcode{vcodec=h264,vb=2000}:std{access=file,mux=mp4,dst=/lab/remote-session.mp4}' screen:// --screen-fps 15
3.6 第 6 步:在线检查项清单
按"只读、低扰动、可解释"排序,逐项执行并记录:
# 进程与父子关系(找异常命名、找注入)
Get-CimInstance Win32_Process |
Select-Object ProcessId,ParentProcessId,Name,CommandLine |
Sort-Object ParentProcessId | Format-Table -AutoSize
# 网络连接与监听端口(不打断)
Get-NetTCPConnection -State Established,Listen |
Select-Object LocalPort,RemoteAddress,State,OwningProcess
# 持久化(在线视角的启动项)
Get-CimInstance Win32_StartupCommand | Select-Object Name,Command,Location
Get-ScheduledTask | Where-Object {$_.State -ne 'Disabled'} | Select-Object TaskPath,TaskName
Get-CimInstance -Namespace root\subscription -Class __EventConsumer -ErrorAction SilentlyContinue
# 登录会话(在线在场的人)
query user
Get-Process | Where-Object {$_.MainWindowTitle} | Select-Object Id,ProcessName,MainWindowTitle
# 转储与抓包须单独授权(会挂起进程 / 产生巨量数据)
# procdump -ma <pid> D:\Forensics\proc.dmp
# dumpcap -i eth0 -w D:\Forensics\ raffic.pcap
3.7 第 7 步:收工、验证与归档
结束判定:主要线索已固定、继续在线的风险已大于收益,收工时按序执行: