工件地图

拿到 Windows Server 镜像,最容易犯的错误是套用桌面 Windows 的思路。

最后更新 2026-10-09版本 v1.0维护 DigiForensics查看历史 0

关键词:Windows Server、IIS、W3C 日志、applicationHost.config、Sysmon、PowerShell 4104、inetpub、取证优先级 难度:进阶 前置知识:Windows 基础结构、NTFS 文件系统、HTTP 协议基本概念 相关文章:Windows 取证工件地图、事件日志深度分析

一、概述

拿到 Windows Server 镜像,最容易犯的错误是套用桌面 Windows 的思路。

去 Users\<用户名>\AppData 里翻浏览器记录、跳转列表、剪贴板——这些在服务器上大量不存在。跑的是 IIS、SQL Server、Exchange,AppData 里可能只有几个自动化服务的目录。

把它们查不到写成"未发现用户活动痕迹",等于用错误的工具得出错误的结论。

真正决定事实的工件在服务器上恰恰是另一批:站点配置、站点级访问日志、认证与系统日志、计划任务与注册表。本篇给出这张全景图,以及"百 GB 镜像先提哪一类"的优先级排序。

六条结构性差异(理解差异比记路径重要):

维度 桌面 PC Windows Server 对取证的影响
运行状态 现场常在运行 7×24 常驻 采集难;采集瞬间日志仍在写
用户活动 有交互痕迹 无人值守,AppData 基本为空 桌面行为工件基本失效
日志量级 Security 够用 服务/驱动/任务全天刷屏 几天即可覆盖
登录类型 交互式(Type 2) 网络(3)、服务(5)、批处理(4)、RDP(10) LogonType=3 不等于"有人上班"
凭据强度 域账号 + 本地账号 大量服务账号、IIS AppPool 身份 横向移动优先找这些
加密 BitLocker 常开 BitLocker 覆盖很低 拿到镜像往往能直接读

在取证流程中的位置:本篇属于采集环节的前置规划层。它不产出结论,而是决定"能得出什么结论"与"先取什么"。

Security.evtx 一旦写满就循环覆盖——先做元问题检查,再谈入侵(见 3.1 第 1 步)。

上游依赖 Windows 取证工件地图 的通用体系与 NTFS 结构与 MFT 解析 的定位能力;下游是本板块其余四篇的具体分析。

涉及的证据形态(按优先级,具体到路径):

优先级 工件 路径 / 形态 典型大小
P0 IIS 访问日志 C:\inetpub\logs\LogFiles\W3SVC<n>\u_ex*.log 日增几十 MB
P0 IIS 全局配置 %windir%\system32\inetsrv\config\applicationHost.config + .bak KB 级
P0 站点配置 C:\inetpub\wwwroot\<site>\Web.config、App_Offline.htm KB 级
P0 事件日志 %windir%\system32\winevt\Logs\*.evtx 几十 MB
P1 站点目录 C:\inetpub\wwwroot\<site>\(含 bin\) 站点大小
P1 注册表 hive SYSTEM、SOFTWARE 数十 MB
P1 计划任务 C:\Windows\System32\Tasks\* + SYSTEM 下的 TaskCache\Tree 几十 MB
P2 Prefetch、SRUDB Prefetch\*.pf、SRUDB.dat 数十 MB
P3 Exchange .edb 体积巨大,单独规划 数十至数百 GB

★ 最易被忽略的高价值工件是 applicationHost.config.bak。 IIS 改配置时先备份原文件,若主配置被改过(关闭脚本执行、改应用池身份),.bak 保留改之前的版本——两者 diff 直接给出配置级篡改证据,比任何时间戳推理都可靠。前提是你记得去拿这个文件。

能回答什么:哪些高价值通道真的存在(NOT PRESENT 是结论而非失败);每条日志的覆盖时间窗与循环覆盖风险;哪个 W3SVC<n> 对应哪个域名与物理路径;站点目录里哪些文件是部署后新增的;PowerShell 4104 里有哪些脚本块内容;新增服务与计划任务落在哪。

还有一条经常被漏问的:这份检材能支撑的时间范围有多长。

不能回答什么:没部署的组件给不了数据。Sysmon 通道不存在时,"无异常进程创建"这个结论根本不成立(见 4.1 工件选择)。

超出覆盖期的历史同样无解。FileSize ≈ MaximumSizeInBytes 意味着更早记录已被冲掉,这必须写进报告局限。

