لازم است محافظت از اپلیکیشنهای بانکی با استفاده از تکنیکهای امنسازی اپلیکیشن در دو لایه ایستا و پویا بهعنوان یک الزام برای مؤسسات مالی مدنظر قرار گیرد.
منبع : وبلاگ تخصصی آشناایمن
لازم است محافظت از اپلیکیشنهای بانکی با استفاده از تکنیکهای امنسازی اپلیکیشن در دو لایه ایستا و پویا بهعنوان یک الزام برای مؤسسات مالی مدنظر قرار گیرد.
به گزارش افتانا (پایگاه خبری امنیت فناوری اطلاعات)، بهطورکلی حملات و تهدیدات امنیتی در حوزه امنیت برنامههای موبایلی به دو دسته حملات استاتیک و پویا تقسیم میشوند. حملات استاتیک آن دسته از حملاتی هستند که نفوذگر در آن به تحلیل پکیج اپلیکیشن در حالت قبل از نصب میپردازد که معروفترین آن مهندسی معکوس (Reverse Engineering) است.
نفوذگر از طریق مهندسی معکوس اپلیکیشن، سعی دارد تا به کدها و منابع آن دسترسی پیدا کرده و با تحلیل منطق اپلیکیشن و استخراج اطلاعات حساس موجود در آن (نظیر کلیدها، پسوردها، فراخوانی های مهم، گواهیها و غیره) اقدام به پیادهسازی سناریوهای بدخواهانه خود کند. حملاتی همچون ایجاد اپلیکیشنهای جعلی، قرار دادن هرگونه بدافزار در اپلیکیشن، سرقت اطلاعات و غیره همگی با بهرهگیری از آسیبپذیریهای مربوط به مهندسی معکوس ایجاد میشوند. برای مقابله با این آسیبپذیریها عمدتاً از روشهای مختلف مبهمسازی (obfuscation)، رمزنگاری (encryption) و مجازیسازی (Virtualization) استفاده میشود. اما حتی اگر اپلیکیشن شما بهطور کامل در برابر حملات ایستا و مهندسی معکوس امن شده باشد و به اصطلاح ریورس (Reverse) نشود، باز هم دسته دیگری از آسیبپذیریها و حملات، با عنوان حملات پویا در کمین هستند. این موارد در شرایطی رخ میدهند که اپلیکیشن در حال اجرا بوده و هکر اقدام به سوءاستفاده از آن مینماید. این سوءاستفاده میتواند به صورت شبیهسازی عملکرد اپلیکیشن با هدفی بدخواهانه، سرقت اطلاعات و موارد مشابه باشد. برای مقابله با این تهدیدات عمدتاً از روشهایی استفاده میشود که به نحوی از تغییر و یا نصب و اجرای اپلیکیشن در دستگاهها و محیطهای ناامن نظیر فریمورکهای هک اپلیکیشن، دیباگرها، امولاتورها و دستگاههای روت شده جلوگیری کند. ذکر این نکته ضروری است که اپلیکیشنهای موبایل نیز مانند سایر اپلیکیشنها در بسترهای دیگر نظیر وب، دارای سایر آسیبپذیریها نظیر تزریق کد، موارد شبکهای و غیره نیز هستند. موارد ذکرشده در بالا، آسیبپذیریهایی هستند که با توجه به ماهیت خاص اپلیکیشنهای موبایل، مخصوص این دسته از برنامهها هستند.
در ادامه به بررسی باورهای غلط امنیت اپلیکیشنهای موبایل و عدم بهکارگیری کنترلهای امنیتی مکفی ناشی از این تصورات میپردازیم: ۱- ما برای امنیت اپلیکیشن اندرویدمان از ابزار امنسازی Proguard استفاده میکنیم، خیلی بعید است چنین آسیبپذیریهایی را داشته باشیم.
Proguard بهعنوان یک ابزار رایگان و محبوب ساخت شرکت Guardsquare، در پکیج برنامهنویسی اندروید موجود است. این ابزار بهعنوان یک بهینهساز جاوا شناخته میشود که با آنالیز اپلیکیشن اقدام به ایجاد بهینگی (کاهش حجم اپلیکیشن و افزایش سرعت آن) میکند. Proguard یک ابزار امنیتی نیست ولی دارای یک فیچر امنیتی با نام مبهمسازی اسامی (Name Obfuscation) نیز است. درواقع با فعالسازی این فیچر باهدف پیچیدهتر کردن فرایند تحلیل ایستای اپلیکیشن، اسامی کلاسها، فیلدها و متغیرها از وضعیتی که برنامهنویس نامگذاری کرده است با حروف (a,b,c,…) جایگزین میشوند. Proguard انواع دیگر مبهمسازی، نظیر مبهمسازی جریان منطقی اپلیکیشن، عملیات ریاضی، اسامی assetها، resourceها و غیره را انجام نمیدهد. طبیعی است که سایر کنترلهای امنیتی در برابر حملات ایستا نظیر انواع رمزنگاریهای موردنیاز (رشتهها، کلاسها، متدها، کتابخانهها، فایلها، غیره) و مجازیسازیها و همچنین هیچ یک از کنترلهای امنیتی در برابر حملات پویا (شناسایی دستکاری در المانهای مختلف پکیج، شناسایی محیطهای ناامن و غیره) نیز توسط این ابزار ارائه نمیشود.
Proguard برای هدف بهینگی طراحی شده است نه امنیت! مبهمسازی اسامی که سوی Proguard انجام میشود شاید ما را تنها یک درصد در مسیر امنیت کمک میکند که همان یک درصد هم درصورتی که در کنار سایر کنترلهای امنیتی قرار نگیرد بسیار شکننده بوده و بهراحتی قابل دور زدن است.
۲- اپلیکیشن ما چیز خاصی ندارد و تنها یک پوسته است، ما در بکاند همه تمهیدات امنیتی را دیدیم. بهطورکلی اکثر افرادی که این جمله را بیان میکنند، دارای یک اپلیکیشن از نوع تین کلاینت هستند. برنامه موبایل تین کلاینت، یک اپلیکیشن سبک و کم حجم است که کدهای برنامهنویسی کمی را بر روی موبایل کاربر اجرا نموده و عمده فعالیتها و منطق فرایندی و کسبوکار را در سمت سرویسدهنده مدیریت میکند. فعالیتهایی همچون اعتبارسنجی درخواستها از سوی کاربر و یا پردازشهای اصلی به جای اجرا در سمت کلاینت، در سمت سرور انجام میشود. در اینگونه برنامهها معمولاً فعالیت خود اپلیکیشن (سمت کلاینت) محدود به اجرای رابط کاربری، دریافت دادهها و اقدامات ورودی از کاربر و همچنین نشان دادن نتایج و خروجیها میشود. این نوع معماری اپلیکیشن در بسیاری از نرمافزارهای موبایلی بانکداری و یا پرداخت بسیار متداول بوده و به وفور به چشم میخورد.
طبیعی است که با توجه به حجم کد کمتر در سمت کلاینت، سطح حملات بهصورت کلی کاهش مییابد و طراحان با اطمینان بیشتری نسبت به محافظت از برنامه در سمت سرور اقدام مینمایند. اما این مزیت غیرقابل انکار در این نوع برنامهها نباید منجر به ایجاد این تفکر در ذهن شما گردد که برنامههای موبایلی تین کلاینت در مقابل کلیه حملات مهاجمین مصون هستند و یا اصلاً هک نمیشوند. بر این اساس ذکر این نکته ضروری است که با وجود کاهش چشمگیر احتمال وقوع بسیاری از حملات در این حالت، بسیاری از آسیبپذیریها نظیر هوکینگ، ایجاد اپلیکیشن های جعلی، آنالیز منطق و غیره به قوت خود باقی میمانند که باید اقدامات تقابلی و تمهیدات مناسب امنیتی برای آنها در نظر گرفته شود. ذکر این نکته نیز ضروری است که اقدامات کنترلی اعمال شده در سمت سرور درواقع ما را در لایهای دیگر محافظت میکنند و ارتباطی به اقدامات ما در سمت اپلیکیشن (کلاینت) ندارند.
۳- اپلیکیشنهای اپل هک نمیشوند. iOS امن است. احتمالاً شما هم شنیدهاید که خیلیها بر این باورند که پلتفرم Apple iOS از منظر آسیبپذیری مهندسی معکوس دارای امنیت بالاتری نسبت به اندروید است.
بر این اساس سه تفکر زیر بسیار متداول است: مکانیسم رمزنگاری کدها توسط App Store برای عدم امکان مهندسی معکوس اپلیکیشن کفایت میکند. کد اپلیکیشن های iOS بر نمیگردد یا این کار بسیار مشکل است. مکانیسم sign اپلیکیشن ها در Apple از دستکاری کد و انتشار مجدد اپلیکیشن تغییریافته جلوگیری میکند. اما متأسفانه باید گفت که این تصورات رایج کاملاً اشتباه است و بهطورکلی، یک اپلیکیشن iOS به همان اندازه که اپلیکیشنهای اندرویدی امکان دستکاری دارند، مستعد تحلیل هکرها و اعمال تغییرات سودجویانه هستند.
سه چالش مهم امنیتی برای اپلیکیشنهای بانکی و پرداخت رشد تعداد تراکنشهای مالی آنلاین و استفاده افراد از خدمات الکترونیک بهویژه در دوره پاندمی کرونا بسیار مشهود است. در این بین اپلیکیشنهای مالی بیشترین رشد را در میان خدمات آنلاین به خود اختصاص دادهاند. بهطوری که در یک آمار منتشرشده، ۶۷ درصد از افراد در ایالاتمتحده از اپلیکیشنهای همراه بانک یا اپلیکیشنهای پرداختی استفاده میکنند. از سوی دیگر متأسفانه، برنامههای مالی نیز بیش از هر زمان دیگری در معرض تهدیدات امنیتی حوزه موبایل هستند. دلیل آن این است که این اپلیکیشنها، اطلاعات شخصی مانند سپردههای بانکی، شماره کارت و سایر دادههای ارزشمند را ذخیره و پردازش میکنند. علاوه بر این، تغییر سریع به سمت دیجیتالی شدن، فرصتی را برای هکرها ایجاد کرده است تا برنامههایی را که بهسرعت و بدون در نظر گرفتن تمهیدات امنیتی در پی پاندمی کرونا راهاندازی شدهاند، هدف قرار دهند.
در ادامه این یادداشت به سه چالش مهم امنیتی برای اپلیکیشنهای بانکی و پرداخت و همچنین رویکرد امنسازی آنها اشاره میشود. اپلیکیشنهای جعلی بانکی شاید شما نیز اخیراً با اخبار مربوط به انتشار اپلیکیشنهای جعلی همراه بانک مرتبط با چند بانک داخلی در گوگل اپاستور مواجه شده باشید و یا احتمالاً با انبوهی از پیامکها و اطلاعرسانیهایی از سوی بانک برخورد کردهاید که به شما هشدار میدهند که اپلیکیشنهای بانکی را تنها از سایت خودشان دانلود کنید. در این نوع حمله، مهاجمان از طریق مهندسی معکوس اپلیکیشن اصلی، اقدام به ایجاد یک اپلیکیشن جعلی با مقاصد سودجویانه کرده و آن را در استورهای بینالمللی و شبکههای اجتماعی منتشر میکنند. قربانی با دانلود اپلیکیشن جعلی که اتفاقاً دارای شباهت بصری و عملکردی با اپلیکیشن اصلی است، ممکن است بسیاری از اطلاعات شخصی خود را ناخواسته افشا کرده و دچار ضررهای سنگین مالی شود.
توسعهدهندگان اپلیکیشن موبایل میتوانند با استفاده از ترکیبی از اقدامات امنسازی و تشخیص دستکاری کد (Tampering) و بهطور خاصتر، مبهمسازی کد از ایجاد برنامههای جعلی جلوگیری کنند. با تغییر نام، تغییر ساختار و پنهانکردن برخی از عناصر کد منبع برنامه، بانکها و مؤسسات مالی میتوانند از مهندسی معکوس و انتشار مجدد کد خود بهعنوان یک برنامه جعلی توسط مهاجمین جلوگیری کنند. علاوه بر تکنیکهای فوق، بهکارگیری مبهمسازی در لایه جریان منطقی و کنترلی برنامه و همچنین عملیات ریاضی موجود در اپلیکیشن، میتواند موجب شود تا هکرها، حتی با استفاده از پیشرفتهترین ابزارهای تحلیل استاتیک، نتوانند به کدهای برنامه دسترسی پیدا کنند. بدافزارها و تروجانهای بانکی انتشار تروجانها و بدافزارهای بانکی روش سودآوری است که هکرها علیه بانکها و مؤسسات مالی از آن استفاده میکنند. گزارش امنیتی تهدیدات که توسط شرکت نوکیا در سال ۲۰۲۱ منتشرشده است، نشان میدهد که بر اساس دادههای ترافیک شبکه مربوط به بیش از ۲۰۰ میلیون موبایل در سراسر جهان، تعداد تروجانهای بانکی جدید نسبت به سال گذشته ۸۰ درصد افزایش داشته است. تروجانهای بانکی برنامههای مخربی هستند که در سایر اپلیکیشنهای موبایل مانند بازیها پنهان میشوند که پس از نصب، هنگام استفاده کاربران از اپلیکیشنهای مالی خود، سعی در سرقت اطلاعات دارند. یکی از کارکردهای متداول این تروجانها تلاش برای سرقت پیامکهای حاوی رمزهای عبور یکبارمصرف (پویا) است.
با استفاده از ابزارهای تحلیل پویا که پیش از این توضیح داده شد، هکرها میتوانند برنامههای بانکی را مستقیماً در زمان اجرا برای اجرای کدهای مخرب، تغییر مسیر فراخوانی های API یا نصب بدافزار برای سرقت اطلاعات کاربر و همچنین دسترسی غیرمجاز به حسابهایشان، دستکاری کنند. علاوه بر این، بروز پدیده بانکداری باز که در کشور ما نیز مورد توجه بانکها قرار گرفته است، استفاده گسترده از APIها را در برنامههای بانکی و پرداخت شخص ثالث افزایش داده است که خود بروز این آسیبپذیری را نمایانتر میکند.
به همین دلیل است که محافظت از اپلیکیشنهای بانکی با استفاده از تکنیکهای امنسازی اپلیکیشن در دو لایه ایستا و پویا باید بهعنوان یک الزام برای مؤسسات مالی مدنظر قرار گیرد. محافظت از برنامه در زمان اجرا، با بهرهگیری از تکنیکهایی نظیر، شناسایی محیط (دستگاه) های پر ریسک (مانند روت شده/Jail break شده، دیباگ، شبیهسازها، محیطهای مجازی) و همچنین پیشبینی واکنش مناسب اپلیکیشن موبایل در مواجهه با آنها، ما را در برابر تهدیدات مذکور محافظت مینماید. افشای اطلاعات یکی دیگر از نگرانیهای اصلی که در میان اپلیکیشنهای بانکی رایج است، نشت و افشای اطلاعات است که به هکرها اجازه میدهد اطلاعات محرمانهای نظیر اطلاعات حساب، کارت، هویتی و غیره افراد را به دست آورند. تنها برای اینکه بدانیم این حوزه چقدر میتواند برای ما خطرناک باشد، ذکر این آمار میتواند بسیار مفید باشد. حملات سایبری علیه مؤسسات مالی و بانکها در نیمه اول سال ۲۰۲۱ در جهان ۱۱۸ درصد افزایش یافته است و ۷۷ درصد از اپلیکیشن های مالی حداقل یک آسیبپذیری دارند که میتواند منجر به نشت اطلاعات شود. بدیهی است، حملاتی که منجر به افشای اطلاعات شخصی یا مالی میشوند، میتوانند به میزان قابل توجهی به اعتماد مشتریان بانک و اعتبار یک شرکت مالی آسیب برسانند.
در همین راستا پیشنهاد میشود، توسعهدهندگان اپلیکیشن موبایل برای مؤسسات مالی و بانکها، مطابق با استانداردها و دستورالعملهای امنیتی نظیر PCI-DSS، SOC ۲ و PSD۲ از اعمال کنترلهای امنیتی نظیر رمزنگاری اطلاعات حساس اطمینان حاصل کنند. هرگونه داده مهم، ازجمله کلیدهای API، پسوردها، اطلاعات هویتی شخصی و موارد دیگر باید بهطور پیشفرض رمز شوند. همچنین، آن بخشهای از کد (نظیر کلاسها و متدها) که به پردازش این اطلاعات حساس و مهم میپردازند نیز باید مورد رمزگذاری قرار گیرند. از سوی دیگر بهعنوان یک لایه امنیتی دیگر، دسترسی به این کلاسها را میتوان با تکنیکهای امنسازی مبهم کرد. علاوه بر این، بهرهگیری از کنترلهای امنیتی در زمان اجرا (پویا) که پیش از این به آن پرداختیم، میتواند اطمینان خاطر بیشتری برای ما ایجاد کند. بهعنوان مثال با بهرهگیری از کنترلهای امنیتی، در صورتیکه یک فعالیت مشکوک در دستگاه شناسایی شود، اپلیکیشن فورا از حالت اجرا خارج شده و متعاقب آن جهت پیگیری موضوع، یک پیام هشدار برای کارشناسان امنیت در بانک ارسال شود. جمعبندی متأسفانه وضعیت بسیاری از این اپلیکیشنها از منظر اعمال کنترلهای امنیتی و آمادگی در برابر آسیبپذیریها بسیار نامناسب است. متأسفانه باید گفت که در برخی از این دسته اپلیکیشنها که به لحاظ ماهیتی بسیار حساس و مهم نیز هستند، میتوان با صرف زمان نسبتاً کوتاهی و اتفاقاً بدون نیاز به دانش خیلی زیاد در حوزه ارزیابی امنیتی و تست نفوذ به اطلاعات محرمانهای دست پیدا کرد که میتوانند تبعات و مشکلات فراوانی را برای موسسه و بانک مربوطه و درنهایت برای مشتریان ایجاد کند.
به نظر میرسد علیرغم سرمایهگذاری مناسب بانکها و مؤسسات مالی و پرداختی بر روی مسائل امنیتی درخصوص سایر حوزههای زیرساختی فناوری اطلاعات و ارائه خدمات آنلاین، متاسفانه هنوز موضوع امنیت اپلیکیشنهای بانکی و پرداخت را جدی نگرفتهاند.
رخدادهای امنیتی اخیر با عنوان انتشار اپلیکیشنهای جعلی، فقط یک هشدار هستند که اگر به این موضوع بهصورت جدی از سوی مدیران بانکی، توسعهدهندگان و برنامهنویسان اپلیکیشن، متصدیان حوزه امنیت و نهادهای بالادستی پرداخته نشود، ممکن است در آینده تبعات جبرانناپذیری را به همراه داشته باشد. در این راستا و در مرحله اول، انجام تست ها و ارزیابی های امنیتی دورهای و در مرحله بعد، بهکارگیری الزامات برنامنویسی امن و همچنین بهرهگیری از نرمافزارهای امنسازی معتبر جهانی نظیر ابزارهای DexGuard برای اپلیکیشنهای اندرویدی به عنوان نسخه تجاری ابزار رایگان و نامآشنای Proguard و همچنین iXGuard برای برنامههای iOS با ارائه ویژگیهای امنیتی چندلایه و متنوع میتوانند مورد استفاده قرار گیرند.