LogParser解析Windows系统日志常用SQL合集

LogParser解析Windows系统日志常用SQL合集

本文建议先把logparser添加到环境变量再配合powershell使用。

文章目录

将LogParser添加到环境变量

统计事件ID数量并排序

通过统计排序能够了解安全日志中存在哪些事件ID。

 LogParser -i:EVT -o:DATAGRID "
SELECT EventID, COUNT(*) AS EventCount
FROM Security
GROUP BY EventID
ORDER BY EventCount DESC
"

被远程登录记录

事件ID:4625 登录失败

在 Security 日志中事件 ID 为 4625 代表身份验证失败,类型 3 代表从网络登录。但Logon Type 3 并不一定是 RDP 登录失败日志,可能是共享资源或打印机之类的网络登录,并且一些该类型的日志并不能获取到源 IP。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 登录时间
    , EXTRACT_TOKEN(Strings, 5, '|') AS 用户名
    , EXTRACT_TOKEN(Strings, 13, '|') AS 计算机名
    , EXTRACT_TOKEN(Strings, 10, '|') AS 登录类型
    , EXTRACT_TOKEN(Strings, 19, '|') AS 源IP
    , EXTRACT_TOKEN(Strings, 17, '|') AS 请求进程ID
    , EXTRACT_TOKEN(Strings, 18, '|') AS 请求进程名
FROM Security
WHERE eventid = 4625
    AND 登录类型 LIKE '3'
    OR 登录类型 LIKE '10'
"

事件ID:4624 登录成功

在 Security 日志中事件 ID 为 4624,类型为 10 或 7,其中 7 代表会话重连(锁屏状态下重新登录)。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 登录时间
    , EXTRACT_TOKEN(Strings, 5, '|') AS 用户名
    , EXTRACT_TOKEN(Strings, 11, '|') AS 计算机名
    , EXTRACT_TOKEN(Strings, 8, '|') AS 登录类型
    , EXTRACT_TOKEN(Strings, 18, '|') AS 登录源IP
    , EXTRACT_TOKEN(Strings, 16, '|') AS 请求进程ID
    , EXTRACT_TOKEN(Strings, 17, '|') AS 请求进程名
FROM Security
WHERE eventid = 4624
    AND 用户名 NOT LIKE '%$'
"

事件ID:21 登录会话

日志文件名:Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx

LogParser 无法直接读取 Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx 日志文件,需要拷贝到其他路径下并指定文件路径。

logparser -i:evt -o:datagrid "
SELECT TimeGenerated AS 登录时间, ComputerName AS 计算机名
    , EXTRACT_TOKEN(Strings, 0, '|') AS 登录用户名
    , EXTRACT_TOKEN(Strings, 2, '|') AS 登录源
FROM your.evtx
WHERE EventID = 21
"

事件ID:22 shell启动

日志文件名:Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx

logparser -i:evt -o:datagrid "
SELECT TimeGenerated AS 登录时间, ComputerName AS 计算机名
    , EXTRACT_TOKEN(Strings, 0, '|') AS 登录用户名
    , EXTRACT_TOKEN(Strings, 2, '|') AS 登录源
FROM your.evtx
WHERE EventID = 22
"

事件ID:1149 远程登录记录

日志文件名:Microsoft-Windows-TerminalServices-RemoteConnectionManager%4Operational.evtx

LogParser.exe -i:reg -o:datagrid "
select LastWriteTime as 最后登录时间
	,KeyName as 远程IP
	,Value as 用户名 
from \HKEY_CURRENT_USER\SOFTWARE\Microsoft 
where Path LIKE '%\Servers%'
"

RDP会话断开/重连/注销

会话断开(连接意外中断)会产生以下系列的日志:

  • Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx
    • 24 RDP 会话断开
    • 40 RDP 会话断开或重连
  • Security
    • 4779 用户从 RDP 会话断开
    • 4634 账号注销

连接断开日志包含一个 Reason 字段,具体含义参考:ExtendedDisconnectReasonCode enumeration – Win32 apps | Microsoft Docs

事件ID:24 RDP会话断开

