يوم جيد ، زملائي. في الآونة الأخيرة ، كان هناك الكثير من الحديث عن نقل التطبيقات من البنى التحتية المادية ، وقراءة مراكز البيانات ، إلى السحابة. على سبيل المثال ، في Microsoft Azure . حسنًا ، أو بشكل عام ، حول أي نقل آخر لتطبيق أو أكثر من مكان إلى آخر. واحدة من أكبر المشاكل في هذا النوع من المشاكل هي الحاجة إلى إيجاد كل التبعيات الخارجية للتطبيق. هذا لا يشير إلى التبعيات في التعليمات البرمجية ، ولكن إلى التبعيات على الأنظمة الخارجية فيما يتعلق بالتطبيق. في الواقع ، نحتاج أحيانًا إلى معرفة من يتحدث اقتراحنا ، ومن يتحدث إليه. كيف نفعل ذلك إذا لم يكن لدينا SIEM شامل ، إذا جاز التعبير ، باستخدام SIEM للفقراء. في الواقع ، بالنسبة للأنظمة على Windows ، توجد الجملة التالية.
نحن بحاجة إلى:
- تمكين تسجيل الدخول إلى Windows Firewall على جميع الأجهزة بطريقة أو بأخرى مرتبطة بالتطبيق
- قم بتنزيل وحدة PSQuickGraph الخاصة بمحطة الإدارة
- يمكنك تجميع السجلات وتحليلها وإنشاء رسم بياني للروابط
في أبسط أشكاله ، يبدو تحليل السجل شيئًا كهذا. فظيع ، جبهته ، ولكن ماذا يمكنك أن تفعل. في الواقع ، كنت كسولًا جدًا بحيث لا يمكنني كتابة منطق لسباق السجل ، لقد نسخت كل شيء مرتين فقط. ولكن لأغراضنا ، "بوقاحة وفي الجبين" ستذهب أيضًا لإظهار الفكرة
$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
في الواقع ، في هذا المثال ، نقوم ببساطة بتحليل سجل جدار حماية Windows باستخدام تعبير عادي ، ونقسمه إلى كائنات - كائن واحد لكل سطر. بارك الله بها بذاكرة الوصول العشوائي ، لا تموت. في هذا المثال ، لدينا سجلان ، من جهازين مختلفين. بعد التحليل ، نقوم ببساطة بدمج كل شيء في صفيف كبير واحد ونقوم بالبحث عليه ، بإضافة رؤوس وحواف الرسم البياني. حسنا ، ونتيجة لذلك - عرضه. لذلك ، يبدو تقريبًا نتيجة لذلك:

آمل أن يأتي شخص ما في متناول اليدين.