وبلاگ - مطالب آموزشی

0
411
چگونه امنیت اپلیکیشن اندرویدی خود را تامین کنیم؟ – بخش اول

چگونه امنیت اپلیکیشن اندرویدی خود را تامین کنیم؟ – بخش اول

مقدمه

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

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

1. استفاده از حافظه داخلی برای ذخیره سازی داده های حساس

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

جهت تعیین مسیر مطلق دایرکتوری ذخیره سازی داخلی اپلیکیشن، استفاده از متد ()getFilesDir پیشنهاد می شود. اگر این مسیر را بدانید، ارجاع دادن به فایل های درون آن به سادگی ارجاع به فایل های سایر دایرکتوری ها می باشد. برای مثال در زیر نحوه ارجاع به فایلی به نام myfile.dat در دایرکتوری ذخیره سازی داخلی اپلیکیشن نشان داده شده است:

2. رمزگذاری داده در فضای ذخیره سازی خارجی

ظرفیت فضای ذخیره سازی داخلی در اندروید اغلب محدود می باشد، از این رو در بیشتر مواقع مجبور می شوید تا داده های حساس را بر روی رسانه ذخیره سازی خارجی مانند یک کارت SD ذخیره نمایید.

کاربران و سایر اپلیکیشن های نصب شده بر روی گوشی به طور مستقیم به داده هایی که بر روی رسانه ذخیره سازی خارجی قرار گرفته دسترسی دارند، لذا لازم است داده ها را به شکل رمزگذاری شده ذخیره نمایید. یکی از محبوب ترین الگوریتم های رمزگذاری که به وفور توسط توسعه دهندگان مورد استفاده قرار می گیرد AES می باشد که مخفف عبارت Advanced Encryption Standard است و دارای اندازه کلیدی 256 بیت می باشد.

ممکن است نوشتن کد جهت رمزگذاری و رمزگشایی داده های اپلیکیشن با استفاده از پکیج javax.crypto که در SDK اندروید قرار دارد، کمی گیج کننده باشد. بنابراین اکثر توسعه دهندگان استفاده از کتابخانه های third party مانند کتابخانه Facebook’s Conceal را ترجیح می دهند، چرا که کار با آنها ساده تر می باشد.

3. استفاده از اینتنت ها برای IPC

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

به منظور ارسال داده به یک کامپوننت خاص از اپلیکیشن لازم است تا یک نمونه جدید از کلاس Intent ساخته و متد ()setComponent را برای تعیین نام پکیج اپلیکیشن و نام کامپوننت مورد استفاده قرار دهید، علاوه بر این شما می توانید با استفاده از متد ()putExtra به آن داده اضافه کنید.

در زیر نحوه ارسال رشته Hello World به یک اکتیویتی به نام MyActivity که متعلق به اپلیکیشنی با نام پکیج my.other.app است، نشان داده شده:

به منظور ارسال داده به چندین اپلیکیشن به صورت همزمان، می توانید با استفاده از متد ()sendBroadcast، اینتنت موردنظر را به صورت برادکست ارسال نمایید. برادکست به طور پیشفرض توسط هر اپلیکیشنی که BroadcastReceiver در آن به صورت مناسبی پیکربندی شده، خوانده می شود.

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

در زیر قطعه کد مربوط به نحوه ارسال رشته Hello World به صورت یک برداکست امن را مشاهده می نمایید:

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

4. استفاده از HTTPS

تمامی ارتباطات بین اپلیکیشن و سرور باید از طریق HTTPS برقرار شود و برای این کار استفاده از کلاس HttpsURLConnection ترجیح داده می شود. اما چنانچه داده های شما چندان محرمانه نیست، استفاده از HTTP برای تبادلات به شما بستگی دارد.

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

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

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

 

منبع:

http://code.tutsplus.com

این نوشته را به گوگل توصیه کنید :

بسته های آموزشی جذاب!بیشتر