LogParser.exe  -i:EVT -o:DATAGRID "
SELECT
    TimeGenerated AS 登录时间,
    ComputerName AS 计算机名,
    EXTRACT_TOKEN(Strings, 0, '|') AS 用户名,
    EXTRACT_TOKEN(Strings, 1, '|') AS 会话ID,
    EXTRACT_TOKEN(Strings, 2, '|') AS 源IP
FROM Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx
WHERE
    EventID = 24
"

会话断开(连接主动关闭)会产生以下系列的日志:

  • Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx
    • 24 RDP 会话断开
    • 39 RDP 会话断开
    • 40 RDP 会话断开或重连
  • Security
    • 4779 用户从 RDP 会话断开
    • 4634 账号注销

主动关闭指的是用户有目的的断开,而不仅仅是通过关闭客户端来断开连接,通常是指通过开始菜单的断开连接选项执行的。

通过事件 ID 24 或者 ID 4779 可以确定 RDP 会话断开,如果需要确定是否主动关闭连接,需关联 ID 39 一同分析。

事件ID:39 RDP会话断开

LogParser.exe  -i:EVT -o:DATAGRID "
    SELECT
        TimeGenerated AS 登录时间,
        ComputerName AS 计算机名,
        EXTRACT_TOKEN(Strings, 0, '|') AS 目标会话,
        EXTRACT_TOKEN(Strings, 1, '|') AS 源
    FROM Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx
    WHERE
        EventID = 39
    "

会话重连一般指远程登录超时后屏幕锁定了,或者手动操作的锁定,在登录屏幕下重新登录的方式。在远程登录全屏模式下,可以通过 Win+L锁定屏幕,或执行 rundll32.exe user32.dll LockWorkStation 来锁定屏幕。

事件ID:25 RDP会话重连

LogParser.exe  -i:EVT -o:DATAGRID "
SELECT
    TimeGenerated AS 登录时间,
    ComputerName AS 计算机名,
    EXTRACT_TOKEN(Strings, 0, '|') AS 用户名,
    EXTRACT_TOKEN(Strings, 1, '|') AS 会话ID,
    EXTRACT_TOKEN(Strings, 2, '|') AS 源IP
FROM Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx
WHERE
    EventID = 25
"

会话重连成功的记录(ID 4624 类型 7)

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 登录时间
    , EXTRACT_TOKEN(Strings, 5, '|') AS 用户名
    , EXTRACT_TOKEN(Strings, 11, '|') AS 计算机名
    , EXTRACT_TOKEN(Strings, 8, '|') AS 登录类型
    , EXTRACT_TOKEN(Strings, 18, '|') AS 登录源IP
    , EXTRACT_TOKEN(Strings, 16, '|') AS 请求进程ID
    , EXTRACT_TOKEN(Strings, 17, '|') AS 请求进程名
FROM Security
WHERE eventid = 4624
    AND 登录类型 LIKE '7'
"

会话重连失败的记录(ID 4625 类型 7)

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 登录时间
    , EXTRACT_TOKEN(Strings, 5, '|') AS 用户名
    , EXTRACT_TOKEN(Strings, 13, '|') AS 计算机名
    , EXTRACT_TOKEN(Strings, 10, '|') AS 登录类型
    , EXTRACT_TOKEN(Strings, 19, '|') AS 源IP
    , EXTRACT_TOKEN(Strings, 17, '|') AS 请求进程ID
    , EXTRACT_TOKEN(Strings, 18, '|') AS 请求进程名
FROM Security
WHERE eventid = 4625
    AND 登录类型 LIKE '7'
"

事件ID:23 会话注销

日志文件名:Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx

LogParser.exe  -i:EVT -o:DATAGRID "
SELECT
    TimeGenerated AS 登录时间,
    ComputerName AS 计算机名,
    EXTRACT_TOKEN(Strings, 0, '|') AS 用户名,
    EXTRACT_TOKEN(Strings, 1, '|') AS 会话ID
FROM Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx
WHERE EventID = 23
"

日志服务记录

事件ID:7031 日志服务重启

