اليوم راح أكتب عن كيفية تتخطى ال SSL pinning لتطبيقات الAndroid بإستخدام frida لكن قبل هذا كله, فيه أشياء أحتاج أشرحها : )
بالبداية
إذا تبغى تفحص الأمان لتطبيق جوال عادةً تحتاج تفحص كيف التطبيق يحفظ البيانات بالجوال وكيف يرسلها للسيرفر وهل التطبيق يحتوي بيانات حساسة محفوظة داخل كود التطبيق نفسه أو داخل ملفاته. ومن أهم الأشياء اللي تحتاج تفحصها اللي هي end-points تبع السيرفر اللي يتواصل معه التطبيق, وإذا قدرت تفهم كيف التطبيق يتواصل مع السيرفر هنا بيُفتح لك attack surface أكبر من التطبيق نفسه, لأنه عادةً المبرمج مايتوقع أن المستخدم للتطبيق بيقدر يعدل البيانات المرسله للسيرفر فممكن تحصل ثغرات خطيرة. طيب الآن نبغى نفحص تطبيق توتير بما أنهم حاطينه في Hackerone ونبغى نفحص الend-points تبع التطبيق وكيف التطبيق والسيرفر قاعدين يتكلمون مع بعض, وأيضا يكمن نقدر نطلع شوية فلوس منهم ; ) لكن عشان تعرف الend-points تبع تطبيق twitter فيه طريقتين:
- تسوي decompile للتطبيق وتبحث في الsource code عن كيف التطبيق قاعد يتواصل مع السيرفر, باستخدام أداة مثل jadx
- أنك تخلي كل الtraffic اللي يطلع من الجوال يجي لجهازك الشخصي “Proxy”(وهذا النقطة اللي بنتكلم عنها هالمرة)
أدوات راح نستخدمها
عشان تعترض اتصال الجوال تحتاج لهالأشياء:
- جوال اندرويد أو emulator لازم يكونون rooted
- Burp Suite : هو Proxy داخل جهازك “اللابتوب” يمديك تعترض عن طريقة الاتصال اللي طالع من جهازك لأي مكان ثاني, وله فوائد كثيرة تساعدك في الPenetration testing.
- Frida : عبارة عن Dynamic code instrumentation toolkit يعني تقدر والتطبيق قاعد يشتغل يمديك تضيف code يعدل طريقة شغل التطبيق وأيضا تقدر تغير الvalues وقت الrun-time وتتبع ايش تسوي الfunction وأشياء كثيرة.
- adb tool : أداة للAndroid تساعدك بالتواصل مع جوالك أو الemulator يعني تقدر ترفع, تثبت, تحذف و تسوي أشياء كثيرة بالجوال
إذا كنت بتستعمل emulator يمديك تستعمل الemulator اللي تجي مع Android Studio أو تستعمل حقت Genymotion الخيار لك.
تثبيت الأدوات
بعد ماتثبت Burp Suite و يكون عندك جوال اندرويد أو emulator جاهز وأيضا rooted, الآن بنشتغل على كيف نثبت Frida
pip3 install frida-tools
بعد ماتتثبت الأداة شف أي نسخة هي
frida --version
بما أن النسخة اللي عندي 12.11.18 فأحتاج أثبت نفس النسخة بالجوال, لكن قبل كذا أحتاج أعرف الجوال اللي عندي ايش processor architecture اللي قاعد يشتغل عليه مثلا (arm, arm64, X86, X86_64)
adb shell getprop ro.product.cpu.abi
الآن بما أننا عرفنا النسخة وأيضا processor architectures خلنا نروح نحمل Frida-server من هنا
بعد ماتنزل النسخة اللي مطابقة لمواصفاتك, فك ضغطها
تأكد أنك تقدر تشوف جوالك أو الemulator عن طريق إستخدام الadb
الآن أرفع الملف لهنا /data/local/tmp/
adb push frida-server-12.11.18-android-arm64 /data/local/tmp/frida-server-12.11.18-android-arm64
بعد مارفعنا الملف نحتاج فقط نعطيه صلاحية الexecution ونشغله بالbackground
عشان نتأكد أن شغلنا صح, خلنا نستعرض التطبيقات الموجودة بالجوال
إعتراض اتصال تطبيقات
الحين نحتاج نسوي intercept لجميع الrequests اللي طالعه من الجوال بإستخدام Burp عشان نشوف التطبيق كيف قاعدة يتواصل مع الserver.
أول شيء أشبك الجوال و اللابتوب في بنفس الشبكة عشان يقدرون يشوفون بعض.
الآن بعد ماعرفنا الIP للابتوب, نروح للجوال ونشبك على نفس الشبكة اللي شابكين فيها اللابتوب
ثم تخلي خانة الProxy على الManual وفي خانة الProxy hostname تحط الIP تبع اللابتوب اللي طلعناه فوق وفي خانة الProxy port تحط 8082
الآن عن طريق اللابتوب نروح نجهز Burp عشان يستقبل الrequest اللي طالعة من الجوال
الحين على جوالك لو تروح لhttp://google.com راح يبين معنا الاتصال
لكن لو تروح لموقع https بتجيك مشكلة أن الجوال مايثق بشهادة الburp, وعشان نحل هالمشكلة لازم تضيف شهادة burp للجوال, أولا تسوي export للcertificate
ثم تنقلها للجهاز أو الطريقة الأسهل أنك تروح ل http://burp من جوالك
ثم تغير صيغة الملف من der إلى crt والاسم إلى cert-der.crt
إذا كان جهازك Android 6 أو أقل المفروض الطريقة اللي تحت تشتغل معك أما إذا كان أعلى من 6 لازم تثبت الCertificate كSystem cert وفيه تطبيق موجود على الPlay store اسمه Root Certificate Manager ثبته ثم عن طريقة ثبت الCertificate
الآن تحتاج تثبت هالشهادة, أول شيء تروح لsettings ثم Install from storage ثم تختار الملف اللي حملته وتثبته
الآن المفروض تقدر تشوف الHttps requests
تخطي الSSL Pinning
طيب الآن لو حاولت أعترض الlogin request تبع تطبيق twitter مهب طالع شيء في Burp زي كذا
والتطبيق بيقعد كذا وبعد فترة بيقول لك فيه مشكلة بالاتصال
هذا يدل أنه ممكن التطبيق قاعد يتأكد من الcertificate وإذا مهب نفس المسجلة داخل التطبيق معد يرسل للسيرفر المعلومات.
وعشان نقدر نشوف الrequests تجي هنا فائدة frida في البداية نحتاج ننسخ الcertificate اللي حملناها إلى هالمكان
/cp /sdcard/Download/cert-der.crt /data/local/tmp
ثم تغير الpermission تبع ال certificate
chmod 777 cert-der.crt
الآن نحتاج يانكتب script عشان يتخطى SSL Pinning أو نستعمل script جاهز, و frida عندهم repository فيه scripts مفيدة جداً.
والscript اللي بنتسعمل هو universal-android-ssl-pinning-bypass-with-frida بعد ماتحمله تحتاج تعرف أسم الpackage تبع twitter بهالطريقة
ثم تحتاج تشغل هالcommand
frida -U -f com.twitter.android -l universal-android-ssl-pinning-bypass-with-frida.js --no-pause
هالمرة burp شاف الrequest الطالع من تطبيق twitter
بالنهاية
frida لها إستعمالات كثيرة وتساعدنا نتخطى حواجز الحماية وأيضا تساعدنا على فهم التطبيقات سواء للجوال أو للكمبيوتر