شرح معنى SPD exploit

DZ-Developer

:: الإدارة R&D ::
إنضم
28 أبريل 2012
المشاركات
6,607
مستوى التفاعل
30,659
النقاط
113
الإقامة
الجزائر الغالية
بسم الله الرحمن الرحيم

SPD exploit

⦿- الـ exploit في مجالنا غالبًا ما نعرفه بشڪل عام ومختصر.. هو استغلال لـ ثغرة أمنية خاصة بالمعالج فـ الفيرموير، تسمح بإرسال ملف ‏« لودر غير مُوقع » لتخطي الحماية التي تم وضعها بواسطة الـ vendor أو مُشغل الجهاز..
⦿- أي vendor يقوم بعملية توقيع لملفات
DA أو مُحمِلات خاصة (download-agents) خاصة به، أيًا ڪان المعالج. عندما تقوم بتوصيل الجهاز وتحاول تبويته، في مرحلة المصادقة او الـ (boot-handshake) يڪون هناك مفتاح مڪتوب مسبقًا ومشفر في الجهاز يتم مقارنته بالمفتاح الموجود في ملف الـ DA.. إذا ڪان المفتاح متطابقًا، فإن عملية البوت ستڪتمل ويمكنك تفليش الجهاز وتنفيذ أي عملية تتطلب تعديل او حذف قطاع معين.. إذا ڪان المفتاح غير متطابق، فهذا يعني أنك حددت ملف DA غير معروف بالنسبة للجهاز. قد يكون ملفٌ عامٌ أو ملفُ موقع، ولڪن لجهازٍ أو معالجٍ آخرٍ بناءً على نوع التوقيع الذي يستخدمه البائعُ..
⦿- هنا يأتي دورُ المطورينَ وخبراء الهندسة العڪسية حيثُ يحاولونَ اكتشافَ ثغرات من خلالها يقوموا بإرسال ملفات تهيئة مثل "
auth" او "payload” أو في بعضِ الأحيان لودر أو مُحمِل صغير، وتقوم بدورِها بإزالة الحماية المسؤولة عن حماية الكتابة أو التوقيع نفسه.
⦿- بعد تخطي مرحلة التوقيع، المطور يقدر يصنع مُحمل او لودر خاص فيه، يقوم بعمل نفس مهام المُحمل الاساسي.. او التعديل على المُحمل الأساسي وإعادة تعيين الدوال الي ممكن يكون عن طريقها تم حجب عمليات الفورمات والـ
Download..
وأيضاً بالإمڪان إضافة أوامر جديدة تسمح بالدخول الى صلاحيات للـ
crypto-engine وتفعيل الأوامر اللي ممكن تسمح بفك البوتلودر او سحب وڪتابة وفورمات قطاع RPMB.. ولڪن يشترط أنّ المطور يڪون خبير كفاية .. بحيث يقدر يعدل على المُحمل او يقدر يبني مُحمل بنفس لغة البرمجة اللي تم ڪِتابه المُحمل الأساسي بها.

قام بالشرح الأخ مفضل
 

DZ-Developer

:: الإدارة R&D ::
إنضم
28 أبريل 2012
المشاركات
6,607
مستوى التفاعل
30,659
النقاط
113
الإقامة
الجزائر الغالية
اكثر تفصيلا