LogParser.exe -i:evt -o:datagrid "
SELECT TimeGenerated AS 时间, EXTRACT_TOKEN(Strings, 0, '|') AS 服务名
    , EXTRACT_TOKEN(Strings, 4, '|') AS 动作
    , Message AS 描述
FROM System
WHERE eventid = 7031
    AND 服务名 = 'Windows Event Log' 
"

事件ID:1102 安全日志清除记录

LogParser.exe -i:evt -o:datagrid "
SELECT TimeGenerated AS 时间, Message AS 描述
FROM Security
WHERE eventid = 1102
"

事件ID:104 其他日志清除记录

LogParser.exe -i:evt -o:datagrid "
SELECT TimeGenerated AS 时间
    , EXTRACT_TOKEN(Strings, 0, '|') AS 用户
    , Message AS 描述
FROM system
WHERE eventid = 104
"

计划任务(64位系统无法查询)

由于logparser只有编译好的32位版本,在64位系统上获取注册表信息会被重定向导致获取信息为空。

LogParser.exe -i:reg -o:datagrid "
SELECT *
FROM 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache'
"

计划任务(32位系统)

计划任务(64位系统)

因此不建议使用logparser获取注册表信息!

事件ID:4698 已创建计划任务

LogParser.exe -i:EVT -o:datagrid "
   select TimeWritten as 创建时间
   ,extract_token(Strings,1,'|') as 创建者
   ,extract_token(Strings,4,'|') as 计划任务名称
   ,extract_token(Strings,1,'Exec>') as 执行命令
   ,extract_token(Strings,1,'Enabled>') as 是否启用
   from Security where eventid=4698
   "

事件ID:4699 已删除计划任务

LogParser.exe -i:EVT -o:datagrid "
   select TimeGenerated  as 删除时间
   ,extract_token(Strings,1,'|') as 删除者
   ,extract_token(Strings,4,'|') as 计划任务名称
   from Security where eventid=4699
"

TaskScheduler 操作日志

TaskScheduler本身有自己的日志,但是需要提前开启。

日志位置:应用程序和服务日志 > Microsoft > Windows > TaskScheduler > Operational

打开 PowerShell 以管理员身份运行。

wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:true

创建一条计划任务测试日志是否开启成功。

$taskName = "TestTask"; $taskAction = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -WindowStyle Hidden -Command `"Write-Output 'Hello, World!' > C:\Test\HelloWorld.txt`""; $taskTrigger = New-ScheduledTaskTrigger -Daily -At "2:00AM"; $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest; Register-ScheduledTask -Action $taskAction -Trigger $taskTrigger -Principal $taskPrincipal -TaskName $taskName -Description "A test task"

删除已创建的计划任务。

Unregister-ScheduledTask -TaskName "TestTask" -Confirm:$false

事件ID:106 计划任务注册

信息非常少,只会显示计划任务的任务名。

针对于TaskScheduler不对事件ID做过滤。

LogParser.exe -i:EVT -o:datagrid "
   SELECT TimeGenerated AS 创建时间,
          EventID AS 事件ID,
          Strings AS 消息内容,
          ComputerName AS 计算机名称
   FROM Microsoft-Windows-TaskScheduler%4Operational.evtx
"

系统用户变更记录

事件ID:4720 用户创建

LogParser.exe -i:EVT -o:datagrid "
   select TimeGenerated  as 创建时间
   ,extract_token(Strings,0,'|') as 被创建用户名
   ,extract_token(Strings,4,'|') as 创建者
   from Security where eventid=4720
"

事件ID:4722 用户启用

LogParser.exe -i:EVT -o:datagrid "
   select TimeGenerated  as 启用时间
   ,extract_token(Strings,0,'|') as 被启用用户名
   ,extract_token(Strings,4,'|') as 启用者
   from Security where eventid=4722
"

事件ID:4726 用户删除

LogParser.exe -i:EVT -o:datagrid "
   select TimeGenerated  as 删除时间
   ,extract_token(Strings,0,'|') as 被删除用户名
   ,extract_token(Strings,4,'|') as 删除者
   from Security where eventid=4726
