چند وقتی هست که استفاده از رمز پویا توی ایران اجباری شده و همه افراد دارن از این سازوکار برای پرداختهای آنلاین استفاده میکنند. تا اونجایی که من ترند رو دنبال میکردم، رمز پویا حاصل بحث پیرامون فیشینگ کارتهای بانکی بود و بعد از کشمکشهای زیاد، بانک مرکزی دستور طی ابلاغیهای، بانکها رو ملزم به پیادهسازی و افراد رو ملزم به استفاده از رمز پویا برای پرداختهای آنلاین کرد. اما بعد از مدت زمان کوتاهی، شاهد این بودیم که فیشینگها دوباره شروع شد و سوالی که پیش میاد اینه که آیا رمز پویا قرار بود جلوی فیشینگ رو بگیره؟
فیشینگ چیست؟
فیشینگ راهی است که تبهکاران، اطلاعاتی نظیر کلمه کاربری، رمز عبور، شماره 16 رقمی عابر بانک، رمز دوم و CVV2 را از طریق ابزارهای الکترونیکی ارتباطات به سرقت می برند.
فیشینگ رمزپویا چطوری امکانپذیره؟ آیا درگاههای پرداخت سازوکار بازدارندهای برای فیشینگ در نظر گرفتن یا فقط رمز پویات رو پیادهسازی کردن بدون اینکه به عواقب اون فکر کنن؟ من و علیرضا سعی کردیم این پست رو طوری تنظیم کنیم که هم برای کاربر فنی و هم غیر فنی مفید باشه، امیدوارم از این پست خوشتون بیاد.
قضیه از این توئیت شروع شد (همچنین این چند روز توئیتهایی دیدم که فهمیدم خیلیا به دام فیشینگ افتادن. مثلا این کاربر که ۵۰ میلیون تومان ازش سرقت شده، و یا مثلا کاربرانی که اصلا راجع به این حمله چیزی نمیدونن، نمونه آخر هم برادر یک کاربر فنیتر که طعمه شد) که من به فکر نوشتن این نوشتار افتادم. به نظرم بهتره پست رو از این سوال شروع کنیم که آیا استفاده از رمز پویا امن است؟ جواب به این سوال کمی دشوار هست، چون امنیت مطلق وجود نداره و باید دید نسبی به این قضیه داشته باشیم. جواب سریع و نادقیق به این سوال خیر است.
اما پس از آن سریعا سوال دیگهای توی ذهن تشکیل میشه که چرا رمز پویا جایگزین رمز ایستا شد؟ به دلیل اینکه امنیت کاربر در پرداخت آنلاین با رمز پویا نسبت به رمز ایستا افزایش پیدا میکند و بدیهی است که این افزایش به معنی امنیت مطلق نیست. اگه بخواهیم عملکرد رمز پویا رو نسبت به رمز ایستا بررسی کنیم، باید وضعیت قبل و بعد رو بررسی کنیم که موضوع این نوشتار نیست. ما امروز میخوایم ببینیم که با وجود رمز پویا، انجام فیشینگ چطور قابل انجام هست. البته این نکته رو اضافه کنم که این بحث پیشتر نیز توی توئیتر مطرح شده بود.
نتیجهگیری و راهحل
بعد از بررسی تقریبا تمام درگاهها، مشاهده صفحات و سناریوهای فیشینگ مختلف، پیادهسازی سامانه فیشینگ برای آزمایش و موارد دیگر، نتیجهای که کاملا از اون مطمئنیم این هست که در شرایط کنونی، تنها راه ایمن بودن نسبت به فیشینگ، نگاه کردن با دقت به آدرسبار مرورگر است.
از کجا بفهمیم سایت اصلی است؟
تمامی درگاههای پرداخت موظف هستند زیر نظر شاپرک کار کنند. بنابراین باید آدرس اونها یک زیردامین از shaparak.ir باشه. پس تا وقتی که آدرسبار مرورگر رو نگاه نکردید و آدرس شاپرک رو با دقت ندیدین، پرداختی انجام ندید.
هیچ راه قطعی دیگهای برای مطلع شدن از یک درگاه فیشینگ وجود ندارد (برای پرداختهای درون برنامهای که اینجا بحث مفصلی دربارش شده، هیچ راهحلی وجود ندارد. شخص خود من، در چنین برنامههایی پرداخت انجام نمیدم).
- یک مهاجم با زحمت اندک با نااگاهی کاربر قادر به سرقت از کارت کاربران است
- رمز پویا نسبت به رمز ایستا امنتر است، اما امنیت کامل رو به کاربر نمیدهد
- طبق بررسیهای ما، درگاههای پرداخت، تلاش زیادی در جلوگیری از فیشینگ انجام ندادهاند و ما موفق شدیم روی همه درگاهها، با صرف اندک وقت، فیشینگ (آزمایشی) رو انجام بدهیم، فقط و فقط سازوکار رمز پویا رو بدون در نظر گرفتن موارد امنیتی پیادهسازی کردهاند،
در ادامه جدول مربوط به بررسی امنیت درگاهها گذاشته میشود - اکثر حملات فیشینگ از طریق برنامههای موبایل که در کانالهای تلگرامی و اپلیکیشن بازار است روی گوشی کاربران ناآگاه پخش میشوند (بدیهیه که مقصود برتری یا ضعف گوگلپلی و کافهبازار نیست، چرا که فیشِرها برنامههای مخرب خود رو اکثرا توی کافهبازار و نه گوگلیپلی منتشر میکنند، البته این بدین معنی نیست که عملکرد کافهبازار توی این قسمت قابل نقد نباشه، حداقل برای شخص من که کمی از جزئیات کارهاشون اطلاع دارم، ولی خب میدونم دارن یهکارایی میکنن)
- افزونههایی که توی اینترنت هست مثل افزونه فیشینگ ماهر اصلا کمکی نمیکنه (عقیده شخصی من اینه مضر هم هست، چرا که حس کاذب امنیت به کاربر میده، دقیقا مثل رمز پویا)
- از افسانهها و اطلاعات غلطی که راجع به فیشینگ به شما میدن دوری کنید.
در این قسمت سعی کردیم این حمله رو برای شما شبیهسازی کنیم. کافیه روی این لینک کلیک کنید تا با یک درگاه پرداخت جعلی روبرو بشید (دیگه کار نمیکنه، درگاه فیلتر شد، منم برش داشتم). البته جای نگرانی نیست، این درگاه فقط برای اثبات و درک بهتر حملات فیشینگ طراحی شده و در صورت پرداخت موفق، مبلغ ۱۰۰۰ تومان از حساب شما کم شده و به یک خیریه (محک) کمک میشود. همچنین هیچ اطلاعاتی از شما ذخیره نمیشود (این قسمت رو باید به ما اعتماد کنید که اگه خودم بودم اعتماد نمیکردم). همانطور که مشاهده میکنید، اطلاعات پرداخت اعم از نام پذیرنده، مبلغ قابل پرداخت و موارد دیگه به راحتی قابل تغییر است. پس میتونید در جمع خانواده یک بار این کار را انجام دهید که هم بقیه اعضا خطر را با چشم خود ببیند و هم کمکی هرچند کوچک به یک خیریه کرده باشید. اگه نمیخواین از درگاه استفاده کنید، کافیه فیلم زیر رو ببینید من با توضیحات یک پرداخت رو انجام میدم:
تحلیل فنی فیشینگ رمز پویا
خب توی این قسمت شمای کلی از جریانِ کاری پرداخت ترسیم شده. البته قابل ذکر هست که این جریانِ کاری بسیار خلاصه شده، نسخه کاملتر اون رو میتونید در این پست (شارژ نامحدود حساب mytehran.ir) مطالعه کنید.
به ترتیب خطوط رو توضیح میدم:
- کاربر بعد از نهایی شدن سبد خرید، دکمه پرداخت رو فشار میده
- در یک کانال ارتباطی بین فروشگاه و سامانه پرداخت، فاکتور جدید صادر میشه
- اطلاعات فاکتور برای پرداخت توسط فروشگاه در اختیار کاربر قرار میگیره، در این قسمت کاربر به سمت درگاه پرداخت هدایت خودکار میشه
- کاربر اطلاعات کارت رو وارد میکنه و پرداخت رو انجام میده (رمز یکبار مصرف رو میتونه از طریق اپلیکیشن و یا پیامک دریافت کنه)، در صورت درست بودن اطلاعات، پرداخت انجام میشه و کاربر بهصورت خودکار به فروشگاه منتقل میشه. در ای نقسمت کاربر اطلاعات پرداخت رو با خودش به فروشگاه منتقل میکنه
- فروشگاه با توجه به اطلاعات بدست آمده صحت پرداخت رو بررسی میکنه
پراکسی و شنود اطلاعات
برای شنود اطلاعات و تغییر در ترافیک کاربر به منظور انجام فیشینگ، مهاجمان دو راه را پیش روی دارند:
- نوشتن کد جعلی برای هر درگاه – این روش دارای چندین مشکل است، اولین مشکل اینه که برای هر درگاه باید کد جداگانهای نوشته شود. همچنین برای جلوگیری از مشکل حل کَپچا، فیشر باید کَپچای درگاه بانکی رو به کاربر بده برا حل، در نهایت با تغییر ساختار درگاه پرداخت، صفحه فیشینگ از کار میافته و زحمت فیشرها خیلی زیاد میشه توی این قسمت. مشکل بعدی اینه که اگه درگاه هر تغییری کنه ممکنه صفحه فیشینگ از کار بیفته، یا مثلا وَف میتونه جلوی این حمله رو با اعمال برخی تنظیمات بگیره (البته هر دفاعی قابل دور خوردن هست). پس از لحاظ تئوری قابل انجام هست ولی دردسرهای خاص خودش رو داره، همینطور که بعضی کاربران فنی به این نکته اشاره کردن.
- پیادهسازی یک پراکسی بین کاربر و سامانه پرداخت – توی این روش تمام مشکلات بالا حل میشود. در واقع درگاه هر تغییری هم بکنه، هیچ فرقی برای صفحه فشینگ نمیکنه، چون که اطلاعات از درگاه گرفته میشه و به کاربر نشون میده. توی این روش، فیشِر میتونه اطلاعات رو دستکاری و ذخیره کنه. جریانِ کاری به شکل زیر است:
خب حالا بریم سراغ طراحی اصلی حمله، جریانِ کاری بهصورت زیر است:
- بدافزار، کاربر را ترغیب به پرداخت میکنه. اما بجای صفحه پرداخت واقعی، صفحه فیشینگ رو به کاربر نشون میده
- در این قسمت، درخواست خرید از سمت سرور فیشِر برای فروشگاهی که فیشر قصد خرید ازش با اطلاعات قربانی داره فرستاده میشه، این خرید میتونه «کارت شارژ» و یا «خرید بیتکوین» و موارد اینچنینی باشه
- فروشگاه و درگاه پرداخت، بهصورت عادی کار خود را انجام میدهند، البته این فرایند از دید کاربر کامل پنهان است
- فروشگاه شماره ResNum و سایر اطلاعات را به سرور فیشِر ارسال میکند
- فیشِر در این قسمت اطلاعات را تغییر میدهد. برای مثال، شماره پذیرنده، لوگوی پذیرنده، مبلغ و موارد دیگه تغییر کرده و به کاربر نشان داده میشود
- کاربر اطلاعات کارت به همراه کد OTP را در درگاه جعلی وارد میکند. البته تنها راه تشخیص این قسمت، نوار بالای مرورگر (آدرسبار) است. چرا که کدی که کاربر میبیند، تماما کد درگاه است و همیشه درست کار میکند
- اطلاعات با تغییر مبلغ به درگاه اصلی ارسال شده و پرداخت انجام میشد – در این قسمت در صورت غلط بودن اطلاعات، پرداخت انجام نمیشود و کاربر خطا میگیرد. پس غلط یا درست وارد کردن اطلاعات نمیتواند کاربر را از جعلی بودن درگاه آگاه کند
- پرداخت کامل میشود، در این قسمت کاربر به صفحهای که فیشِر دوست دارد هدایت میشود
نوشتن پراکسی واقعا کار دشواری نیست و بار زبانهای مختلفی قابل پیادهسازی است. من دامنههای فیشینگ زیادی رو بررسی کردم، خیلی از دامنهها یک پورتال بودن که از سازوکار پراکسی استفاده میکردن. برای مثال کد زیر یک کد ۱۵ خطی میتونه چنین نتیجهای رو بده (به آدرسبار دقت کنید):
خب امیدوارم از این پست لذت برده باشید، ممنون.
زندگی من به سه قسمت تقسیم میشه، قسمت اول کار روزانه من هست که مثل بقیه مردم میرم سر کار. قسمت دوم سعی در براورده کردن علایق کاری خودم، مثل همین وبلاگ. قسمت سوم هم خانواده، مسافرت و تفریح. تلاش میکنم توی قسمت دوم، باگبانتی کار کنم، هم درآمد خوبی داره هم هیجان خاص خودش رو. اون قسمتهایی از تکنیکها و کشفیات در فرایند باگبانتی رو سعی میکنم توی این وبلاگ قرار بدم.
من با همه ی تاکیدتون روی ساده بودن مطلب متوجه نشدم 🙂
ببینید این نتیجه گیری من درسته؟با وجود رمز پویا عملا کسی مثل سابق درگاه جعلی نمیتونه راه اندازی کنه که فقط اطلاعات کارت بدزده و حتما باید به یک درگاه پرداخت واقعی متصل شه و از اون طریق هم به تخلیه کارت نمیتونن برسن و فقط مبلغ همون پرداخت گیر فیشر میاد؟
اگر این نتیجه گیری درسته این ۵۰ میلیونی که توییت شده بود چطور انجام شده بنظرتون؟
دقیقا باید به یه درگاه متصل کنه چون رمز پویا منقضی میشه، در رابطه با اون ۵۰ میلیونی، احتمال زیاد بدافزار روی گوشیش بوده، ولی این سناریو نبوده چون طبق حرف خودش پرپداخت مشکوکی نکرده. در اون مورد منابع برای نتیجهگیری نداریم.
من این نوع فیشینگ با رمز پویا (که سروری واسط قرار بگیره) رو همون اول به ذهنم اومده بود اما یه سوال ساده از همون اول برام پیش اومده بود که جوابشو نیافتم و اون هم اینکه چرا بانک در پیامک حاوی رمز پویا، به مبلغ اشاره نمیکنه؟
مثلا بگه این رمز پویا برای یک پرداخت ۵هزار تومنی درخواست شده. اینطوری به بهانه خرید شارژ، کارت طرف رو خالی نمیکنن!
این یکی از راهکارها هست که در آینده امیدواریم پیادهسازی بشه، البته فیشینگ با مبالغ یکسان باقی میمونه
بانک مسکن مبلغ رو در پیامک نشون میده.
سلام،،،، ممنون از زحمتی که متقبل شدید جهت راهنمایی و روشنگری ما در امور امنیت و شناخت بیشتر شبکه بانکی،،،، من یکی که خیلی استفاده بردم و آرزو میکنم که در راهی که انتخاب کردید(روشنگری) موفق موئد باشید،،،، و در آینده نیز از اطلاعات شما که فکر کنم کم نظیر است استفاده نماییم،،، باسپاس
با سلام
عالی بود، ممنون
به نظر من اینکه بگیم درگاه معتبر باید به صورت sep.shaparak.ir باشه، کافی نیست. بهتره بگیم آدرس درگاه فقط و فقط باید به صورت
https://X.shaparak.ir/…
باشه که در اون، X اسم شرکت ارائهدهنده درگاه مثل bpm یا sep هستش. به ممیز بعد از ir هم دقت کنین. هر پرداختی تو هر سایت یا اپی که خواستین انجام بدین، فرمتش باید و باید به این صورت باشه.
بله اینطور هست جایی نگفتم فقط باید SEP باشه، ما تقریبا ۱۱ تا درگاه پرداخت داریم که همگی باید زیر نظر دامین شاپرک باشن
عرض ادب
منم چیزی که قبلا بهش فکر می کردم رو می گم خوشحال می شم نظرتون رو بگید .
چرا OTP رو بانک مرکزی برای هر پرداختی یونیک نمی کنه ؟
یعنی : هر صفحه پرداختی یه آی دی داره و اون رمز پویا برای اون صفحه پرداخت (آی دی) فقط کار می کنه . موقع پرداخت هم اون رمز پویا اس ام اس شده با اون آی دی صفحه پرداخت چک میشه … یکی بود پرداخت درسته یکی نبود پرداخت فیک است .
حالا اگر فیشر هم این وسط پروکسی بزنه چون این یونیک بودن هر صفحه پرداخت پیاده سازی شده دیگه اطلاعات براش غیر قابل استفاده می شه و عملا هیچ خریدی نمی تونه بزنه .
در واقع اینجوری صفحه پرداخت فیشر با صفحه پرداخت کاربر اصلی دو تا آی دی مختلف دارن و رمز پویا برای یکیش فقط کار می کنه .
ببین این راهحلی که شما دادی و خیلی راهحلهای دیگه خیلی فیشینگ رو کم میکنه، و توی فازهای بعدی احتمال پیادهسازی این طرحها بسیار بالاست. اما فعلا فاز اول رمز پویا پیادهسازی شده که این مشکلات فعلی رو داره. به علاوه هر کی تقصیر رو گردن اون یکی میندازه، یعنی مسئولیت فیشینگ رو به عهده نمیگیره. خیلیا هم عقیده دارن این سهلنگاری کاربر هست.
بنطرم اگر بشه یه سازوکاری ارائه کرد که وقتی کد از طرف بانک ارسال میشه فقط برای اون مبلغ مشخص باشه و یکبار مصرف
مثلا من یک کارت شارژ ۵ هزار تومنی میخرم درخواست کد میکنم اون کد فقط برای خرید ۵ هزار تومان و یکبار تولید شده یعنی با اون کد شما نمیتونی خرید ۱۰ تومنی کنی یا دوبار خرید ۵ تومنی کنی فقط یکبار اونم به همون قیمت که به بانک ارسال شده و براش کد ساخته شد
و حتی بشه مثلا هر کد مخصوص همون تراکنش ساخته شده باشه یعنی هکر که با استفاده از پروکسی می خواد مثلا از کد ۵ تومنی استفاده کنه که پول با درگاه جعلی به حساب خودش یا برای تراکنش دیگه ای استفاده کنه نتونه و اون کد فقط برای تراکنشی که از قبل مشخص شده و کد براش ساخته شده باشه
باحال میشه بشه نه ! فکر کننم به ۰ میریسه فیشینگ البته کل زیرساخت مملکت باید از نو نوشته بشه :))))))))))))))))
دقیقا این راهکارها رو خیلیا گفتن، میشه یه کارایی کرد
سلام ممنون بابت مقاله فنی تون
من آدرس شاپرک رو با کاراکترهای اسکی خاص مشابه با آدرس اصلی و با یه سرتیفیکیت جعلی جعل کردم.
چاره اینجا چیه؟
اینکه دامین رو روی DNS کل کشور فیلتر کنن
این مورد هم میشه با چک کردن مشخصات سرتیفیکت سایت برطرف بشه
از سرتیفیکت سایت رو چک میکنیم
از همونجا اسم شرکت رو سرچ میکنیم که اگر عوضش نکنن
shparak electronic payment co (pj’s) هست (یه چیزی توی این مایه ها)
و احتمال زیاد هم سرتیفیکت توسط certum (unizeto technologies) صادر شده
اینا رو هم میشه جعل کرد به نظرتون یا چون سرتیفیکت EV هست نمیشه؟
البته متاسفانه فایرفاکس اندروید فقط صادر کننده گواهی و آدرس سایت رو توی جزئیات اطلاع میده
و اینکه خیلی ممنون از پست خیلی خوبتون
سلام ببخشید چطور باید چنان چیزی رو طراحی و روش تست کرد یه توضیح کوچیک میدید؟
فکر میکنم کامل توضح دادم
سلام دوستان
خوب در تمام دنیا در صورتی که مطالعه کنید هواره سعی شده راه های دور زدن مکانیسم های امنیتی سختر و سختر بشه . اما اینکه بشه جلوی اون رو گرفت همانطور که در ابتدا ذکر شده نه . مثل دو نقطه هستند که در محیط یک دایره در گردش هستند گاهی نزدیک و گاهی دور هستند.
در ایران با تمام تدابیر حاضر امکان جعل درگاه به راحتی وجود دارد. البته اکثر خسارات وارده بر اساس ۱- عدم رعایت اصول توسط استفاده کننده ۲- نقص در فرایند ها می باشد.
به شخصه می تونم به صورت قاطع بگم جعل یک درگاه ایران برای یک متخصص حوزه امنیت کمتر از یک یا دو روز با این مکانیسم بیشتر طول نمیکشه.
راهکار هایی هم که توسط دوستان ذکر شده همگی درست است. من خودم با این راهکار در شرایط فعلی بیشتر موافقم .
۱- نمایش مبلغ در پیامک
۲- نمایش نام فروشگاه
۳- نمایش فاکتور
۴- نمایش کد رمز
در حال حاضر اگر پیامک به این صورت باشد کاربر استفاده کننده مجبور خواهد بود ابتدا اطلاعات را به ترتیب خوانده و بعد کد را وارد کند که اکثر خسارات را کاهش می دهد.
در ادامه پیشنهاد می گردد کلیه درگاهای واسط همانند زرینپال و …. که عنوان فروشگاه رو ذکر نمی کنند اجازه دسترسی نداشته باشند. چون بیشتر خسارات بعد از مرحله اول در این قسمت است .
اما بهشت برین برای ارتقای بیشتر در انتقالات مالی رو می توان به مدل بیت کوین و حتی کمی سختگیرانه تر از آن اشاره نمود.
به این صورت که در هر پرداخت اینترنتی فروشگاه به ازای هر فاکتور صادره یک عبارت یکتا تولید نماید . همانند بیت کوین . و از مشتری تقاضا کند مبلغ فاکتور را از طریق ان عبارت برای وی واریز نمایید. سپس کاربر در حساب خود ان عبارت را وارد کرده و ابتدا فاکتور و تولید کننده آن به همراه مبلغ را مشاهده نمایند و در صورت صحت آن را پرداخت نماید.
خوب مطمئنن خیلی از دوستان خواهند گفت این فرایند بسیار پیچیده است . جواب من هم همین است فرایند پیچیده است درست مثل دزدین یک خودرو گران مدل بالا.
در تمامی فرایند های حفظ حریم شخصی و یا اطلاعات مالی هرچه سامانه ها به سمت ایمنی بیشتر می روند از راحتی ان ها کاسته می شود.
حال اینجا کاربر باید انتخاب کند آیا ایمنی می خواهد یا راحتی.
….
پیروز باشید.
ممنون از نظر جامع شما
مهندس فونت سایز کامنت ها خییییییلی ریز . چشامون درمیاد بخونیمشون
یه زحمت بکش یکم سایز رو ببر بالا . مرسی
دست شما درد نکنه.
سلام مهندس. بنده وارد یک سایت پرداخت جعلی شدم و اطلاعاتمو کارتمو کامل وارد کردم. من هم رمز دوم ایستا دارم هم پویا و در اون پرداخت چون زیر صد تمن بود از رمز ایستا استفاده کردم. بعد ک فهمیدم فیشینگه رمز ایستامو عوض کردم. حالا امروز قراره پول بیاد تو حسابم. لازمه نگران باشم یعنی میتونه این پول رو از حسابم برداره
سلام، نه جای نگرانی نیست ولی بهتره احتیاط کنی روز ثابت رو عوض کنی، گوشی هم بررسی کند بدافزار نداشته باشه
سلام
فرمودید نگاه به آدرس بار مشکل رو حل میکنه. اگه bitb attack باشه چطور بفهمیم؟
درود بر شما
میخواستم بدونم صرفا با کلیک کردن روی لینک یا نوتیفیکیشن امکان فیشینگ هست؟ بدون وارد کردن اطلاعات؟ نوتیف از برنامه بازی اومد و نوشته بود شما برنده شدید ولی صفحه ای باز نشد