چند توصیه امنیتی به برنامه نویسان برنامه های کاربردی سیستم عامل آندروید

چگونه امنیت برنامه های کاربردی را بیشتر کنیم؟

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

با رعایت چند اصل ساده می توان سطح امنیت برنامه های کاربردی در سیستم عامل آندروید را افزایش داد. این اصول در حین توسعه دادن برنامه کاربردی به کار می روند و برای توسعه دهندگان برنامه های کاربردی سیستم عامل آندروید در نظر گرفته شده است:

  1.  استفاده از حافظه داخلی هر برنامه کاربردی برای داده های حساس
  2. رمز نگاری دادهایی که در حافظه ی خارجی ذخیره می شوند
  3. استفاده از Intent برای تبادل و ارتباط بین پردازشی (IPC)
  4. استفاده از HTTPS در برنامه هایی که به صورت آنلاین به روز رسانی میشوند
  5. جایگزین کردن GCM با سرویس پیام رسانی (SMS)
  6. اجنتاب کردن از پرسیدن اطلاعات شخصی کاربر
  7. تایید ورودی کاربر

 

۱. استفاده از حافظه داخلی هر برنامه کاربردی برای داده های حساس

در سیستم عامل آندروید حافظه ی دستگاهی که عرضه می شود به دو قسمت تقسیم می شود:

حافظه داخلی و حافظه ی دستگاه.

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

این حافظه بسته به دستگاهی که برنامه بر روی آن نصب می شود و یا با نظر برنامه نویس می تواند تعیین شود . این قسمت از حافظه برای هر برنامه کاربردی دارای سطح امنیتی بوده و کاربر نمی تواند به محتوای آن دسترسی داشته باشد یا به اصطلاح در حالت private-mode قرار دارد . برنامه های کاربردی نصب شده روی دستگاه هم به این قسمت از حافظه دسترسی ندارند. به همین علت بهترین مکان برای ذحیره سازی اطلاعات حساس در این قسمت از حافظه می باشد.

ولی سیستم عامل یک مقدار محدود از این حافظه را در اختیار برنامه نصب شده قرار می دهد . از این رو در ابتدای برنامه نویسی باید فایل های حساس را شناسایی کرد.

 

۲. رمز نگاری دادهایی که در حافظه ی خارجی ذخیره می شوند

ظرفیت حافظه داخلی برای هر برنامه کاربردی  محدود بوده و نمی توان که کل حافظه داخلی را در اختیار یک برنامه کاربردی خاص گذاشت. از طرف دیگر برنامه هایی وجود دارند که به حافظه ی بیشتری نیاز خواهند داشت. لذا توسعه دهنده  برای ذخیره سازی اطلاعات برنامه هایی که حافظه بیشتری نسبت به حافظه داخلی نیاز دارند چاره ای به جز استفاده کردن از حافظه ی خارجی ندارد. حافظه خارجی به کل حافظه ی که دستگاه در اختیار دارد گفته می شود می تواند حافظه ی خود دستگاه یا یک کارت حافظه باشد . ولی زمانی که برنامه نویس از این فضا استفاده می کند همه ی برنامه های کاربردی نصب شده روی دستگاه و کاربر می تواند به آن دسترسی داشته باشند . به همین علت دارای سطح امنیتی پایین می باشد . راه حل این است که برنامه نویس داده ها و اطلاعاتی که در حافظه خارجی ذخیره می کند به صورت رمز نگاری شده باشد . یکی از مشهورترین الگوریتم های رمزنگاری که در برنامه نویسی آندروید از آن استفاده می شود AES مخفف Advanced Encryption Standard با اندازه کلید ۲۵۶  بیتی می باشد.

جدول ۱: پوشه های مهم سیستم عامل آندروید برا ذخیره سازی داده ها

 

۳. استفاده از Intent برای تبادل و ارتباط بین پردازشی (IPC)

برای تبادل اطلاعات و ارتباط درون برنامه ای در سیستم عامل آندروید راه های زیادی وجود دارد برای مثال استفاده از سوکت ، names pips و یا اشتراک گذاری فایلها . این روش ها معمولا مستعد تهدید می باشند .

برای مثال برنامه ی کاربردی

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

۴. استفاده از HTTPS در برنامه هایی که به صورت آنلاین به روز رسانی می شوند

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

۵. جایگزین کردن GCM با سرویس پیام رسانی (SMS)

قبل از پیدایش GCM (Google Cloud Messaging ) توسط گوگل معمولا برای ایجاد ارتباط بین سرویس دهنده و سرویس گیرنده از سیستم پیام رسانی استفاده می کردند . ولی در سیستم عامل آندروید دسترسی به پیام ها و سیستم پیام رسانی بسیار ساده می باشد و با یک اجازه نامه در فایل manifest می توان به آنها دسترسی داشت لذا برای بالا بردن اطمینان و امنیت برنامه های کاربردی می توان از سرویس   پیام رسان ابری گوگل استفاده کرد. این سرویس پیام رسانی دارای ضریب امنیتی بالا می باشد .  

 GCM  دارای ویژگی های زیر است :

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

 

۶. اجنتاب کردن از پرسیدن اطلاعات شخصی کاربر

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

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

 

۷. تایید ورودی کاربر

در سیستم عامل آندروید معمولا داده های نامعتبر موجب ایجاد مسائل امنیتی  مانند سرریز شدن بافر نمی شود ولی با این حال اگر برنامه کاربردی به یک پایگاه داده یا یک سیستم ارائه دهنده محتوا متصل باشد ، باید ورودی های که کاربر وارد می  کند بررسی شود. عدم این بررسی ها می تواند باعث ایجاد حمله ی SQL Injection  شود.

 

منابع:

 

  • “Ahmed Mohamed Gamaleldin ” -How To Develop Smart Android Notifications using Google Cloud Messaging Service-2013
  • “William Enck, Machigar Ongtang, and Patrick McDaniel” -Understanding Android Security -2012
دریافت نسخه PDF: