الوحدة 3 - تحليل ستاتيكي - Static Analysis - Gu-sung18 - 01-05-2019
الوحدة 3 - تحليل ستاتيكي - Static Analysis
لقد تعلمت حتى الآن كيفية اعداد كمبيوترك وجهازك باستخدام الأدوات اللازمة لفك تشفير تطبيقات iOS ونسخها إلى جهاز الكمبيوتر الخاص بك. ستتعرف في هذه الوحدة على كيفية تحليل تطبيق iOS عن طريق فحص جميع ملفاته وأطره البرمجية (تبعياته) وأخيراً ملف الـbinary الخاص بالتطبيق. يطلق عليه التحليل الستاتيكي لأنك لن تقوم بتشغيل ملف الـbinary، فستقوم بمراجعة جميع الملفات الموجودة في أرشيف الـ ipa.، هدف هذه الوحدة هو أن تكون وحدة تفاعلية، وهذا يعني أنني سأوجهك في الاتجاه الصحيح ونأمل أن تجد المشكلات بنفسك. ولكن لا داعي للقلق، إذا شعرت بالضياع أو تعذر عليك العثور على أي مشكلات في التطبيق، فكل الحلول موجودة في نهاية الوحدة (مع شرح سبب اعتبارها مشكلات وبعض الحلول الموصى بها).
بعد قيامك بفك تشفير تطبيق iOS، ستنتهي بحصولك على ملف ipa. ، هذا هو أرشيف التطبيق، أساساً هو أرشيف zip. وهو يتضمن ملف الـbinary، أطر برمجية تابعه لطرف ثالث، ملفات الضبط "configuration"، ملفات الوسائط (مثل الصور ومقاطع الفيديو)، عناصر واجهة المستخدم (مثل storyboards و nibs)، الخطوط المخصصة وأي ملف آخر يقوم المطورون بتضمينه داخل التطبيق.
لتوضيح أكثر الثغرات شيوعًا في تطبيقات iOS، قمتُ بإنشاء تطبيق غير آمن للغاية يسمىCoinZa [^1]، لقد برمجته بلغة برمجة Objective-C (وتعرف أيضًا باسم Objc) لجعل الأمر أكثر بساطة عند شرح بعض خطوات الهندسة العكسية. لا تزال التطبيقات المكتوبة بلغة Swift صعبة بعض الشيء بالنسبة لبعض الأدوات، على الرغم من أنني أخطط لإضافة دعم لتطبيقات Swift لبعض الوحدات في المستقبل. في الوقت الحالي، يمكنك تنزيل إصدار Objc هنا.
استخراج ملفات التطبيق- استخراج محتويات ipa. بسيط مثل تغيير امتداده إلى zip. وفك ضغطه.
mv CoinZa.ipa CoinZa.zip
unzip CoinZa.zip
- بعد فك ضغط المحتويات، سيكون لديك مجلد باسم Payload وداخله ستجد حزمة التطبيق المسماة CoinZa.app. ملاحظة: بالنسبة للتطبيق اذا تم تنزيله من App Store، ستجد ملفين آخرين إلى جانب مجلد Payload، ملف iTunesArtwork وهو ملف ايقونات التطبيق وملف iTunesMetadata.plist الذي يحتوي على معلومات مثل اسم المطور ومعرفه، ومعرف الحزمة وحقوق التأليف والنشر واسم التطبيق وبريدك الإلكتروني وتاريخ شرائه، من بين معلومات أخرى.
- انقر بزر الماوس الأيمن (أو Control + النقر بزر الماوس الأيسر) على CoinZa.app وحدد إظهار محتويات الحزمة "Show Package Contents". في الختام، انقل جميع الملفات داخل حزمة app. إلى مجلد جديد. هذا من اجل الحصول على وصول أسهل لهم، بدلاً من النقر بزر الماوس الأيمن فوقه وتحديد إظهار محتويات الحزمة بكل مرة.
mkdir CoinZaFiles
mv CoinZa.app/* CoinZaFiles/
تحليل الملفات المضمنة
هدفك النهائي هو الحصول على اكبر معلومات يمكن ان تحصل عليها عن ماذا شحن المطورين مع كل تطبيق. إنها فكرة جيدة أن تبدأ بالبحث عن نوع من المشاكل التي تتميز بصيد سهل. في الهندسة العكسية لنظام التشغيل iOS ، تأتي هذه على شكل ملفات الضبط"configuration" مثل ملفات البيانات أو ملفات اتصال قاعدة البيانات أو المفاتيح الخاصة بـ SSH. نعم، كما قلت من قبل، لقد رأيت كل هذه الحالات في تطبيقات حقيقية.- ملفات الضبط الأكثر شيوعًا التي واجهتها في تطبيقات iOS هما plist. و json.، ابدأ البحث من خلال قراءة جميع الملفات التي يمكنك العثور عليها باستخدام هذه الملحقات ومعرفة ما إذا كان يمكنك العثور على بعض المعلومات التي يجب ألا تكون موجودة.
- الملف المهم للغاية هو Info.plist في دليل الجذر لتطبيقات iOS. يحتوي هذا الملف على الكثير من بيانات الضبط مثل ما إذا كان التطبيق يمُكن إعدادات TLS الضعيفة في بعض المجالات (ابحث عن مفتاح NSAppTransportSecurity)، أو إذا كان التطبيق يقبل عناوين Scheme URLs (ابحث عن مفتاح CFBundleURLTypes).
تحليل أطر برمجية تابعه لطرف ثالث
يستخدم كل تطبيق iOS تقريبًا أطار برمجي واحد تابع لطرف ثالث على الأقل. بصفتك باحثً امنياً، يعد هذا أمرًا مهمًا جدًا لأن هذا يزيد من السطح العرضة للهجوم وفي كثير من الأحيان ينسى المطورون تحديث تبعياتهم وكلما زادت قائمة التبعيات، كلما كان من الصعب تتبع الإصدارات المحدثة. هذا يعني أنه طالما أن التطبيق "لا يزال يعمل"، فلا يوجد حافز لتحديث أطر عمل الجهات الخارجية هذه. هذا يترك المستخدمين مع كود برمجي قديم، وربما عرضة للخطرعلى أجهزتهم. كل إطار عمل تابع لطرف الثالث داخل حزمة iOS يوجد في مجلد يسمى Frameworks.- افتح مجلد Frameworks، وألق نظرة على الأطر التي يستخدمها برنامج CoinZa وإنتبه إلى إصدارات هذه الأطر.
- نصيحة 1: تم الكشف عن إصدار إطار العمل في ملف info.plist الخاص به.
- نصيحة 2: أبحث بجوجل عن إصدارات تلك إلاطر وابحث عن الثغرات الامنية المعروفة.
عمل Dump للـ classes تبع التطبيق
جزء أساسي من التحليل الستاتيكي لأي تطبيق هو جمع معلومات حول الـ methods والـclasses الموجودة في التطبيق. تمنحك هذه الخطوة معلومات مهمة للغاية لأنه، كما يعلم العديد من المطورين، فإن إعلان methods وصفية للغاية يساعد في تطوير منتجات جيدة. وبالتالي فإن أسماء بعض الـ methods سوف تقدم نظرة ثاقبة لميزات التطبيق. سأريكم كيفية استخدام class-dump-z لعمل dump لـ classes و methods التطبيق. لن يكون هناك تمرين لهذا القسم، ولكن يمكنك بعد ذلك قضاء بعض الوقت في قراءة المخرجات وتدوين ملاحظات عن الـ classes و methods المثيرة للاهتمام.- يعد عمل Dump للـ classes أمرًا سهلاً للغاية مع class-dump-z، انتقل إلى المجلد حيث قمت باستخراج ملفات CoinZa.app وقم بتشغيل class-dump-z مع اسم ملف الـbinary كمعامل أولى لها وحفظ المخرجات في ملف dump.txt :
cd ~/Downloads/Payload/CoinZaFiles
class-dump-z CoinZa > dump.txt
- إذا قمت بفتح ملف dump.txt، فلديك الآن جميع الـ classes والـ methods وبعض أسماء المتغيرات لملف الـbinary تبع التطبيق. كما ترون هناك بعض الـ classes المثيرة للاهتمام مثل Wallet و KeyPair و AddFundsViewController و CreateWalletViewController. حتى بدون تثبيت التطبيق ، يمكننا أن نرى أنه من المحتمل أن يكون تطبيق خاص بالعملات المشفرة "Cryptocurrency".
- في الختام، إذا قمت بتشغيل class-dump-z بدون أي معاملات، فسوف يعرض لك جميع الخيارات المتاحة الخاصة بعمل dumping للـ classes.
عمل Disassembling و decompiling لملف الـbinary باستخدام Hopper
بعد عمل الاستطلاع الأولي، وصلت إلى (حسب رأيي) الجزء الأكثر إثارة في هذه الوحدة، وفهم السلوك الفعلي لطرق التطبيق. بعد البحث في classes وmethods في مخرجات class-dump-z، يمكنك أن ترى
أن هذا التطبيق صغير جدًا، ولكن معظم التطبيقات أكبر بكثير ولديها classes و methods أكثر بكثير. لهذا السبب، من المهم أن تتمكن من تحديد أولويات عملك والتركيز على الحالات الأكثر إثارة للاهتمام.- لعمل disassemble و decompile لملف الـbinary افتح برنامج Hopper واسحب ثم اسقط برنامج CoinZa في نافذة برنامج Hopper. ملاحظة: سترى أن ملف الـbinary هو FAT binary، مما يعني أنه يحتوي على كود برمجي لأكثر من معمارية واحدة. في هذه الحالة، يحتوي على كود برمجي لمعمارية ARMv7 و ARM64 لأن هذا التطبيق يستهدف إصدار iOS أدنى من 10 والحد الأدنى من الأجهزة المدعومة على iOS 10 هي iPhone 5 وiPod Touch 6th Gen و iPad 4th Gen ، وهي أجهزة ARMv7.
- سوف يسألك Hopper عن المعمارية التي تريد عمل disassemble لها. يمكنك اختيار أي واحدة تريد على الرغم من أنني أوصي بـ ARMv7 لأنها تحتوي على مجموعة تعليمات أصغر وأبسط، ولكن Hopper واجه بعض المشكلات في عمل disassemble لبعض أجزاء التطبيق على ARMv7 ولشرح أفضل سأستخدم ARM64.
- Hopper سوف بعمل disassemble لملف الـbinary. يجب ألا يستغرق الأمر وقتًا طويلاً لأن هذا تطبيق صغير. لكن كان لدي بعض الحالات حيث استغرق الأمر حوالي 45 دقيقة حتى انتهيت، وكان ذلك على جهاز MacPro 6-core Xeon مع ذاكرة وصول عشوائي 64 جيجابايت.
- بمجرد انتهاء برنامج Hopper من عملية الـdisassemble، حدد علامة التبويب "الإجراءات-Procedures" في اللوحة اليمنى وستتمكن من رؤية قائمة أسماء الـmethod التي تمكن hopper من الوصول إليها.
- إذا قمت بتحديد علامة تبويب Str (بجانب تبويب Procedures) فهناك قائمة بجميع الأحرف التي يمكن البحث عنها بالسلسلة أو القابلة للطباعة داخل ملف الـbinary. وهي احدى الاشياء المفضلة لدي لأنه يمكنك البدء في البحث عن كلمات secret و private و test و debug وتتبع استخدامها. في أكثر الأحيان، يترك المطورون test classes توفر رؤية جيدة. في بعض الأحيان، يوجد نمط المطور او developer mode يمكننا من خلاله الحصول على وظائف إضافية خارج التطبيق.
- لتتبع استخدام string:
- ابحث عن string، على سبيل المثال ابحث عن isProVersion.
- في النافذة الرئيسية، حدد string وانقر بزر الماوس الأيمن فوقه.
- في القائمة ، حدد References to aIsproversion.
- سوف يأخذك Hopper إلى قسم cfstring، وهو المكان الذي يتم فيه سرد قيم c-string.
- حدد cfstring_isProVersion وانقر فوقه بزر الماوس الأيمن وحدد References to aIsproversion.
- سوف يعرض لك Hopper الآن نافذة بها قائمة من الـ methods. هذه هي قائمة الـ methods التي تستخدم isProVersion string.
- حدد أول نموذج لـ [AddFundsViewController viewDidAppear:] وانقر فوق انتقال او Go.
- في النافذة الرئيسية، سترى الآن اكواد الاسمبلي viewDidAppear method لـAddFundsViewController class.
- هذا مربك بعض الشيء بالنسبة لك، ولكن Hopper لديه أيضًا وظيفة decompiler .في منتصف شريط الخيارات العلوي، حدد علامة تبويب Pseudo-code Mode (التبويب الذي يحوي النص if (b)).
- ستتمكن من رؤية أن السلسلة isProVersion هي في الواقع مفتاح لكائن او object مخزّن في الإعدادات المشتركة لـ NSUserDefaults. ساوضح اكثر لاحقاً.
- باستخدام تمرين البحث عن الـstring، يمكنك العثور على دليل على ميزات يحتمل أن تكون محمية من قبل حالة ProVersion. لقد رأيت أيضًا في التمرين السابق أنه يمكنك تحميل الكود الزائف او pseudo-code لأحد الـmethod.
- لتحليل الـmethod باستخدام الـpseudo-code الخاص بها: ملاحظة: استخدم اسمبلي ARM64 لهذا التمرين.
- انقر فوق علامة التبويب "Procedures" وابحث عن WalletDetailViewController وحدد method :didUpdateWalletBalance
- قم بإلغاء تحديد خانة الاختيار Remove potentially dead code. في بعض الأحيان ، يحاول Hopper تحسين الكود المعمول له decompile وبعض الاحيان يخطئ بذلك، والـpseudo-code يحتوي على بعض المعلومات المفقودة. عادةً ما ألغِ تحديد مربع الاختيار هذا في حالة حدوث ذلك.
- أود أن ألفت انتباهكم إلى هذا القسم من الـpseudo-code:
r2 = @"isProVersion";
if (objc_msgSend(r0, @selector(boolForKey:)) != 0x0) {
r8 = 0x1001f0000;
r2 = @"isProVersion";
r1 = @selector(stringWithFormat:);
var_60 = d8 * 0x1001ad2e0;
r2 = @"Since you are a pro user we added an extra 20%% and it's on us!\nYour balance will actually increase by US$%f.";
r0 = objc_msgSend(@class(NSString), r1);
r29 = r29;
} else {
r8 = 0x1001f0000;
r2 = @"isProVersion";
var_60 = d8;
r2 = @"Funds purchased successfully, your balance will increase by US$ %f.";
r0 = objc_msgSend(@class(NSString), @selector(stringWithFormat:));
r29 = r29;
}
- ما يمكنك رؤيته هو أن تمكين حالة ProVersion سيكون مفيدًا للمهاجمين لأنه سيمنحهم 20٪ إضافية من شيء ما. أنت لا تعرف معنى هذا الشيء حتى الآن، لكن يبدو أنك يجب أن تأخذ ملاحظة حول هذه النتيجة. ? خاصة لأنه يبدو أن التحقق يتم من جانب العميل.
- سأترك الأمر لك للاستمرار في البحث وتدوين الـ methods والـ classes المثيرة للاهتمام. قم بتحليل أكبر عدد ممكن من الـ methods والـ classes لأنها ستساعدك في الوحدة التالية.
- نصيحة 1: تجاهل جميع الفئات مع بادئة FIR ، فهي جزء من الاطار البرمجي Firebase وهي خارج نطاق هذا التحليل.
- النصيحة 2: إذا كنت تستخدم الإصدار التجريبي من برنامج Hopper ، ضع في الاعتبار أنه سيتم إغلاقه كل 30 دقيقة.
عمل Disassembling و decompiling لملف الـbinary باستخدام Ghidra
في الخامس من مارس عام 2019 ، أصدرت وكالة الأمن القومي أداة هندسة عكسية حرة ومفتوحة المصدر تسمى Ghidra وهي تدعم ويندوز و لينكس وماك. على الرغم من أنها أداة جديدة جدًا ولم أستخدمها مطولاً كما استخدم Hopper، فقد أردت إضافتها إلى الدورة التدريبية حتى يتسنى لنا جميعًا التعلم منها. ملاحظة: كما قلت، لم أكن أستخدم Ghidra كثيرًا لذا يرجى أن تتحمل معي بينما أريكم كيفية استخدامها.- يمكنك تشغيل Ghidra عن طريق تشغيل سكربت ghidraRun في مسار ghidra_9.0.1/ . ملاحظة: تتطلب Java JDK لكي تعمل، إذا لم تكن لديك جافا على جهازك، فيمكنك تنزيلها من هنا.
- إذا كانت هذه هي المرة الأولى التي تقوم فيها بتشغيل Ghidra ، فسيتعين عليك إنشاء مشروع. انقر على ملف ثم مشروع جديد ... (أو ⌘ + N).
- اختر ما إذا كنت تريد مشروع مشترك أو غير مشترك. يمكن الوصول إلى المشروع المشترك بواسطة مستخدمين آخرين.
- حدد مساراً لحفظ مشروعك وقم بتسميته.
- قم بسحب وافلات تطبيق CoinZa في Ghidra.سيعرض مربع حوار يقول أن الملف يحتوي على ملفات متداخلة. هذا هو نفسه الامر الذي قام باخبارك به برنامج Hopper بأنه ملف FAT binary وتحتاج إلى اختيار معمارية. حدد خيار Batch.
- سيتم تقديمك لنافذة توضح لك المعماريتين. AARCH64: LE: 64: v8A هي ARM64 و ARM: LE: 32: v8 هي ARMv7. يمكنك وضع كلاهما محددين، لكن بما أنهما متشابهتان، فإني أقترح فقط تحديد واحدة.
- Ghidra سوف تظهر علامة تقول تم استيراد الملف. بسرعة فائقة؟ ليس بهذه السرعة، الملفات المستوردة لا تعني الملفات المعمول لها disassembly.
- قم بتوسيع مجلد المشروع ومجلد CoinZa وسترى ملفًا يسمى ARM-32-cpu0x9 أو AARCH64-64-cpu0x0 وفقًا للملف الذي حددته مسبقًا.
- اسحب وإفلت ملف ARM-32-cpu0x9/AARCH64-64-cpu0x0 أعلى زر CodeBrowser (الزر مع رمز التنين).
- ستخبرك Ghidra أنه لم يتم تحليل الملف وإذا كنت تريد القيام بذلك. انقر فوق نعم.
- اترك الـAnalyzers المحددين الافتراضيين محددين، ثم انقر فوق تحليل. ملاحظة: لكي أكون صادقًا، لم ألعب كثيراً مع Ghidra لأعرف الـAnalyzers الموجودين بهذه الاداة، ولهذا اقترحت أن أترك القيم الافتراضية.
- في جهاز الكمبيوتر الخاص بي استغرقت اداة Ghidra وقتا أطول بكثير من Hopper.
- في نافذة Symbol Tree (في أقصى اليسار) ، حدد "Classes" وانتقل لأسفل إلى Wallet واختر class WalletDetailViewController.
- ضمن دوال WalletDetailViewController، ابحث مرة أخرى عن didUpdateWalletBalance.
- في نافذة Decompiler (على الجانب الأيمن من النوافذ المنقسمة)، سترى الـdecompiled code الخاصة بالـmethod. ملاحظة: إذا لم تر نافذة Decompiler ، فاضغط على ⌘ + E.
_objc_msgSend(&OBJC_CLASS__NSUserDefaults,"standardUserDefaults");
uVar2 = objc_retainAutoreleasedReturnValue();
iVar1 = objc_msgSend(uVar2,"boolForKey:",&cf_isProVersion);
if (iVar1 == 0) {
_objc_msgSend(&OBJC_CLASS__NSString,"stringWithFormat:",
&cf_Fundspurchasedsuccessfully,yourbalancewillincreasebyUS$%f.);
} else {
_objc_msgSend(&OBJC_CLASS__NSString,"stringWithFormat:",
&
cf_Sinceyouareaprouserweaddedanextra20%%andit'sonus!YourbalancewillactuallyincreasebyUS$%f.
);
}
- كما ترون ، يبدو هذا مشابهاً للغاية لما أظهره Hopper في وضع الـpseudo-code.
- ميزة كبيرة هي أن Ghidra مجانية!
الاستنتاجات- يمكن أن يأخذ التحليل الستاتيكي لتطبيق iOS من اقل وقت الى اطول وقت. يمكنك االتعمق بقدر ما تستطيع. خاصةً لأن نفس التقنيات المستخدمة لفحص ملف التطبيق الرئيسي يمكن استخدامها للهندسة العكسية للاطر البرمجية التابعة لطرف ثالث. أقضي شخصيا عدة أيام، وأحيانا عدة أسابيع، في إجراء تحليل ستاتيكي على تطبيقات iOS. ملاحظة: كان أول خلل امني تم عنه مكافأتي على HackerOne هي خلل امني يخص ضعف التشفير، وتحديداً توليد مفتاح تشفير غير آمن، وكنت قادراً على التنبؤ بمفاتيح التشفير السابقة والمستقبلية. كان هذا ممكنًا لأنني أمضيت الكثير من الوقت في فهم خوارزمية توليد المفاتيح الخاصة بهم وتمكنت أخيرًا من فهم سلوكها دون حتى تشغيل التطبيق، كل ذلك من خلال التحليل الستاتيكي.
- لا يدرك العديد من المطورين أن أي ملف قاموا بتضمينه في تطبيقهم سيكون من السهل للغاية استخراجه وتحليله.
- كباحثين التحقق من الاطر البرمجية التابعة لطرف ثالث المضمنه مع التطبيق فكرة جيدة جدا .
- قم بجمع أكبر قدر ممكن من المعلومات في هذه الخطوة لأنك ستستخدمها في خطوة التحليل الديناميكي.
الحلول- coinza-c7e97-firebase-adminsdk-ok3f8-df3457e3e8.json: هذا ملف ضبط لمشروع Firebase ويتضمن مفتاحًا خاصًا استخدمه المطورون للاتصال بخدمات Firebase الخلفية.
- المشكلة: في بعض الأحيان لا يدرك المطورون أن أي ملف قاموا بتضمينه مع التطبيق سيتم استخراجه بسهولة من قبل أي شخص. في هذه الحالة، يمنح ملف الضبط هذا المهاجمين جميع المعلومات التي يحتاجونها لانتحال وصول شرعي إلى خدمات وبيانات الـbackend لشركة Firebase.
- الإصلاح الموصى به: من المفترض تخزين ملف الضبط هذا في سيرفر الـbackend ، وليس في تطبيق العميل. ما يحتاج المطورون إلى القيام به هو إضافة authentication flow في جانب العميل ، مما يتيح للتطبيق المصادقة مع سيرفر الـbackend الخاص بهم ومن ثم جعل سيرفر الـbackend يتصل بـ Firebase.
- ملاحظة: لقد عثرت على ملف ضبط مماثل على أحد تطبيقات VPN الشائعة، وعندما أبلغت الشركة بذلك ردوا قائلين إن مشروع Firebase لم يعد قيد الاستخدام، ولهذا السبب لم يشعروا بالحاجة إلى إزالة ملف الضبط، وانا لم اقم باستخدام المفتاح الخاص للاتصال بسيرفر الـbackend تبع Firebase والتحقق مما إذا كان مفتاح صالح أم لا.
- SQLCIPHER_KEY: مفتاح سري مضمن في ملف info.plist الخاص بالتطبيق، هذا هو المفتاح السري المستخدم في SQLCipher للتطبيق لتشفير محتويات قاعدة البيانات الخاصة به.
- المشكلة: على الرغم من أن المطورين كانوا يفكرون في حماية المحتوى الذي تم إنشاؤه من قِبل المستخدمين من خلال تشفير قاعدة البيانات، إلا أنهم فعلوا ذلك عن طريق تضمين مفتاح سري يستخدمه كل تطبيقاتهم المثبتة. هذا أمر يصعب استغلاله قليلاً ولكن إذا كان المهاجم قادرًا، على سبيل المثال، على الحصول على نسخ احتياطية من مستخدمي iTunes غير المشفرة، فسيكون بإمكانهم فك تشفير قواعد البيانات لأن جميع قواعد البيانات تستخدم نفس المفتاح السري.
- الإصلاح الموصى به: قم بإنشاء مفتاح سري لكل عملية تثبيت وقم بتخزينه في سلسلة مفاتيح iOS ، وبهذه الطريقة سيتعين على المهاجمين اختراق أجهزة كل ضحية وهذا يعد هجومًا أكثر صعوبة.
- NSAllowsArbitraryLoads: تعطيلApp Transport Security (ويعرف أيضًا باسم ATS)، مما يتيح اعدادات TLS ضعيفة.
- المشكلة: قدمت Appleالـ ATS لحماية المستخدمين من اعدادات TLS الضعيفة والغير امنه، وتعطيل هذه الميزة يعني أن هذا التطبيق يعرض أمن وخصوصية المستخدم النهائي للخطر.
- الإصلاح الموصى به: قم بإزالة هذا المفتاح من Info.plist والعمل مع مهندسي الـbackend لتحديث اعدادات TLS للخوادم.
- CFBundleURLTypes: لا يعد وجود Scheme URLs مخصص مشكلة، ولكن هذا يعني أنه يمكن تشغيل هذا التطبيق من خلال تطبيقات أخرى باستخدام عنوان "
coinza://
" وقد يأخذ هذا الأمر بعض المعاملات. فقط خذ ملاحظة حول هذه الميزة، سيكون مفيدًا في تمارين الوحدة التالية.
- AFNetworking 2.5.1: كان هذا الإصدار من الإطار البرمجي الشائع AFNetworking بمشكلات امنية خطيرة سمحت للمهاجمين بتنفيذ هجمات Man-in-the-Middle (ويعرف أيضًا باسم MitM) على أي تطبيق باستخدام أي إصدار <= 2.5.1 من هذا الإطار الذي لم يكن يستخدام SSL pinning.
- المشكلة: على الرغم من أن ألاطرالبرمجية التابعة لطرف ثالث تساعد المطورين من خلال توفير الوقت والموارد، لأنهم لا يحتاجون إلى برمجة هذه الدوال بأنفسهم، يمكنها تقديم مشاكل امنيه ويتعين على المطور الانتظار حتى يتوفر الاصلاح لها. في هذه الحالة يجب ان يتصرف مبرمجي الأطر بسرعة يصدروا نسخة مصححة (على الرغم من أنها لم تكن حلاً كاملاً). ولكن يتعين تحديث جميع التطبيقات وإعادة إرسالها إلى متجر التطبيقات، ثم يضطر المستخدمون إلى تحديث تطبيقاتهم على الأجهزة. تستغرق هذه العملية الكثير من الوقت من اصلاح الخلل الامني إلى تحديث المستخدم النهائي. في كل مرة تكون على وشك إضافة إطار طربرمجي تابع لطرف ثالث، فكر في هذا الأمر وفكر فيما إذا كانت هناك حاجة بالفعل إلى هذا الإطار.
- الإصلاح الموصى به: الإصلاح بسيط نسبياً، ما عليك هو تحديث الإطار. لكن التوصية الحقيقية هي استخدام الحد الأدنى من أطر الجهات الخارجية في تطبيقاتك. حاول استخدام الأطر المدمجة التي توفرها Apple قبل اللجوء لجهة خارجية.
[^ 1] بما أنني أحب البيتزا، فإن معظم الأشياء التي أفعلها تتضمن البيتزا. ومن هنا جاء تطبيق العملة المشفرة القائم على البيتزا CoinZa .
المصدر
--------------------
https://github.com/ivRodriguezCA/RE-iOS-Apps/blob/master/Module-3/README.md
RE: الوحدة 3 - تحليل ستاتيكي - Static Analysis - عبدالرحمن وديع - 14-05-2019
لو تكرمت ممكن الوحدة الرابعه
وجزاك الله كل خير
RE: الوحدة 3 - تحليل ستاتيكي - Static Analysis - Gu-sung18 - 14-05-2019
(14-05-2019, 01:27 PM)عبدالرحمن وديع كتب : لو تكرمت ممكن الوحدة الرابعه
الوحدة الرابعة أكملت نصفها حالياً لانها طويلة والنصف الاخر اعمل عليه في وقت فراغي.
عندما اكمل الوحدة الرابعه سانشرها سوياً مع الوحدة الخامسة.
RE: الوحدة 3 - تحليل ستاتيكي - Static Analysis - mire100 - 15-11-2020
شكرا على الشرح
بانتظار الوحدة الرابعة
|