سرفصل‌های آموزشی
آموزش OWASP TOP 10
صفحات فراموشی رمز عبور خطرناک

صفحات فراموشی رمز عبور خطرناک

صفحات فراموشی رمز عبور خطرناک

تمام وب سایت هایی که به log in کردن نیاز دارند شامل گزینه ای هستند که به کاربران اجازه می دهد تا اگر رمز عبورشان را فراموش کردند بتوانند آن را تغییر دهند. گزینه ای که با عنوان فراموشی رمز عبور که به زبان ها و نوشتار های مختلف در تمامی وب سایت ها وجود دارد.

روش های متعددی با سطوح امنیتی متفاوت برای پیاده سازی این روند وجود دارد. یکی از متداول ترین رویکرد ها چنین ترتیبی را دنبال می کند:

  • ابتدا کاربر نام کاربری یا ایمیل خود را به همراه درخواست تغییر رمز را برای وب سایت ارسال می کند. در این قسمت می توان از شماره تلفن همراه فرد هم استفاده کرد و لینک یا کد مربوطه را به شماره کاربر ارسال کرد.
  • وب سایت نیز موجودیت این کاربر را بررسی می کند. سپس یک توکن موقت و یکتا را تولید کرده و با حساب کاربر مرتبط می کند.
  • سپس وب سایت ایمیلی حاوی یک لینک برای تغییر رمز عبور برای کاربر ارسال می کند. توکن منحصر به این کاربر به عنوان یک پارامتر در این لینک گنجانده شده است. 

https://sokanacademy.com/reset?token=0a1b2c3d4e5f6g7h8i9j

  • وقتی که کاربر وارد این لینک ارسال شده می شود، وب سایت ابتدا توکن مختص کاربر را اعتبار سنجی کرده و حساب کاربری مورد نظر را برای انجام عملیات شناسایی می کند. اگر همه اطلاعات درست باشند کاربر می تواند رمز خود را تغییر دهد و در آخر، توکن مربوط به کاربر منقضی می شود.

این روش نسبت به سایر روش ها، ساده تر و به نسبت امن تر است. به هر حال، امنیت این روش مبتنی بر این فرض است که تنها همین کاربر مورد نظر به ایمیل خود دسترسی دارد و دارای این توکن منحصر به فرد است.

البته میزان امنیت روش ها تا حدودی به شیوه ی پیاده سازی آن ها ارتباط دارد. روش های بسیار زیادی برای پیاده سازی توابع بازیابی رمز عبور و تولید توکن های منحصر به فرد و امن وجود دارد، اما ما در این قسمت از مقاله به بررسی برخی نباید ها در پیاده سازی توابع بازیابی رمز عبور می پردازیم.

  • نباید رمز عبور را به صورت خام در پایگاه داده نگهداری کنیم
    به طور کلی، ۳ روش برای ذخیره رمز عبور در پایگاه داده وجود دارد:

۱-متن خام یا plain text: رمز عبور کاربران بدون هیچ تغییری در ستون password پایگاه داده ذخیره می شود.

۲-رمزنگاری(Encrypted): به طور معمول از رمز گذاری متقارن (یک کلید برای رمزنگاری و رمزگشایی) استفاده می شود. سپس پسورد رمز نگاری شده در یک ستون ذخیره می شود.

۳-hashed: یک فرایند یک طرفه است، به این معنی که شما می توانید هش کنید اما دیگر نمی توانید آن را برگردانید.

رمز عبور را نباید به صورت خام در پایگاه داده قرار داد، زیرا هکر می تواند به راحتی به آن ها دست پیدا کند. روش رمز نگاری بهتر است اما مشکل این روش هم قابل رمز گشایی بودن آن است. اگر مهاجم الگویی رمز نگاری را بفهمد می تواند به رمز عبور ست پیدا کند. روش سوم از همه امن تر است.

نباید از اطلاعات عمومی کاربر برای ایجاد توکن استفاده کرد

مثلا اگر از user_id برای توکن استفاده کنیم، هکر با فهمیدن این موضوع به آسانی می تواند اعمال مخرب خود را انجام دهد.

نباید برای ایجاد توکن از رمز نگاری آسان شناسه های مشخص کاربر استفاده کرد

 مثلا اگر از بخواهیم از ایمیل کاربر استفاده کرده و با استفاده از الگوریتم رمزنگاری MD5 آن را رمزنگاری کنیم، باز هم از امنیت خوبی برخوردار نیستیم:

$token = md5($user[‘email]);

و به این ترتیب، URL به دست آمده به صورت زیر است:

https://example.site/password_recovery.php?token=$token

استفاده از شناسه های کاربر و رمز نگاری آن ها با استفاده از روش های رایج، امنیت چندانی ندارد. چرا که روش های متعددی برای به دست آوردن عبارت های رمز نگاری شده با الگوریتم های رایج وجود دارد و هکر می تواند به راحتی به آن ها دست پیدا کند.

