تست نفوذ اپلیکیشن ها

وابستگی سازمانها و کسب و کارها به ارائه خدمات برخط، روز به روز در حال فزونی است و رصد روندهای فناوری در سالهای اخیر حاکی از آن است که خدمات ارائه شده بر بستر گوشی های تلفن همراه و به ویژه اپلیکیشنهای موبایلی با سرعتی چشمگیر در حال فراگیر شدن است؛ بگونه ای که تقریباً تمامی خدمات مورد نیاز شهروندان (اعم از خدمات مالی، اجتماعی، آموزشی و قضایی) توسط اپلیکیشنهای موبایلی در دسترس قرار گرفته است.

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

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

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

اپلیکیشن می تواند به عنوان یک راه نفوذ برای دستیابی و مورد مخاطره قرار دادن اطلاعات سمت سرور مورد سوءاستفاده قرار گیرد. به عنوان مثال در حملات دسته هوکینگ (Hooking) مهاجم سعی می کند عکس العمل‌ها و نوع رفتار اپلیکیشن را در مواجهه با محرک ها و حالات مختلف را بررسی نموده و با کشف نقاط ضعف احتمالی، از آن برای حمله استفاده نماید. بدین ترتیب فریم ورک های هوکینگ نظیر( Frida, Xposed) به مهاجمان این امکان را می‌دهند تا با دسترسی به اطلاعات حافظه و بررسی آن، رفتار و نحوه برقراری ارتباط میان کلاینت و سرور را مورد مطالعه قرار دهند. در مرحله بعدی، مهاجم می تواند با استفاده از همان فریم ورک‌ها اقدام به تزریق و ارسال کدهای غیرمجاز به سمت سرور نماید و موجب حملات DOS شده و یا رفتاری غیرطبیعی را در آن سمت اجرا نماید.

یا اپلیکیشنهایی که درهم سازی نمی شوند و یا از رمز نگاری استفاده نمی کنند، به راحتی می توانند توسط مهاجمان دستکاری شده و نسخه غیراصل (Fake) از طرق مختلف در اختیار کاربران جدید قرار گیرد. بدین ترتیب مهاجمان می توانند کدهای دستکاری شده خود که عمدتاً حاوی بدافزارها و جاسوس افزارها (Spyware & Malware) هستند را در برنامه شما قرار داده و از این طریق به اطلاعات کاربر دست پیدا کنند.

نفوذگران بیش از همیشه به دنبال یافتن اپلیکیشنهای آسیب پذیر و سوء استفاده از آنها (با مهندسی معکوس (Reverse Engineering) برنامه و یا استفاده از آسیب پذیری های حین اجرا (Runtime)) هستند و به همین دلیل نرخ تراکنشهای تقلبی، به شدت رو به فزونی است. هر روز بد افزارهای جدیدی به بازار روانه می شود و اپلیکیشنهای بیشتری را هدف قرار می دهد. آسیب پذیرترین اپلیکیشنهای موبایلی را می توانید اینجا بررسی کنید. نتایج یک پژوهش میدانی نشان می دهد که بسیاری از اپلیکیشنهای مالی و مرتبط با صنعت پرداخت، آسیب پذیر هستند.

بصورت کلی دو دسته آسیب پذیری برای اپلیکیشنهای موبایلی شناخته شده است که توسط نفوذگران به تناوب مورد استفاده قرار می گیرد:

آسیب پذیری های ایستا (استاتیک)

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

آسیب پذیری های زمان اجرا (پویا یا دینامیک)

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

ارزیابی امنیتی (تست نفوذ) اپلیکیشنهای موبایلی – به ویژه قبل از انتشار آن-  این فرصت را فراهم می کند که آسیب پذیری های احتمالی آنها پیش از آنکه توسط مهاجمان مورد سوء استفاده قرار گیرد، توسط تیمهای امین شناسایی شده و در فرآیند امن سازی، موارد آسیب پذیری رفع شود.

برای ارزیابی امنیتی اپلیکیشن‌های موبایلی متدولوژی‌های مختلفی وجود دارند که در میان آنها OWASP  کامل‌ترین گزینه است.

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

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

