بهترین شیوه های امنیت برنامه

این بخش شامل توصیه‌هایی برای اطمینان از امنیت برنامه‌ها در دستگاه‌های اندروید است.

بررسی کد منبع

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

  • هنگام انجام بررسی‌ها، برای اطمینان از پوشش، از دستورالعمل‌های امنیتی جامع پیروی کنید. از استانداردهای داخلی یا خارجی مربوطه برای اطمینان از بررسی‌های منسجم و کامل استفاده کنید.
  • یک linter، مانند linter اندروید استودیو ، را روی تمام کدهای برنامه با استفاده از Android SDK اجرا کنید و هرگونه مشکل شناسایی شده را اصلاح کنید.
  • کد بومی را با استفاده از یک ابزار خودکار که می‌تواند مشکلات مدیریت حافظه، مانند سرریز بافر و خطاهای خارج از نوبت را تشخیص دهد، تجزیه و تحلیل کنید.
  • سیستم ساخت اندروید از بسیاری از ابزارهای پاکسازی LLVM مانند AddressSanitizer و UndefinedBehaviorSanitizer پشتیبانی می‌کند که می‌توانند برای تحلیل زمان اجرا مشکلات مربوط به حافظه مورد استفاده قرار گیرند. این ابزارها در ترکیب با فازینگ که از طریق libFuzzer در اندروید پشتیبانی می‌شود، می‌توانند موارد غیرعادی و نیازمند بررسی بیشتر را کشف کنند.
  • یک ارزیاب امنیتی آگاه باید کدهای پرخطرتر، مانند ارزهای دیجیتال، پردازش پرداخت و پردازش اطلاعات شخصی (PII) را بررسی کند.

تست خودکار

آزمایش خودکار می‌تواند به شناسایی طیف وسیعی از مسائل امنیتی کمک کند و باید به‌طور منظم انجام شود.

  • آخرین نسخه CTS را مرتباً در طول فرآیند توسعه اجرا کنید تا مشکلات را زود تشخیص داده و زمان اصلاح را کاهش دهید. اندروید از CTS به عنوان بخشی از ادغام مداوم در فرآیند ساخت خودکار خود استفاده می‌کند، که چندین بار در روز ساخته می‌شود.
  • خودکارسازی تست امنیتی رابط‌ها، از جمله تست با ورودی‌های ناقص (تست فاز). سیستم ساخت اندروید از libFuzzer برای نوشتن تست‌های فاز پشتیبانی می‌کند.

اسکن آسیب‌پذیری

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

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

کاربردهای بالقوه مضر

مهم است که مطمئن شوید برنامه‌های از پیش نصب‌شده روی دستگاه شما ، برنامه‌های بالقوه مضر (PHA) نباشند. شما مسئول رفتار تمام برنامه‌های موجود در دستگاه‌های خود هستید. قبل از راه‌اندازی دستگاه، تمام برنامه‌های از پیش نصب‌شده را از نظر آسیب‌پذیری اسکن کنید.

برای اطلاعات بیشتر در مورد PHAها و نحوه مبارزه گوگل با آنها در فروشگاه Play، به مستندات توسعه‌دهندگان Google Play Protect مراجعه کنید.

نصب برنامه و مجوزها

مجوزهای بیش از حد برای برنامه‌های از پیش نصب شده می‌تواند یک خطر امنیتی ایجاد کند. برنامه‌های از پیش نصب شده را به حداقل مجوزهای لازم محدود کنید و مطمئن شوید که به مجوزها یا امتیازات غیرضروری دسترسی ندارند. مجوزهای برنامه در AndroidManifest.xml شرح داده شده است.

  • به برنامه‌های از پیش نصب شده مجوزها یا امتیازات غیرضروری ندهید. برنامه‌های دارای امتیازات سیستمی را به طور کامل بررسی کنید زیرا می‌توانند مجوزهای بسیار حساسی داشته باشند.
  • اطمینان حاصل کنید که تمام مجوزهای درخواستی مرتبط و برای عملکرد آن برنامه خاص ضروری هستند.
  • مطمئن شوید که برای همه برنامه‌های از پیش نصب‌شده که از مجوز INSTALL_PACKAGES استفاده می‌کنند، افشای اطلاعات کاربر وجود دارد.
  • اطمینان حاصل کنید که توسعه‌دهنده طبق قرارداد موظف است هیچ برنامه‌ای را با شناسه کاربری ۰ نصب نکند.
  • مجوزهای اعلام شده در مانیفست تمام برنامه‌هایی که قرار است از طریق شبکه توسعه‌دهنده نصب شوند را ارزیابی کنید.
  • اطمینان حاصل کنید که توسعه‌دهنده طبق قرارداد موظف است قبل از ارائه برنامه‌ها به دستگاه، تمام URLهای دانلود برنامه‌های به‌روزرسانی خودکار و نصب‌کننده را با API مرور ایمن گوگل اسکن کند.

