امنیت برنامه

این صفحه جنبه‌های مختلف امنیت برنامه را شرح می‌دهد.

عناصر برنامه‌ها

اندروید یک پلتفرم و محیط برنامه متن‌باز برای دستگاه‌های تلفن همراه فراهم می‌کند. هسته سیستم عامل مبتنی بر هسته لینوکس است. برنامه‌های اندروید اغلب با زبان برنامه‌نویسی جاوا نوشته می‌شوند و در ماشین مجازی Android Runtime (ART) اجرا می‌شوند. با این حال، برنامه‌ها را می‌توان با کد بومی نیز نوشت. برنامه‌ها از یک فایل واحد با پسوند فایل APK نصب می‌شوند.

بلوک‌های اصلی سازنده اپلیکیشن اندروید عبارتند از:

  • AndroidManifest.xml : فایل AndroidManifest.xml یک فایل کنترلی است که به سیستم می‌گوید با تمام اجزای سطح بالا (به‌طور خاص فعالیت‌ها، سرویس‌ها، گیرنده‌های پخش و ارائه‌دهندگان محتوا که در ادامه توضیح داده می‌شوند) در یک برنامه چه کاری انجام دهد. این فایل همچنین مجوزهای مورد نیاز را مشخص می‌کند.

  • فعالیت‌ها: یک فعالیت ، عموماً کدی برای یک کار واحد و متمرکز بر کاربر است که با استفاده از کلاس Activity انجام می‌شود. یک فعالیت معمولاً شامل نمایش رابط کاربری به کاربر است، اما الزامی هم ندارد؛ برخی از فعالیت‌ها هرگز رابط‌های کاربری را نمایش نمی‌دهند. معمولاً یکی از فعالیت‌های برنامه، نقطه ورود به یک برنامه است.

  • سرویس‌ها: یک سرویس مجموعه‌ای از کد است که بر اساس کلاس Service در پس‌زمینه اجرا می‌شود. می‌تواند در فرآیند خود یا در چارچوب فرآیند یک برنامه دیگر اجرا شود. سایر اجزا به یک سرویس متصل می‌شوند و از طریق فراخوانی‌های رویه از راه دور، متدهای آن را فراخوانی می‌کنند. نمونه‌ای از یک سرویس، پخش‌کننده رسانه است: حتی زمانی که کاربر از رابط کاربری انتخاب رسانه خارج می‌شود، احتمالاً کاربر همچنان قصد دارد موسیقی پخش شود. یک سرویس حتی زمانی که رابط کاربری به پایان رسیده است، موسیقی را ادامه می‌دهد.

  • گیرنده پخش: یک گیرنده پخش، شیء کلاس BroadcastReceiver است. این گیرنده زمانی نمونه‌سازی می‌شود که یک مکانیزم IPC که به عنوان یک intent شناخته می‌شود، نمونه‌ای از کلاس Intent ، توسط سیستم عامل یا برنامه دیگری صادر شود. به عنوان مثال، یک برنامه می‌تواند یک گیرنده را برای پیام باتری کم ثبت کند و رفتار خود را بر اساس آن اطلاعات تغییر دهد.

مدل مجوز اندروید: دسترسی به APIهای محافظت‌شده

همه برنامه‌های اندروید در یک محیط سندباکس (Sandbox) اجرا می‌شوند. به طور پیش‌فرض، یک برنامه اندروید فقط می‌تواند به طیف محدودی از منابع سیستم دسترسی داشته باشد. این سیستم، دسترسی برنامه اندروید به منابعی را مدیریت می‌کند که در صورت استفاده نادرست یا مخرب، می‌توانند بر تجربه کاربر، شبکه یا داده‌های دستگاه تأثیر منفی بگذارند.

این محدودیت‌ها به اشکال مختلفی پیاده‌سازی می‌شوند. برخی از قابلیت‌ها به دلیل فقدان عمدی APIها برای عملکردهای حساس محدود شده‌اند (برای مثال، هیچ API اندروید برای دستکاری مستقیم سیم‌کارت وجود ندارد). در برخی موارد، جداسازی نقش‌ها، مانند جداسازی فضای ذخیره‌سازی به ازای هر برنامه، یک اقدام امنیتی را فراهم می‌کند. در موارد دیگر، APIهای حساس برای استفاده توسط برنامه‌های قابل اعتماد در نظر گرفته شده‌اند و از طریق یک مکانیسم امنیتی معروف به مجوزها محافظت می‌شوند.

