
سكربتات Frida لإعادة كتابة تطبيقات الجوال في وقت التشغيل لاعتراض كل حركة مرور HTTPS مباشرةً عبر MitM
جزء من HTTP Toolkit: أدوات قوية لبناء واختبار وتصحيح أخطاء HTTP(S)
يحتوي هذا المستودع على نصوص Frida المصممة للقيام بكل ما هو مطلوب لاعتراض HTTPS MitM مؤتمت بالكامل على الأجهزة المحمولة.
يمكن استخدام هذه المجموعة من النصوص معًا، للتعامل مع الاعتراض، وإدارة الثقة بالشهادات، وتعطيل فحوصات تثبيت الشهادات والشفافية، لاعتراض حركة مرور HTTP(S) عبر MitM على Android وiOS، أو يمكن استخدامها وتعديلها بشكل مستقل لربط (hook) ميزات محددة فقط.
يمكن للنصوص التعامل تلقائيًا مع:
-----BEGIN CERTIFICATE-----. يمكنك فتحها باستخدام محرر نصوص لعرض هذا المحتوى واستخراجه.config.js، وأضف هذه التفاصيل:
CERT_PEM: شهادة CA الخاصة بك بصيغة PEM.PROXY_PORT: منفذ الوكيلPROXY_HOST: عنوان الوكيل الخاص بك، من منظور جهازك (أو استخدم adb reverse tcp:$PORT tcp:$PORT لإعادة توجيه المنفذ عبر ADB، واستخدم 127.0.0.1 كمضيف)frida-server المناسب من github.com/frida/frida، واستخرجه، ثم ادفعه إلى جهازك باستخدام adb push، ثم شغّله بالأوامر الأربعة التالية: ، ، ، .-----BEGIN CERTIFICATE-----. يمكنك فتحها باستخدام محرر نصوص لعرض هذا المحتوى واستخراجه.config.js، وأضف هذه التفاصيل:
CERT_PEM: شهادة CA الخاصة بك بصيغة PEM.PROXY_PORT: منفذ الوكيلPROXY_HOST: عنوان الوكيل الخاص بك، من منظور جهازكhttps://build.frida.re كمصدر للحزم.frida-ps -Uai على جهاز الكمبيوتر الخاص بك للتأكد من أن هذا يعمل بشكل صحيح.frida-ps -Uai (لاختبار سريع، جرب استخدام github.com/httptoolkit/ios-ssl-pinning-demo - المعرّف هو com.httptoolkit.ios-pinning-demo)تستخدم الأوامر أعلاه جميع النصوص ذات الصلة، ولكن يمكنك عمومًا استخدام أي مجموعة فرعية تريدها، على الرغم من أنك سترغب في معظم الحالات تقريبًا في تضمين config.js كأول نص (فهو يعرّف بعض المتغيرات التي تستخدمها النصوص الأخرى).
على سبيل المثال، للقيام بإلغاء تثبيت الشهادات (unpinning) فقط على Android، عند التعامل مع تكوين الوكيل والشهادات في مكان آخر وبدون خطط احتياطية للتعمية، يمكنك فقط تشغيل:
frida -U \
-l ./config.js \
-l ./android/android-certificate-unpinning.js
-f $PACKAGE_ID
يتضمن كل نص توثيقًا مفصلاً حول ما يفعله وكيف يعمل في قسم تعليقات كبير في الأعلى. النصوص هي:
config.js
يعرّف هذا متغيرات تستخدمها النصوص الأخرى:
CERT_PEM - شهادة CA الإضافية التي يجب الوثوق بها، بصيغة PEMPROXY_HOST - عنوان IP (IPv4) لخادم الوكيل الذي سيتم استخدامه (غير مطلوب إذا كنت تقوم فقط بإلغاء تثبيت الشهادات)PROXY_PORT - منفذ خادم الوكيل الذي سيتم استخدامه (غير مطلوب إذا كنت تقوم فقط بإلغاء تثبيت الشهادات)DEBUG_MODE - القيمة الافتراضية هي false، لكن تحويلها إلى true سيفعّل الكثير من المخرجات الإضافية التي يمكن أن تكون مفيدة لتصحيح الأخطاء والهندسة العكسية لأي مشكلات.BLOCK_HTTP3 - القيمة الافتراضية هي true، والتي تحظر HTTP/3 بإسقاط جميع اتصالات UDP إلى المنفذ 443.يجب إدراج هذا في سطر الأوامر قبل أي نصوص أخرى.
native-connect-hook.js
يلتقط كل حركة مرور الشبكة مباشرةً، ويعيد توجيه جميع الاتصالات إلى مضيف الوكيل والمنفذ المكوّنين.
هذا خطاف (hook) منخفض المستوى ينطبق على جميع اتصالات الشبكة. يضمن ذلك إعادة توجيه جميع الاتصالات قسرًا إلى خادم الوكيل المستهدف، حتى تلك التي تتجاهل إعدادات الوكيل أو تُنشئ اتصالات مقابس خام أخرى، ويحظر أيضًا اتصالات HTTP/3 إذا كان مفعلاً.
هذه النصوص جزء من مشروع HTTP Toolkit الأوسع، الممول من خلال صندوق NGI Zero Entrust، الذي أسسته NLnet بدعم مالي من برنامج الجيل القادم للإنترنت التابع للمفوضية الأوروبية. تعلم المزيد على صفحة مشروع NLnet.
adb shellsuchmod +x /.../frida-server/.../frida-serveradb devices) قبل تشغيل الأوامر. لاحظ أن Frida سيعمل على الجهاز فقط بصلاحيات الجذر (root)، وهذا ما يوفره su في المثال أعلاه، عند تشغيله على جهاز تم الحصول على صلاحيات الجذر له. للتحقق من أنك جذر بعد تشغيل su أو ما شابه، تحقق من أن تشغيل whoami في الصدفة يطبع root.tech.httptoolkit.pinning_demo)config.js). أي النصوص ستستخدم يعود إليك، لكن بالنسبة لنظام Android، الأمر الجيد للبدء به هو:
frida -U \
-l ./config.js \
-l ./native-connect-hook.js \
-l ./native-tls-hook.js \
-l ./android/android-proxy-override.js \
-l ./android/android-system-certificate-injection.js \
-l ./android/android-certificate-unpinning.js \
-l ./android/android-certificate-unpinning-fallback.js \
-l ./android/android-disable-root-detection.js \
-f $PACKAGE_ID
config.js). أي النصوص ستستخدم يعود إليك، لكن بالنسبة لنظام iOS، الأمر الجيد للبدء به هو:
frida -U \
-l ./config.js \
-l ./ios/ios-connect-hook.js \
-l ./ios/ios-disable-detection.js \
-l ./native-tls-hook.js \
-l ./native-connect-hook.js \
-f $APP_ID
ينطبق هذا الخطاف على libc، ويعمل على Android وLinux وiOS والعديد من البيئات ذات الصلة الأخرى.
native-tls-hook.js
يعدّل جميع عمليات التحقق من TLS للمكتبات المبنية على BoringSSL للوثوق بشهادة CA المكوّنة لديك.
بشكل ملحوظ، يخطف هذا واجهات برمجة تطبيقات BoringSSL المدمجة على iOS، وهي الطريقة الطبيعية التي يعالج بها iOS التحقق من شهادات TLS (لذلك هذا كافٍ لاعتراض HTTPS على iOS في几乎所有 الحالات) ولكنه يُستخدم أيضًا في حالات أخرى قليلة على كل من iOS وAndroid.
يثق هذا فعليًا بمرجع التصديق الخاص بك لجميع الشهادات، ويعطل جميع عمليات تثبيت الشهادات وشفافية الشهادات والقيود الأخرى لمرجع التصديق الخاص بك. لاحظ أنه على عكس العديد من خطافات Frida الأخرى في مكان آخر، فإن هذا لا يعطل التحقق من TLS تمامًا (وهو أمر غير آمن للغاية). بدلاً من ذلك، يتجاوز التحقق لضمان الوثوق بجميع الاتصالات التي تستخدم شهادة CA المحددة الخاصة بك، دون تخفيف التحقق للسماح بالاعتراض من قبل أطراف ثالثة.
android/
android-proxy-override.js
يتجاوز إعدادات الوكيل في Android للتطبيق المستهدف، مما يضمن إعادة توجيه جميع حركة المرور المتوافقة عبر خادم الوكيل واعتراضها.
android-system-certificate-injection.js
يعدّل واجهات برمجة التطبيقات الأصلية في Android لضمان أن جميع مخازن الثقة تثق بشهادة CA الإضافية الخاصة بك افتراضيًا، مما يسمح بالتقاط حركة مرور TLS المشفرة.
android-certificate-unpinning.js
يعدّل أو يعطل العديد من التقنيات الشائعة المعروفة لفرض قيود إضافية على الشهادات، بما في ذلك تثبيت الشهادات (قبول مجموعة صغيرة فقط من الشهادات المعترف بها، بدلاً من جميع الشهادات الموثوقة على النظام) وشفافية الشهادات (التحقق من تسجيل جميع الشهادات المستخدمة في سجلات الشهادات العامة).
android-certificate-unpinning-fallback.js
يكتشف حالات فشل التحقق من الشهادات غير المعالجة، ويحاول التعامل مع الحالات غير المعروفة وغير المعترف بها باستخدام ترقيعات احتياطية مولّدة تلقائيًا. هذا أكثر تجريبية وقد يكون غير متوقع قليلاً، لكنه مفيد جدًا للحالات المعمّاة، وبشكل عام إما سيصلح مشكلات التثبيت (بعد فشل أولي واحد) أو سيسلط الضوء على الأقل على الكود لمزيد من الهندسة العكسية في مخرجات سجل Frida. يشارك هذا النص بعض المنطق مع android-certificate-unpinning.js، ولا يمكن استخدامه بشكل مستقل - إذا كنت تريد استخدام هذا النص، فستحتاج إلى تضمين نص إلغاء تثبيت الشهادات غير الاحتياطي أيضًا.
android-disable-root-detection.js
يعطل فحوصات كشف الجذر الشائعة عبر الطبقات الأصلية وطبقات Java لمنع اكتشاف أجهزة Android التي تم الحصول على صلاحيات الجذر لها.
يعترض هذا النص الوصول إلى نظام الملفات، وأوامر الصدفة، وعمليات البحث عن الحزم لمؤشرات الجذر المعروفة (مثل su وMagisk والتطبيقات ذات الصلة)، ويزوّر خصائص النظام الرئيسية (ro.secure وro.debuggable وما إلى ذلك) لمحاكاة بيئة إنتاج.
يحظر السلوكيات المشبوهة مثل فحوصات وجود الملفات وتنفيذ أوامر الصدفة، مما يساعد في التهرب من الاكتشاف في التطبيقات التي تستخدم فحوصات الجذر القياسية والمتقدمة.
android-disable-flutter-certificate-pinning.js
يضمن أن التطبيقات المبنية على Flutter (التي تتجاهل عمومًا تكوين شهادات النظام) تثق بشهادة CA الخاصة بك، حتى في معظم حالات التثبيت الصريح للشهادات. لا يزال هذا النص تجريبيًا في الوقت الحالي.
ios/
ios-connect-hook.js
يلتقط كل حركة مرور شبكة iOS مباشرةً، ويعيد توجيه جميع الاتصالات إلى مضيف الوكيل والمنفذ المكوّنين.
هذا خطاف منخفض المستوى ينطبق على جميع اتصالات الشبكة. يضمن ذلك إعادة توجيه جميع الاتصالات قسرًا إلى خادم الوكيل المستهدف، حتى تلك التي تتجاهل إعدادات الوكيل أو تُنشئ اتصالات مقابس خام أخرى.
ios-disable-detection.js
يعطل كشف كسر الحماية JailMonkey.
utilities/test-ip-connectivity.js
ربما لا ترغب في استخدام هذا عادةً كجزء من الاعتراض نفسه، لكنه يمكن أن يكون مفيدًا جدًا كجزء من إعداد التكوين الخاص بك.
يتيح لك هذا النص تكوين قائمة بعناوين IP محتملة ومنفذ مستهدف، ويجعل العملية تختبر كل عنوان، وترسل رسالة إلى عميل Frida لأول عنوان يمكن الوصول إليه. يمكن أن يكون هذا مفيدًا لعمليات التكوين الآلية، إذا كنت لا تعرف عنوان IP الأفضل لاستخدامه للوصول إلى خادم الوكيل (جهاز الكمبيوتر الخاص بك) من الجهاز المستهدف (هاتفك).