"

事件ID:4732 用户属组变更

LogParser.exe -i:EVT -o:datagrid "
   select TimeGenerated  as 操作时间
   ,extract_token(Strings,0,'|') as 被变更用户名
   ,extract_token(Strings,2,'|') as 变更组
   ,extract_token(Strings,6,'|') as 操作者
   from Security where eventid=4732
"

事件ID:4740 用户帐户已被锁定

Windows 会生成两种与帐户锁定相关的事件。每次帐户被锁定时,域控制器、Windows 服务器和工作站上都​​会生成事件 ID 4740。每次帐户解锁时都会生成事件 ID 4767。

Windows 允许您设置 帐户锁定阈值,以定义用户在帐户被锁定之前可以尝试使用无效密码登录的次数。您还可以使用帐户 锁定持续时间设置定义帐户保持锁定的时间。这些帐户锁定策略有助于保护网络免受密码猜测尝试和潜在的暴力攻击。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 0, '|') AS 锁定用户名
    , EXTRACT_TOKEN(Strings, 1, '|') AS 调用方计算机名
    , EXTRACT_TOKEN(Strings, 4, '|') AS 账户名
    , EXTRACT_TOKEN(Strings, 5, '|') AS 账户域
FROM Security
WHERE eventid = 4740
"

RDP开放端口

LogParser.exe -i:reg -o:datagrid "
select LastWriteTime as 最后写入时间
	,Value as 远程端口 
from 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' where ValueName like 'PortNumber'
"

RDP远程登录其他主机记录

远程登录记录需要通过查询注册表获取。

LogParser.exe -i:reg -o:datagrid "
select LastWriteTime as 最后登录时间
	,KeyName as 远程IP
	,Value as 用户名 
'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Terminal Server Client\Servers' 
"

Powershell执行记录

在powershell日志中,执行一个powershell命令会产生6条日志,其中2条引擎生命周期日志(EventID:400启用;EvnetID:403停止),6条程序生命周期日志(EventID:600)(Registry、Alias、Environment、FileSystem、Function、Variable的启动)

powershell 主要关注hostApplication的值。

事件ID:400 启用

日志文件名:Windows PowerShell.evtx

logparser.exe -i:evt -o:datagrid "
SELECT TimeGenerated AS 时间
    , EXTRACT_TOKEN(EXTRACT_TOKEN(Strings, 1, 'Host Application = '), 0, 'Engine Version') AS 数据
FROM your.evtx
WHERE eventid = 4103
"

注:logparser使用表格格式输出有长度限制,可能显示不全。

事件ID:4103 正在执行管道

日志文件名:Microsoft-Windows-PowerShell%4Operational.evtx

logparser.exe -i:evt "
SELECT TimeGenerated AS 时间, ComputerName AS 计算机名, Sid
    , EXTRACT_TOKEN(EXTRACT_TOKEN(Strings, 1, 'Host Application = '), 0, 'Engine Version') AS 数据
FROM your.evtx
WHERE eventid = 4103
"

事件ID: xxxx powershell下载文件记录

日志文件名:Microsoft-Windows-PowerShell-DesiredStateConfiguration-FileDownloadManager%4Operational.evtx

待补充

CMD命令执行记录

事件ID:4688 创建新进程

4688 Windows默认没有开启,需要提前手动开启。

LogParser.exe -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 时间, EXTRACT_TOKEN(Strings, 1, '|') AS 用户名
	, EXTRACT_TOKEN(Strings, 4, '|') AS 进程pid
	, EXTRACT_TOKEN(Strings, 5, '|') AS 进程名
	, EXTRACT_TOKEN(Strings, 7, '|') AS 父进程ppid
	, EXTRACT_TOKEN(Strings, 13, '|') AS 父进程名
	, EXTRACT_TOKEN(Strings, 8, '|') AS 命令行
FROM Security.evtx
WHERE EventID = 4688
"

事件ID:4689 结束进程