异常关机前的内存态工件也不能用(Prefetch 依赖正常关机落盘,见 4.4 在线操作)。至于 cs-username 之外的请求体内容,W3C 日志根本不记。

读者前提:需要 Windows 目录结构与 NTFS 基础(见 NTFS 结构与 MFT 解析)、HTTP 与 W3C 日志格式概念、PowerShell 基础命令。事件 ID 的基础含义见事件日志深度分析,本篇只讲服务器侧的增量。

Linux 上定位与提取的命令见 07 命令速查 的 fls / icat 部分。

二、核心原理

2.1 ★ 服务器 vs 桌面 PC:六条结构性差异

理解差异比记住路径重要。这六条决定取证策略要整体调整。

六条里最贵的两条是「日志量级」和「加密」——一条决定你能回溯多久,一条决定你能不能读。

维度 桌面 PC Windows Server 对取证的影响
运行状态 现场常在运行 7×24 常驻,多在机房/云上 采集难;日志持续产生,采集瞬间仍在写
用户活动 有交互痕迹(LNK、Recent、剪贴板) 无人值守,AppData 基本为空 桌面那套行为工件基本失效
日志量级 Security 够用 服务/驱动/任务全天刷屏,几天即可覆盖 必须先查 MaximumSizeInBytes
登录类型 交互式(Type 2)为主 网络(3)、服务(5)、批处理(4)、RDP(10)为主 LogonType=3 不等于"有人上班了"
凭据强度 域账号 + 本地账号 大量服务账号、IIS AppPool 身份、NETWORK SERVICE 横向移动优先找这些
加密 BitLocker 常开 BitLocker 覆盖很低 拿到镜像往往能直接读

推论 1:「事件日志没有记录」的第一解释是被循环覆盖,不是"没发生"。Security.evtx 默认 20 MB 上限,有 IIS 的服务器配合应用池回收,几天就能冲掉几周前的内容。

推论 2:「无人登录」的结论要小心。按 (用户, IP, LogonType) 聚合看,而不是按总量看。

2.2 IIS 工件地图:三个层次

层次 文件 回答什么问题
站点/应用绑定 applicationHost.config 哪个域名 → 哪个物理路径
应用配置 各站点 Web.config 这个应用能执行什么、连哪个库
请求记录 W3SVC<n>\u_ex*.log 谁在什么时候访问了什么、结果如何
文件 路径 价值
全局配置 %windir%\system32\inetsrv\config\applicationHost.config ★★★★★ XML 明文,IIS 7+ 全部站点/应用池/绑定
配置备份 %windir%\system32\inetsrv\config\applicationHost.config.bak ★★★★ 改配置前的版本
站点配置 C:\inetpub\wwwroot\digiforensics-site\Web.config ★★★★★ 含 machineKey
访问日志 C:\inetpub\logs\LogFiles\W3SVC<n>\u_ex*.log ★★★★★ 见 02
元数据库 %windir%\system32\inetsrv\MetaBase.xml ★★★★★ 仅 IIS 6

★ .bak 是最易被忽略的高价值工件:IIS 改配置时先备份原文件。若 applicationHost.config 被改过(关闭脚本执行、改应用池身份),.bak 保留着改之前的版本,两者 diff 直接给出配置级篡改证据。前提是你记得去拿这个文件。

2.3 事件日志:服务器场景的增量

事件 ID 基础表见事件日志深度分析。服务器上必须额外关注:

工件 通道 服务器场景意义
System.evtx Security/System/Application 同目录 驱动加载、7045 新服务(持久化首选)
Security.evtx 同上 4624/4625、4648 显式凭据登录、4728/4732 加组
Application.evtx 同上 IIS / ASP.NET / SQL 的错误,应用崩溃留痕
PowerShell Microsoft-Windows-PowerShell/Operational 4104 记录脚本内容
Sysmon Microsoft-Windows-Sysmon/Operational 需事先安装启用,默认不存在
# 先确认哪些高价值通道真的存在
foreach ($ch in 'Security','System','Application','Microsoft-Windows-PowerShell/Operational',
                'Microsoft-Windows-Sysmon/Operational','Microsoft-Windows-TaskScheduler/Operational') {
  $l = Get-WinEvent -ListLog $ch -ErrorAction SilentlyContinue
  if ($l) { "{0,-52} Rec={1,-8} {2,-10} Max={3}KB" -f $ch,$l.RecordCount,$l.LogMode,($l.MaximumSizeInBytes/1KB) }
  else    { "$ch  ==>  NOT PRESENT" }
}

