تم إنشاء إضافة AutoRepro Gradle استنادًا إلى حزمة اختبار Android Trade Federation لاختبار جميع أجهزة Android بحثًا عن ثغرات أمنية في نشرة أمان Android. تقتصر هذه الاختبارات على الإصلاحات المرتبطة أو التي سيتم ربطها بثغرات ومخاطر أمنية شائعة (CVE).
يسمح المكوّن الإضافي بتطوير اختبارات Tradefed خارج شجرة المصدر لنظام Android باستخدام "استوديو Android" أو حزمة تطوير البرامج (SDK) العادية لنظام Android. وتتضمّن جميع الأدوات المساعدة اللازمة لإنشاء اختبار Tradefed وتشغيله.
ويُستخدَم بشكل أساسي لإرسال نماذج أولية يمكن إعادة إنتاجها تلقائيًا في إطار برنامج مكافآت الثغرات الأمنية في Android.
المتطلّبات الأساسية
يتم توفير التعليمات لجهاز كمبيوتر Linux 64 بت.
- الإصدار Ladybug من "استوديو Android" أو إصدار أحدث: يمكن أيضًا تثبيته من مدير الحِزم في توزيعتك.
- أدوات منصة Android SDK
(
adb
وfastboot
): يجب تثبيتها وتضمينها في$PATH
(أي يجب أن تتمكّن من تشغيلadb
من سطر الأوامر). أسهل طريقة لتثبيت أدوات النظام الأساسي هي استخدام مدير الحِزم الخاص بتوزيعتك.- في حال استخدام "مدير حزمة SDK" في Android Studio بدلاً من أدوات النظام الأساسي المستقلة، تذكَّر إضافة دليل
platform-tools
الخاص بحزمة SDK إلى$PATH
لتطوير سطر الأوامر.
- في حال استخدام "مدير حزمة SDK" في Android Studio بدلاً من أدوات النظام الأساسي المستقلة، تذكَّر إضافة دليل
- AAPT2 - يمكن أيضًا تثبيته باستخدام مدير الحِزم في توزيعتك.
- الإصدار 21 أو إصدار أحدث من حزمة تطوير البرامج (JDK) للغة Java: متوافق مع حزمة تطوير البرامج (SDK) لنظام Android وGradle.
بدء استخدام "استوديو Android"
بعد استخراج المثال أو النموذج، افتح الدليل في "استوديو Android" كمشروع حالي وانتظِر إلى أن تكتمل عملية المزامنة مع Gradle. تتوفّر عدّة إعدادات تشغيل مُسبَقة الضبط في Android Studio.
مهام Gradle:
assembleSubmissionSources
- تجميع ملفات المصدر لملف zip الخاص بعملية الإرسالassembleSubmissionZip
- تجميع ملف ZIP الخاص بطلب الإرسال لتحميلهcopyInvocationResultsToSubmission
- انسخ النتائج من عمليات استدعاء Tradefed السابقة إلى دليل مصادر إرسال AutoRepro للمساعدة في عملية المراجعة. يُرجى العِلم أنّ هذا الملف يحتوي على سجلّات من كلّ من المضيف والجهاز، لذا راجِع المحتوى قبل تشغيله أو بعده.
استدعاء AutoRepro في إعدادات التشغيل في Android Studio:
autorepro_nonroot_arm64
autorepro_nonroot_x86_64
autorepro_root_arm64
autorepro_root_x86_64
تكون إعدادات مشغّل التطبيقات بالتنسيق autorepro_{device_root}_{device_arch}
. يُفضّل بشكل عام استخدام حساب غير مميّز لأنّ الثغرات الأمنية التي تتطلّب امتيازات الجذر تكون أقل خطورة. ومع ذلك، يمكن استخدام الجذر لتنفيذ عمليات الإعداد أو التنظيف طالما تم توثيقه بوضوح وكان مقبولاً بشكل عام كحالة صالحة غير جذرية. على سبيل المثال، يمكن استخدام عملية الروت لإرسال رسائل نصية مزيّفة إلى الجهاز لتجنُّب الحاجة إلى جهاز ثانٍ وشرائح SIM متعددة.
سيؤدي ذلك إلى تشغيل Tradefed لاختبارك. ينتظر Tradefed توصيل جهاز صالح، لذا تأكَّد من توصيل جهاز ومنح إذن بتصحيح أخطاء ADB.
كتابة اختبار AutoRepro
يتضمّن اختبار AutoRepro ثلاثة أجزاء وثلاثة مكوّنات إضافية متوافقة في Gradle:
- مكوّن Gradle الإضافي
id("com.android.security.autorepro.javahosttest")
هو اختبار Tradefed واحد من جهة المضيف يتفاعل مع الجهاز من خلال ADB. يستخدم المثال هذا الدليل فيsubmission/hostTest/
. - المكوّن الإضافي Gradle
id("com.android.security.autorepro.apptest")
حِزمة APK لتطبيق أو خدمة يتم تثبيتها على الجهاز من خلالadb install
ويتم تشغيلها من خلال الاختبار على الجهاز المضيف. يمكن أن يحتوي التطبيق أو الخدمة أيضًا على مجموعة خاصة من تأكيدات JUnit يتم إرسالها إلى برنامج التشغيل على الجهاز المضيف. يستخدم المثال هذا التنسيق فيsubmission/appTest/
والدليل. - إضافة Gradle
id("com.android.security.autorepro.ndktest")
هي عبارة عن هجوم اختياري يعتمد على NDK ويتم إرساله إلى الجهاز من خلالadb push
ويتم تنفيذه من خلال الاختبار على جانب المضيف. يستخدم المثال هذا الملف في الدليلsubmission/ndkTest/
.
عادةً ما يتّبع مسار اختبار AutoRepro أحد النمطَين التاليَين:
تطبيق الاختبار الذي يتضمّن أدوات:
- يدفع الاختبار من جهة المضيف حزمة APK تتألف من تطبيق أو خدمة مزوّدة بأدوات إلى الجهاز.
- يبدأ الاختبار على الجهاز المضيف اختبارات JUnit على الجهاز المضيف المضمّنة في حزمة APK من خلال
runDeviceTest()
. - تختبر JUnit على الجهاز الأزرار وتشاهد التطبيق باستخدام UIAutomator، أو تصل إلى واجهات برمجة تطبيقات Android بطرق تكشف عن ثغرات أمنية.
- يتم عرض نتيجة نجاح أو فشل اختبارات JUnit على الجهاز في الاختبار على الجهاز المضيف، ويمكن استخدامها لتحديد ما إذا كان الاختبار قد اجتاز أم لا. يجب أن تتضمّن رسالة الخطأ معلومات مفصّلة عن سبب تعذُّر إكمال عملية التأكيد وأي كائنات أو قيم أو استثناءات أو عمليات تتبُّع تسلسل استدعاء الدوال البرمجية أو عناصر أخرى محدّدة كدليل على الثغرة الأمنية.
إثبات صحة المفهوم في NDK:
- يدفع الاختبار من جهة المضيف ويشغّل ملفًا تنفيذيًا لنظام التشغيل Linux على الجهاز.
- يتعطّل البرنامج الأصلي أو يعرض رمز خروج معيّنًا.
- يتحقّق الاختبار على الجهاز المضيف من الأعطال، أو يبحث في التتبُّع الخلفي لـ logcat، أو يبحث عن رمز الخروج المحدّد لتحديد ما إذا نجحت الهجمة. يجب أن تحتوي رسالة الخطأ على معلومات تفصيلية حول سبب تعذُّر التأكيد وأي بنى أو قيم أو عمليات تتبُّع تسلسل استدعاء الدوال البرمجية أو غيرها من العناصر المحدّدة كدليل على الثغرة الأمنية.
يمكن أيضًا استخدام مزيج من النمطَين (على سبيل المثال، تشغيل برنامج أصلي بالتزامن مع اختبارات على الجهاز). تتوفّر أيضًا بعض أُطر عمل أدوات القياس الأخرى، مثل frida-inject
. للحصول على التفاصيل، يُرجى الاطّلاع على
المستندات المرجعية لمجموعة أدوات اختبار الأمان و
المستندات المرجعية لـ Tradefed.
لا يحتاج الهجوم التجريبي إلى تطبيق اختباري أو ملف تنفيذي أصلي
لن تتطلّب معظم الاختبارات تطبيقًا على الجهاز وتنفيذًا أصليًا.
إذا لم يتضمّن الاختبار استخدام إحدى الميزات، احذف أدلة المشاريع الفرعية غير الضرورية في Gradle.
يتضمّن الهجوم الذي أثبتُ فيه صحة الفكرة تطبيقًا أو خدمة ثانية
أضِف أي عدد تريده من المشاريع الفرعية في Gradle التي تتضمّن مكوّنات AutoRepro الإضافية.
إرسال اختبار AutoRepro
لتضمين نتائج الاختبار من جهازك كجزء من الطلب:
- يمكنك اختياريًا تنفيذ مهمة Gradle
clean
لحذف أي عمليات تشغيل اختبار قديمة. - نفِّذ إعدادات تشغيل AutoRepro المناسبة لاستدعاء Tradefed لاختبارك وجمع السجلات والنتائج.
- نفِّذ المهمة
copyInvocationResultsToSubmission
لنسخ السجلّات والنتائج إلى دليل مصادر الإرسال.
نفِّذ الأمر assembleSubmissionZip
لإنشاء الملف submission/build/autorepro-submission.zip
. حمِّل هذا الملف مع نموذج الإبلاغ الذي ترسله إلى "برنامج مكافآت Android للمبلّغين عن الثغرات الأمنية". تأكَّد من أنّ المرفق يطابق النمط *autorepro-submission*.zip
وأنّه تم تحميله مع التقرير الأوّلي. سيؤثر تحميل الطلبات في وقت متأخر في قدرتنا على مراجعة تقريرك بشكل صحيح.