
جدار حماية RPC لنظام ويندوز يقوم بتدقيق واكتشاف وحظر استدعاءات الإجراءات البعيدة الخبيثة لمنع الحركة الجانبية والاستطلاع واستغلال الهجمات المستندة إلى RPC مثل DCSync وZeroLogon.
اطّلع على مقالنا حول جدار حماية RPC أو محادثتنا في BlackHat لفهم أفضل لـ RPC وهجمات RPC والحل: جدار حماية RPC.
انضم إلى مساحة عمل مجتمع Slack |Zero| Labs لأي أسئلة أو مشكلات أو ببساطة للتحية.
نود أيضًا أن نسمع منك عبر البريد الإلكتروني (إذا كنت من هذا النوع). اتصل بنا على [email protected]
يعرض البرنامج التعليمي التالي التثبيت والإعداد الأساسي لجدار حماية RPC، بالإضافة إلى عرض توضيحي لكيفية حمايته من هجمات RPC المختلفة.
RPC هي الآلية الأساسية المستخدمة في العديد من تقنيات الحركة الجانبية، الاستكشاف، هجمات الترحيل، أو ببساطة لاستغلال خدمات RPC الضعيفة.
هجوم DCSync؟ عبر RPC. DCOM عن بُعد؟ عبر RPC. WMIC؟ عبر RPC. SharpHound؟ عبر RPC. PetitPotam؟ عبر RPC. PsExec؟ عبر RPC. ZeroLogon؟ عبر RPC... حسنًا، لقد فهمت الفكرة :)
في جميع أنحاء هذا المستند، سنستخدم المصطلحات التالية:
يمكن استخدامه لتدقيق جميع استدعاءات RPC عن بُعد. بمجرد تشغيل أي أدوات هجوم عن بُعد، سترى أي UUIDs و Opnums لـ RPC تم استدعاؤها عن بُعد.
شاهد مثالًا للتكوين هنا.
عندما يتم تكوين تكوين RPCFW للتدقيق، تُكتب الأحداث في سجل أحداث Windows. تُكتب أحداث مرشحات RPC في سجل الأمان، بمعرف الحدث 5712. تُسجل سجلات جدار حماية RPC في Application/RPCFW.
يمكن للمستخدمين إعادة توجيه هذه السجلات إلى نظام SIEM الخاص بهم، واستخدامها لإنشاء خطوط أساس لحركة مرور RPC عن بُعد للخوادم المختلفة. عند تدقيق استدعاء RPC غير طبيعي، استخدمه لإطلاق تنبيه لفريق SOC الخاص بك.
قمنا بدمج العديد من قواعد Sigma التي يمكن استخدامها لكشف أنشطة وهجمات RPC غير المعتادة.
يمكن تكوين تكوين RPCFW لحظر وتدقيق استدعاءات RPC الخبيثة فقط. لا يتم تدقيق جميع استدعاءات RPC الأخرى لتقليل الضوضاء وتحسين الأداء.
بمجرد اكتشاف استدعاء RPC خبيث محتمل، يتم حظره وتدويره. يمكن استخدام هذا لتنبيه فريق SOC الخاص بك، مع الحفاظ على حماية خوادمك.
لتعزيز الحماية، يمكنك استخدام إمكانيات تصفية RPC، التي يتم دعمها أيضًا عبر RpcFwManager.exe.
مثال على هذا التكوين موجود هنا.
يتكون من 3 مكونات:
بينما توجد مزايا وعيوب لاستخدام كل طريقة، هناك ميزتان رئيسيتان لاستخدام جدار حماية RPC تتطلبان اهتمامًا خاصًا. وهما:
من ناحية أخرى، تعتبر مرشحات RPC ممتازة للسماح أو ربط UUIDs بالجملة، لأنها تفعل ذلك دون أي مشاكل.
قبل تشغيل أي أمر، يُوصى بالتحقق من حالة النشر. يتم ذلك عن طريق إصدار الأمر '/status':
RpcFwManager.exe /status
سيظهر هذا حالة كل من جدار حماية RPC ومرشحات RPC. سيعرض هذا معلومات تفصيلية عن حالة التثبيت، وكذلك حالة تشغيل النشر.
يمكن إضافة لاحقة fw أو flt في نهاية كل أمر تقريبًا. هذا يخبر مدير RPCFW ما إذا كان الأمر يُطبق على جدار حماية RPC ('fw') أم مرشحات RPC ('flt') أم كليهما عند عدم استخدام أي لاحقة.
قم بتثبيت الميزة ذات الصلة (مرشحات RPC / جدار حماية RPC / كليهما).
تأكد من إغلاق عارض الأحداث أثناء التثبيت / إلغاء التثبيت. أيضًا، من الجيد الإيقاف وإلغاء التثبيت قبل التثبيت، للتأكد من عدم وجود إصدارات سابقة مثبتة.
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RpcFwManager.exe /install
إلغاء التثبيت يفعل العكس. أيضًا هنا من الجيد التأكد من إيقاف الخدمة قبل إلغاء التثبيت.
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
مرشحات RPC، بطبيعتها، تُطبق على مستوى النظام، على أي خادم RPC. تطبيق هذه المرشحات مستمر عبر إعادة التشغيل أيضًا. أي عملية جديدة أو قديمة ستكون محمية بواسطة مرشحات RPC، وفقًا لـ تكوين RPCFW.
جدار حماية RPC يُحقن ويحمي أي عملية خادم RPC تستمع لاستدعاءات RPC عن بُعد. يتم ذلك عن طريق حقن جدار حماية RPC في العمليات التي تحمل RPCRT4.DLL (وقت تشغيل RPC). بمجرد التحميل، سيكتشف جدار حماية RPC ما إذا كان خادم RPC يستمع لاستدعاءات RPC عن بُعد. إذا لم يكن كذلك، فإنه يفرغ نفسه. إذا كانت العملية خادم RPC صالحًا، يبدأ جدار حماية RPC في تدقيق ومراقبة استدعاءات RPC الواردة، وفقًا لـ تكوين RPCFW.
الطريقة الموصى بها لحماية خدمات RPC هي باستخدام الأمر '/start'. هذا يبدأ خدمة جدار حماية RPC (للاحقة 'fw' أو بدون لاحقة)، وينشئ مرشحات RPC (للاحقة 'flt' أو بدون لاحقة).
RpcFwManager.exe /start
من الممكن أيضًا استخدام جدار حماية RPC بشكل مؤقت، لحماية عمليات محددة. هذا لن يبدأ خدمة جدار حماية RPC، ولن يستمر عبر إعادة التشغيل.
لحماية عملية واحدة بواسطة معرف العملية (PID):
RpcFwManager.exe /start pid <pid>
لحماية عملية واحدة بالاسم:
RpcFwManager.exe /start process <process name>
لإيقاف الحماية، ما عليك سوى إصدار الأمر '/stop' مع اللاحقة المناسبة (لا يمكن إيقاف الحماية لعملية معينة).
RpcFwManager.exe /stop
وفقًا للاحقة المستخدمة ('fw' أو 'flt' أو بدون)، سيؤدي هذا إلى إيقاف خدمة جدار حماية RPC وإلغاء تحميل ملف dll الخاص بـ جدار حماية RPC من جميع العمليات. بالنسبة لـ مرشحات RPC، ستحذف جميع المرشحات التي أنشأها مدير RPCFW.
بمجرد البدء، سيبقى جدار حماية RPC ثابتًا عبر إعادة التشغيل. مرشحات RPC أيضًا ثابتة.
يبحث مدير RPCFW عن ملف RpcFw.conf، في نفس دليل الملف القابل للتنفيذ. يستخدم هذا الملف خيارات التكوين التالية:
هام: يجب أن يسبق كل سطر تكوين إما 'fw:' أو 'flt:' للإشارة إلى ما إذا كان السطر مطبقًا على جدار حماية RPC أم مرشح RPC.
لرؤية المزيد من "الأشياء" المتعلقة بـ RPC، هناك أمر show. الآن، يظهر فقط العمليات المحمية، التي لا يمكن حمايتها بواسطة وحدة جدار حماية RPC.
RpcFwManager.exe /show
ترتيب التكوين مهم، حيث أن أول تطابق يحدد نتيجة استدعاء RPC.
على سبيل المثال، سيقوم مقتطف التكوين التالي بحماية Domain Controller من هجوم DCSync باستخدام جدار حماية RPC. يقوم بذلك عن طريق تمكين opnum 3 الخطير DRSGetNCChanges من UUID لـ MS-DRSR فقط من وحدات Domain Controllers الأخرى.
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr1> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr2> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 opnum:3 action:block
كلما تغير التكوين، تحتاج إلى إعلام rpcFirewall.dll عبر أمر التحديث:
RpcFwManager.exe /update
بالنسبة لـ جدار حماية RPC، افتح عارض الأحداث -> تطبيقات وخدمات السجلات -> RPCFW. تشير معرفات الأحداث 1 و 2 إلى أحداث 'حماية' و 'إلغاء حماية'. يقوم الحدث 3 بتدقيق استدعاءات RPC الفعلية. أيضًا، أضف عمود الكلمات المفتاحية. سيحتوي هذا العمود على تدقيق نجاح/فشل، مما يشير إلى ما إذا تم حظر استدعاء RPC أم لا.
بالنسبة لـ مرشحات RPC، افتح عارض الأحداث -> الأمان -> RPCFW. قم بتصفية معرف الحدث 5712.
نعم! لا تتردد في تقديم طلب سحب.
نريد هذا أيضًا! يرجى التواصل معنا بأي أفكار أو اقتراحات أو مشكلات تواجهها: [email protected]
لمزيد من التفاصيل انظر LICENSE.
| اسم المعامل | الشرح | مدعوم بواسطة ... |
|---|
| opnum: | يطابق opnum لـ RPC | جدار حماية RPC |
| verbose: | يمكن أن يكون true أو false. عندما يكون true، يُخرج معلومات تصحيح لأستدعاءات RPC محددة (الافتراضي false) | جدار حماية RPC |
| prot: | يطابق البروتوكول المستخدم مع أي من ثوابت تسلسل البروتوكول | كل من جدار حماية RPC ومرشحات RPC |
| addr: | يطابق عنوان IP عن بُعد (IPv4 أو IPv6، بما في ذلك CIDR) | جدار حماية RPC وجزئيًا بواسطة مرشحات RPC، اقرأ المزيد هنا |
| uuid: | يطابق uuid محدد | كل من جدار حماية RPC ومرشحات RPC |
| action: | يمكن أن يكون allow أو block (الافتراضي allow) | كل من جدار حماية RPC ومرشحات RPC |
| audit: | يمكن أن يكون true أو false. يتحكم في ما إذا كانت الأحداث تُكتب في سجل RPCFW (الافتراضي false) | كل من جدار حماية RPC ومرشحات RPC |
| sid: | يطابق مستخدمًا مصادقًا مع معرف أمان. يمكن أن يكون مستخدمًا محددًا أو مجموعة. | كل من جدار حماية RPC ومرشحات RPC |