نگاره‌هایی پیرامون امنیت، شبکه و رمزنگاری

19 مارس 2020

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

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

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

  1. مرحله اول جایی هست که کاربر بعد از اینکه کالا مورد نظرش رو توی فروشگاه آنلاین انتخاب کرد، روی دکمه پرداخت کلیک می‌کنه
  2. اینجا فروشگاه و PSP در یک کانال مخفی از دید کاربر، اطلاعاتی رو رد و بدل می‌کنند، نتیجه اخذ یک Reservation number یا ResNum هست. توی این قسمت، بعضی PSPها پیاده‌سازی متفاوتی رو ارائه می‌دن، برای مثال کل فرایند رو Tokenized می‌کنند
  3. توی این قسمت، کاربر اطلاعات رو که شامل مبلغ پرداخت، ResNum و آدرس بازگشتی و موارد اینچنینی هست رو دریافت می‌کنه. معمولا یک فرم HTML با روش POST در این قسمت وجود داره که کاربر رو به سمت درگاه پرداخت هدایت می‌کنه
  4. کاربر با اطلاعات کسب شده در مرحله سوم، به سمت درگاه پرداخت میره
  5. در جواب، در صورت عدم وجود خطا، نشست کاربر به‌روز می‌شه و یه قطعه کد جاوااسکریپت یا HTML کاربر رو مجبور به ارسال یک درخواست GET میکنه
  6. کاربر درخواست GET رو می‌فرسته، توجه کنیم که نمی‌تونست از اول GET بفرسته و باید مرحله قبلی طی میشد و نشست به‌روز میشده
  7. در صورتی که مشکلی نباشه، صفحه پرداخت ظاهر میشه
  8. کاربر اطلاعات کارت رو وارد می‌کنه و دکمه پرداخت رو می‌زنه
  9. در صورت درست بودن اطلاعات، یک Reference Number یا RefNum تولید میشه که فارسیش میشه «رسید دیجیتال» که به منزله پرداخت موفق است. توی این مرحله باز کاربر توسط یک تکه کد جاوااسکریپت یا HTML به سمت آدرس بازگشتی میشه. این آدرس توی مرحله ۳ توسط خود کاربر ارسال شده. از مواردی که کاربر با خودش به فروشگاه می‌برده، ResNum و RefNum و موارد دیگر مشابه هست
  10. توی این قسمت کاربر روی دکمه «تکمیل فرآیند خرید» کلیک می‌نه و اطلاعات رو به فروشگاه می‌فرسته (این قسمت به‌صورت خودکار انجام میشه)
  11. فروشگاه توی این مرحله صحت RefNum و ResNum رو با PSP بررسی می‌کنه (البته قبل از بررسی با PSP، خود فروشگاه بررسی‌های اولیه رو توی این قسمت انجام میده)
  12. در صورت موفقیت، پایگاه‌داده فروشگاه به‌روزرسانی می‌شده و پیغام خرید موفق به کاربر نشون داده میشه

البته این جریان کاری، با کمی تغییر در PSPهای مختلف داره کار می‌کنه، توی درخواست‌های ۱، ۴ و ۱۰ کاربر می‌تونه توی جریان کاری دخالت کنه. آسیب‌پذیری کشف شده هم دقیقا توی مرحله 11 اتفاق می‌یفته. خب هر سوالی داشتید توی کامنت‌ها و یا توی توئیتر در خدمت هستم، اینم از فیلم:

علاقه‌مند به امنیت، بازی و تفریح. ۳۰ سال زندگی کردم، دوست دارم ۳۰ سال دیگه هم زندگی کنم. دو پارادوکس بزگ زندگیم اینه که رشته تحصیلیم لیزر و اپتیک هست،‌ ربطی به کارم نداره، اسمم هم یاشار هست اما ترک نیستم.
زندگی من به سه قسمت تقسیم میشه، قسمت اول کار روزانه من هست که مثل بقیه مردم میرم سر کار. قسمت دوم سعی در براورده کردن علایق کاری خودم، مثل همین وبلاگ. قسمت سوم هم خانواده، مسافرت و تفریح. تلاش می‌کنم توی قسمت دوم، باگ‌بانتی کار کنم،‌ هم درآمد خوبی داره هم هیجان خاص خودش رو. اون قسمت‌هایی از تکنیک‌ها و کشفیات در فرایند باگ‌بانتی رو سعی می‌کنم توی این وبلاگ قرار بدم.
  • به اشتراک بگذارید:
  1. Avatar رضا گفت:

    آقا یاشار شما خیلی خوبی

  2. Avatar رهگذر گفت:

    خیلی عالی بود واقعا ممنون از محبتی که کردید و به اشتراک گذاشتید

  3. Avatar Rework گفت:

    خایمالی لو میدی؟! یا دنبال چس مثقال بانتی که بهت میدن تازه اگ بدن!

  4. Avatar ارتین گفت:

    تشکر از آموزشتون
    میشه همه تست کیس های بحث پرداخت رو هم معرفی کنید

  5. عالی بود
    خیلی استفاده کردم.

  6. Avatar LOTAOK گفت:

    بانتتو ک گرفتی چرا آموزششو گذاشتی همینجوری برداشتی آموزششو گذاشتی برای هر جا مشکل بیش بیاد شما مقصری این باگ مربوط به شا\رک و درگاه سامانه ک resnum تولید میکنه اینجا هم فقط دولوبرا نیستن سو استفاده گر ها هم هستن بس این بست آموزشی مخرب رو حذف کن عوض این ها راه حل اینم میذاشتی چرا مثلا درگاه آب و ملت ندارن این باگو

    • یاشار شاهین‌زاده یاشار شاهین‌زاده گفت:

      اینم برای همین گذاشتم چون سو استفاده‌گر ها همین الان هم دارن سو استفاده می‌کنن و باید بقیه هم بدونن تا برطرف کنن آسیب‌پذیری‌رو. راه‌حل هم بستگی به کدی داره که فروشگاه زده