مساء الخير أيها الزملاء. كما تعلمون ، هناك فائدة مفيدة للغاية - sysmon . باختصار ، يسمح لك بجمع و "تسجيل" الأحداث التي تحدث على Windows. أحد هذه الأحداث هو محاولة لتأسيس اتصال بالشبكة. وبالتالي ، يمكنك محاولة معرفة أين تذهب تطبيقاتك. لهذا نحن بحاجة إلى:
من حيث المبدأ ، نحن بحاجة إلى القليل من الخيال. يكتب Sysmon الأحداث إلى سجل Microsoft-Windows-Sysmon/Operational
. لذا نحتاج إلى إخراجهم وتفكيكهم وعرضهم. شيء من هذا القبيل:
$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
لسوء الحظ ، القيم الموجودة في خاصية Properties
هي قائمة ، قيم فقط ، بدون مفاتيح. لذلك ، من أجل إلزامهم ، كان علي أن أتصرف بوقاحة. في النهاية ، نأخذ هذه القيم ببساطة من كل إدخال سجل ، ونحولها إلى كائنات ، ثم نضيفها إلى الرسم البياني على شكل رؤوس ونعرضها.
من المهم أن تتذكر أنه يمكن تشغيل عملية بنفس "المسار" عدة مرات. من ناحية أخرى ، لا تتم إضافة قمة بنفس الاسم مرتين. لذلك ، من أجل تمثيل كل عملية بشكل فريد على الرسم البياني ، نقوم بتعديل مجموعة القيم الأصلية قليلاً ، بإضافة قيمتين جديدتين. هذا يسمح لنا بتحديد العملية بدقة ، لأن معرفها هو قيمة فريدة نسبيًا.
SourceString = "$($_.Properties[4].value)`:$($_.Properties[3].value)" DestinationString = "$($_.Properties[14].value)`:$($_.Properties[16].value)"
هذه هي الطريقة التي قد ينتهي بها الأمر في النهاية

آمل أن يكون هذا مفيدًا لشخص ما