بر اساس متدولوژی OWASP تست‌های اپلیکیشنهای اندرویدی در 9 زیرمجموعه به شرح زیر دسته بندی می شوند:

  • معماري، طراحي و مدل سازي تهديد (Architecture, design and threat modelling)
  • تست فضاي ذخيره‌سازي و حريم خصوصي (Data Storage and Privacy)
  • تست رمزنگاري (Cryptography)
  • تست احراز هويت و مديريت نشست (Authentication and Session Management)
  • تست ارتباطات تحت شبکه (Network Communication)
  • تست تعامل پلت فرم (Platform Interaction)
  • تست کيفيت کد و ساخت تنظيمات (Code Quality and Build Settings)
  • تست مهندسی معکوس
  • منطق کسب و کار

هر یک از این حوزه ها خود شامل عناوین ارزیابی های مختلفی هستند که تیم ارزیاب آنها را مورد بررسی قرار داده و نتیجه این ارزیابی ها در جدولی مشابه جدول زیر، خلاصه می شود:

ردیف

حوزه آسیب‌پذیری

عنوان آسیب پذیری

وضعیت

درجه اهمیت

MSTG ID

معماري، طراحي و مدل سازي تهديد

1          

بررسی عدم امکان عملیات انگشت‌نگاری و شناسایی سرویس‌ها

Passed

WSTG-INFO-02

تست فضاي ذخيره‌سازي

2          

نشت اطلاعات کاربران به واسط سوم

Failed

Medium

MSTG-STORAGE-4

3          

 بررسی نشت اطلاعات حساس در لاگ های برنامه

Passed

MSTG-STORAGE-3

4          

 بررسی اطلاعات حساس درScreenShot  های خودکار تولید شده

Passed

MSTG-STORAGE-9

5          

 نشت اطلاعات در نسخه های پشتیبان

Passed

MSTG-STORAGE-8

6          

ذخیره اطلاعات حساس سمت کاربر

Passed

MSTG-STORAGE-7

7          

آسیب‌پذیری No Database Encryption

Passed

MSTG-STORAGE-1 and

MSTG-STORAGE-2

8          

 آسیب‌پذیری Insecure shared preferences

Failed

High

MSTG-STORAGE-1

تنظيمات رمزنگاری و محرمانگی

9          

 کیفیت رمز نگاری مقادیر ذخیره شده

Passed

MSTG-CRYPTO-1

10       

 بررسی کیفیت تولید مقادیر تصادفی

Passed

MSTG-CRYPTO-6

11       

 آسیب‌پذیری در ساز و کار رمزنگاری اطلاعات

Passed

MSTG-CRYPTO-2

تست احراز هویت و مدیریت نشست

12       

آسیب‌پذیری مدیریت نشست

Not Applicable

MSTG-AUTH-2

13       

 آسيب‌پذيري کنترل سطح دسترسی

Passed

WSTG-ATHZ-03

14       

 بررسی فرایند احرازهویت از طریق اثرانگشت

Passed

MSTG-AUTH-8

15       

 تنطیمات شناسه احراز‌هویت کاربران و فرایند ورود و خروج

Not Applicable

MSTG-AUTH-4

16       

 سیاست‌های مناسب برای انتخاب گذرواژه

Passed

MSTG-AUTH-6

17       

بررسی فرایند تغییر و بازنشانی گذرواژه

Passed

MSTG-AUTH-5

18       

آسیب‌پذیری مکانیزم احراز هویت

Passed

MSTG-ARCH-2

and MSTG-AUTH-1

تست ارتباطات تحت شبکه

19       

 بررسی پیاده سازی و امکان دور زدن سازوکار Certificate Pinning

Not Applicable

MSTG-NETWORK-4

20       

آسيب‌پذيري رمزنگاری کانال ارتباطی

Not Applicable

MSTG-NETWORK-3

21       

آسيب‌پذيري منع خدمت

Not Applicable

WSTG-APIT-01

WSTG-INPV-11

تست تعامل پلت فرم

22       

 بررسی آسیب پذیری  اجرا نا امن کنترل های امنیتی در Webview

Passed

MSTG-PLATFORM-6

23       

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

Passed

MSTG-PLATFORM-1

24       

 بررسی آسیب پذیری Cross-Site Scripting

Not Applicable

MSTG-PLATFORM-2

25       

آسيب‌پذيري مدیریت مناسب خطا

Not Applicable

MSTG-CODE-7

26       

آسیب‌پذیری Sql Injection

