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

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

بررسی کد منبع

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

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

تست خودکار

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

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

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

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

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

برنامه های بالقوه مضر

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

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

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

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

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

امضای برنامه

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

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

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

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

فرآیندهای ریشه را جدا کنید

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

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

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

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

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

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

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

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