
تحليل حول ثغرة CVE-2019-9745.
الإبداع هو جوهر اختبار الاختراق، وهو ما يبقي عملنا ممتعًا. ومع ذلك، أحد المزالق هو الميل إلى "الإفراط في هندسة" سيناريوهات الهجوم والتركيز فقط على الأخطاء (حالات الخطأ). غير أن العيوب (السلوك غير المقصود) قد تكون موجودة وتؤدي إلى نتائج مدمرة بنفس القدر. يقدم هذا المقال دراسة حالة لإظهار أهمية اختبار الاختراق لمثل هذه العيوب. وفي الوقت نفسه، يقدم حجة لاعتماد عملية SDLC (دورة حياة التطوير الآمن).
هذا المقال جزء من الإفصاح المسؤول (RD) عن الثغرة CVE-2019-9745 وقد كُتب بالتعاون الوثيق مع البائع CloudCTI. يقدم نظرة عامة رفيعة المستوى عن الثغرة قبل الغوص في التفاصيل التقنية. وبعد توضيح استغلال الثغرة، يُقدَّم استنتاج مع الدروس المستفادة.
أداة CloudCTI Recognition Configuration Tool التي فحصناها خلال أحد اختبارات الاختراق لدينا تُستخدم لاسترجاع المعلومات من برامج CRM (إدارة علاقات العملاء). وهذا يوفر لموظفي مراكز الاتصال معلومات ذات صلة أثناء مكالمات العملاء. تم تحديد العديد من المشكلات التي يمكن ربطها معًا لاختراق النظام المحلي بالكامل. يود البائع التأكيد على أن هذا لا يؤثر على أنظمة العملاء الآخرين ولا أنظمتهم الخاصة.
كما هو الحال مع العديد من الثغرات الأمنية، تكمن مشكلة مهمة في التحقق من صحة البيانات القادمة من خارج نطاق نفوذك. بنفس القدر من الأهمية هو إدراك أن الأنظمة والبرمجيات تعمل في بيئات معادية. لقد علمنا الوقت والخبرة أن التنصت يشكل تهديدًا على الإنترنت. وينطبق الشيء نفسه على قنوات الاتصال الأخرى، حتى داخل النظام نفسه. وكان هذا أساسيًا في اكتشاف الثغرة.
يُظهر تحليل السبب الجذري للمشكلات التي تمت مواجهتها أهمية الممارسات مثل TM (نمذجة التهديدات). يساعد TM في تحديد المخاطر في المراحل المبكرة من التصميم والتطوير. ويمكن أن يؤدي ذلك إلى تخفيف المخاطر غير المقبولة أو إعادة التصميم/إعادة التنفيذ. على الرغم من أن القارئ مُشجَّع على إجراء تحليله الخاص، يتم توفير أوصاف للإجراءات المضادة للبائع كمرجع.
تتكون برمجيات البائع من أربعة تطبيقات تعمل معًا. التطبيق الأول هو واجهة المستخدم الرسومية (GUI). وهذا يسمح للمستخدم ببدء استرجاع المعلومات من عدة حزم برامج CRM:
يفوّض واجهة المستخدم الرسومية استرجاع المعلومات إلى خدمة (التطبيق الثاني) عن طريق إرسال رسالة. تتجلى هنا أولى المشكلات الأمنية: فليس بإمكان أي شخص على النظام مراقبة الرسائل بين واجهة المستخدم الرسومية والخدمة لتحديد تنسيقها ومحتواها (مما يؤثر على السرية) فحسب، بل يمكنه أيضًا إرسال رسائله الخاصة (مما يؤثر على التفويض). علاوة على ذلك، لا يتم التحقق من مصدر الرسائل الموجهة إلى الخدمة (مما يؤثر على عدم الإنكار). في مصطلحات نمذجة التهديدات STRIDE، يعني هذا أن النظام عرضة لكشف المعلومات والعبث. وبالفعل، كانت المعلومات المستخلصة من هذه الرسائل أساسية في اكتشاف الثغرة.
التطبيق الثالث هو واحد من العديد من أدوات الاستيراد المتخصصة. تقوم الخدمة بتحميل استرجاع المعلومات لحزمة CRM محددة إلى أداة استيراد محددة. تحتوي الرسالة التي يرسلها واجهة المستخدم الرسومية على تعليمات محددة لأداة الاستيراد هذه. بالنظر إلى أداة استيراد CRM الخاصة بـ Exquise، يتبين أن استرجاع المعلومات يُفوَّض أيضًا إلى تطبيق خارجي (رابع). عند فحص المنطق الداخلي لأداة الاستيراد، تم اكتشاف أنه يمكن تحديد التطبيق الخارجي في الرسالة بين واجهة المستخدم الرسومية والخدمة. المشكلة التي تظهر هنا هي أن التطبيق الخارجي يُنفَّذ دون التحقق من هويته (مما يؤثر على عدم الإنكار).
من خلال ربط هذه المشكلات معًا، تمكنا من التنصت على الرسائل لتحديد تنسيقها وإرسال رسالة نحدد فيها تطبيقًا خارجيًا خبيثًا خاصًا بنا. يتم تنفيذ ذلك التطبيق الخارجي بنفس صلاحيات أداة الاستيراد/الخدمة. وبما أن هذه الصلاحيات هي الأعلى الممكنة داخل النظام، يتم تحقيق السيطرة الكاملة ويتعرض النظام للاختراق.
يتم تخفيف هذه المشكلات من قبل البائع عن طريق تشفير الرسائل (مما يخفف مشكلة السرية) من خلال استخدام أسرار مشتركة فريدة (مما يخفف مشكلة التفويض) لا يمكن الوصول إليها إلا من قبل مستخدمي النظام الموثقين الذين يملكونها (مما يخفف مشكلة عدم الإنكار الأولى). أخيرًا، التطبيق الخارجي موقَّع تشفيريًا (مما يخفف مشكلة عدم الإنكار الثانية). يؤدي الجمع بين هذه الإجراءات إلى تخفيف الثغرة بنجاح.
عند تثبيت تطبيق واجهة المستخدم الرسومية CloudCTI Recognition Configuration Tool (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\CloudCTI Recognition Configuration Tool.exe) يتم فحصه باستخدام Process Explorer. يكشف هذا عن تثبيت خدمة مصاحبة (Recognition Update Client Service) وتنفيذها بصلاحيات NT AUTHORITY\SYSTEM:
عند فحص الملف التنفيذي للخدمة (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\RecognitionUpdateClientServiceService.exe) يتضح أنه تم تطويره باستخدام لغة البرمجة .NET. يمكن إلغاء ترجمته باستخدام dnSpy للحصول على نظرة ثاقبة في منطقه الداخلي، والذي سيتم تفصيله أدناه.
RUCS2017Service (مساحة الاسم الداخلية .NET في الملف التنفيذي للخدمة) يتبين أنها غلاف رفيع حول مساحة الاسم RUCS2017 (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\RUCS2017.dll). يعرّف هذا خادم Named Pipe باسم RUCS20151029 في RUCS2017.dll:RUCS2017.TRUCS2017:902:
يتم بدء تشغيل خادم Named Pipe هذا في RUCS2017.dll:RUCS2017.TRUCS2017:833:
يُستخدم سطر أوامر Powershell التالي لتأكيد أن هذه القناة نشطة بالفعل على النظام:``` PS C:\Users\hacker> [System.IO.Directory]::GetFiles("\.\pipe\") |Select-String -Pattern "RUCS20151029"
\.\pipe\RUCS20151029
باستخدام [AccessChk](https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk) يتم فحص حقوق الوصول للأنبوب. من خلال هذا يُكتشف أن الأنبوب يمكن القراءة منه (*R*) والكتابة إليه (*W*) بواسطة أي مستخدم للنظام (*الجميع*):```
PS C:\Users\hacker> .\accesschk.exe \pipe\RUCS20151029
Accesschk v6.12 - Reports effective permissions for securable objects
Copyright (C) 2006-2017 Mark Russinovich
Sysinternals - www.sysinternals.com