Bonjour, chers collègues. Récemment, il a été beaucoup question de transférer des applications des infrastructures physiques, lire les centres de données, vers le cloud. Par exemple, dans Microsoft Azure . Eh bien, ou en général, à propos de tout autre transfert d'une ou plusieurs applications d'un endroit à un autre. L'un des plus gros problèmes de ce type de problème est la nécessité de trouver toutes les dépendances externes de l'application. Cela ne fait pas référence aux dépendances dans le code, mais aux dépendances sur les systèmes externes par rapport à l'application. En fait, nous devons parfois trouver avec qui notre proposition parle et qui lui parle. Comment faire si nous n'avons pas de SIEM complet, pour ainsi dire, en utilisant le SIEM pour les pauvres. En fait, pour les systèmes sous Windows, il y a la phrase suivante.
Nous avons besoin de:
- Activer la journalisation dans le pare-feu Windows sur toutes les machines, d'une manière ou d'une autre associées à l'application
- Télécharger sur le module PSQuickGraph de la station d'administration
- Compiler et analyser les journaux, construire un graphique de liens
Dans sa forme la plus simple, l'analyse des journaux ressemble à ceci. Horrible, front, mais que pouvez-vous faire. En fait, j'étais trop paresseux pour écrire la logique de la course aux journaux, je viens de tout copier deux fois. Mais pour nos fins, "grossièrement et dans le front" ira aussi afin de montrer l'idée
$f = gc "C:\Temp\pfirewall_public.log" $regex = '^(?<datetime>\d{4,4}-\d{2,2}-\d{2,2}\s\d{2}:\d{2}:\d{2})\s(?<action>\w+)\s(?<protocol>\w+)\s(?<srcip>\b(?:\d{1,3}\.){3}\d{1,3}\b)\s(?<dstip>\b(?:\d{1,3}\.){3}\d{1,3}\b)\s(?<srcport>\d{1,5})\s(?<dstport>\d{1,5})\s(?<size>\d+|-)\s(?<tcpflags>\d+|-)\s(?<tcpsyn>\d+|-)\s(?<tcpack>\d+|-)\s(?<tcpwin>\d+|-)\s(?<icmptype>\d+|-)\s(?<icmpcode>\d+|-)\s(?<info>\d+|-)\s(?<path>.+)$' $log = $f | % { $_ -match $regex | Out-Null if ($Matches) { [PSCustomObject]@{ action = $Matches.action srcip = [ipaddress]$Matches.srcip dstport = $Matches.dstport tcpflags = $Matches.tcpflags dstip = [ipaddress]$Matches.dstip info = $Matches.info size = $Matches.size protocol = $Matches.protocol tcpack = $Matches.tcpac srcport = $Matches.srcport tcpsyn = $Matches.tcpsyn datetime = [datetime]$Matches.datetime icmptype = $Matches.icmptype tcpwin = $Matches.tcpwin icmpcode = $Matches.icmpcode path = $Matches.path } } } $f = gc "C:\Temp\pfirewall_public2.log" $log2 = $f | % { $_ -match $regex | Out-Null if ($Matches) { [PSCustomObject]@{ action = $Matches.action srcip = [ipaddress]$Matches.srcip dstport = $Matches.dstport tcpflags = $Matches.tcpflags dstip = [ipaddress]$Matches.dstip info = $Matches.info size = $Matches.size protocol = $Matches.protocol tcpack = $Matches.tcpac srcport = $Matches.srcport tcpsyn = $Matches.tcpsyn datetime = [datetime]$Matches.datetime icmptype = $Matches.icmptype tcpwin = $Matches.tcpwin icmpcode = $Matches.icmpcode path = $Matches.path } } } $l = $log + $log2 $g = new-graph -Type BidirectionalGraph $l | ? {$_.srcip -and $_.dstip} | % { Add-Edge -From $_.srcip -To $_.dstip -Graph $g | out-null } Show-GraphLayout -Graph $g
En fait, dans cet exemple, nous analysons simplement le journal du pare-feu Windows à l'aide d'une expression régulière, en le divisant en objets - un objet par ligne. Que Dieu la bénisse avec RAM, ne meurs pas. Dans cet exemple, nous avons deux journaux, provenant de deux machines différentes. Après l'analyse, nous fusionnons simplement tout dans un grand tableau et exécutons une recherche dessus, en ajoutant des sommets et des bords du graphique. Eh bien, et en conséquence - affichez-le. Donc, approximativement, cela ressemble à ceci:

J'espère que quelqu'un vous sera utile.