ميزة AutoRepro لأمان Android

تم إنشاء المكوّن الإضافي AutoRepro Gradle استنادًا إلى مجموعة اختبارات Android Trade Federation لاختبار جميع أجهزة Android من أجل اختبارات تصحيحات الأمان ضد الثغرات الأمنية الواردة في نشرة أمان Android. هذه الاختبارات مخصّصة حصريًا للإصلاحات المرتبطة أو التي سيتم ربطها بـ Common Vulnerabilities and Exposures (CVE).

يسمح المكوّن الإضافي بتطوير اختبارات Tradefed خارج شجرة ملف مصدر Android باستخدام "استوديو Android" أو حزمة تطوير البرامج (SDK) العادية لنظام التشغيل Android. ويشمل ذلك جميع الأدوات اللازمة لإنشاء اختبار Tradefed وتنفيذه.

ويُستخدَم هذا الإصدار بشكل أساسي لإرسال أدلة إثبات صحة المفاهيم التي يمكن إعادة إنتاجها تلقائيًا في برنامج مكافآت اكتشاف الثغرات الأمنية في Android.

تنزيل مثال على ميزة "إعادة الإنتاج التلقائي"

المتطلّبات الأساسية

يتم تقديم التعليمات لأجهزة الكمبيوتر التي تعمل بنظام التشغيل Linux 64 بت.

  • إصدار Ladybug من Android Studio أو إصدار أحدث: يمكن أيضًا تثبيته من خلال مدير الحِزم في التوزيع.
  • أدوات منصّة حزمة تطوير البرامج (SDK) لنظام التشغيل Android (adb وfastboot): يجب تثبيتها وتكون متوفّرة في $PATH (أي أنّه يجب أن تتمكّن من تشغيل adb من سطر الأوامر). إنّ أسهل طريقة لتثبيت أدوات المنصة هي استخدام مدير الحِزم في التوزيع.
    • في حال استخدام أداة إدارة حِزم تطوير البرامج (SDK) في Android Studio بدلاً من أدوات منصّة مستقلة ، تذكَّر إضافة دليل platform-tools لحِزم تطوير البرامج (SDK) إلى $PATH لتطوير التطبيقات من سطر الأوامر.
  • AAPT2 - يمكن أيضًا تثبيته باستخدام مدير الحِزم في التوزيع.
  • ‫Java JDK 21 أو إصدار أحدث: متوافق مع حزمة تطوير البرامج (SDK) لنظام التشغيل Android وGradle

بدء استخدام "استوديو Android"

بعد استخراج المثال أو النموذج، افتح الدليل في Android Studio كمشروع حالي وانتظِر اكتمال مزامنة Gradle. تتوفّر عدة إعدادات تشغيل مُعدّة مسبقًا في Android Studio.

مهام Gradle:

  • assembleSubmissionSources - تجميع الملفات المصدر لإنشاء ملف zip لإرساله
  • assembleSubmissionZip - اجمع ملفات الإصدار المراد إرسالها في ملف zip لتحميله.
  • copyInvocationResultsToSubmission - انسخ النتائج من عمليات التفعيل السابقة لنظام Tradefed إلى دليل مصادر إرسال AutoRepro لمساعدة عملية المراجعة. يُرجى العلم أنّ هذا السجلّ يحتوي على سجلّات من كلّ من المضيف والجهاز، لذا يُرجى مراجعة المحتوى قبل تنفيذ هذا الإجراء أو بعده.

إعدادات تشغيل Android Studio لطلب AutoRepro:

  • 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:

  1. مكوّن Gradle الإضافي id("com.android.security.autorepro.javahosttest") اختبار Tradefed الوحيد الذي يتفاعل مع الجهاز من خلال ADB على جانب المضيف يستخدم المثال هذا الدليل في الدليل submission/hostTest/.
  2. المكوّن الإضافي لنظام Gradle id("com.android.security.autorepro.apptest"): حِزمة APK لتطبيق أو خدمة يتم تثبيتها على الجهاز من خلال adb install ويتم تشغيلها من خلال الاختبار من جهة المضيف. يمكن أن يحتوي التطبيق أو الخدمة أيضًا على مجموعة من تأكيدات JUnit التي يتم الإبلاغ عنها إلى أداة التشغيل من جهة المضيف. يستخدم المثال الدليلَين submission/appTest/ و.
  3. مكوّن إضافي في Gradle‏ id("com.android.security.autorepro.ndktest") هجوم اختياري يستند إلى حزمة تطوير البرامج (NDK) لإثبات المفهوم يتم دفعه إلى الجهاز من خلال adb push ويتم تنفيذه من خلال الاختبار من جهة المضيف. يستخدم المثال هذا الدليل في directory submission/ndkTest/.

