Asma Abdullah|اقعد في البيت
Asma Abdullah|اقعد في البيت

@Asma192019

38 تغريدة 67 قراءة May 12, 2020
ثريد عن محاضرة م. محمد الدوب @Voulnet
@SAFCSP
#سايبر_نايت بعنوان "Deserializtion"
الشريك والممكن الرقمي@stc_ksa
#SAFCSP 
#الأمن_السيبراني
في البداية ما هو Deserialization؟ • حسنًا ، هذا هو الجواب على serialization ... فما هو serialization؟• serialization هو عملية تحويل كائن إلى سلسلة أو تنسيق ثنائي يسمح لنا بحفظ الكائن في ملف أو إرساله عبر السلك. إزالة التسلسل هي عملية تفريغ هذا الكائن المتسلسل إلى حالته الأصلية
كما يمكننا أن نرى في الشكل ، يتم إجراء تسلسل للكائن كمجموعة من وحدات البايت أو السلسلة ، ثم يتم إرسالها ، ثم يتم إلغاء تسلسلها إلى نفسها. دعونا نرى بعض الأمثلة التسلسل / إلغاء التسلسل
امثله ٪
تحدث هجمات Deserialization عندما نعيد كائنات ليس من النوع النظيف المتوقع لها ، ولكن في شكل معدل يتضمن تغييرات ضارة ، أو يتم إلغاء تسلسل إلى نوع غير متوقع تمامًا! يمكن تعديل التغييرات الخبيثة لكائن بأساليب تحتوي على كود إضافي أو قيم متغيرة معدلة.
أشكال هجوم Deserialization •
تأتي هجمات Deserialization في أشكال مختلفة ، على سبيل المثال:
القدرة على إضافة منطق إلغاء
تخصيص مخصص (مقدم من المستخدم).
• القدرة على التحكم أو التأثير على نوع الكائن الذي سيتم إلغاء تسلسله (بدلاً من المتوقع).
أيضا القدرة على التحكم في قيم الحقول داخل الكائن الذي تم إلغاء تسلسله بحيث تكون مفيدة للمهاجم.
• كانت CVE-2019-0604 نقطة ضعف في إزالة الترميز .NET XML في Sharepoint عبر طلبات POST. • ماذا يعني ذالك؟ • هذا يعني أن Sharepoint ، في نقطة نهاية واحدة (بشكل رئيسي _layouts / 15 / Picker.aspx) ، يقرأ قيمة يتحكم فيها المستخدم عبر معلمة POST. • ثم يغذي المدخلات التي يتحكم فيها
المستخدم إلى وظيفة ضعيفة تلغي الإدخال (غير الآمن!) الإدخال في دالة إلغاء تسلسل XML.
• يعد تنسيق XML في .NET framework أحد أشهر طرق التسلسل المستخدمة في dotnet ، ويرجع ذلك أساسًا إلى:
• سهولة الترميز.
• إنه في نص عادي ، لذلك يسهل قراءته واستكشاف أخطائه وإصلاحها
• إنه بتنسيق XML ، وهو تنسيق نص معروف.
ومع ذلك ،
فإن الاستخدام غير الآمن لتسلسل / إلغاء تسلسل XML يمكن أن يؤدي إلى نقاط ضعف وتنفيذ التعليمات البرمجية عن بُعد.
• وضعنا قيمة XML في كائن سلسلة وأرسلنها إلى XML Deserializer.
باستخدامنا فئة Easy البسيطة السابقة ، • حاولنا Xml-Serialize بشكل ديناميكي. • سنجرب نوعًا عامًا أولاً ، ثم نحاول إجراء تسلسل للنوع السهل.
• هناك بعض التجاوزات لقيود إلغاء Deserialization XML لمهاجمته: • المشكلة: يتم فقط إجراء تسلسل للأعضاء العامين (الحقول ، الخصائص) ، ولا توجد طرق ولا حقول خاصة • الحل: البحث عن فئات لا يحتاج أفرادها للاستغلال ، والذين يمكن أن يستدعي رسامو الحقول العامة / المستوطنون وظائفهم ال
المفيدة. • المشكلة: لا يمكنها إجراء تسلسل للواجهات الحل: البحث عن كائن لا يحتوي على واجهات ، على سبيل المثال XamlReader بدلاً من System.Diagnostics. معالجة المشكلة: لا يمكنه إجراء تسلسل / إلغاء تسلسل الفئات التي لا يعرفها في وقت التشغيل • الحل:
الحل: سنبحث للثغرات حيث يمكن للمهاجم / المستخدم توفير أو التأثير على النوع الذي يتم إرساله إلى deserializer.
• يُفضل الأداة الذكية إذا: • يمكن العثور عليها تقريبًا في أي تطبيق dotnet (باستخدام فئات .NET الافتراضية). • يمكن إجراء تسلسل لها دون مشاكل (على سبيل المثال لا واجهات ، لا تعتمد على الحقول الخاصة أو طرق تنفيذ التعليمات البرمجية) • يمكن استخدام وظائفه لأداء وظائف قوية (على
سبيل المثال RCE ، كتابة / قراءة الملفات ، بدء العمليات). • يمكن استدعاء وظائفه تلقائيًا عند إنشاء مثيل (منشئون أو رسائل / مستوطنون ميدانيون عامون) أو عند إلغاء التسلسل (باستخدام استدعاءات إلغاء التسلسل مثل OnDeserialized ()). • لسوء الحظ ، ليس من السهل العثور على فئة واحدة
تقوم بكل ذلك لذا يتعين علينا ربط الأدوات (استخدم فئة واحدة لتحميل فئة أخرى ... إلخ).
بعد تحليل ثغرة Sharepoint CVE-2019-0604 ، وكيفية كتابة برمجية إكسبلويت لها ، يمكننا مالحظة :
• 1- في كل مرة نحتاج فيها إلى تشغيل (حمولة ديناميكية) مختلفة ، كان علينا تشغيل كود توليد الحمولة في دوت نت.
• 2- ينفذ كود توليد بيانات دوت نت فعليًا الحمولة أثناء عملية التسلسل ، و
التي من الواضح أنها لا يوصى بها خاصة في البيئات المهنية.
3- احتوت بعض مواقع POCS العامة على حمولات خطرة على الويب ليست آمنة للاستخدام في الأهداف المصرح بها (مثل الدعامات أو عمليات فرق العمل الحمراء).
• 4- كان علينا إرسال كل حمولة من المتصفح من صفحة مباشرة ،
أو نسخ قيم VIEWSTATE و EVENTVALIDATION / صالحة. 5-
5- احتجنا إلى الإصدار الصحيح من خادم Sharepoint الهدف لتعيين الاسم الصحيح للتأهل للتجميع.
في هذا المقتطف الموجود على اليمين ، يأخذ Desharialize عنوان URL من المستخدم (حتى مسار نقطة نهاية Picker.aspx) ، ويضيف وكيل مستخدم ثم يستدعي Sharepoint في المرة الأولى بدون حمولة ، لمجرد قراءة رؤوس الاستجابة ومشاهدة إصدار Sharepoint ، الموجود في العنوان
في هذا المقتطف الموجود على اليمين ، يقوم Desharialize بتنفيذ ترميز وفك تشفير سريع للسلاسل المطابقة لما تقوم به وظيفتا EncodeEntitylnstanceld () و DecodeEntitylnstanceld () في الفئة Microsoft.SharePoint.BusinessData.Infrastructure.EntityInstanceld Encoder هنا يأخذ الأمر ، على
سبيل المثال ping 8.8.8.8 ثم حلقات فوق كل حرف ، يقوم بتشفيرها إلى utf16-big endian ، ثم يشفرها سداسيًا مما يؤدي إلى hex ثنائي ، ثم يأخذ تمثيل ascii الخاص به ، ثم يعكسه. تقوم وظيفة فك التشفير بالعكس: لكل 4 أحرف (2 بايت سداسي - تذكر أنها endf-16 endian كبيرة في الاتجاه المعاكس)
ثم تقوم بعكس هذه الأحرف الأربعة مرة أخرى ، وفك تشفيرها من hex ، وفك تشفيرها كـ utf-16 big endian ، مما أدى إلى نص الأمر الفعلي. مثال: 35009700370047005600 عكسي: 00530079007300740065 فك تشفير من UTF16: 0x5379737465
• لا توجد العديد من الدفاعات العملية ضد هجمات إزالة التسلسل ، ما لم يقبل المطورون إجراء بعض التغييرات المحتملة على الكود. • خيارات الدفاع عن إلغاء التسلسل: 1- لا تستخدم Serialization: يمكن أن تعمل في بعض الحالات خاصة إذا كانت حقول الكائن بسيطة (سلسلة ، تاريخ ، عدد صحيح). في
بعض الأحيان يكون الحل الحقيقي الوحيد ، على سبيل المثال ضد هجمات Python Pickle. ومع ذلك ، في بعض الأحيان ، هناك حاجة إلى التسلسل. 2- استخدم مكتبات ووظائف وتكوينات التسلسل الآمن: مثل YAML safe_load ، واجعل readObject final في Java. إلخ. ومع ذلك ، فإن هذه الدفاعات محدودة وغير
قابلة للتطبيق في جميع الحالات ، فهي تتطلب اختبارات مكثفة. 3- استخدام التوقيع: قم بتوقيع كائن متسلسل ولا تبطل ما لم يتم التوقيع عليه بشكل صحيح. تكمن المشكلة في هذا النهج في حماية مفتاح التوقيع ، وإذا تم تسريبه ، فقد ينتج عنه سطح هائل لإزالة التسلسل ،
على سبيل المثال: CVE-2020-0688 (Microsoft Exchange Deserialization بسبب تعرض مفتاح توقيع ViewState الثابت!)
4- استخدام تسلسل JSON: ليس دائمًا خيارًا آمنًا لأن العديد من مكتبات JSON تحتوي بالفعل على ثغرات تسلسل.
• 5- فئات القائمة السوداء والأدوات الشعبية: يمكن استخدام أدوات أحدث / مختلفة / غير معروفة.
• 6- إلغاء إدراج فئات القائمة البيضاء: مقيدة للغاية ،
وأحيانًا تهزم الغرض الكامل من استخدام التسلسل.
•إذن ما هو الخيار الأفضل؟
هذا يعتمد عليك وعلى تطبيقك!!
/References/
وأخيراً اشكر الاستاذ م. محمد الدوب على هذي المحاضرة القيمه والمليئة بالمعلومات بمعدل 3ساعات تقريبا! و63شريحه بوربوينت! واكرر شكري على هذه المعلومات القيمه وفقك الله @Voulnet
ولا أنسى الاتحاد السعودي السيبراني على استضافتهم لهذا المهندس الرائع وغيرهم من الأشخاص الرائعين جزاهم الله خير @SAFCSP
End

جاري تحميل الاقتراحات...