LogParser.exe -i:EVT  -o:DATAGRID "
SELECT TimeGenerated AS 时间, EXTRACT_TOKEN(Strings, 1, '|') AS 用户名
	, EXTRACT_TOKEN(Strings, 4, '|') AS 状态码
	, EXTRACT_TOKEN(Strings, 5, '|') AS 进程pid
	, EXTRACT_TOKEN(Strings, 6, '|') AS 进程名
FROM Security.evtx 
WHERE EventID = 4689
"

如何开启CMD命令审核策略?

运行 secpol.msc 可以打开本地安全策略,依次点开本地策略-审核策略。可以看到windows默认情况是没有开启审核策略的,不开启策略的话windows就不会记录某些事件,比如进程创建事件等。需要逐一手动修改审核策略的属性,将审核操作选上成功和失败。

或者用管理员权限的cmd执行下面的命令一键开启。

echo [version] >1.inf  && echo signature="$CHICAGO$" >>1.inf  && echo [Event Audit] >>1.inf  && echo AuditSystemEvents=3 >>1.inf && echo AuditObjectAccess=3 >>1.inf && echo AuditPrivilegeUse=3 >>1.inf && echo AuditPolicyChange=3 >>1.inf && echo AuditAccountManage=3 >>1.inf && echo AuditProcessTracking=3 >>1.inf && echo AuditDSAccess=3 >>1.inf && echo AuditAccountLogon=3 >>1.inf && echo AuditLogonEvents=3 >>1.inf && secedit /configure /db 1.sdb /cfg 1.inf /log 1.log 

网络请求记录

事件ID:1057 WinINet网络请求记录

该日志默认是关闭的,需要提前开启。抓C2的很好使,懂的都懂。

应用程序和服务日志->Microsoft->Windows->WinINet(Microsoft-Windows-WinINet),右键启动 Microsoft-Windows-WinINet/UsageLog 日志。

cs马回连c2的请求记录

也可以通过命令行开启。

wevtutil gl "Microsoft-Windows-WinINet/UsageLog"
wevtutil sl /e /q "Microsoft-Windows-WinINet/UsageLog"

由于该日志是etl格式的,所以logparser无法解析。

事件ID:5156 外对内网络连接

5156的事件也需要提前开启,开启的方式和4688相同。

LogParser.exe -i:EVT   -o:datagrid "
select TimeGenerated As 时间,extract_token(Strings,1,'|') As 应用程序名
         ,extract_token(Strings,0,'|') as 进程id
         ,extract_token(Strings,2,'|') as 方向
         ,extract_token(Strings,3,'|') as 源IP
         ,extract_token(Strings,4,'|') as 源端口
         ,extract_token(Strings,5,'|') as 目的IP
         ,extract_token(Strings,6,'|') as 目的端口
         ,extract_token(Strings,7,'|') as 协议号 
from Security where eventid=5156 and 方向='%%14593'
"

事件ID:5156 内对外网络连接

LogParser.exe -i:EVT   -o:datagrid "
select TimeGenerated As 时间,extract_token(Strings,1,'|') As 应用程序名
         ,extract_token(Strings,0,'|') as 进程id
         ,extract_token(Strings,2,'|') as 方向
         ,extract_token(Strings,3,'|') as 源IP
         ,extract_token(Strings,4,'|') as 源端口
         ,extract_token(Strings,5,'|') as 目的IP
         ,extract_token(Strings,6,'|') as 目的端口
         ,extract_token(Strings,7,'|') as 协议号 
from Security  where eventid=5156 and 方向='%%14592'
"

特权调用

域内主机才会有这类事件ID。

事件ID:4673已调用特权服务

LogParser.exe -i:evt -o:datagrid "
SELECT TimeGenerated AS 登录时间, 
  EXTRACT_TOKEN(Strings, -2, '|') AS 进程pid, 
  EXTRACT_TOKEN(Strings, 1, '|') AS 帐户名称, 
  EXTRACT_TOKEN(Strings, 2, '|') AS 帐户域, 
  EXTRACT_TOKEN(Strings, -3, '|') AS 特权名称, 
  EXTRACT_TOKEN(Strings, -1, '|') AS 进程名 