این API های محافظت شده عبارتند از:

  • عملکردهای دوربین
  • داده‌های مکانی (GPS)
  • عملکردهای بلوتوث
  • عملکردهای تلفن
  • عملکردهای پیامک/MMS
  • اتصالات شبکه/داده

این منابع فقط از طریق سیستم عامل قابل دسترسی هستند. برای استفاده از APIهای محافظت‌شده روی دستگاه، یک برنامه باید قابلیت‌های مورد نیاز خود را در مانیفست خود تعریف کند. همه نسخه‌های اندروید ۶.۰ و بالاتر از مدل مجوزهای زمان اجرا استفاده می‌کنند. اگر کاربری از برنامه‌ای که به API محافظت‌شده نیاز دارد، ویژگی‌ای را درخواست کند، سیستم یک کادر محاوره‌ای نمایش می‌دهد و از کاربر می‌خواهد که مجوز را رد یا تأیید کند .

پس از اعطای مجوز، تا زمانی که برنامه نصب باشد، مجوزها به آن اعمال می‌شوند. برای جلوگیری از سردرگمی کاربر، سیستم دوباره به کاربر در مورد مجوزهای اعطا شده به برنامه اطلاع نمی‌دهد و برنامه‌هایی که در سیستم عامل اصلی گنجانده شده‌اند یا توسط یک OEM همراه هستند، از کاربر درخواست مجوز نمی‌کنند. در صورت حذف برنامه، مجوزها حذف می‌شوند، بنابراین نصب مجدد بعدی منجر به نمایش مجوزها می‌شود.

در تنظیمات دستگاه، کاربران می‌توانند مجوزهای برنامه‌هایی را که قبلاً نصب کرده‌اند مشاهده کنند. همچنین می‌توانند برخی از قابلیت‌ها را به صورت کلی غیرفعال کنند، مانند غیرفعال کردن GPS، رادیو یا Wi-Fi.

در صورتی که یک برنامه سعی کند از یک ویژگی محافظت‌شده که در مانیفست برنامه اعلام نشده است استفاده کند، عدم موفقیت در مجوز معمولاً منجر به ارسال یک استثنای امنیتی به برنامه می‌شود. بررسی‌های مجوز API محافظت‌شده در پایین‌ترین سطح ممکن برای جلوگیری از دور زدن اعمال می‌شوند. نمونه‌ای از پیام‌رسانی کاربر هنگام نصب برنامه هنگام درخواست دسترسی به APIهای محافظت‌شده در شکل 2 نشان داده شده است.

مجوزهای پیش‌فرض سیستم در Manifest.permission شرح داده شده‌اند. برنامه‌ها ممکن است مجوزهای خود را برای استفاده سایر برنامه‌ها اعلام کنند. چنین مجوزهایی در مکان فوق فهرست نشده‌اند.

هنگام تعریف یک مجوز، ویژگی protectionLevel به سیستم می‌گوید که چگونه کاربر از برنامه‌هایی که به مجوز نیاز دارند مطلع شود، یا چه کسی مجاز به داشتن یک مجوز است. جزئیات مربوط به ایجاد و استفاده از مجوزهای خاص برنامه در چک لیست امنیتی شرح داده شده است.

برخی از قابلیت‌های دستگاه، مانند قابلیت ارسال پیام‌های تبلیغاتی SMS، برای برنامه‌های شخص ثالث در دسترس نیستند، اما ممکن است توسط برنامه‌های از پیش نصب شده توسط OEM استفاده شوند. این مجوزها از مجوز signatureOrSystem استفاده می‌کنند.

چگونه کاربران برنامه‌های شخص ثالث را درک می‌کنند

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

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

