مجوزهای اندروید

مجوزهای اندروید کنترل‌هایی را ارائه می‌دهند که آگاهی کاربر را افزایش داده و دسترسی یک برنامه به داده‌های حساس را محدود می‌کنند. پیکربندی مجوزها در اندروید ۸.۰ و پایین‌تر شامل allowlisting می‌شود که بدون آن برنامه‌های دارای امتیاز غیرفعال می‌شوند، حتی اگر در مسیر priv-app باشند. در اندروید ۹ و بالاتر، دستگاهی که سعی در استفاده از برنامه‌هایی دارد که به درستی allowlisted نشده‌اند، بوت نمی‌شود.

اندروید ۱۰ مفهوم نقش (role) را معرفی کرد، یک نام منحصر به فرد در سیستم که با الزامات و امتیازات خاصی مرتبط است. نقش‌ها را به برنامه‌ها اختصاص دهید تا به آنها مجوزهایی برای یک هدف خاص اعطا کنید و نقش‌های پیش‌فرض را با استفاده از منابع پیکربندی پلتفرم پیکربندی کنید.

افزایش محافظت در برابر برنامه‌های بالقوه مضر (PHA) موارد زیر را بهبود می‌بخشد:

  • شفافیت در مورد رفتارهای بالقوه مضر برنامه‌ها.
  • کنترل کاربر بر رفتار برنامه.
  • اختیار توسعه‌دهندگان برنامه هنگام استفاده از داده‌های خصوصی، که توسط مجوزها محافظت می‌شوند.

نصب بسته و مجوز

