اپلیکیشنهای جعلی بانکی و پرداخت تنها یک هشدار هستند
نویسنده: میلاد یداللهی
این یادداشت را با مرور یک خاطره مربوط به چهار سال پیش از یک جلسه در خصوص امنیت اپلیکیشن همراه بانک در یکی از بانکهای شناخته شده کشور شروع میکنم. جلسه با حضور بنده بهعنوان مشاور امنیت، به همراه تیم توسعه موبایل و به درخواست واحد امنیت اطلاعات بانک، پیرو گزارش آسیبپذیریهای امنیتی کشف شده روی همراه بانک تشکیل میشد. مرور گزارش ارزیابی امنیتی اپلیکیشن مذکور، با وجود آسیبپذیریهای متنوع و فراوان و بعضاً با درجه بسیار خطرناک که توسط تیم تست نفوذ ایجادشده بود، مرا بسیار متعجب کرده بود. نمیتوانستم باور کنم که این گزارش مربوط به همراه بانک است، زیرا از تمهیدات و کنترلهای امنیتی بکارگرفته شده توسط بانک در حوزههای دیگر نظیر وب اپلیکیشن ها، شبکه، زیرساخت و غیره باخبر بودم و میدانستم وضعیت نسبتاً مناسبی از منظر امنیت در آنجا برقرار است. مسئول تیم توسعه موبایل نیز در مواجهه با گزارش بسیار متعجب بود. ایشان در پاسخ به سؤال مسئول امنیت در خصوص اینکه چرا به رفع این آسیبپذیریهای خطرناک توجه نشده است، تنها یک پاسخ کوتاه داد، پاسخ این بود (البته با اندکی خلاصهسازی):
“ما برای امنیت اپلیکیشن اندرویدمان از ابزار امن سازی Proguard استفاده میکنیم، خیلی بعیده همچنین آسیبپذیریهایی را داشته باشیم! از طرفی خیلی جای نگرانی برای این موارد نیست، ما در بکاند همه تمهیدات امنیتی را دیدیم.”
نمیخواهم به اینکه در ادامه جلسه چه گذشت و چطور ما توانستیم مسئول تیم توسعه را قانع کنیم که نگاه او نسبت به امنیت موبایل نیاز به بازنگری جدی دارد، بپردازم. تنها به این دلیل این خاطره را بازگو کردم که بتوانم تا حدی عمق فاجعه را نشان دهم. فاجعهای که از آن سال تا به امروز بهواسطه تمرکز بیشتر شخصی و کسبوکاری خودم در حوزه امنیت اپلیکیشن های موبایل، بارها و بارها در جلسات و نقل قول های مختلف از زبان برنامهنویسان و حتی متصدیان حوزه امنیت اطلاعات شنیدهام. اشتباه نکنید، فاجعهای که از آن حرف میزنم که خود حاصل از باورهای غلط در حوزه امنیت اپلیکیشن های موبایل است، تنها در لایه کسبوکارها و اپلیکیشن های ساده و کوچک دیده نمیشود، بلکه در میان بسیاری از افراد برنامهنویس و صاحبان کسبوکار اپلیکیشن های مشهور نظیر سوپر اپها، اپلیکیشن های بانکی و پرداخت و غیره که اتفاقاً در حرفه خود بسیار متخصص و متبحر هم هستند، به وفور مشاهده میشود. در اینجا سعی میکنم تا باهدف برچیدهشدن این نوع تفکرات و باورهای اشتباه که به عقیده این حقیر مهمترین عامل ضعف امنیتی بسیار وسیع در حوزه اپلیکیشن های بانکی و پرداخت میباشند، به چند نمونه از این باورهای غلط اشاره کنم و فضای حقیقی را ترسیم نمایم. اما قبل از آن ذکر یک مقدمه اجمالی در خصوص انواع آسیبپذیریهای اپلیکیشن های موبایلی میتواند مفید باشد.
به طور کلی حملات و تهدیدات امنیتی در حوزه امنیت برنامههای موبایلی به دو دسته حملات استاتیک و پویا تقسیم میشوند. حملات استاتیک آن دسته از حملاتی هستند که نفوذگر در آن به تحلیل پکیج اپلیکیشن در حالت قبل از نصب میپردازد که معروفترین آن مهندسی معکوس (Reverse Engineering) است. نفوذگر از طریق مهندسی معکوس اپلیکیشن، سعی دارد تا به کدها و منابع آن دسترسی پیدا کرده و با تحلیل منطق اپلیکیشن و استخراج اطلاعات حساس موجود در آن (نظیر کلیدها، پسوردها، فراخوانی های مهم، گواهیها و غیره) اقدام به پیادهسازی سناریوهای بدخواهانه خود نماید. حملاتی همچون ایجاد اپلیکیشن های جعلی، قرار دادن هرگونه بدافزار در اپلیکیشن، سرقت اطلاعات و غیره همگی با بهرهگیری از آسیبپذیریهای مربوط به مهندسی معکوس ایجاد میشوند. برای مقابله با این آسیبپذیریها عمدتاً از روشهای مختلف مبهمسازی (obfuscation)، رمزنگاری (encryption) و مجازیسازی (Virtualization) استفاده میگردد. اما حتی اگر اپلیکیشن شما بهطور کامل در برابر حملات ایستا و مهندسی معکوس امن شده باشد و به اصطلاح ریورس (Reverse) نشود، باز هم دسته دیگری از آسیبپذیریها و حملات، با عنوان حملات پویا در کمین هستند. این موارد در شرایطی رخ میدهند که اپلیکیشن در حال اجرا بوده و هکر اقدام به سوءاستفاده از آن مینماید. این سوءاستفاده میتواند به صورت شبیهسازی عملکرد اپلیکیشن با هدفی بدخواهانه، سرقت اطلاعات و موارد مشابه باشد. برای مقابله با این تهدیدات عمدتاً از روشهایی استفاده میشود که به نحوی از تغییر و یا نصب و اجرای اپلیکیشن در دستگاهها و محیطهای ناامن نظیر فریمورک های هک اپلیکیشن، دیباگرها، امولاتورها و دستگاههای روت شده جلوگیری نماید. ذکر این نکته ضروری است که اپلیکیشن های موبایل نیز مانند سایر اپلیکیشن ها در بسترهای دیگر نظیر وب، دارای سایر آسیبپذیریها نظیر تزریق کد، موارد شبکهای و غیره نیز میباشند. موارد ذکرشده در بالا، آسیبپذیریهایی هستند که با توجه به ماهیت خاص اپلیکیشن های موبایل، مخصوص این دسته از برنامهها هستند.
در ادامه به بررسی باورهای غلط امنیت اپلیکیشن های موبایل و عدم بهکارگیری کنترلهای امنیتی کافی ناشی از این تصورات میپردازیم:
1- ما برای امنیت اپلیکیشن اندرویدمان از ابزار امن سازی Proguard استفاده میکنیم، خیلی بعیده همچنین آسیبپذیریهایی را داشته باشیم.
Proguard بهعنوان یک ابزار رایگان و محبوب ساخت شرکت Guardsquare، در پکیج برنامهنویسی اندروید موجود است. این ابزار بهعنوان یک بهینهساز جاوا شناخته میشود که با آنالیز اپلیکیشن اقدام به ایجاد بهینگی (کاهش حجم اپلیکیشن و افزایش سرعت آن) مینماید. Proguard یک ابزار امنیتی نیست ولی دارای یک فیچر امنیتی با نام مبهم سازی اسامی (Name Obfuscation) نیز میباشد. درواقع با فعالسازی این فیچر باهدف پیچیدهتر نمودن فرآیند تحلیل ایستای اپلیکیشن، اسامی کلاسها، فیلدها و متغیرها از وضعیتی که برنامهنویس نامگذاری نموده است با حروف (a,b,c,…) جایگزین میشوند. Proguard انواع دیگر مبهم سازی، نظیر مبهم سازی جریان منطقی اپلیکیشن، عملیات ریاضی، اسامی assetها، resourceها و غیره را انجام نمیدهد. طبیعی است که سایر کنترلهای امنیتی در برابر حملات ایستا نظیر انواع رمزنگاریهای موردنیاز (رشتهها، کلاسها، متدها، کتابخانهها، فایلها، غیره) و مجازیسازیها و همچنین هیچ یک از کنترلهای امنیتی در برابر حملات پویا (شناسایی دستکاری در المانهای مختلف پکیج، شناسایی محیطهای ناامن و غیره) نیز توسط این ابزار ارائه نمیشود.
در مقاله دیگری به این موضوع پرداختیم که چرا Proguard برای امنیت اپلیکیشنهای موبایل کفایت نمی کند. در اینجا نیز همانطور که در بالا تشریح شد، Proguard برای هدف بهینگی طراحی شده است نه امنیت! مبهم سازی اسامی که سوی Proguard انجام میشود شاید ما را تنها یک درصد در مسیر امنیت کمک میکند که همان یک درصد هم درصورتیکه در کنار سایر کنترلهای امنیتی قرار نگیرد بسیار شکننده بوده و به راحتی قابل دور زدن است.
2- اپلیکیشن ما چیز خاصی ندارد و تنها یک پوسته است، ما در بکاند همه تمهیدات امنیتی را دیدیم.
بهطورکلی اکثر افرادی که این جمله را بیان میکنند، دارای یک اپلیکیشن از نوع تین کلاینت هستند. برنامه موبایل تین کلاینت، یک اپلیکیشن سبک و کم حجم است که کدهای برنامهنویسی کمی را بر روی موبایل کاربر اجرا نموده و عمده فعالیتها و منطق فرآیندی و کسبوکار را در سمت سرویسدهنده مدیریت مینماید. فعالیتهایی همچون اعتبارسنجی درخواستها از سوی کاربر و یا پردازشهای اصلی به جای اجرا در سمت کلاینت، در سمت سرور انجام میشود. در اینگونه برنامهها معمولاً فعالیت خود اپلیکیشن (سمت کلاینت) محدود به اجرای رابط کاربری، دریافت دادهها و اقدامات ورودی از کاربر و همچنین نشان دادن نتایج و خروجیها میشود. این نوع معماری اپلیکیشن در بسیاری از نرمافزارهای موبایلی بانکداری و یا پرداخت بسیار متداول بوده و به وفور به چشم میخورد.
طبیعی است که با توجه به حجم کد کمتر در سمت کلاینت، سطح حملات بهصورت کلی کاهش مییابد و طراحان با اطمینان بیشتری نسبت به محافظت از برنامه در سمت سرور اقدام مینمایند. اما این مزیت غیرقابل انکار در این نوع برنامهها نباید منجر به ایجاد این تفکر در ذهن شما گردد که برنامههای موبایلی تین کلاینت در مقابل کلیه حملات مهاجمین مصون هستند و یا اصلاً هک نمیشوند. بر این اساس ذکر این نکته ضروری است که با وجود کاهش چشمگیر احتمال وقوع بسیاری از حملات در این حالت، بسیاری از آسیبپذیریها نظیر هوکینگ، ایجاد اپلیکیشن های جعلی، آنالیز منطق و غیره به قوت خود باقی میمانند که میبایست اقدامات تقابلی و تمهیدات مناسب امنیتی برای آنها در نظر گرفته شود. ذکر این نکته نیز ضروری است که اقدامات کنترلی اعمال شده در سمت سرور درواقع ما را در لایهای دیگر محافظت مینمایند و ارتباطی به اقدامات ما در سمت اپلیکیشن (کلاینت) ندارند.
3- اپلیکیشنهای اپل هک نمیشوند iOS امن است.
احتمالاً شما هم شنیدهاید که خیلیها بر این باورند که پلتفرم Apple iOS از منظر آسیبپذیری مهندسی معکوس دارای امنیت بالاتری نسبت به اندروید است. بر این اساس سه تفکر زیر بسیار متداول است:
- مکانیسم رمزنگاری کدها توسط App Store برای عدم امکان مهندسی معکوس اپلیکیشن کفایت میکند.
- کد اپلیکیشن های iOS بر نمیگردد یا این کار بسیار مشکل است.
- مکانیسم sign اپلیکیشن ها در Apple از دستکاری کد و انتشار مجدد اپلیکیشن تغییریافته جلوگیری میکند.
اما متأسفانه باید گفت که این تصورات رایج کاملاً اشتباه است و بهطورکلی، یک اپلیکیشن iOS به همان اندازه که اپلیکیشن های اندرویدی امکان دستکاری دارند، مستعد تحلیل هکرها و اعمال تغییرات سودجویانه هستند. در مقاله
باورهای اشتباه متداول در خصوص امنیت پلتفرم های موبایل بهصورت کامل و عملی، وجود آسیبپذیریهای فوق و نقض باورهای غلط فوق را در یک اپلیکیشن iOS نمونه نشان دادهایم.
سه چالش مهم امنیتی برای اپلیکیشنهای بانکی و پرداخت
رشد تعداد تراکنشهای مالی آنلاین و استفاده افراد از خدمات الکترونیک بهویژه در دوره پاندمی کرونا بسیار مشهود است. در این بین اپلیکیشن های مالی بیشترین رشد را در میان خدمات آنلاین به خود اختصاص دادهاند. بهطوریکه در یک آمار منتشرشده، 67 درصد از افراد در ایالاتمتحده از اپلیکیشن های همراه بانک یا اپلیکیشن های پرداختی استفاده میکنند. از سوی دیگر متأسفانه، برنامههای مالی نیز بیش از هر زمان دیگری در معرض تهدیدات امنیتی حوزه موبایل هستند. دلیل آن این است که این اپلیکیشنها، اطلاعات شخصی مانند سپردههای بانکی، شماره کارت و سایر دادههای ارزشمند را ذخیره و پردازش میکنند. علاوه بر این، تغییر سریع به سمت دیجیتالی شدن، فرصتی را برای هکرها ایجاد کرده است تا برنامههایی را که بهسرعت و بدون در نظر گرفتن تمهیدات امنیتی در پی پاندمی کرونا راهاندازی شدهاند، هدف قرار دهند. در ادامه این یادداشت نیز قصد داریم به سه چالش مهم امنیتی برای اپلیکیشن های بانکی و پرداخت و همچنین رویکرد امن سازی آنها اشاره نماییم.
اپلیکیشنهای جعلی بانکی
شاید شما نیز اخیراً با اخبار مربوط به انتشار اپلیکیشن های جعلی همراه بانک مرتبط با چند بانک داخلی در گوگل اپ استور مواجه شده باشید و یا احتمالاً با انبوهی از پیامکها و اطلاع رسانی هایی از سوی بانک برخورد کردهاید که به شما هشدار میدهند که اپلیکیشن های بانکی را تنها از سایت خودشان دانلود کنید. در این نوع حمله، مهاجمین از طریق مهندسی معکوس اپلیکیشن اصلی، اقدام به ایجاد یک اپلیکیشن جعلی با مقاصد سودجویانه کرده و آن را در استورهای بینالمللی و شبکههای اجتماعی منتشر میکنند. قربانی با دانلود اپلیکیشن جعلی که اتفاقاً دارای شباهت بصری و عملکردی با اپلیکیشن اصلی است، ممکن است بسیاری از اطلاعات شخصی خود را ناخواسته افشا نموده و دچار ضررهای سنگین مالی گردد.
توسعهدهندگان اپلیکیشن موبایل میتوانند با استفاده از ترکیبی از اقدامات امن سازی و تشخیص دستکاری کد (Tampering) و بهطور خاصتر، مبهم سازی کد از ایجاد برنامههای جعلی جلوگیری کنند. با تغییر نام، تغییر ساختار و پنهانکردن برخی از عناصر کد منبع برنامه، بانکها و مؤسسات مالی میتوانند از مهندسی معکوس و انتشار مجدد کد خود بهعنوان یک برنامه جعلی توسط مهاجمین جلوگیری کنند. علاوه بر تکنیکهای فوق، بهکارگیری مبهم سازی در لایه جریان منطقی و کنترلی برنامه و همچنین عملیات ریاضی موجود در اپلیکیشن، میتواند موجب شود تا هکرها، حتی با استفاده از پیشرفتهترین ابزارهای تحلیل استاتیک، نتوانند به کدهای برنامه دسترسی پیدا کنند.
بدافزارها و تروجانهای بانکی
انتشار تروجان ها و بدافزارهای بانکی روش سودآوری است که هکرها علیه بانکها و مؤسسات مالی از آن استفاده میکنند. گزارش امنیتی تهدیدات که توسط شرکت نوکیا در سال 2021 منتشرشده است، نشان میدهد که بر اساس دادههای ترافیک شبکه مربوط به بیش از 200 میلیون موبایل در سراسر جهان، تعداد تروجانهای بانکی جدید نسبت به سال گذشته 80 درصد افزایش داشته است. تروجانهای بانکی برنامههای مخربی هستند که در سایر اپلیکیشن های موبایل مانند بازیها پنهان میشوند که پس از نصب، هنگام استفاده کاربران از اپلیکیشن های مالی خود، سعی در سرقت اطلاعات دارند. یکی از کارکردهای متداول این تروجان ها تلاش برای سرقت پیامکهای حاوی رمزهای عبور یکبارمصرف (پویا) میباشد.
با استفاده از ابزارهای تحلیل پویا که پیش از این توضیح داده شد، هکرها میتوانند برنامههای بانکی را مستقیماً در زمان اجرا برای اجرای کدهای مخرب، تغییر مسیر فراخوانی های API یا نصب بدافزار برای سرقت اطلاعات کاربر و همچنین دسترسی غیرمجاز به حسابهایشان، دستکاری کنند. علاوه بر این، بروز پدیده بانکداری باز، که در کشور ما نیز مورد توجه بانکها قرار گرفته است، استفاده گسترده از APIها را در برنامههای بانکی و پرداخت شخص ثالث افزایش داده است که خود بروز این آسیبپذیری را نمایان تر میکند.
به همین دلیل است که محافظت از اپلیکیشن های بانکی با استفاده از تکنیکهای امن سازی اپلیکیشن در دو لایه ایستا و پویا باید بهعنوان یک الزام برای مؤسسات مالی مدنظر قرار گیرد. محافظت از برنامه در زمان اجرا، با بهرهگیری از تکنیکهایی نظیر، شناسایی محیط (دستگاه) های پر ریسک (مانند روت شده/Jail break شده، دیباگ، شبیهسازها، محیطهای مجازی) و همچنین پیشبینی واکنش مناسب اپلیکیشن موبایل در مواجهه با آنها، ما را در برابر تهدیدات مذکور محافظت مینماید.
افشای اطلاعات
یکی دیگر از نگرانیهای اصلی که در میان اپلیکیشن های بانکی رایج است، نشت و افشای اطلاعات است که به هکرها اجازه میدهد اطلاعات محرمانهای نظیر اطلاعات حساب، کارت، هویتی و غیره افراد را به دست آورند. تنها برای اینکه بدانیم این حوزه چقدر میتواند برای ما خطرناک باشد، ذکر این آمار میتواند بسیار مفید باشد. حملات سایبری علیه مؤسسات مالی و بانکها در نیمه اول سال 2021 در جهان 118 درصد افزایش یافته است و 77 درصد از اپلیکیشن های مالی حداقل یک آسیبپذیری دارند که میتواند منجر به نشت اطلاعات شود. بدیهی است، حملاتی که منجر به افشای اطلاعات شخصی یا مالی میشوند، میتوانند به میزان قابل توجهی به اعتماد مشتریان بانک و اعتبار یک شرکت مالی آسیب برسانند.
در همین راستا پیشنهاد میشود، توسعهدهندگان اپلیکیشن موبایل برای مؤسسات مالی و بانکها، مطابق با استانداردها و دستورالعملهای امنیتی نظیر PCI-DSS، SOC 2 و PSD2 از اعمال کنترلهای امنیتی نظیر رمزنگاری اطلاعات حساس اطمینان حاصل نمایند. هرگونه داده مهم، از جمله کلیدهای API، پسوردها، اطلاعات هویتی شخصی و موارد دیگر باید بهطور پیشفرض رمز شوند. همچنین، آن بخشهای از کد (نظیر کلاسها و متدها) که به پردازش این اطلاعات حساس و مهم میپردازند نیز باید مورد رمزگذاری قرار گیرند. از سوی دیگر بهعنوان یک لایه امنیتی دیگر، دسترسی به این کلاسها را میتوان با تکنیکهای امن سازی مبهم کرد. علاوه بر این، بهرهگیری از کنترلهای امنیتی در زمان اجرا (پویا) که پیش از این به آن پرداختیم، میتواند اطمینان خاطر بیشتری برای ما ایجاد نماید. بهعنوان مثال با بهرهگیری از کنترلهای امنیتی، در صورتیکه یک فعالیت مشکوک در دستگاه شناسایی گردید، اپلیکیشن فورا از حالت اجرا خارج شده و متعاقب آن جهت پیگیری موضوع، یک پیام هشدار برای کارشناسان امنیت در بانک ارسال گردد.
جمعبندی
پس از مطالعه این یادداشت، ممکن است این سؤال برای شما ایجاد شده باشد که حال، وضعیت امنیتی اپلیکیشن های موبایل داخلی بهویژه در حوزه بانکی چگونه است؟ آیا با وجود این فضای تهدیدات و آسیبپذیریهای متنوع و خطرناک، تمهیدات لازم اندیشیده شده است؟ برای دریافت پاسخ دقیقتر برای این سؤال، بهتر است مقاله گزارش تحلیلی از امنیت اپلیکیشنهای بانکی و پرداخت داخلی و بینالمللی را مطالعه نمایید که در آن سعی کردیم در یک پژوهش بهصورت کامل به این موضوع بپردازیم. اما بهصورت خلاصه باید گفت که متأسفانه وضعیت بسیاری از این اپلیکیشن ها از منظر اعمال کنترلهای امنیتی و آمادگی در برابر آسیبپذیریها بسیار نامناسب است. متأسفانه باید گفت که در برخی از این دسته اپلیکیشن ها که به لحاظ ماهیتی بسیار حساس و مهم نیز هستند، میتوان با صرف زمان نسبتاً کوتاهی و اتفاقاً بدون نیاز به دانش خیلی زیاد در حوزه ارزیابی امنیتی و تست نفوذ، به اطلاعات محرمانهای دست پیدا نمود که میتوانند تبعات و مشکلات فراوانی را برای موسسه و بانک مربوطه و درنهایت برای مشتریان ایجاد نماید.
به نظر میرسد علیرغم سرمایهگذاری مناسب بانکها و مؤسسات مالی و پرداختی بر روی مسائل امنیتی در خصوص سایر حوزههای زیرساختی فناوری اطلاعات و ارائه خدمات آنلاین، متاسفانه ایشان هنوز موضوع امنیت اپلیکیشن های بانکی و پرداخت را جدی نگرفتهاند. رخدادهای امنیتی اخیر با عنوان انتشار اپلیکیشن های جعلی، تنها یک هشدار هستند که در صورتیکه به این موضوع بهصورت جدی از سوی مدیران بانکی، توسعهدهندگان و برنامهنویسان اپلیکیشن، متصدیان حوزه امنیت و نهادهای بالادستی پرداخته نشود، ممکن است در آینده تبعات جبرانناپذیری را به همراه داشته باشد.