پلاگین AutoRepro Gradle بر روی مهار تست فدراسیون تجارت Android ساخته شده است تا تمام دستگاه های اندرویدی را برای آزمایشات وصله امنیتی در برابر آسیب پذیری های موجود در بولتن امنیتی Android آزمایش کند. این تستها منحصراً برای اصلاحاتی هستند که با آسیبپذیریها و مواجهههای مشترک (CVE) مرتبط هستند یا خواهند بود.
این افزونه امکان توسعه تست های Tradefed را در خارج از درخت منبع اندروید با استفاده از Android Studio یا Android SDK استاندارد فراهم می کند. این شامل تمام ابزارهایی است که برای ساخت و اجرای تست Tradefed مورد نیاز است.
در درجه اول برای ارسال مفاهیم اثبات مفاهیم قابل تکرار خودکار برای برنامه پاداش آسیب پذیری Android استفاده می شود.
پیش نیازها
دستورالعمل ها برای یک کامپیوتر لینوکس 64 بیتی ارائه شده است.
- Android Studio Ladybug یا جدیدتر - همچنین می تواند از مدیر بسته توزیع شما نصب شود.
- ابزارهای پلتفرم Android SDK (
adb
،fastboot
) - باید نصب شوند و در$PATH
خود باشند (یعنی باید بتوانیدadb
از خط فرمان اجرا کنید). ساده ترین راه برای نصب ابزارهای پلتفرم استفاده از مدیر بسته توزیعی شما است.- اگر از مدیر SDK Android Studio به جای ابزارهای پلتفرم مستقل استفاده میکنید، به خاطر داشته باشید که دایرکتوری
platform-tools
SDK را برای توسعه خط فرمان به$PATH
خود اضافه کنید.
- اگر از مدیر SDK Android Studio به جای ابزارهای پلتفرم مستقل استفاده میکنید، به خاطر داشته باشید که دایرکتوری
- 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 مربوطه وجود دارد:
-
id("com.android.security.autorepro.javahosttest")
تست Tradefed در سمت میزبان که از طریق ADB با دستگاه تعامل دارد. مثال از آن در دایرکتوریsubmission/hostTest/
استفاده می کند. -
id("com.android.security.autorepro.apptest")
یک برنامه یا سرویس APK که از طریقadb install
بر روی دستگاه نصب می شود و توسط تست سمت میزبان راه اندازی می شود. برنامه یا سرویس همچنین میتواند حاوی مجموعهای از اظهارات JUnit باشد که به اجراکننده سمت میزبان گزارش میشود. مثال از آن درsubmission/appTest/
و دایرکتوری استفاده می کند. -
id("com.android.security.autorepro.ndktest")
یک حمله اثبات مفهومی اختیاری مبتنی بر NDK که از طریقadb push
به دستگاه هل داده می شود و توسط تست سمت میزبان اجرا می شود. مثال از آن در پوشهsubmission/ndkTest/
استفاده می کند.
یک جریان تست AutoRepro معمولی معمولاً از یکی از دو الگو پیروی می کند:
برنامه تست ابزاری:
- آزمایش سمت میزبان یک APK متشکل از یک برنامه یا سرویس ابزاردار را روی دستگاه فشار میدهد.
- تست سمت میزبان، تستهای JUnit سمت دستگاه را که با APK از طریق
runDeviceTest()
همراه است، شروع میکند. - JUnit سمت دستگاه، دکمههای ضربه زدن را آزمایش میکند و برنامه را با استفاده از UIAutomator تماشا میکند، یا به روشهایی به APIهای Android دسترسی پیدا میکند که آسیبپذیریهای امنیتی را آشکار میکند.
- موفقیت یا عدم موفقیت تستهای JUnit سمت دستگاه به تست سمت میزبان بازگردانده میشود، که میتوان از آن برای تعیین اینکه آیا آزمون موفق شد یا خیر، استفاده کرد. پیام شکست باید حاوی اطلاعات دقیقی در مورد علت شکست ادعا و هر شیء خاص، مقادیر، استثناء، stacktraces یا سایر مصنوعات به عنوان اثبات آسیبپذیری باشد.
اثبات مفهوم NDK:
- تست سمت میزبان یک فایل اجرایی لینوکس را روی دستگاه فشار داده و راه اندازی می کند.
- برنامه بومی خراب می شود یا یک کد خروج خاص را برمی گرداند.
- تست سمت میزبان، خرابیها را بررسی میکند، به عقبگرد logcat نگاه میکند، یا به دنبال کد خروجی خاص میگردد تا مشخص کند که آیا حمله موفق بوده است یا خیر. پیام شکست باید حاوی اطلاعات دقیقی در مورد علت شکست ادعا و هرگونه ساختار خاص، مقدار، stacktraces یا سایر مصنوعات به عنوان اثبات آسیبپذیری باشد.
ترکیبی از این دو الگو (به عنوان مثال، اجرای یک برنامه بومی در ارتباط با تست های سمت دستگاه) نیز امکان پذیر است. برخی از چارچوبهای ابزار دقیق دیگر مانند frida-inject
نیز در دسترس هستند. برای جزئیات، به اسناد مرجع مجموعه تست امنیتی و اسناد مرجع Tradefed مراجعه کنید.
حمله اثبات مفهوم من به برنامه آزمایشی یا فایل اجرایی بومی نیاز ندارد
اکثر تست ها هم به برنامه سمت دستگاه و هم به یک فایل اجرایی بومی نیاز ندارند.
اگر آزمایش شما شامل استفاده از یک ویژگی نیست، دایرکتوری های غیرضروری زیر پروژه gradle را حذف کنید.
حمله اثبات مفهوم من شامل یک برنامه/سرویس دوم است
هر تعداد زیر پروژه Gradle را با افزونه های AutoRepro اضافه کنید.
تست AutoRepro را ارسال کنید
برای درج نتایج آزمایش از دستگاه خود به عنوان بخشی از ارسال:
- به صورت اختیاری، وظیفه
clean
Gradle را برای حذف هر آزمایش قدیمی اجرا کنید. - پیکربندی اجرای مناسب AutoRepro را اجرا کنید تا Tradefed را برای آزمایش خود فراخوانی کنید و گزارش ها و نتایج را جمع آوری کنید.
- وظیفه
copyInvocationResultsToSubmission
را اجرا کنید تا گزارشها و نتایج را در فهرست منابع ارسال کپی کنید.
assembleSubmissionZip
برای ایجاد فایل submission/build/autorepro-submission.zip
اجرا کنید. آن فایل را همراه با ارسال خود در برنامه پاداش آسیب پذیری Android آپلود کنید. اطمینان حاصل کنید که پیوست با الگوی *autorepro-submission*.zip
مطابقت دارد و با گزارش اولیه آپلود شده است. آپلود دیرهنگام ارسالی بر توانایی ما برای بررسی صحیح گزارش شما تأثیر می گذارد.