برخی دیگر از پلتفرم‌ها از رویکرد متفاوتی برای اعلان به کاربر استفاده می‌کنند و در ابتدای هر جلسه یا در حین استفاده از برنامه‌ها، درخواست مجوز می‌کنند. چشم‌انداز اندروید این است که کاربران بتوانند به طور یکپارچه و دلخواه بین برنامه‌ها جابجا شوند. ارائه تأییدیه در هر بار، سرعت کاربر را کاهش می‌دهد و مانع از ارائه یک تجربه کاربری عالی توسط اندروید می‌شود. داشتن مجوزهای بررسی کاربر در زمان نصب، به کاربر این امکان را می‌دهد که در صورت احساس ناراحتی، برنامه را نصب نکند.

همچنین، بسیاری از مطالعات رابط کاربری نشان داده‌اند که درخواست بیش از حد از کاربر باعث می‌شود که او شروع به کلیک کردن روی تأیید (OK) برای هر کادر محاوره‌ای نشان داده شده کند. یکی از اهداف امنیتی اندروید، انتقال مؤثر اطلاعات امنیتی مهم به کاربر است، که این کار را نمی‌توان با استفاده از کادرهای محاوره‌ای که کاربر برای نادیده گرفتن آنها آموزش دیده است، انجام داد. با ارائه اطلاعات مهم یک بار و فقط زمانی که مهم هستند، کاربر بیشتر احتمال دارد در مورد آنچه که با آن موافقت می‌کند فکر کند.

برخی از پلتفرم‌ها تصمیم می‌گیرند که هیچ اطلاعاتی در مورد عملکرد برنامه نشان ندهند. این رویکرد مانع از آن می‌شود که کاربران به راحتی قابلیت‌های برنامه را درک کرده و در مورد آنها بحث کنند. اگرچه برای همه کاربران امکان تصمیم‌گیری کاملاً آگاهانه وجود ندارد، مدل مجوزهای اندروید اطلاعات مربوط به برنامه‌ها را به راحتی در دسترس طیف وسیعی از کاربران قرار می‌دهد. به عنوان مثال، درخواست‌های مجوز غیرمنتظره می‌تواند کاربران پیچیده‌تر را وادار کند تا سوالات مهمی در مورد عملکرد برنامه بپرسند و نگرانی‌های خود را در مکان‌هایی مانند Google Play که برای همه کاربران قابل مشاهده است، به اشتراک بگذارند.

مجوزها در هنگام نصب برنامه — ترجمه گوگل مجوزهای یک برنامه نصب شده — Gmail
مجوزها در نصب برنامه -- ترجمه گوگلمجوزهای یک برنامه نصب شده — Gmail

شکل ۱. نمایش مجوزهای برنامه‌ها.

ارتباط بین فرآیندی

فرآیندها می‌توانند با استفاده از هر یک از مکانیسم‌های سنتی یونیکس ارتباط برقرار کنند. به عنوان مثال می‌توان به سیستم فایل، سوکت‌های محلی یا سیگنال‌ها اشاره کرد. با این حال، مجوزهای لینوکس همچنان اعمال می‌شوند.

اندروید همچنین مکانیزم‌های جدید IPC را ارائه می‌دهد:

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

  • سرویس‌ها: سرویس‌ها می‌توانند رابط‌هایی را ارائه دهند که مستقیماً با استفاده از binder قابل دسترسی هستند. برای توضیحات بیشتر، به عناصر برنامه‌ها مراجعه کنید.

  • Intents: یک intent یک شیء پیام ساده است که نشان دهنده قصد انجام کاری است. به عنوان مثال، اگر برنامه شما بخواهد یک صفحه وب را نمایش دهد، با ایجاد یک نمونه intent و تحویل آن به سیستم، قصد خود را برای مشاهده URL بیان می‌کند. سیستم قطعه کد دیگری (در این مورد، مرورگر) را که می‌داند چگونه آن intent را مدیریت کند، پیدا کرده و آن را اجرا می‌کند. intents همچنین می‌توانند برای پخش رویدادهای جالب (مانند یک اعلان) در سراسر سیستم استفاده شوند. برای توضیحات کلاس، به Intent مراجعه کنید.

  • ارائه دهندگان محتوا: ارائه دهنده محتوا یک انبار داده است که دسترسی به داده‌های موجود در دستگاه را فراهم می‌کند؛ مثال کلاسیک آن ارائه دهنده محتوا است که برای دسترسی به لیست مخاطبین کاربر استفاده می‌شود. یک برنامه می‌تواند به داده‌هایی که سایر برنامه‌ها با ارائه دهنده محتوا در معرض نمایش قرار داده‌اند دسترسی پیدا کند و همچنین یک برنامه می‌تواند ارائه دهنده محتوای خود را برای نمایش داده‌های خود تعریف کند. برای توضیحات مربوط به کلاس، به ContentProvider مراجعه کنید.

