Lebih banyak tentang grafik, atau cara mendeteksi ketergantungan antara aplikasi Anda

Selamat siang, kolega. Baru-baru ini, ada cukup banyak pembicaraan tentang mentransfer aplikasi dari infrastruktur fisik, membaca pusat data, ke cloud. Misalnya, di Microsoft Azure . Baik, atau secara umum, tentang transfer lain dari satu atau lebih aplikasi dari satu tempat ke tempat lain. Salah satu masalah terbesar dalam masalah semacam ini adalah kebutuhan untuk menemukan semua dependensi eksternal aplikasi. Ini merujuk bukan pada dependensi dalam kode, tetapi pada dependensi pada sistem eksternal sehubungan dengan aplikasi. Bahkan, kadang-kadang kita perlu menemukan dengan siapa proposal kita berbicara, dan siapa yang berbicara dengannya. Bagaimana melakukan ini jika kita tidak memiliki SIEM yang komprehensif, sehingga dapat dikatakan, menggunakan SIEM untuk orang miskin. Sebagai soal fakta, untuk sistem pada Windows ada kalimat berikut.


Kami membutuhkan:


  • Aktifkan logging di Windows Firewall di semua mesin, dengan satu atau lain cara yang terkait dengan aplikasi
  • Unduh ke modul admin stasiun PSQuickGraph
  • Tumpukan dan analisis log, buat grafik tautan

Dalam bentuknya yang paling sederhana, analisis log terlihat seperti ini. Mengerikan, dahi, tetapi apa yang bisa Anda lakukan. Bahkan, saya terlalu malas untuk menulis logika untuk lomba log, saya hanya menyalin semuanya dua kali. Tapi untuk tujuan kita, "dengan kasar dan di dahi" juga akan pergi untuk menunjukkan ide


$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 

Sebenarnya, dalam contoh ini, kita cukup menguraikan log Windows Firewall menggunakan ekspresi reguler, memecahnya menjadi objek - satu objek per baris. Tuhan memberkatinya dengan RAM, jangan mati. Dalam contoh ini, kami memiliki dua log, dari dua mesin yang berbeda. Setelah parsing, kita cukup menggabungkan semuanya menjadi satu array besar dan menjalankan pencarian di atasnya, menambahkan simpul dan tepi grafik. Nah, dan sebagai hasilnya - tampilkan. Jadi, kira-kira, hasilnya:


appLinks


Saya harap seseorang berguna.

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


All Articles