FROM 
  Security.evtx 
WHERE 
  EventID = 4673
"

特权名称作用可以参考:https://learn.microsoft.com/zh-cn/windows/security/threat-protection/auditing/event-4673

事件ID:4674尝试对特权对象执行操作

LogParser.exe -i:evt -o:datagrid "
SELECT TimeGenerated AS 登录时间, 
  EXTRACT_TOKEN(Strings, -2, '|') AS 进程pid, 
  EXTRACT_TOKEN(Strings, 1, '|') AS 帐户名称, 
  EXTRACT_TOKEN(Strings, 2, '|') AS 帐户域, 
  EXTRACT_TOKEN(Strings, 5, '|') AS 对象类型, 
  EXTRACT_TOKEN(Strings, 6, '|') AS 对象名称, 
  EXTRACT_TOKEN(Strings, -3, '|') AS 特权名称, 
  EXTRACT_TOKEN(Strings, -1, '|') AS 进程名 
FROM 
  Security.evtx 
WHERE 
  EventID = 4674
"

应用程序远程登录

日志文件名:Application.evtx

MSSQL远程登录

事件ID:18456 登录失败

logparser.exe -i:evt -o:datagrid "
SELECT TimeGenerated AS 时间, SourceName AS 来源, ComputerName AS 计算机名
    , EXTRACT_TOKEN(Strings, 0, '|') AS 登录名
    , EXTRACT_TOKEN(Strings, 1, '|') AS 原因
    , EXTRACT_TOKEN(Strings, 2, '|') AS 源IP
FROM Application.evtx
WHERE EventID = 18456
"

事件ID:18454 登录成功

logparser.exe -i:evt -o:datagrid "
select TimeGenerated as 时间
	,SourceName as 来源
	,ComputerName as 计算机名
	,EXTRACT_TOKEN(Strings,0,'|') as username as 登录名
	,EXTRACT_TOKEN(Strings,1,'|') as 原因
	,EXTRACT_TOKEN(Strings,2,'|') as 源IP 
from Application.evtx 
where EventID=18454
"

事件ID:15457 xp_cmdshell启用信息

logparser.exe -i:evt -o:datagrid  "
SELECT TimeGenerated AS 时间, SourceName AS 来源, ComputerName AS 计算机名
    , EXTRACT_TOKEN(Strings, 0, '|') AS 方法
    , EXTRACT_TOKEN(Strings, 1, '|') AS 状态1
    , EXTRACT_TOKEN(Strings, 2, '|') AS 状态2
FROM Application.evtx
WHERE EventID = 15457
    AND 方法 = 'xp_cmdshell'
"

系统服务记录

事件ID:7045 服务创建成功

在cs中通常使用jump psexec_psh来创建和启动临时服务来执行命令。7045事件日志包含新服务的名称、路径和启动参数,这些信息可以用于进一步分析和确认是否存在恶意活动。

需要注意该事件位于system,而不是security日志。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 0, '|') AS 服务名称
    , EXTRACT_TOKEN(Strings, 1, '|') AS 服务文件路径
    , EXTRACT_TOKEN(Strings, 2, '|') AS 服务类型
    , EXTRACT_TOKEN(Strings, 3, '|') AS 启动类型
    , EXTRACT_TOKEN(Strings, 4, '|') AS 服务帐户
FROM System
WHERE eventid = 7045
"

Kerberos 认证记录

事件ID:4768 凭据票证请求(TGT Request)

事件ID 4768 表示Kerberos身份验证服务发出的凭据票证(Ticket Granting Ticket,TGT)请求事件。该事件在用户登录时记录,显示用户请求Kerberos TGT的详细信息。

注意:每次密钥分发中心颁发 Kerberos 票证授予票证 (TGT) 时,都会生成此事件。此事件仅在域控制器上生成。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 0, '|') AS 用户名
    , EXTRACT_TOKEN(Strings, 1, '|') AS 目标域名
    , EXTRACT_TOKEN(Strings, 3, '|') AS 服务名称
    , EXTRACT_TOKEN(Strings, 6, '|') AS 状态
    , EXTRACT_TOKEN(Strings, 7, '|') AS 加密类型
    , EXTRACT_TOKEN(Strings, 8, '|') AS 预认证类型
    , EXTRACT_TOKEN(Strings, 9, '|') AS IP地址
    , EXTRACT_TOKEN(Strings, 10, '|') AS IP端口