اگرچه می‌توان IPC را با استفاده از مکانیسم‌های دیگری مانند سوکت‌های شبکه یا فایل‌های قابل نوشتن جهانی پیاده‌سازی کرد، اما اینها چارچوب‌های IPC اندروید توصیه شده هستند. به توسعه‌دهندگان اندروید توصیه می‌شود که از بهترین شیوه‌ها در مورد ایمن‌سازی داده‌های کاربران و جلوگیری از ایجاد آسیب‌پذیری‌های امنیتی استفاده کنند.

APIهای حساس به هزینه

یک API حساس به هزینه، هر تابعی است که ممکن است برای کاربر یا شبکه هزینه ایجاد کند. پلتفرم اندروید، APIهای حساس به هزینه را در فهرست APIهای محافظت‌شده تحت کنترل سیستم‌عامل قرار داده است. کاربر باید به برنامه‌های شخص ثالثی که درخواست استفاده از APIهای حساس به هزینه را دارند، اجازه صریح بدهد. این APIها عبارتند از:

  • تلفن
  • پیامک/MMS
  • شبکه/داده
  • پرداخت درون برنامه‌ای
  • دسترسی NFC

اندروید ۴.۲ کنترل بیشتری بر استفاده از پیامک اضافه می‌کند. اگر برنامه‌ای سعی کند پیامکی را به یک کد کوتاه که از سرویس‌های پریمیوم استفاده می‌کند ارسال کند، که ممکن است هزینه‌های اضافی ایجاد کند، اندروید اعلانی ارائه می‌دهد. کاربر می‌تواند انتخاب کند که آیا به برنامه اجازه ارسال پیام را بدهد یا آن را مسدود کند.

دسترسی به سیم کارت

دسترسی سطح پایین به سیم کارت برای برنامه‌های شخص ثالث در دسترس نیست. سیستم عامل تمام ارتباطات با سیم کارت، از جمله دسترسی به اطلاعات شخصی (مخاطبین) موجود در حافظه سیم کارت را مدیریت می‌کند. برنامه‌ها همچنین نمی‌توانند به دستورات AT دسترسی داشته باشند، زیرا این دستورات منحصراً توسط لایه رابط رادیویی (RIL) مدیریت می‌شوند. RIL هیچ API سطح بالایی برای این دستورات ارائه نمی‌دهد.

اطلاعات شخصی

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

دسترسی به داده‌های حساس کاربر فقط از طریق APIهای محافظت‌شده امکان‌پذیر است

شکل ۲. دسترسی به داده‌های حساس کاربر فقط از طریق APIهای محافظت‌شده امکان‌پذیر است.

ارائه‌دهندگان محتوای سیستم که احتمالاً حاوی اطلاعات شخصی یا اطلاعات قابل شناسایی شخصی مانند مخاطبین و تقویم هستند، با مجوزهای کاملاً مشخص ایجاد شده‌اند. این جزئیات، به کاربر نشان می‌دهد که چه نوع اطلاعاتی ممکن است به برنامه ارائه شود. در حین نصب، یک برنامه شخص ثالث ممکن است درخواست مجوز دسترسی به این منابع را داشته باشد. در صورت اعطای مجوز، برنامه می‌تواند نصب شود و در هر زمانی از نصب به داده‌های درخواستی دسترسی داشته باشد.

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

دستگاه‌های ورودی داده‌های حساس

دستگاه‌های اندروید اغلب دستگاه‌های ورودی داده‌های حساسی را ارائه می‌دهند که به برنامه‌ها اجازه می‌دهد با محیط اطراف، مانند دوربین، میکروفون یا GPS، تعامل داشته باشند. برای اینکه یک برنامه شخص ثالث به این دستگاه‌ها دسترسی داشته باشد، ابتدا باید به صراحت از طریق استفاده از مجوزهای سیستم عامل اندروید، دسترسی به آن توسط کاربر فراهم شود. پس از نصب، نصب‌کننده از کاربر می‌خواهد که با نام، درخواست مجوز برای حسگر را ارائه دهد.

