Windows 主机侧日志排查

0x00 背景

应急响应时,有些日志在主机侧没有收集到日志平台,需要上主机快速排查日志定位问题。

0x01 powershell 日志排查

1. 查询 Security 日志的 EventID 4624(成功登录事件),并列出所有字段

Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4624]]" -MaxEvents 1 | 
    ForEach-Object { 
        $xml = [xml]$_.ToXml()
        $xml.Event.EventData.Data | 
            Select-Object Name, "#text" | 
            Format-Table -AutoSize
    }

Name                      #text
-----                          -----
SubjectUserSid            S-1-5-18
SubjectUserName           W01Server0111$
SubjectDomainName         yourdomain
SubjectLogonId            0x3e7
TargetUserSid             S-1-5-21-1xxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-1003
TargetUserName            XXXX
TargetDomainName          W01Server0111
TargetLogonId             0x3xxxxxxxx
LogonType                 10
LogonProcessName          User32
AuthenticationPackageName Negotiate
WorkstationName           W01Server0111
LogonGuid                 {00000000-0000-0000-0000-000000000000}
TransmittedServices       -
LmPackageName             -
KeyLength                 0
ProcessId                 0x58
ProcessName               C:\Windows\System32\svchost.exe
IpAddress                 10.111.1.100
IpPort                    0
ImpersonationLevel        %%1833
RestrictedAdminMode       %%1843
TargetOutboundUserName    -
TargetOutboundDomainName  -
VirtualAccount            %%1843
TargetLinkedLogonId       0x3e4cdeb1e
ElevatedToken             %%1843

2. 查询 Security 日志的 EventID 4624(成功登录事件),并过滤特定字段

Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4624]]" -MaxEvents 1 | 
    ForEach-Object { 
        $xml = [xml]$_.ToXml(); 
        $xml.Event.EventData.Data | 
            Where-Object { $_.Name -in "TargetUserName", "IpAddress" } | 
            Select-Object Name, "#text"
    }

Name                      #text
-----                          -----
TargetUserName    XXXX
IpAddress               10.111.1.100

3. 查询 Security 日志的 EventID 4688(进程创建事件),并列出所有字段

Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4688]]" -MaxEvents 1 | 
    ForEach-Object { 
        $xml = [xml]$_.ToXml()
        $xml.Event.EventData.Data | 
            Select-Object Name, "#text" | 
            Format-Table -AutoSize
    }

 Name               #text
----               -----
SubjectUserSid     S-1-5-18
SubjectUserName    W01Server0111$
SubjectDomainName  yourdomain
SubjectLogonId     0x3e8
NewProcessId       0x1688
NewProcessName     C:\Program Files\TitanAgent\titan_guard.exe
TokenElevationType %%1936
ProcessId          0x24dc
CommandLine        titan_guard.exe  --log
TargetUserSid      S-1-0-0
TargetUserName     -
TargetDomainName   -
TargetLogonId      0x0
ParentProcessName  C:\Windows\System32\cmd.exe
MandatoryLabel     S-1-16-16384

4. 获取时间字段

Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4688]]" -MaxEvents 2 | 
    ForEach-Object { 
        $xml = [xml]$_.ToXml()
        [PSCustomObject]@{
            Time = $_.TimeCreated 
            NewProcessName = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "NewProcessName" }).'#text'
            CommandLine = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "CommandLine" }).'#text'
            SubjectUserName = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "SubjectUserName" }).'#text'
        }
    } | Format-Table -AutoSize

 Time                 NewProcessName                                                           CommandLine                                                                 SubjectUserName
----                 --------------                                                           -----------                                                                 ---------------
7/01/2025 11:00:01 PM C:\Program Files\TitanAgent\titan_guard.exe                              titan_guard.exe  --monitor                                                  W01Server0111$
7/01/2025 11:00:02 PM C:\Program Files\TitanAgent\titan_guard.exe                              titan_guard.exe  --full_check                                               W01Server0111$

5. 查询最近1000条日志,并排除processName和CommandLine含有一些关键字的单词

Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4688]]" -MaxEvents 1000 | 
    Where-Object { 
        $xml = [xml]$_.ToXml()
        $processName = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "NewProcessName" }).'#text'
		$CommandLine = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "CommandLine" }).'#text'
        $processName -notmatch 'titan_guard\.exe' -and $processName -notmatch 'splunk-.*\.exe' -and $processName -notmatch 'conhost\.exe' -and $processName -notmatch 'Dllhost\.exe' -and
		$CommandLine -notmatch 'agent_.*\.bat'
    } | 
    ForEach-Object { 
        $xml = [xml]$_.ToXml()
        [PSCustomObject]@{
            Time    = $_.TimeCreated
            Process = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "NewProcessName" }).'#text'
            Command = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "CommandLine" }).'#text'
            User    = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "SubjectUserName" }).'#text'
        }
    } | Format-Table -AutoSize

6. 新增时间过滤条件

$StartTime = Get-Date "2025-07-01 00:00:00" # 开始时间  
$EndTime = Get-Date "2025-07-01 01:50:59"   # 结束时间

$Filter = @{
    LogName   = 'Security'
    ID        = 4688            # 进程创建事件      
    StartTime = $StartTime          
    EndTime   = $EndTime              
}

Get-WinEvent -FilterHashtable $Filter -MaxEvents 1000 | 
    Where-Object { 
        $xml = [xml]$_.ToXml()
        $processName = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "NewProcessName" }).'#text'
		$CommandLine = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "CommandLine" }).'#text'
        $processName -notmatch 'titan_guard\.exe' -and $processName -notmatch 'splunk-.*\.exe' -and $processName -notmatch 'conhost\.exe' -and $processName -notmatch 'Dllhost\.exe' -and
		$CommandLine -notmatch 'agent_.*\.bat'
    } | 
    ForEach-Object { 
        $xml = [xml]$_.ToXml()
        [PSCustomObject]@{
            Time    = $_.TimeCreated
            Process = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "NewProcessName" }).'#text'
            Command = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "CommandLine" }).'#text'
            User    = ($xml.Event.EventData.Data | Where-Object { $_.Name -eq "SubjectUserName" }).'#text'
        }
    } | Format-Table -AutoSize

# 0x02 后记

点赞,收藏,关注,后续会持续更新该笔记!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值