Not Applicable

MSTG-PLATFORM-2

تست کيفيت کد و ساخت

27       

کامپوننت های آسیب پذیر

Failed

Medium

MSTG-CODE-1

28       

آسیب پذیری دسترسی های غیرمجاز

Failed

Medium

MSTG-CODE-2

29       

بررسی کامپوننت های آسیب پذیر

Passed

MSTG-CODE-3

30       

آسیب‌پذیری Android Plugin Protection is not present

Passed

MSTG-CODE-5

تست مهندسی معکوس

31       

 بررسی شناسایی ابزارهای مهندسی معکوس

Failed

High

MSTG-RESILIENCE-4

32       

بررسی شناسایی استفاده از شبیه ساز

Passed

MSTG-RESILIENCE-5

33       

آسیب پذیری فعال بودن قابلیت Debuggable

Passed

MSTG-RESILIENCE-2

MSTG-CODE-2

34       

بررسی Root Detection

Failed

Medium

MSTG-RESILIENCE-1

35       

بررسی Obfuscation

Failed

High

MSTG-RESILIENCE-9

36       

بررسی  جامعیت فایل و جلوگیری از دستکاری برنامه اندرویدی

Passed

MSTG-RESILIENCE-3

منطق کسب و کار

37       

آسیب‌پذیری منطق کسب و کار

Passed

WSTG-BUSL-01

38       

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

Passed

WSTG-IDNT-04

39       

 بررسی حمله جستجوی فراگیر

Not Applicable

MSTG-ATHN-11

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

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

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

همچنین امتیاز کسب شده به تفکیک حوزه های 9 گانه ارزیابی ها در قالب نمودار دیگری ارائه می شود تا نشان دهد که فرآیند امن سازی باید بر کدام حوزه ها با تمرکز بیشتری انجام شود.

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

  • توصیفی از آسیب پذیری و نحوه سوء استفاده احتمالی از آن
  • امتیاز دهی به آسیب پذیری بر اساس استانداردهای جهانی
  • رتبه بندی آسیب پذیری
  • شواهد وجود آسیب پذیری
  • علت وجود آسیب پذیری
  • راهکار رفع آسیب پذیری

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

توصیف

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

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

وضعیت

Failed

رتبه‌بندی خطر بر اساس OWASP

MSTG ID

High

MSTG-RESILIENCE-4

رتبه‌بندی خطر بر اساس CVSSv3

7.9

AV:L/AC:L/PR:N/UI:N/S:C/C:L/I:H/A:N

محل آسیب پذیری

علت و شواهد اثبات

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

راه‌کارهای امن‌سازی

می توان از ابزارهای تجاری مانند Dexguard جهت شناسایی محیط اجرای اپلیکیشن استفاده کرد. همچنین به منظور شناسايي ابزار مهندسي معکوس بايد محیط اجرای اپلیکیشن بررسی شده و وجود برنامه‌هايی مانند موارد زير درون دستگاه اندرويد شناسايي شده و نحوه مواجهه با چنین محیطی در برنامه تعریف شود:

Substrate for Android

Xposed

Frida

Introspy-Android

Drozer

RootCloak

Android SSL Trust Killer

کد زير نمونه‌اي از اين آزمون را براي تشخيص برنامه Frida نشان داده است:

public boolean checkRunningProcesses() {

 

boolean returnValue = false;

 

// Get currently running application processes

List<RunningServiceInfo> list = manager.getRunningServices(300);

 

if(list != null){

String tempName;

for(int i=0;i<list.size();++i){

tempName = list.get(i).process;

if(tempName.contains(“fridaserver”)) {

returnValue = true;

}

}

return returnValue;

}

لینک مرجع

https://mobile-security.gitbook.io/mobile-security-testing-guide/android-testing-guide/0x05c-reverse-engineering-and-tampering

 

تیم امن سازی با تکیه بر راهکارهای پیشنهادی برای رفع آسیب پذیری، قادر خواهد بود رخنه‌های امنیتی را مرتفع نموده و اپلیکیشن را در برابر حملات سایبری، محافظت نماید. بسیاری از این آسیب پذیری ها، با استفاده از ابزارهای امن سازی مانند DexGurad (برای پلتفرم اندروید) و iXGuard (برای پلتفرم iOS) قابل رفع هستند.

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