Guten Tag, Kollegen. Wie Sie wissen, gibt es ein sehr nützliches Dienstprogramm - sysmon . Kurz gesagt, Sie können Ereignisse, die unter Windows auftreten, erfassen und "protokollieren". Ein solches Ereignis ist ein Versuch, eine Netzwerkverbindung herzustellen. So können Sie versuchen, herauszufinden, wohin Ihre Anwendungen gehen. Dafür brauchen wir:
Im Prinzip brauchen wir ein bisschen Fantasie. Sysmon schreibt Ereignisse in das Microsoft-Windows-Sysmon/Operational
. Also müssen wir sie herausholen, zerlegen und anzeigen. So etwas wie das:
$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
Leider sind die Werte in der Properties
Eigenschaft eine Liste, nur Werte ohne Schlüssel. Um sie zu binden, musste ich daher grob handeln. Letztendlich nehmen wir diese Werte einfach aus jedem Protokolleintrag, konvertieren sie in Objekte und fügen sie dann als Scheitelpunkte zum Diagramm hinzu und zeigen sie an.
Es ist wichtig zu bedenken, dass ein Prozess mit demselben „Pfad“ viele Male ausgeführt werden kann. Andererseits wird ein Scheitelpunkt mit demselben Namen nicht zweimal hinzugefügt. Um jeden Prozess im Diagramm eindeutig darzustellen, ändern wir den ursprünglichen Wertesatz geringfügig und fügen zwei neue hinzu. Dies ermöglicht es uns, den Prozess genau zu identifizieren, da seine Kennung ein relativ eindeutiger Wert ist.
SourceString = "$($_.Properties[4].value)`:$($_.Properties[3].value)" DestinationString = "$($_.Properties[14].value)`:$($_.Properties[16].value)"
So könnte es aussehen

Ich hoffe, das ist jemandem nützlich