
PoC لثغرة قراءة ملف عشوائي في Acronis - CVE-2022-45451
يعاني برنامج تشغيل الفحص المضاد للبرامج الضارة "ngscan" من Acronis من تحكم وصول غير صحيح / غير مناسب في منفذ اتصال المرشح. يدعم برنامج تشغيل المرشح الدقيق الميزات التالية التي قد يتم استغلالها:
بدأ تحليل برنامج تشغيل ngscan.sys عن طريق إعادة ترجمته باستخدام Ida Pro. لاحظ الباحث أنه على الرغم من إنشاء كائن جهاز، لم يتم إنشاء روابط رمزية للتفاعل مع برنامج التشغيل باستخدام DeviceIoControl.
وبناءً على ذلك، استمر التحليل بمراقبة إمكانيات منفذ اتصال المرشح.
أثناء التهيئة، يقوم برنامج التشغيل بإنشاء خمسة (5) منافذ اتصال لدعم التفاعل من العمليات الأخرى.

الشكل 1: روتين يدعم إنشاء ما يصل إلى خمسة (5) منافذ اتصال مرشح (FCP)
لُوحِظ استدعاء هذه الوظيفة، حيث تقوم بتهيئة كل من منافذ FCP الخمسة باستخدام dacl افتراضي، مع إنشاء آخر منفذ FCP باستخدام dacl فارغ (NULL).

الشكل 2: إنشاء FCP مع DACL افتراضي/فارغ
استمر التحليل بمراقبة وظائف CreateNotifyCallback و MessageNotifyCallback المحددة بواسطة برنامج تشغيل المرشح. يتم استدعاء وظائف رد الاتصال هذه كلما فتحت عملية اتصالاً، وأرسلت رسالة إلى منفذ الاتصال.

أظهر الفحص الأولي لـ MessageNotifyCallback أن المخزن المؤقت للرسالة الواردة يجب أن يستوفي المتطلبات التالية:
بمجرد اجتياز الفحوصات، يتم تحليل رقم وظيفة من InputBuffer واستخدامه في حالات switch التالية لتحديد الوظيفة التي سيتم تنفيذها باستخدام الإدخال المقدم.

الشكل 3: مجموعة فرعية من الوظائف المدعومة من MessageNotifyCallback
أظهر فحص كل وظيفة من الوظائف المدعومة وجود وظيفتين مهمتين للاستغلال المحتمل مما يؤدي إلى قراءة ملف تعسفي.

الشكل 4: وظائف تدعم إنشاء سياق الفحص وإرجاع مؤشر الملف الخاص بسياق الفحص (السطور 206, 233)
على الرغم من أن الوظيفة الدقيقة لـ "سياق الفحص" غير معروفة تمامًا، أظهر التحليل أنه يمكن إنشاء سياق فحص ملف لأي ملف معين محدد في InputBuffer الخاص بالمستخدم. بمجرد إنشاء سياق الفحص، يتم إرجاع معرف سياق الفحص إلى المستخدم في المخزن المؤقت للإخراج.

الشكل 5: روتين إنشاء سياق الفحص يعيد بيانات سياق الفحص إلى المستخدم

الشكل 6: البيانات المرسلة إلى برنامج تشغيل المرشح الدقيق لطلب الوصول إلى ملف التسجيل SAM المحمي (\??\C:\Windows\System32\config\SAM)

الشكل 7: الرد من برنامج تشغيل المرشح الدقيق بما في ذلك معرف سياق الفحص (0x3aaf)
بمجرد إنشاء سياق الفحص واسترجاع المعرف، يمكن فتح مؤشر للملف الذي تم إنشاء سياق الفحص من أجله في التطبيق الطالب عن طريق إرسال رسالة مرة أخرى إلى منفذ الاتصال.

الشكل 8: استرجاع مؤشر ملف سياق الفحص الذي تم إنشاؤه
تم استدعاء الوظيفة المسماة CreateFileReturnHandle0 فقط إذا أعادت الوظيفة السابقة SearchScanContextsByID سياق فحص صالح.
على سبيل المثال، فقط إذا قدمت العملية الطالبة معرف سياق صالح تم إنشاؤه مسبقًا عن طريق استدعاء وظيفة إنشاء الفحص المذكورة أعلاه.
نجح البرنامج الطالب في فتح مؤشر للملف المميز عن طريق توفير معرف سياق الفحص للوظيفة المحددة في الشكل 8 (الشكل 4، السطر 233).

الشكل 9: استرجاع ناجح لمؤشر الملف لملف SAM
باستخدام processhacker، تم تأكيد الوصول إلى مؤشر الملف عن طريق عرض مؤشرات العملية الطالبة:

الشكل 10: عملية تحتوي على مؤشر لملف SAM

الشكل 11: تم منح حق الوصول للقراءة للمؤشر الذي تم الحصول عليه
أظهر استكشاف أعمق للوظائف المدعومة التحكم في ثلاثة مفاتيح تسجيل قد يتم استغلالها للحصول على تنفيذ التعليمات البرمجية.

الشكل 12: وظائف تدعم فتح مؤشرات لمفاتيح التسجيل

الشكل 13: فتح مفاتيح التسجيل التي تحدد dll مراقبة الخطاف لحقنه في عملية

الشكل 14: وظيفة OpenKey توضح القدرة على تعديل مفتاح تسجيل ببيانات يتحكم فيها المستخدم
لم يتم تحديد ظروف حقن dll للربط بواسطة مجموعة Acronis، على الرغم من أنه إذا تم تمكين مراقبة الخطاف، يُعتقد أن dll المحدد بواسطة مفاتيح التسجيل x64HookLib و x86HookLib سيتم حقنه في عملية محددة.

الشكل 15: x64HookLibKey يحدد dll الربط C:\ProgramData\Acronis\NGMP\shared\acr_protect.x64.dll
تم حذف عملية فتح سياق الفحص في التحليل لقراءة الملف التعسفي.
قد تقوم عملية، بدلاً من إنشاء سياق فحص، بتجربة قوية لمعرفات سياق الفحص عن طريق إصدار طلبات متكررة لوظيفة GetScanContextByID، والتكرار على قيم ContextID حتى يتم العثور على سياق فحص واحد أو أكثر صالح.