در اندروید ۹ و پایین‌تر، نصب بسته و قابلیت‌های کنترل مجوز در بسته PackageInstaller ( //packages/apps/PackageInstaller ) قرار داشتند. در اندروید ۱۰ و بالاتر، قابلیت کنترل مجوز در یک بسته جداگانه، PermissionController ( //packages/apps/PermissionController ) قرار دارد. شکل ۱ محل قرارگیری این دو بسته را در اندروید ۱۰ نشان می‌دهد.

جداسازی نصب بسته و عملکردهای کنترل مجوز برای برنامه‌های سیستمی و برنامه‌های نصب شده توسط کاربر

شکل 1. نصب بسته و قابلیت‌های کنترل مجوز در اندروید 10

لیست‌های مجاز و دسترسی‌ها

در اندروید ۶.۰ و بالاتر، برنامه‌ها در زمان اجرا درخواست دسترسی به مجوزهای خطرناک را دارند. اندروید ۱۰ مجوزهای زمان اجرا با تشخیص فعالیت (AR) را اضافه کرده است که از کاربر می‌خواهد مجوزهای خطرناک را تغییر دهد یا مجاز کند.

اندروید ۸.۰ شما را ملزم می‌کرد که در فایل‌های XML پیکربندی سیستم در دایرکتوری /etc/permissions ، فهرست مجوزهای دسترسی برنامه‌های دارای امتیاز را به صراحت مشخص کنید. در اندروید ۹ و بالاتر، مجوزهای دسترسی باید فهرست شوند، در غیر این صورت دستگاه نمی‌تواند بوت شود.

برای محدود کردن دسترسی به API داخلی و جلوگیری از دسترسی تصادفی برنامه‌ها به کتابخانه‌های پلتفرم، اندروید ۷.۰ فضاهای نامی را برای کتابخانه‌های بومی معرفی کرد. این امر کتابخانه‌های سیستم را از کتابخانه‌های برنامه جدا می‌کند و تولیدکنندگان دستگاه می‌توانند کتابخانه‌های بومی خود را اضافه کنند.

از اندروید ۱۰ به بعد، برنامه‌ها برای دسترسی به محتوای صفحه نمایش دستگاه باید هم مجوزهای امضا و هم رضایت کاربر را داشته باشند. برنامه‌های دارای مجوز که به قابلیت ضبط بی‌صدا، مانند گرفتن اسکرین‌شات، متکی هستند، باید به جای آن از کلاس MediaProjection استفاده کنند.

اندروید ۱۵ شما را ملزم می‌کند که مجوزهای امضای پلتفرم را که توسط برنامه‌های غیرسیستمی درخواست می‌شوند یا اخیراً توسط به‌روزرسانی‌های برنامه‌های سیستمی درخواست شده‌اند، در فایل‌های XML پیکربندی سیستم در دایرکتوری /etc/permissions ، به صراحت فهرست کنید .

شفافیت و حریم خصوصی

در اندروید ۶.۰ و بالاتر، آدرس MAC کارخانه‌ای دستگاه از دسترسی ارائه‌دهندگان خدمات Wi-Fi و تحلیل‌گران بسته محافظت می‌شود. محدودیت‌های اضافی در اندروید ۱۰، برنامه‌ها را از دسترسی به شناسه‌های تغییرناپذیر دستگاه (ID) محدود می‌کند، مگر اینکه برای مجوزهای ممتاز در فهرست قرار گرفته باشند. (بخش اتصال، بحثی مرتبط در مورد شناسه‌های دستگاه ارائه می‌دهد، زیرا این موضوع بر اپراتورها تأثیر می‌گذارد.)

در اندروید ۹ و پایین‌تر، کاربران هنگام اعطای دسترسی به موقعیت مکانی به برنامه‌ها، انتخاب‌های مداومی انجام می‌دهند. از اندروید ۱۰ به بعد، ویژگی مجوزهای موقعیت مکانی سه‌گانه به کاربران سه گزینه برای دسترسی برنامه‌ها به موقعیت مکانی دستگاه می‌دهد. این الزامات مجوز صرف نظر از SDK هدف، برای برنامه‌ها در اندروید ۱۰ اعمال می‌شود.

پیکربندی مجوزها برای سایر ویژگی‌های شفافیت و حریم خصوصی از اندروید ۱۰

  • یادآوری موقعیت مکانی دسترسی در پس‌زمینه، به کاربران نشان می‌دهد که چه زمانی یک برنامه با استفاده از مجوز ACCESS_FINE_LOCATION در پس‌زمینه به موقعیت مکانی دستگاه آنها دسترسی پیدا می‌کند.
  • داده‌های مربوط به وابستگی مخاطبین، که توسط کامپوننت Contacts Provider مدیریت می‌شوند، به طور متفاوتی قابل دسترسی هستند: برنامه‌ها نمی‌توانند داده‌های وابستگی مخاطبین را در پایگاه داده بنویسند یا از آنها بخوانند. این موضوع بر APIهای مربوط به تماس‌گیرنده تأثیر می‌گذارد.

پیکربندی‌های ساده‌شده

تنظیمات مجوزها برای اندروید ۶.۰ و بالاتر ساده‌تر شده است.

  • قابلیت‌های محیطی برای سرویس‌هایی که توسط init راه‌اندازی می‌شوند، تمام جنبه‌های پیکربندی سرویس را در یک فایل .rc نگه می‌دارد. هنگام تنظیم قابلیت‌ها برای سرویس‌هایی که توسط init راه‌اندازی نشده‌اند، قابلیت‌های سیستم فایل را با استفاده از fs_config.c پیکربندی کنید.
  • اندروید ۷.x و پایین‌تر، مکانیزم شناسه‌های اندروید (AID) را با استفاده از یک فایل android_filesystem_config.h مخصوص دستگاه، برای مشخص کردن قابلیت‌های سیستم فایل و/یا AIDهای سفارشی سازنده دستگاه، گسترش می‌دهند. اندروید ۸.۰ و بالاتر از یک روش جدید برای گسترش قابلیت‌های سیستم فایل پشتیبانی می‌کند.
  • در اندروید ۸.۰، مدیریت دستورات USB از اسکریپت‌های init مخصوص دستگاه (جایگزینی برای لایه‌های HAL) خارج شده و به یک دیمن USB بومی منتقل شده است. رابط USB HAL باید در هر دستگاهی که با اندروید ۸.۰ و بالاتر راه‌اندازی می‌شود، پیاده‌سازی شود.