امضای برنامه

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

  • مطمئن شوید که برنامه‌ها با کلیدی که به طور عمومی شناخته شده است، مانند کلید توسعه‌دهنده AOSP، امضا نشده‌اند.
  • اطمینان حاصل کنید که کلیدهای مورد استفاده برای امضای برنامه‌ها به شیوه‌ای سازگار با شیوه‌های استاندارد صنعتی برای مدیریت کلیدهای حساس، از جمله یک ماژول امنیتی سخت‌افزاری (HSM) که دسترسی محدود و قابل حسابرسی را فراهم می‌کند، مدیریت می‌شوند.
  • مطمئن شوید که برنامه‌ها با کلید پلتفرم امضا نشده‌اند. انجام این کار به برنامه اجازه دسترسی به مجوزهای امضای پلتفرم را می‌دهد که بسیار قدرتمند هستند و فقط برای استفاده توسط اجزای سیستم عامل در نظر گرفته شده‌اند. برنامه‌های سیستمی باید از مجوزهای ممتاز استفاده کنند.
  • مطمئن شوید که برنامه‌هایی با نام بسته یکسان با کلیدهای مختلف امضا نشده‌اند. این اغلب هنگام ایجاد یک برنامه برای دستگاه‌های مختلف، به خصوص هنگام استفاده از کلید پلتفرم، رخ می‌دهد. اگر برنامه مستقل از دستگاه است، از کلید یکسانی در بین دستگاه‌ها استفاده کنید. اگر برنامه مختص دستگاه است، برای هر دستگاه و کلید، نام‌های بسته منحصر به فرد ایجاد کنید.

ایزوله کردن برنامه‌ها و فرآیندها

مدل سندباکس اندروید، در صورت استفاده صحیح، امنیت بیشتری را در اطراف برنامه‌ها و فرآیندها فراهم می‌کند.

جداسازی فرآیندهای ریشه

فرآیندهای ریشه، رایج‌ترین هدف حملات افزایش امتیاز هستند؛ کاهش تعداد فرآیندهای ریشه، خطر افزایش امتیاز را کاهش می‌دهد.

  • مطمئن شوید که دستگاه‌ها حداقل کد لازم را به عنوان root اجرا می‌کنند. در صورت امکان، از یک فرآیند معمولی اندروید به جای یک فرآیند root استفاده کنید. اگر یک فرآیند باید به عنوان root روی دستگاه اجرا شود، فرآیند را در یک درخواست ویژگی AOSP مستند کنید تا بتوان آن را به صورت عمومی بررسی کرد.
  • در صورت امکان، کد ریشه باید از داده‌های غیرقابل اعتماد جدا شده و از طریق ارتباط بین پردازشی (IPC) قابل دسترسی باشد. به عنوان مثال، عملکرد ریشه را به یک سرویس کوچک که از طریق Binder قابل دسترسی است، کاهش دهید و سرویس را با مجوز امضا در اختیار برنامه‌ای با امتیازات کم یا بدون امتیاز برای مدیریت ترافیک شبکه قرار دهید.
  • فرآیندهای ریشه نباید به سوکت شبکه گوش دهند.
  • فرآیندهای ریشه نباید شامل یک زمان اجرای عمومی مانند ماشین مجازی جاوا باشند.

ایزوله کردن برنامه‌های سیستمی

به‌طورکلی، برنامه‌های از پیش نصب‌شده نباید با شناسه منحصربه‌فرد سیستم (UID) مشترک اجرا شوند. اگر لازم باشد یک برنامه از UID مشترک سیستم یا سرویس ممتاز دیگری (مثلاً تلفن) استفاده کند، برنامه نباید هیچ سرویس، گیرنده پخش یا ارائه‌دهنده محتوایی را که برنامه‌های شخص ثالث نصب‌شده توسط کاربران می‌توانند به آن دسترسی داشته باشند، صادر کند.

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

فرآیندهای ایزوله

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

  • مطمئن شوید که فرآیندهای روت به داده‌های درون پوشه‌های داده‌های برنامه‌های کاربردی دسترسی ندارند، مگر اینکه از یک روش اشکال‌زدایی اندروید مستند استفاده کنید.
  • مطمئن شوید که فرآیندهای روت به حافظه برنامه‌ها دسترسی ندارند، مگر اینکه از یک روش اشکال‌زدایی اندروید مستند استفاده کنید.
  • مطمئن شوید که دستگاه‌ها هیچ برنامه‌ای که به داده‌ها یا حافظه برنامه‌ها یا فرآیندهای دیگر دسترسی دارد را شامل نمی‌شوند.