同事们下午好。 如您所知,有一个非常有用的实用程序sysmon 。 简而言之,它使您可以收集和“记录” Windows上发生的事件。 一种这样的事件是尝试建立网络连接。 因此,您可以尝试找出应用程序的去向。 为此,我们需要:
原则上,我们需要一点幻想。 Sysmon将事件写入Microsoft-Windows-Sysmon/Operational
日志。 因此,我们需要将它们取出,分解并展示。 像这样:
$ids = Get-WinEvent -LogName Microsoft-Windows-Sysmon/Operational | ? {$_.id -eq 3} $commObjects = $ids | % { New-Object psobject -Property @{ RuleName = $_.Properties[0].value UtcTime = $_.Properties[1].value ProcessGuid = $_.Properties[2].value ProcessId = $_.Properties[3].value Image = $_.Properties[4].value User = $_.Properties[5].value Protocol = $_.Properties[6].value Initiated = $_.Properties[7].value SourceIsIpv6 = $_.Properties[8].value SourceIp = $_.Properties[9].value SourceHostname = $_.Properties[10].value SourcePort = $_.Properties[11].value SourcePortName = $_.Properties[12].value DestinationIsIpv6 = $_.Properties[13].value DestinationIp = $_.Properties[14].value DestinationHostname = $_.Properties[15].value DestinationPort = $_.Properties[16].value DestinationPortName = $_.Properties[17].value SourceString = "$($_.Properties[4].value)`:$($_.Properties[3].value)" DestinationString = "$($_.Properties[14].value)`:$($_.Properties[16].value)" } } $g = New-Graph -Type BidirectionalGraph $commObjects | % { Add-Edge -From $_.SourceString -To $_.DestinationString -Graph $g | Out-Null } Show-GraphLayout -Graph $g
不幸的是, Properties
属性中的值是一个列表,只是值,没有键。 因此,为了约束它们,我必须采取粗鲁的行动。 最终,我们仅从每个日志条目中获取这些值,将它们转换为对象,然后将它们作为顶点添加到图形中并显示出来。
重要的是要记住,具有相同“路径”的流程可以运行多次。 另一方面,具有相同名称的顶点不会被添加两次。 因此,为了唯一地表示图上的每个过程,我们会稍微修改原始值集,并添加两个新值。 因为它的标识符是一个相对唯一的值,所以这使我们能够准确地标识该过程。
SourceString = "$($_.Properties[4].value)`:$($_.Properties[3].value)" DestinationString = "$($_.Properties[14].value)`:$($_.Properties[16].value)"
这可能是最终的样子

我希望这对某人有用