Buenas tardes, colegas. Como saben, hay una utilidad muy útil: sysmon . En pocas palabras, le permite recopilar y "registrar" eventos que suceden en Windows. Uno de esos eventos es un intento de establecer una conexión de red. Por lo tanto, puede intentar averiguar a dónde van sus aplicaciones. Para esto necesitamos:
En principio, necesitamos un poco de fantasía. Sysmon escribe eventos en el registro de Microsoft-Windows-Sysmon/Operational
. Así que tenemos que sacarlos, desarmarlos y mostrarlos. Algo como esto:
$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
Desafortunadamente, los valores en la Properties
Propiedades son una lista, solo valores, sin claves. Por lo tanto, para atarlos, tuve que actuar groseramente. En última instancia, simplemente tomamos estos valores de cada entrada de registro, los convertimos en objetos y luego los agregamos al gráfico como vértices y los mostramos.
Es importante recordar que un proceso con la misma "ruta" se puede ejecutar muchas veces. Por otro lado, un vértice con el mismo nombre no se agrega dos veces. Por lo tanto, para representar de manera única cada proceso en el gráfico, modificamos ligeramente el conjunto original de valores, agregando dos nuevos. Esto nos permite identificar con precisión el proceso, ya que su identificador es un valor relativamente único.
SourceString = "$($_.Properties[4].value)`:$($_.Properties[3].value)" DestinationString = "$($_.Properties[14].value)`:$($_.Properties[16].value)"
Así es como podría terminar viéndose

Espero que esto sea útil para alguien