اگر برنامه‌ای بخواهد موقعیت مکانی کاربر را بداند، برای دسترسی به موقعیت مکانی کاربر به مجوز نیاز دارد. پس از نصب، برنامه نصب‌کننده از کاربر می‌پرسد که آیا برنامه می‌تواند به موقعیت مکانی کاربر دسترسی داشته باشد یا خیر. در هر زمانی، اگر کاربر نمی‌خواهد هیچ برنامه‌ای به موقعیت مکانی او دسترسی داشته باشد، می‌تواند برنامه تنظیمات را اجرا کند، به قسمت موقعیت مکانی و امنیت (Location & Security) برود و تیک گزینه‌های استفاده از شبکه‌های بی‌سیم (Use wireless networks) و فعال کردن ماهواره‌های GPS را بردارد. این کار سرویس‌های مبتنی بر موقعیت مکانی را برای همه برنامه‌های موجود در دستگاه کاربر غیرفعال می‌کند.

فراداده دستگاه

اندروید همچنین تلاش می‌کند دسترسی به داده‌هایی را که ذاتاً حساس نیستند، اما ممکن است به‌طور غیرمستقیم ویژگی‌های کاربر، ترجیحات کاربر و نحوه استفاده او از دستگاه را فاش کنند، محدود کند.

به طور پیش‌فرض برنامه‌ها به گزارش‌های سیستم عامل، تاریخچه مرورگر، شماره تلفن یا اطلاعات شناسایی سخت‌افزار یا شبکه دسترسی ندارند. اگر برنامه‌ای در زمان نصب درخواست دسترسی به این اطلاعات را داشته باشد، نصب‌کننده از کاربر می‌پرسد که آیا برنامه می‌تواند به این اطلاعات دسترسی داشته باشد یا خیر. اگر کاربر اجازه دسترسی ندهد، برنامه نصب نخواهد شد.

مراجع صدور گواهینامه

اندروید شامل مجموعه‌ای از مراکز صدور گواهی سیستمی نصب‌شده است که در سراسر سیستم مورد اعتماد هستند. قبل از اندروید ۷.۰، تولیدکنندگان دستگاه می‌توانستند مجموعه CAهای نصب‌شده روی دستگاه‌های خود را تغییر دهند. با این حال، دستگاه‌هایی که اندروید ۷.۰ و بالاتر را اجرا می‌کنند، مجموعه‌ای یکسان از CAهای سیستمی دارند، زیرا اصلاح توسط تولیدکنندگان دستگاه دیگر مجاز نیست.