يتّبع عادةً مسار اختبار AutoRepro النموذجي أحد النمطَين التاليَين:

  • تطبيق الاختبار الذي تم قياس حالته:

    1. يُرسِل الاختبار من جهة المضيف حزمة APK تتألف من تطبيق أو خدمة تم اختبارهما على الجهاز.
    2. يبدأ الاختبار من جهة المضيف اختبارات JUnit من جهة الجهاز التي يتم تجميعها مع حزمة APK من خلال runDeviceTest().
    3. تؤدي اختبارات JUnit على الجهاز إلى النقر على الأزرار ومشاهدة التطبيق باستخدام IDE UIAutomator، أو الوصول إلى واجهات برمجة التطبيقات في Android بطرق تكشف عن نقاط الضعف في الأمان.
    4. يتم عرض نجاح اختبارات JUnit من جهة الجهاز أو تعذّرها في الاختبار من جهة المضيف، والذي يمكن استخدامه لتحديد ما إذا كان الاختبار قد اجتاز الفحص أم لا. يجب أن تحتوي رسالة الخطأ على معلومات مفصّلة عن سبب تعذُّر العبارة الشرطية وأي عناصر أو قيم أو استثناءات أو تتبُّع تسلسل استدعاء الدوال البرمجية أو عناصر أخرى محدّدة كدليل على وجود ثغرة أمنية.
  • إثبات جدوى NDK:

    1. يُرسِل الاختبار من جهة المضيف ملفًا قابلاً للتنفيذ في Linux ويشغّله على الجهاز.
    2. يتعطّل البرنامج الأصلي أو يعرض رمز خروج محدّدًا.
    3. يتحقّق الاختبار من جهة المضيف من الأعطال أو يفحص التتبّع الخلفي لـ logcat أو يبحث عن رمز الخروج المحدّد لتحديد ما إذا كان الهجوم قد نجا. يجب أن تحتوي رسالة الخطأ على معلومات مفصّلة عن سبب تعذُّر العبارة وجميع البنى أو القيم أو عمليات تتبُّع تسلسل استدعاء الدوال البرمجية أو أي عناصر أخرى كدليل على وجود ثغرة أمنية.

من الممكن أيضًا الجمع بين النمطَين (على سبيل المثال، تشغيل برنامج أصلي في الاشتراك مع الاختبارات على مستوى الجهاز). تتوفّر أيضًا بعض إطارات عمل قياس الأداء الأخرى، مثل frida-inject. لمعرفة التفاصيل، يُرجى الاطّلاع على المستندات المرجعية لمجموعة أدوات اختبار الأمان والمستندات المرجعية لبرنامج Tradefed.

لا تحتاج هجمات إثبات المفهوم إلى تطبيق اختبار أو ملف تنفيذي أصلي.

لن تحتاج معظم الاختبارات إلى تطبيق على الجهاز وملف تنفيذي أصلي.

إذا كان الاختبار لا يتضمّن استخدام ميزة، يمكنك حذف أدلة gradle الفرعية غير الضرورية.

ينطوي هجوم إثبات المفهوم على تطبيق أو خدمة ثانية

يمكنك إضافة أي عدد تريده من المشاريع الفرعية في Gradle باستخدام المكوّنات الإضافية AutoRepro.

إرسال اختبار AutoRepro

لتضمين نتائج الاختبار من جهازك كجزء من العينة المرسَلة:

  • يمكنك اختياريًا تنفيذ مهمة Gradle clean لحذف أي عمليات اختبار قديمة.
  • شغِّل إعدادات التشغيل المناسبة لميزة AutoRepro لتشغيل Tradefed في الاختبار وجمع السجلات والنتائج.
  • نفِّذ المهمة copyInvocationResultsToSubmission لنسخ السجلّات والنتائج إلى دليل مصادر الإرسال.

شغِّل assembleSubmissionZip لإنشاء ملف submission/build/autorepro-submission.zip. حمِّل هذا الملف مع الملف الذي أرسلته إلى "برنامج المكافآت للمبلّغين عن الثغرات الأمنية في Android". تأكَّد من أنّ المرفق يتطابق مع النمط *autorepro-submission*.zip وأنّه تم تحميله مع التقرير الأولي. سيؤثّر تحميل العينات المتأخرة في قدرتنا على مراجعة تقريرك بشكل صحيح.