Android Security AutoRepro

پلاگین AutoRepro Gradle بر روی مهار تست فدراسیون تجارت Android ساخته شده است تا تمام دستگاه های اندرویدی را برای آزمایشات وصله امنیتی در برابر آسیب پذیری های موجود در بولتن امنیتی Android آزمایش کند. این تست‌ها منحصراً برای اصلاحاتی هستند که با آسیب‌پذیری‌ها و مواجهه‌های مشترک (CVE) مرتبط هستند یا خواهند بود.

این افزونه امکان توسعه تست های Tradefed را در خارج از درخت منبع اندروید با استفاده از Android Studio یا Android SDK استاندارد فراهم می کند. این شامل تمام ابزارهایی است که برای ساخت و اجرای تست Tradefed مورد نیاز است.

در درجه اول برای ارسال مفاهیم اثبات مفاهیم قابل تکرار خودکار برای برنامه پاداش آسیب پذیری Android استفاده می شود.

دانلود نمونه AutoRepro

پیش نیازها

دستورالعمل ها برای یک کامپیوتر لینوکس 64 بیتی ارائه شده است.

  • Android Studio Ladybug یا جدیدتر - همچنین می تواند از مدیر بسته توزیع شما نصب شود.
  • ابزارهای پلتفرم Android SDK ( adb ، fastboot ) - باید نصب شوند و در $PATH خود باشند (یعنی باید بتوانید adb از خط فرمان اجرا کنید). ساده ترین راه برای نصب ابزارهای پلتفرم استفاده از مدیر بسته توزیعی شما است.
    • اگر از مدیر SDK Android Studio به جای ابزارهای پلتفرم مستقل استفاده می‌کنید، به خاطر داشته باشید که دایرکتوری platform-tools SDK را برای توسعه خط فرمان به $PATH خود اضافه کنید.
  • AAPT2 . - همچنین می تواند با استفاده از مدیر بسته توزیع شما نصب شود.
  • Java JDK 21 یا جدیدتر - سازگار با Android SDK و Gradle.

شروع به استفاده از Android Studio کنید

پس از استخراج مثال یا الگو، دایرکتوری را در Android Studio به عنوان یک پروژه موجود باز کنید و منتظر بمانید تا همگام سازی Gradle کامل شود. چندین پیکربندی از پیش تنظیم شده برای اجرای Android Studio وجود دارد.

وظایف Gradle:

  • assembleSubmissionSources - فایل های منبع را برای فایل فشرده ارسال جمع کنید.
  • assembleSubmissionZip - فایل فشرده ارسال را برای آپلود جمع کنید.
  • copyInvocationResultsToSubmission - نتایج فراخوان‌های قبلی Tradefed را در فهرست منابع ارسال AutoRepro کپی کنید تا به فرآیند بررسی کمک کنید. توجه داشته باشید که این شامل گزارش‌هایی از میزبان و دستگاه است. مطالب را قبل یا بعد از اجرای این بازبینی کنید.

تنظیمات اجرای Android Studio Invocation AutoRepro:

  • autorepro_nonroot_arm64
  • autorepro_nonroot_x86_64
  • autorepro_root_arm64
  • autorepro_root_x86_64

تنظیمات لانچر به شکل autorepro_{device_root}_{device_arch} هستند. به طور کلی ترجیح داده می شود که از nonroot استفاده کنید زیرا آسیب پذیری هایی که نیاز به روت دارند از شدت کمتری برخوردار هستند. با این حال، استفاده از root برای انجام راه‌اندازی یا پاکسازی می‌تواند قابل قبول باشد تا زمانی که به وضوح مستند شده باشد و به طور کلی به عنوان یک حالت غیر ریشه معتبر پذیرفته شود. به عنوان مثال، استفاده از ریشه برای ارسال پیامک جعلی به دستگاه برای جلوگیری از نیاز به دستگاه دوم و چندین سیم کارت قابل قبول است.

این ها Tradefed را برای آزمایش شما راه اندازی می کنند. Tradefed منتظر می ماند تا یک دستگاه معتبر متصل شود، بنابراین مطمئن شوید که یک دستگاه متصل است و اشکال زدایی ADB مجاز است.

یک تست AutoRepro بنویسید