البته از پیغام های خطا در هنگام لاگین کردن نیز نباید غافل شد. برای پیدا کردن و اطمینان داشتن از صحت ایمیل کاربر، فرد هکر می تواند با وارد کردن ایمیل کاربر و یک رمز عبور دلخواه، با بررسی پیغام خطای برنامه، از درستی این ایمیل اطمینان حاصل کند.

برای مثال،‌ با وارد کردن ایمیل، پیغام های خطای زیر قابل مشاهده است.

نباید برای ایجاد توکن از رمز نگاری آسان شناسه های مشخص کاربر

این نوع از پیغام های خطاِ، صراحتا اعلام می کند که آیا ایمیل وارد شده صحیح است یا خیر. زیرا هیچ اشاره ای به اشتباه بودن رمز عبور نکرده و صرفا اشتباه بودن ایمیل را بررسی می کند. در این روش، فرد هکر با آزمون و خطا کردن می تواند صحت ایمیل کاربر مورد نطر را بررسی کند.

ارائه پیغام خطای گنگ

روش دیگری هم وجود دارد که متن پیغام خطا را به صورت گنگ ارائه می کند. در این روش، اشاره خاصی به اشتباه بودن ایمیل یا رمز عبور نمی شود، بنابراین، هکر نمی تواند به این پیغام استناد کند و صحت ایمیل کاربر را بسنجد.

 

البته استفاده از هر کدام از این روش ها بستگی به برنامه و کاربر آن دارد. هر کدام از این روش ها مزایا و معایبی دارد و باید به user friendly بودن و یا امنیت برنامه به عنوان پارامتر هایی برای انتخاب روش ارائه پیغام خطا دقت کرد.

بازیابی رمز عبور با سوال امنیتی

روش دیگر، بازیابی رمز عبور با سوال امنیتی است. برای اینکه رمز عبور خود را با این روش بازیابی کنید، باید به سوال های امنیتی که در زمان ساخت حساب کاربری به آن ها پاسخ دادید به یاد داشته باشید.

برای مثال، زمانی که یک حساب کاربری در گوگل می سازید، گوگل پرسش های امنیتی مطرح می کند که شما به آن ها پاسخ های منحصر به فردی داده اید. اگر پاسخ این سوالات را به یاد دارید، می توانید از این طریق رمز جیمیل خود را تغییر دهید.

این روش، روند زیر را دنبال می کند:

پس از ورود به وب سایت مورد نظر، وارد لینک فراموشی رمز عبور می شویم.

پس از وارد کردن ایمیل و سایر جزئیات فرایند لاگین، به صفحه بعد می رویم.

در صفحه بعد، از ما می خواهد تا روش مورد نظرمان را انتخاب کنیم که ما گزینه پرسش سوالات امنیتی را انتخاب می کنیم.

پس از انتخاب این گزینه، باید به سوالات پاسخ دهیم.

در صورتی که به سوالات پاسخ صحیح بدهیم، می توانیم رمز عبور خود را تغییر دهیم.

این روش هم خطرات خاص خود را به دنبال دارد. چیزی را که شما می دانید ممکن است شخص دیگری هم از آن مطلع باشد. حتی می توان پاسخ برخی سوالات را از داخل شبکه های مجازی و حساب های کاربر مورد نظر به راحتی پیدا کرد. مثلا اگر سوالی با عنوان “نام بهترین دوستتان چیست؟" وجود داشته باشد. احتمالا با بازدید از صفحات کاربر در فضای مجازی بتوان تشخیص داد چه کسی یا چه کسانی بهترین دوست کاربر مورد نظر هستند.

مهندسی اجتماعی

در همین زمینه، مبحثی تحت عنوان مهندسی اجتماعی وجود دارد که به بیان تکنیک ها و روش های استخراج این گونه داده ها در سطح اجتماع است.

اگر بخواهیم تعریف خلاصه ای از مهندسی اجتماعی داشته باشیم:
مهندسی اجتماعی سوء استفاده از اطمینان و یا فریب عوامل انسانی به جهت دسترسی به اطلاعات محرمانه و در مرحله بعد سوء استفاده از این اطلاعات است.


در مهندسی اجتماعی که شیوه ای ناپاک است یک سازمان یا شخص قصد حمله به یک سازمان یا شخص دیگر را دارد و در این حمله اهدافی دارد مثل به دست آوردن شماره و مشخصات کارت اعتباری یا اطلاعات حساس نظامی یا اطلاعات محرمانه تجاری و هر نوعی از اطلاعات که دسترسی به آن آزاد نیست.
مهاجم در مهندسی اجتماعی به جای اینکه به سراغ روشهای سخت و فنی که نیازمند سطح بالای دانش یا غیر ممکن است برود، از تکنیکهای مهندسی اجتماعی استفاده می کند.

online-support-icon