شاید کمتر کسی باشد که در دنیای امنیت اطلاعات واژه OWASP را نشنیده باشد. در بسیاری از محافل امنیتی بویژه زمانی که در خصوص امنیت برنامه های کاربردی و تست نفوذپذیری صحبت می شود و یا زمانی که به دنبال یک مرجع قوی برای لیست های کنترلی و یا متدولوژی های ارزیابی امنیتی هستیم، این نام به عنوان یکی از معتبرترین و اصلی ترین مراجع به گوش می خورد. بنیاد OWASP به عنوان یک انجمن آنلاین و آزاد برای دسترسی عموم، اقدام به تولید و انتشار مقالات، متدولوژی ها، مستندات و همچنین ابزارها و فناوری های حوزه امنیت برنامه های وب مینماید. با این وجود این بنیاد (بر خلاف حوزه عملکردی خود در خصوص برنامه های کاربردی تحت وب)، در یکی از پروژه های خود اقدام به انتشار 10 آسیب پذیری خطرناک (TOP 10) حوزه برنامه های موبایل می نماید. در این مطلب به معرفی 10 آسیب پذیری خطرناک (برتر) برنامه های موبایل، انتشار یافته در سال 2016 توسط بنیاد OWASP پرداخته می شود و تفاوت های این نسخه با 10 آسیب پذیری معرفی شده در سال 2014 مورد بررسی قرار می گیرد. توجه به این آسیب پذیری ها در فرآیند تولید و توسعه برنامه های موبایل می تواند به عنوان گام مهمی در تامین امنیت برنامه های موبایل تلقی شود.
نام OWASP مخفف عبارت Open Web Application Security Projectبه معنای پروژه امنیت نرم افزارهای تحت وب میباشد. همان طور که اشاره شد این بنیاد در سال 2001 تاسیس شده و به عنوان یکی از مراجع معتبر بین المللی اقدام به تولید و انتشار مقالات، متدولوژی ها، مستندات و همچنین ابزارها و فناوری های حوزه امنیت برنامه های وب می نماید. این بنیاد معمولا انتشارات خود را در قالب پروژه های کوچکتر ارائه می کند، برای آشنایی با معروفترین این پروژه ها می توان به موارد ذیل اشاره نمود:
اما شاید قدیمی ترین و معروف ترین پروژه و مستندات از سوی بنیاد OWASP، مجموعه هایی هستند که آنها را با نام TOP 10 (منظور 10 آسیب پذیری مهمتر) می شناسیم. این بنیاد از سال 2003 با بررسی عملکرد و دریافت آمارهای مربوط به رخنه های امنیتی از سراسر دنیا از طریق مجامع و مراکز مختلف امنیتی سعی در به روز رسانی 10 موضوع خطرناک در حوزه برنامه های موبایل می نماید. البته مستندات TOP 10 تنها محدود به معرفی ریسک های امنیتی برتر نمی شود و OWASP سعی می نماید تا ضمن معرفی و تبیین مفهوم هر یک از ریسک ها از طریق مثال ها و نمونه های مختلف، کنترل ها و راهکارهایی را هم برای آنها پیشنهاد دهد. اما با توجه به گسترش روزافزون استفاده از موبایل و برنامه های موبایلی، این نهاد در یکی از پروژه های نسبتا جدید خود اقدام به انتشار TOP 10 برای برنامه ها و اپلیکیشن های موبایل نموده است. اقدامی که به نظر برخی از کارشناسان و خبرگان امنیت مرتبط با حوزه عملکردی این بنیاد (حداقل مغایر با نام آن) نیست. با این وجود فارغ از محدوده عملکردی این نهاد، انتشار این مستند می تواند کمک بزرگی در جهت ارتقاء امنیت برنامه های موبایلی باشد. این پروژه منابعی را در اختیار برنامه نویسان و توسعه دهنگان برنامه های موبایلی قرار می دهد که بوسیله آن می توانند برنامه هایی به مراتب امن تر تولید نموده و پشتیبانی نمایند. با توجه به گفته مسئولان این پروژه، تمرکز اصلی آنها بر روی لایه اپلیکیشن است، با این وجود سعی مینمایند تا ریسک های مرتبط با پلتفرم ها و سیستم عامل ها و همچنین موارد مربوط به ارتباطات و اپراتورها را نیز مدنظر قرار دهند. در ادامه به معرفی ده آسیب پذیری برتر اپلیکیشن های موبایل در سال های 2014 و 2016 می پردازیم.
برای بررسی تغییرات صورت گرفته در آخرین نسخه TOP 10 برنامه های موبایل ابتدا نگاهی به نسخه ماقبل آخر یعنی نسخه منتشر شده در سال 2014 می انداریم.
همان طور که در شکل بالا مشخص است، این 10 آسیب پذیری با شناسه های M1 تا M10 نام گذاری می شوند. OWASP معمولا در مستند TOP 10 خود هر یک از دسته های آسیب پذیری را با ارائه موضوعات و بخش های تکمیلی شامل عوامل تهدید، نحوه حمله، علت ضعف امنیتی، تاثیرات فنی، تاثیرات تجاری، تشخیص آسیب پذیری، جلوگیری از آسیب پذیری و سناریوهای نمونه به طور کامل تبیین مینماید. در ادامه به معرفی اجمالی هر یک از دسته های معرفی شده سال 2014 (برگرفته از پروژه ترجمه فارسی امنیت موبایل OWASP) می پردازیم:
M1 – کنترل های ضعیف سمت سرور
این دسته مربوط به آسیب پذیریهای سمت سرور و برنامه های تحت وب است که OWASP به طور جداگانه آن را در پروژه های TOP 10 WEB یا TOP 10 Cloud بررسی نموده است.
M2 – ذخیره ناامن داده ها
گروه های برنامه نویس به اشتباه فرض میکنند که کاربران یا بدافزارها به سیستم فایل موبایل دسترسی ندارند و ازاین رو نمی توانند داده های حساس ذخیره شده در حافظه را ببینند. سیستم فایل ها به راحتی قابل دسترس هستند؛ به همین دلیل همگان باید منتظر یک کاربر خرابکار یا بدافزاری باشند که قصد دزدیدن اطلاعات را دارد. روش های حفاظت رمزنگاری در موبایل های روت شده یا قفل شکسته به راحتی دور زده می شود. زمانی که دادهای موردحفاظت نباشد میتوان از ابزارهایی برای مشاهده اطلاعات برنامه ها استفاده کرد.
M3 – حفاظت نامناسب در لایه انتقال
برنامه ها نمیتوانند در هرجایی از SSL استفاده نمایند لذا به طور مداوم از ترافیک شبکه خود محافظت نمی کنند. در برخی موارد هم پیادهسازی امنیت انتقال در برنامه ها به درستی انجام نمیشود. البته نقص های اساسی را میتوان با نظارت بر ترافیک شبکه مشاهده کرد. رفع آنها با بررسی برنامه و پیکربندی آن حاصل می شود.
M4 – نشت ناخواسته اطلاعات
معمولاً نشت ناخواسته اطلاعات زمانی اتفاق میافتد که برنامه نویس اطلاعات حساس برنامه را در جایی ذخیره می کند که توسط سایر برنامه ها به آسانی قابل دسترسی است و یا در هنگام پردازش برنامه، اطلاعات واکشی شده توسط سیستم عامل در مکانی قرار می گیرد که در دسترس برنامه های دیگر است. اینها از بی اطلاعی برنامهن ویس درباره نحوه ذخیره و پردازش اطلاعات توسط سیستم عامل ناشی میشود. البته با بررسی مکانهای در دسترس همه برنامه ها میتوان به وجود این آسیب پذیری پی برد.
M5 – ضعف در احراز هویت و اعطای مجوز
یک مهاجم با دور زدن فرایند احراز هویت ضعیف میتواند به طور گمنام قابلیت هایی را در سرویس دهنده یا برنامه کاربردی اجرا کند. احراز هویت ضعیف بیشتر به دلیل شکل کلمه عبور است که بر مبنای پینهای 4 رقمی است.
M6 – رمزنگاری قابل شکست
مهاجم به دلیل استفاده برنامه از الگوریتم های رمزنگاری ضعیف یا نقص های فرایند رمزنگاری میتواند داده های رمز شده را رمزگشایی نماید.
M7 – تزریق سمت کلاینت
تزریق در سمت کلاینت موجب اجرای کد مخرب توسط یک برنامه در دستگاه موبایل می شود. این کد مخرب به عنوان داده ی ورودی به یک برنامه تزریق می شود و این داده مانند سایر داده ها توسط فریم ورک پشتیبان کننده برنامه پردازش می شود ولی در طول پردازش این داده خاص، وضعیتبرنامه تغییر داده می شود و فریم ورک آن را به عنوان یک کد اجرایی تفسیر می نماید.
M8 – تصمیمات امنیتی بر اساس ورودی های نامعتبر
معمولاً برنامه نویسان برای تمایز بین کاربران سطح بالا و پایین از پارامترها و مقادیر پنهان و عملکردهای پنهان استفاده میکنند. پیاده سازی ضعیف این عملکردها امکان شنود و تغییر آنها توسط مهاجمان را در پی دارد که موجب رفتار نامناسب برنامه و حتی اعطای مجوزهای بیشتر به مهاجم می شود.
M9 – کنترل نامناسب نشست
در خصوص کنترل نامناسب نشست ها یا جلسات، کنترل نادرست نشست زمانی اتفاق میافتد که توکن نشست با یک مهاجم به اشتراک گذارده شود.
M10 – نبود حفاظت های باینری
در این نوع آسیب پذیری معمولاً یک مهاجم کد برنامه را تجزیه وتحلیل و مهندسی معکوس می کند و سپس با انجام تغییراتی در آن موجب اجرای برخی قابلیت های پنهان می شود.
آخرین نسخه TOP 10 برای برنامه های موبایل در سال 2016 منتشر گردیده است که دسته های آن به شرح زیر می باشد:
M1 – استفاده نامناسب از پلتفرم
این دسته به استفاده نامناسب از پلتفرم ها شامل سوء استفاده از قابلیت های سیستم عامل های موبایل و عدم توانایی در استفاده از کنترل های امنیتی موجود در پلتفرم مدنظر، اختصاص دارد.
مشابه این دسته در تقسیم بندی سال 2014 نیز با همین شماره وجود داشت. تفاوت به وجود آماده این است که دسته فعلی شامل دو حوزه M2 و M4 با موضوعات ذخیره ناامن داده ها و همچنین نشت ناخواسته اطلاعات می شود.
M3 – ارتباطات ناامن
این دسته شامل هرگونه ضعف و آسیب پذیری در خصوص انتقال امن اطلاعات و داده ها می شود. مواردی همچون نسخه های اشتباه SSL و یا انتقال رمز نشده اطلاعات حساس و غیره در این دسته قرار می گیرند.
M4 – احراز هویت ناامن
این دسته به عدم پیش بینی و یا پیاده سازی مکانیزم های مناسب احراز هویت و همچنین مکانیزم های مدیریت نشست ها اشاره دارد.
M5 – رمزنگاری نامناسب
این دسته به عدم توانایی در رمزنگاری مناسب اطلاعات حساس و دارایی های اطلاعاتی اشاره دارد. توجه شود که هرآنچه که به TLS و SSL ارتباط پیدا می کند در دسته M3 قرار می گیرد و از طرفی برنامه هایی که کلا از مکانیزم های رمزنگاری استفاده نمی کنند در دسته M2 قرار می گیرند. بدین ترتیب مواردی که در آنها رمزنگاری اجرا شده است ولی به درستی انجام نمی شود در این دسته قرار می گیرند.
M6 – اعطای مجوز ناامن
این دسته شامل عدم توانایی سرور جهت شناسایی و اعطای دسترسی ها مطابق با موارد تعیین شده توسط برنامه موبایل می شود.
M7 – کیفیت کد سمت کلاینت
این دسته تعمیم یافته "تصمیمات امنیتی بر اساس ورودی های نامعتبر" با شماره M8 در نسخه 2014 است. در واقع این حوزه یک دامنه چترگونه است که شامل کلیه مشکلات سطح کد در برنامه های موبایل می شود.
M8 – دستکاری کد
دستکاری کد شامل تغییرات غیرمجاز در کد (با هر نیت و توسط هر فردی) می شود. زمانیکه برنامه وارد موبایل می شود، در واقع کد و داده ها در آن قرار می گیرند. یک مهاجم ممکن است به صورت مستقیم کد را تغییر دهد، محتوای مموری را به صورت داینامیک تغییر دهد، API هایی که برنامه از آنها استفاده می کند را تغییر داده و یا جایگزین نماید، و یا ممکن است داده ها و منابع برنامه را دستکاری نماید.
M9 – مهندسی معکوس
این دسته شامل تحلیل و آنالیز آخرین فایل های باینری و قابل نصب است که با نیت دستیابی به سورس کد، کتابخانه ها، الگوریتم ها و دیگر دارایی های برنامه موبایلی جهت سوء استفاده از آسیب پذیری ها، سرقت اطلاعات حساس و دارایی های فکری صورت می گیرد.
M10 – قابلیت های نامرتبط
این دسته شامل وجود برخی قابلیت های خاص و کنترل هایی است که معمولا در زمان تولید نرم افزار توسط برنامه نویسان در کد تعبیه شده است و نباید در محیط عملیاتی و محصول نهایی وجود داشته باشد.
همان طور که مشاهده می شود تغییرات میان این دونسخه، نسبتا زیاد است به طوری که دسته M1 در سال 2014 که اختصاص به کنترل های سمت سرور داشت در نسخه جدید حذف شده و به جای آن موضوعات مربوط به پلتفرم و سیستم عامل اضافه شده است. اما موضوعی که به صورت پررنگ تر به چشم می خورد تمرکز بیشتر بر روی سه حوزه آخر یعنی دستکاری کد، مهندسی معکوس و قابلیت های نامرتبط است که به نظر می رسد دلیل اصلی آن وقوع تعداد زیاد حملات از این دست در دنیای برنامه های موبایلی میباشد. برای جلوگیری از بروز این نوع آسیب پذیری ها استفاده از ابزارهای امن سازی برنامه های موبایلی در زمان توسعه و پشتیبانی پیشنهاد می گردد.
در خصوص برنامه هایی که برای سیستم عامل اندروید نوشته می شوند ابزارهایی همچون ProGuard که به صورت رایگان در اختیار عموم است و نسخه به مراتب قوی تر و تجاری آن با عنوان DexGuard پیشنهاد می گردد (تفاوت ها و ویژگی های این دو محصول در این مقاله مورد بررسی قرار گرفته است). همچنین نسخه مربوط به iOS این محصول با عنوان iXGuard قابل تهیه میباشد. لازم به ذکر است که استفاده از این ابزارها قابلیت پوشش آسیب پذیریهای حوزه M3, M8, M9 و M10 در نسخه 2016 را برای توسعهدهندگان میسر می سازد.