NOT PRESENT 是结论而非失败:说明从未部署 Sysmon。报告应写"该主机无 Sysmon 部署",而非"未发现异常进程创建"。

2.4 PowerShell 4104:把"可疑请求"推进到"具体行为"

W3C 日志能告诉你"有人在 03:12:07 请求了 /upload/x.aspx 且返回 200"。

但它说不出他上传了什么、之后干了什么。4104 记录脚本块完整文本,补上这一跳。

Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PowerShell/Operational'; Id=4104} -MaxEvents 2000 |
  ForEach-Object { [xml]$x = $_.ToXml()
    [pscustomobject]@{
      Time = $_.TimeCreated
      User = ($x.Event.UserData.Data | Where-Object Name -eq 'UserId').'#text'
      Text = ($x.Event.UserData.Data | Where-Object Name -eq 'ScriptBlockText').'#text' } } |
  Export-Csv C:\evidence\ps4104.csv -NoTypeInformation -Encoding UTF8
检查点 说明
是否启用 需组策略开启"脚本块日志记录",默认关闭——没开就是没有
有 4103 没 4104 只开了模块日志,脚本内容未记录
内容被截断 长脚本分段记录,序号在 MessageNumber
-EncodedCommand 4104 里仍是解码后的脚本文本,可读

★ 关联技巧:在 4104 文本里搜 W3C 中出现的可疑路径。同一路径同时出现在 4104 脚本和 W3C 日志中,是把"网络行为"与"主机行为"钉死在同一行为体上的强证据。

2.5 计划任务与注册表:服务器侧的两个增量

服务器上没有"桌面",攻击者做持久化更倾向计划任务而非 Run 键。

工件 路径 说明
任务定义 C:\Windows\System32\Tasks\* XML,含触发器与操作
任务缓存 SYSTEM → Services\Schedule\TaskCache\Tree 元数据、注册时间、执行次数
任务事件 Microsoft-Windows-TaskScheduler/Operational 默认需启用
注册表:RDP HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp RDP 端口(非 3386 本身是线索)
注册表:IIS HKLM\SOFTWARE\Microsoft\InetStp\Components IIS 版本与安装选项
# 列出动作指向非微软/非 Windows 目录的任务(可疑持久化)
Get-ScheduledTask | ForEach-Object { $t = $_
  $t.Actions | Where-Object { $_.Execute -and $_.Execute -notmatch '\\Microsoft\\|^[Cc]:\\Windows\\' } |
    ForEach-Object { [pscustomobject]@{ TaskPath=$t.TaskPath; TaskName=$t.TaskName
      Execute=$_.Execute; Arguments=$_.Arguments; Author=$t.Author } } } | Format-List

2.6 C:\inetpub 与远程桌面痕迹

工件 路径 价值
站点根目录 C:\inetpub\wwwroot\digiforensics-site\ 落地文件、webshell
bin\ 目录 ...\digiforensics-site\bin\ 新增 DLL 是高危信号(无源码的托管代码)
App_Offline.htm 应用根目录 ASP.NET 停池时显示,可能被用于短暂屏蔽站点
编译临时文件 %windir%\Temp\ ASP.NET 预编译产物
RDP 目标缓存 HKCU\...\Terminal Server Client\Servers 曾连接过的目标主机
端口重定向 DLL C:\Windows\System32\ sserver\*.dll RDP 会话与重定向痕迹

2.7 ★ 取证优先级排序

镜像上百 GB 时不能无差别提取。按证据密度排序:

优先级 工件 理由 典型大小
P0 W3SVC*\*.log 唯一逐请求记录,体积相对小 日增几十 MB
P0 applicationHost.config + .bak 站点映射 + 配置篡改对照 KB 级
P0 各站点 Web.config、App_Offline.htm 攻防焦点 KB 级
P0 winevt\Logs\*.evtx 系统/安全/PowerShell 几十 MB
P1 wwwroot\digiforensics-site\ 全目录 落地文件、webshell、DLL 站点大小
P1 SYSTEM / SOFTWARE hive 服务、驱动、任务、ShimCache 数十 MB
P1 System32\Tasks\* 计划任务 几十 MB
P2 SRUDB.dat、Prefetch\*.pf 长期资源使用、程序执行 数十 MB
P3 Exchange .edb 体积巨大,单独规划(见 05) **数十至数百
安全验证 当前请求需要先完成一次滑块验证。