FROM Security
WHERE eventid = 4768
"

如果 TGT 认证失败,则将看到 Failure 事件,其状态码不等于“0x0”。4798事件ID不会生成 0x10 和 0x18的状态码,而是生成事件“4771:Kerberos 预身份验证失败”。

事件ID:4771 预身份验证失败

每次 TGT 请求失败(例如,由于密码错误或过期)时都会生成此事件。它仅在域控制器上记录,并且仅用于失败事件。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 0, '|') AS 目标用户名
    , EXTRACT_TOKEN(Strings, 2, '|') AS 服务名称
    , EXTRACT_TOKEN(Strings, 4, '|') AS 状态
    , EXTRACT_TOKEN(Strings, 5, '|') AS 预认证类型
    , EXTRACT_TOKEN(Strings, 6, '|') AS IP地址
    , EXTRACT_TOKEN(Strings, 7, '|') AS IP端口
FROM Security
WHERE eventid = 4771
"

事件 ID:4770 服务票证已续订

事件ID 4770 记录了Kerberos服务票证的续订情况。这意味着某个用户请求续订他们的Kerberos服务票证,以便继续访问特定服务。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 0, '|') AS 目标用户名
    , EXTRACT_TOKEN(Strings, 1, '|') AS 目标域名
    , EXTRACT_TOKEN(Strings, 2, '|') AS 服务名称
    , EXTRACT_TOKEN(Strings, 4, '|') AS 票证选项
    , EXTRACT_TOKEN(Strings, 5, '|') AS 加密类型
    , EXTRACT_TOKEN(Strings, 6, '|') AS IP地址
    , EXTRACT_TOKEN(Strings, 7, '|') AS IP端口
FROM Security
WHERE eventid = 4770
"

事件ID:4769 授予票证(TGT)

每次用户请求访问网络资源时都会生成此事件,这会导致密钥分发中心 (KDC) 获得 Kerberos 票证授予服务 (TGS) 票证请求以进行身份​​验证,它仅记录在域控制器上。 

4768和4769的区别:

  • 4768事件:用户向Kerberos身份验证服务请求TGT。请求成功(状态为0x0)表示用户成功获得TGT,但这并不意味着随后一定会有4769事件。
  • 4769事件:在用户成功获取TGT后,当用户尝试访问特定服务时,Kerberos身份验证服务会生成服务票证并记录4769事件。

因此,4768成功后,用户可能会生成4769事件,但这取决于用户是否继续请求特定服务的票证。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 0, '|') AS 目标用户名
    , EXTRACT_TOKEN(Strings, 1, '|') AS 目标域名
    , EXTRACT_TOKEN(Strings, 2, '|') AS 服务名称
    , EXTRACT_TOKEN(Strings, 5, '|') AS 加密类型
    , EXTRACT_TOKEN(Strings, 6, '|') AS IP地址
    , EXTRACT_TOKEN(Strings, 7, '|') AS 端口
    , EXTRACT_TOKEN(Strings, 8, '|') AS 状态
FROM Security
WHERE eventid = 4769
"

令牌权限变更

事件ID:4703 令牌权已经调整

事件ID 4703 用于记录用户权限的更改。它会记录一个进程启用了或禁用了哪些特权,这些特权是用户账户在系统中执行特定操作的能力,例如备份文件、关闭系统、加载和卸载设备驱动程序等。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 1, '|') AS 用户名
    , EXTRACT_TOKEN(Strings, 2, '|') AS 用户域
    , EXTRACT_TOKEN(Strings, 5, '|') AS 目标用户名
    , EXTRACT_TOKEN(Strings, 6, '|') AS 目标域名
    , EXTRACT_TOKEN(Strings, 8, '|') AS 进程名称
    , EXTRACT_TOKEN(Strings, 9, '|') AS 进程ID
    , EXTRACT_TOKEN(Strings, 10, '|') AS 启用的特权列表
    , EXTRACT_TOKEN(Strings, 11, '|') AS 禁用的特权列表