⦿- الـ exploit.. دا اساس شغلنا حالياً بخصوص السوفتوير، مؤخراً الشركات بقت بتركز جداً مع موضوع حماية أجهزتها ضد الإستغلال ومنع التعامل معها بطريقة غير شرعية من وجهة نظرهم.. طبعاً الكلام دا إحنا بنختلف معاه لأن اغلب الأجهزة حالياً بتحصل فيها مشاكل سوفتوير بشكل كبير ومش سوء استخدام منّ اليوزر نفسه لا، في حالات كتير الموضوع بيكون متعلق ب الـ sw-bugs.. سواء بعد الـ OTA او اثناء الاستخدام.. + المستخدم اللي بيكون محتاج ياخد حريته في الجهاز ويعدل ويفك بوتلودر مثلاً ويروت او يثبت روم مُخصص ووو… بسبب الحمايات الجديدة بيڪون مش لاقي اي فرصة انه يتحكم في الجهاز.
⦿- بخصوص الثغرات طبعاً الحاجات دي مش بتجي بالصدفة لازم الشخص اللي شغال على اكتشاف الثغرات يكون فاهم السورس كود كويس وعارف ازاي يدور على الثغرات..
مبدئياً اكتشاف الثغرة بــ يبدأ من سورس البوتروم..
طبعاً في أي جهاز بأي معالج خاص به، يوجد BootROM - البوتروم هي غرفة خاصة بالمعالج تخزن فيها البيانات التي يتم من خلالها التعامل مع الجهاز في وضع الـ emergency download أو boot-mode
والذي يُسمى مثلاً EDL بالنسبة لأجهزة الـ Qualcomm اختصار لـ Emergency Download وتعرف بـ Qualcomm HS-USB QD-Loader 9008
و MTK BROM لأجهزة MTK التي هي اختصار لـ MTK Boot-ROM وتعرف بـ MTK USB Port
أمثلة لبعض المعالجات:
MT6582,MT6572,MT6739
مثال لبعض المعالجات من شركة ميدياتك - الجيل الجديد MT6765
والمعرف المخصص للمعالج هو (cervino) والكود لمخصص للمعالج هو Helio P35
توجد إصدارات كثيرة لهذا المعالج مثلًا
MT6765G - Helio G35
MT6765H/MT6765C/MT6762

سورس البوتروم ثابت بالنسبة لل revisions المختلفة من المعالج..
مثال آخر لمعالجات ميدياتك.
MT6835 - Dimensity 6100+.
⦿- مثال آخر، المُعرِف المُخصص لمعالجات واوي هاي سيليكون هو Kirin
مثال لبعض المعالجات من الشركة
HiSilicon Kirin 620
والمعرف المُخصص للمعالج هو (Hi6210sft)
HiSilicon Kirin 650/655
والمعرف المُخصص للمعالج هو (Hi6250)
HiSilicon Kirin 950
والمعرف المُخصص للمعالج هو (Hi3650)
HiSilicon Kirin 960
والمعرف المُخصص للمعالج هو (Hi3660)
⦿- معالجات كوالكوم غالبًا ما تبدأ بهذا الشكل APQ/MSM/MDM/QC/SDM/SDA/SM
APQ8017
MSM8953
MDM9607
SDM439
SM8250
QCM2150

وتشمل ڪُل الإلكترونيات من هواتف ذكية إلى ساعات وشاشات وما إلى ذلك..
المعالجات غالباً تكون لها اسم مخصص للنموذج ومعرف مخصص أيضًا وفي بعض الأحيان اسم مخصص للجيل، مثلاً، أجهزة UniSoC معالجاتها نجدها دائمًا تبدأ باسم SC أو SP في الأجهزة القديمة، وهو اختصار لاسم الشركة نفسها التي كان اسمها SPD SC = Spreadtrum Communications. وفي عام 2018 تم دمج معالج RDA مع SPD وتم تغيير اسم الشركة بالكامل إلى اسم UniSoC لتشمل معالجات Spreadtrum/RDA.
مثال لمعالجات الجيل القديم من الشركة:
SC7731E
والمعرف المُخصص للمعالج هو pike2
SC9863A

والمعرف المُخصص للمعالج هو sharkl3
في المعالجات الجديدة بعد الدمج تم استبدال SC بـ T وترمز لـ Tiger
مثال لها Unisoc Tiger T606
والمعرف المُخصص للمعالج هو qogirl6 Unisoc Tiger T700
ومثال آخر على سبيل المثال فئة T61X مثل T610/T616 وأيضًا T700 تقع تحت مُسمى UMS512 وهو معرف الجيل نفسه.
⦿- نرجع لموضوعنا الاساسي: ڪل BootROM لديه Source Code (رمز مصدري) يوضح كيفية التعامل مع الجهاز وخطوات التواصل بين الهارد والمعالج باستخدام الـ S-RAM في مرحلة ما قبل المصادقة وبعدها الـ D-RAM في مرحلة الاتصال مع المُحمل الأساسي المخصص للتعامل مع المعالج أو جيل المعالج.
نعرف بعض المصطلحات؛

