Une autre façon de voir les communications des applications

Bonjour, chers collègues. Comme vous le savez, il existe un utilitaire très utile - sysmon . En un mot, il vous permet de collecter et de «journaliser» les événements qui se produisent sur Windows. Un de ces événements est une tentative d'établissement d'une connexion réseau. Ainsi, vous pouvez essayer de savoir où vont vos applications. Pour cela, nous avons besoin de:



En principe, nous avons besoin d'un peu de fantaisie. Sysmon écrit les événements dans le journal Microsoft-Windows-Sysmon/Operational . Nous devons donc les retirer, les démonter et les afficher. Quelque chose comme ça:


 $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 

Malheureusement, les valeurs de la Properties Propriétés sont une liste, juste des valeurs, sans clés. Par conséquent, afin de les lier, j'ai dû agir grossièrement. En fin de compte, nous prenons simplement ces valeurs de chaque entrée de journal, les convertissons en objets, puis les ajoutons au graphique en tant que sommets et les affichons.


Il est important de se rappeler qu'un processus avec le même «chemin» peut être exécuté plusieurs fois. En revanche, un sommet du même nom n'est pas ajouté deux fois. Par conséquent, afin de représenter de manière unique chaque processus sur le graphique, nous modifions légèrement l'ensemble de valeurs d'origine, en ajoutant deux nouvelles. Cela nous permet d'identifier avec précision le processus, car son identifiant est une valeur relativement unique.


  SourceString = "$($_.Properties[4].value)`:$($_.Properties[3].value)" DestinationString = "$($_.Properties[14].value)`:$($_.Properties[16].value)" 

Voilà comment cela pourrait finir par chercher


sysmonlognetgraph


J'espère que cela est utile à quelqu'un

Source: https://habr.com/ru/post/fr425375/


All Articles