FROM Security
WHERE eventid = 4703
"

对象访问

事件 ID:4658 对象句柄已关闭

当对象句柄关闭时,将记录事件 4658。此对象可以是任何类型 — 文件系统、内核、注册表对象或存储在可移动设备上的文件系统对象。仅当在“审核句柄操作”子类别中启用“成功”审核时,才会记录此事件。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 1, '|') AS 用户名
    , EXTRACT_TOKEN(Strings, 2, '|') AS 用户域
    , EXTRACT_TOKEN(Strings, 4, '|') AS 对象服务器
    , EXTRACT_TOKEN(Strings, 5, '|') AS 句柄ID
    , EXTRACT_TOKEN(Strings, 6, '|') AS 进程ID
    , EXTRACT_TOKEN(Strings, 7, '|') AS 进程名称
FROM Security
WHERE eventid = 4658
"

事件 ID:4656 请求对象句柄

当请求对某个对象进行特定访问时,将记录事件 ID 4656。请求访问的对象可以是任何类型 — 文件系统、内核、注册表对象或存储在可移动设备上的文件系统对象。

如果访问被拒绝,则记录为失败审核。此事件显示访问请求的结果(由 4663 记录)。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 1, '|') AS 用户名
    , EXTRACT_TOKEN(Strings, 2, '|') AS 用户域
    , EXTRACT_TOKEN(Strings, 4, '|') AS 对象服务器
    , EXTRACT_TOKEN(Strings, 5, '|') AS 对象类型
    , EXTRACT_TOKEN(Strings, 6, '|') AS 对象名称
    , EXTRACT_TOKEN(Strings, 7, '|') AS 句柄ID
    , EXTRACT_TOKEN(Strings, 9, '|') AS 访问列表
    , EXTRACT_TOKEN(Strings, 14, '|') AS 进程ID
    , EXTRACT_TOKEN(Strings, 15, '|') AS 进程名称
FROM Security
WHERE eventid = 4656
"

事件 ID:4657 注册表值已被修改

如果修改了注册表项值,则会记录事件 ID 4657。需要注意的是,只有修改了键值(而不是键本身)时才会触发该事件。此外,只有在注册表项的 SACL 中设置了审核功能时才会记录此事件。

LogParser -i:EVT -o:DATAGRID "
SELECT TimeGenerated AS 事件时间
    , EXTRACT_TOKEN(Strings, 1, '|') AS 用户名
    , EXTRACT_TOKEN(Strings, 2, '|') AS 用户域
    , EXTRACT_TOKEN(Strings, 3, '|') AS 登录ID
    , EXTRACT_TOKEN(Strings, 4, '|') AS 对象名称
    , EXTRACT_TOKEN(Strings, 5, '|') AS 对象值名称
    , EXTRACT_TOKEN(Strings, 7, '|') AS 操作类型
    , EXTRACT_TOKEN(Strings, 8, '|') AS 旧值类型
    , EXTRACT_TOKEN(Strings, 9, '|') AS 旧值
    , EXTRACT_TOKEN(Strings, 10, '|') AS 新值类型
    , EXTRACT_TOKEN(Strings, 11, '|') AS 新值
    , EXTRACT_TOKEN(Strings, 12, '|') AS 进程ID
    , EXTRACT_TOKEN(Strings, 13, '|') AS 进程名称
FROM Security
WHERE eventid = 4657
"
赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

3条评论

feng 发布于2:27 下午 - 4月 27, 2022

大佬,一直跟随你,就是想问问能不能出一期关于elk获取服务器日志的文章呢,五体投地,万分感谢

    Zgao 发布于1:02 下午 - 5月 10, 2022

    下次一定!

避坑指南 发布于9:04 下午 - 4月 22, 2022

虽然咯不懂,但是不妨碍我看看

发表评论