SRAM
الذاكرة العشوائية الثابتة SRAM، المعروفة أيضًا بـ static-RAM، هي نوع من الذواكر التي تُستخدم بشكل شائع في المعالجات، وتكون غالبًا بحجم 128/256/512KB. تُستخدم هذه الذاكرة السطحية للتبادل المؤقت بين المعالج والذاكرة قبل تهيئة الذاكرة الرئيسية، وتُستخدم في المهام التي تتطلب عمليات القراءة والكتابة ونقل البيانات قبل تهيئة الذاكرة الموقتة الاساسية DRAM.
DRAM

أو ما تُعرف بـ dynamic-RAM، هي ذاكرة الوصول العشوائي التي تُستخدم في أغلب الأجهزة الإلكترونية للمساعدة في تنفيذ جميع المهام بكفاءة وتحسين أداء المعالج والهارد ونقل البيانات. غالبًا ما تكون سعاتها 3/4/6/8/12GB وتُعتبر الذاكرة العشوائية الأساسية؛ وكلما زاد حجم الذاكرة RAM، زادت سرعة تشغيل الجهاز وسرعة قراءة وكتابة البيانات، بالإضافة إلى تحسين أداء المهام الأساسية التي تعتمد على المعالج.. الرامات محتاجة موضوع لوحدها وشرح مُفصل هنركز هنا فقط على استخدامها في مرحلة التبويت ونقل البيانات اثناء ارسال ال DA او سحب وكتابة القطاعات.
⦿- نرجع للـ BootROM، وهي عادة ما تكون على شكل binary مكتوب بلغة معينة ARM، تحتوي على جميع المعلومات المتعلقة بعملية البوت وتشفير ملف DA، وتوضح كيف يحلل الجهاز ال signature والمفتاح..
وايضاً تحتوي هذه البيانات على الدوال التي توضح كيفية التعامل مع الـ crypto-engine المدمج، النقطة الرئيسية المتعلقة بموضوعنا هي أن وظيفة المصادقة تكون على شكل رمز يوضح كيف يفتح الجهاز بوابة الاستقبال بأوامر محددة.
⦿- طيب، كيف يمكن للمطور أو الباحث الوصول إلى الثغرة؟

الاكواد الموجودة في البوتروم، فرصة الوصول إليها ضعيفة ومن الصعب أصلاً على أي شخص تحليلها وتتبعها، هذه مسألة صعبة بحد ذاتها.
في بعض الأحيان لا تكون الوظائف مكتوبة بشكل احترافي قليلًا أو مُدققة للغاية لأنها تحتوي على وظائف معقدة إلى حد ما، مثلاً، قد تكون هناك وظيفة واحدة تحتوي على ثغرة بسيطة مثل خيار بسيط يعود بقيمة 1 أو 0، هذا مثال بسيط للتوضيح.
في البوتروم، لن تكون قادرًا على تعديل الدالة أو أي شيء. ببساطة.. وتحول الـ 0 لـ 1 او الـ true لـ false, فقط ستفهم كيف يرسل ويستقبل الجهاز البيانات في هذه المرحلة، وبناءً على هذه النقطة، سيتم تجهيز "payload" أو "auth" لتجاوز المرحلة اللي شايفها قدامك في كود البوتروم..
طبعاً، يختلف الموضوع من معالج إلى آخر، في هذه المرحلة، المشغل ليس له أي علاقة، حيث يكون كود البوتروم ثابتًا لكل معالج بنفس الرقم أو النموذج المصنعي، ومع ذلك، فإن مفاتيح المحمل تختلف من مشغل إلى آخر، ولكن كود البوتروم والتعامل معها قد يختلف بين نوع المعالج نفسه وإصداره أيضًا، أو النسخة أو الجيل المخصص..
لذلك لما تظهر ثغرات جديدة بتلاقي كلّ الادوات بتتعامل على حسب المعالج وليس الـ vendor.
 

خـليل

:: عضو مميز ::
إنضم
8 فبراير 2018
المشاركات
1,433
مستوى التفاعل
782
النقاط
113
السلام عليكم
شرح جميل
وهو مثال عملي لتطبيق "علم التشفير" في أحد مجالات التكنولوجيا

الله الموفق
 
أعلى