سه بخش برای تست AutoRepro و سه پلاگین Gradle مربوطه وجود دارد:

  1. id("com.android.security.autorepro.javahosttest") تست Tradefed در سمت میزبان که از طریق ADB با دستگاه تعامل دارد. مثال از آن در دایرکتوری submission/hostTest/ استفاده می کند.
  2. id("com.android.security.autorepro.apptest") یک برنامه یا سرویس APK که از طریق adb install بر روی دستگاه نصب می شود و توسط تست سمت میزبان راه اندازی می شود. برنامه یا سرویس همچنین می‌تواند حاوی مجموعه‌ای از اظهارات JUnit باشد که به اجراکننده سمت میزبان گزارش می‌شود. مثال از آن در submission/appTest/ و دایرکتوری استفاده می کند.
  3. id("com.android.security.autorepro.ndktest") یک حمله اثبات مفهومی اختیاری مبتنی بر NDK که از طریق adb push به دستگاه هل داده می شود و توسط تست سمت میزبان اجرا می شود. مثال از آن در پوشه submission/ndkTest/ استفاده می کند.

یک جریان تست AutoRepro معمولی معمولاً از یکی از دو الگو پیروی می کند:

  • برنامه تست ابزاری:

    1. آزمایش سمت میزبان یک APK متشکل از یک برنامه یا سرویس ابزاردار را روی دستگاه فشار می‌دهد.
    2. تست سمت میزبان، تست‌های JUnit سمت دستگاه را که با APK از طریق runDeviceTest() همراه است، شروع می‌کند.
    3. JUnit سمت دستگاه، دکمه‌های ضربه زدن را آزمایش می‌کند و برنامه را با استفاده از UIAutomator تماشا می‌کند، یا به روش‌هایی به APIهای Android دسترسی پیدا می‌کند که آسیب‌پذیری‌های امنیتی را آشکار می‌کند.
    4. موفقیت یا عدم موفقیت تست‌های JUnit سمت دستگاه به تست سمت میزبان بازگردانده می‌شود، که می‌توان از آن برای تعیین اینکه آیا آزمون موفق شد یا خیر، استفاده کرد. پیام شکست باید حاوی اطلاعات دقیقی در مورد علت شکست ادعا و هر شیء خاص، مقادیر، استثناء، stacktraces یا سایر مصنوعات به عنوان اثبات آسیب‌پذیری باشد.
  • اثبات مفهوم NDK:

    1. تست سمت میزبان یک فایل اجرایی لینوکس را روی دستگاه فشار داده و راه اندازی می کند.
    2. برنامه بومی خراب می شود یا یک کد خروج خاص را برمی گرداند.
    3. تست سمت میزبان، خرابی‌ها را بررسی می‌کند، به عقب‌گرد logcat نگاه می‌کند، یا به دنبال کد خروجی خاص می‌گردد تا مشخص کند که آیا حمله موفق بوده است یا خیر. پیام شکست باید حاوی اطلاعات دقیقی در مورد علت شکست ادعا و هرگونه ساختار خاص، مقدار، stacktraces یا سایر مصنوعات به عنوان اثبات آسیب‌پذیری باشد.

ترکیبی از این دو الگو (به عنوان مثال، اجرای یک برنامه بومی در ارتباط با تست های سمت دستگاه) نیز امکان پذیر است. برخی از چارچوب‌های ابزار دقیق دیگر مانند frida-inject نیز در دسترس هستند. برای جزئیات، به اسناد مرجع مجموعه تست امنیتی و اسناد مرجع Tradefed مراجعه کنید.

حمله اثبات مفهوم من به برنامه آزمایشی یا فایل اجرایی بومی نیاز ندارد

اکثر تست ها هم به برنامه سمت دستگاه و هم به یک فایل اجرایی بومی نیاز ندارند.

اگر آزمایش شما شامل استفاده از یک ویژگی نیست، دایرکتوری های غیرضروری زیر پروژه gradle را حذف کنید.

حمله اثبات مفهوم من شامل یک برنامه/سرویس دوم است

هر تعداد زیر پروژه Gradle را با افزونه های AutoRepro اضافه کنید.

تست AutoRepro را ارسال کنید

برای درج نتایج آزمایش از دستگاه خود به عنوان بخشی از ارسال:

  • به صورت اختیاری، وظیفه clean Gradle را برای حذف هر آزمایش قدیمی اجرا کنید.
  • پیکربندی اجرای مناسب AutoRepro را اجرا کنید تا Tradefed را برای آزمایش خود فراخوانی کنید و گزارش ها و نتایج را جمع آوری کنید.
  • وظیفه copyInvocationResultsToSubmission را اجرا کنید تا گزارش‌ها و نتایج را در فهرست منابع ارسال کپی کنید.

assembleSubmissionZip برای ایجاد فایل submission/build/autorepro-submission.zip اجرا کنید. آن فایل را همراه با ارسال خود در برنامه پاداش آسیب پذیری Android آپلود کنید. اطمینان حاصل کنید که پیوست با الگوی *autorepro-submission*.zip مطابقت دارد و با گزارش اولیه آپلود شده است. آپلود دیرهنگام ارسالی بر توانایی ما برای بررسی صحیح گزارش شما تأثیر می گذارد.