برای اضافه شدن به عنوان یک CA عمومی جدید به مجموعه CAهای اندروید، CA باید فرآیند گنجاندن CA موزیلا را تکمیل کند و سپس یک درخواست ویژگی برای اندروید ( https://code.google.com/p/android/issues/entry ) ثبت کند تا CA به مجموعه CAهای اندروید موجود در پروژه متن‌باز اندروید (AOSP) اضافه شود.

هنوز CAهایی وجود دارند که مختص دستگاه هستند و نباید در مجموعه اصلی CAهای AOSP گنجانده شوند، مانند CAهای خصوصی اپراتورها که ممکن است برای دسترسی ایمن به اجزای زیرساخت اپراتور، مانند دروازه‌های SMS/MMS، مورد نیاز باشند. به تولیدکنندگان دستگاه توصیه می‌شود CAهای خصوصی را فقط در اجزا/برنامه‌هایی که نیاز به اعتماد به این CAها دارند، قرار دهند. برای جزئیات بیشتر، به پیکربندی امنیت شبکه مراجعه کنید.

امضای برنامه

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

در گوگل پلی، امضای برنامه، اعتماد گوگل به توسعه‌دهنده و اعتماد توسعه‌دهنده به برنامه‌اش را برقرار می‌کند. توسعه‌دهندگان می‌دانند که برنامه‌شان بدون تغییر برای دستگاه اندروید ارائه شده است؛ و می‌توانند در قبال رفتار برنامه خود پاسخگو باشند.

در اندروید، امضای برنامه اولین قدم برای قرار دادن یک برنامه در App Sandbox آن است. گواهی برنامه امضا شده مشخص می‌کند که کدام شناسه کاربری با کدام برنامه مرتبط است؛ برنامه‌های مختلف تحت شناسه‌های کاربری مختلف اجرا می‌شوند. امضای برنامه تضمین می‌کند که یک برنامه نمی‌تواند به هیچ برنامه دیگری دسترسی داشته باشد، مگر از طریق IPC که به خوبی تعریف شده است.

وقتی یک برنامه (فایل APK) روی دستگاه اندروید نصب می‌شود، مدیر بسته تأیید می‌کند که APK به درستی با گواهی موجود در آن APK امضا شده است. اگر گواهی (یا به طور دقیق‌تر، کلید عمومی موجود در گواهی) با کلید مورد استفاده برای امضای هر APK دیگری روی دستگاه مطابقت داشته باشد، APK جدید این گزینه را دارد که در مانیفست مشخص کند که یک UID را با سایر APKهای امضا شده مشابه به اشتراک می‌گذارد.

برنامه‌ها می‌توانند توسط یک شخص ثالث (OEM، اپراتور، بازار جایگزین) امضا شوند یا خودشان امضا شوند. اندروید امضای کد را با استفاده از گواهی‌های خودامضا ارائه می‌دهد که توسعه‌دهندگان می‌توانند بدون کمک یا اجازه خارجی تولید کنند. برنامه‌ها نیازی به امضای یک مرجع مرکزی ندارند. اندروید در حال حاضر تأیید CA را برای گواهی‌های برنامه انجام نمی‌دهد.

برنامه‌ها همچنین می‌توانند مجوزهای امنیتی را در سطح حفاظت از امضا اعلام کنند و دسترسی را فقط به برنامه‌هایی که با کلید یکسان امضا شده‌اند محدود کنند، در حالی که UIDها و Application Sandboxهای متمایزی را حفظ می‌کنند. ارتباط نزدیک‌تر با Application Sandbox مشترک از طریق ویژگی UID مشترک امکان‌پذیر است که در آن دو یا چند برنامه امضا شده با کلید توسعه‌دهنده یکسان می‌توانند یک UID مشترک را در مانیفست خود اعلام کنند.

تأیید برنامه

اندروید ۴.۲ و بالاتر از تأیید برنامه پشتیبانی می‌کند. کاربران می‌توانند گزینه تأیید برنامه‌ها را فعال کنند و برنامه‌ها را قبل از نصب توسط یک تأییدکننده برنامه ارزیابی کنند. تأیید برنامه می‌تواند در صورت تلاش کاربر برای نصب برنامه‌ای که ممکن است مضر باشد، به او هشدار دهد. اگر برنامه‌ای به طور خاص بد باشد، می‌تواند نصب آن را مسدود کند.

مدیریت حقوق دیجیتال

پلتفرم اندروید یک چارچوب مدیریت حقوق دیجیتال (DRM) توسعه‌پذیر ارائه می‌دهد که به برنامه‌ها اجازه می‌دهد محتوای دارای حقوق محافظت‌شده را طبق محدودیت‌های مجوز مرتبط با محتوا مدیریت کنند. چارچوب DRM از بسیاری از طرح‌های DRM پشتیبانی می‌کند؛ اینکه یک دستگاه از کدام طرح‌های DRM پشتیبانی می‌کند، به سازنده دستگاه واگذار شده است.

چارچوب DRM اندروید در دو لایه معماری پیاده‌سازی شده است (شکل 3 را ببینید):

  • یک API چارچوب DRM که از طریق چارچوب برنامه اندروید در اختیار برنامه‌ها قرار می‌گیرد و برای برنامه‌های استاندارد از طریق ART VM اجرا می‌شود.

  • یک مدیر DRM با کد بومی، که چارچوب DRM را پیاده‌سازی می‌کند و رابطی را برای افزونه‌های DRM (عامل‌ها) ارائه می‌دهد تا مدیریت حقوق و رمزگشایی را برای طرح‌های مختلف DRM انجام دهد.

معماری مدیریت حقوق دیجیتال در پلتفرم اندروید

شکل ۳. معماری DRM در پلتفرم اندروید.