دپارتمان آموزش

آسیب پذیری های بازنشانی رمز عبور و راه کارهای امن سازی آنها- قسمت اول

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

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

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

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

مهمترین آسیب پذیری های بازنشانی رمز عبور، را می توان به شکل زیر خلاصه کرد:

  • مسمومیت تنظیم مجدد رمز عبور (Password reset poisoning)
  • بازنشانی رمزعبور با دستکاری پارامتر ایمیل (Password Reset With Manipulating Email Parameter)
  • نشت توکن از طریق ارجاع دهنده بازنشانی رمز عبور (Password Reset Token Leak Via Referrer)

 

 

 مسمومیت تنظیم مجدد رمز عبور

توصیف آسیب پذیری

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

 

 

راه های مختلفی برای بازنشانی رمز عبور وجود دارد که درجات امنیتی و کاربردی متفاوتی دارند، یکی از رایج ترین رویکردها چیزی شبیه به این است:

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

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

  • هنگامی که کاربر از این URL بازدید می کند، وب سایت بررسی می کند که آیا رمز ارائه شده معتبر است یا خیر و از آن برای تعیین اینکه کدام حساب در حال بازنشانی است استفاده می کند. اگر همه چیز مطابق انتظار باشد، به کاربر این امکان داده می شود که رمز عبور جدید را وارد کند. در نهایت، توکن از بین می رود.

 

حال اگر URL ارسال شده به کاربر به صورت پویا بر اساس ورودی قابل کنترل، مانند هدر میزبان ایجاد شود، یعنی ورودی ها قابل دستکاری باشند، ممکن است بتوان یک حمله مسمومیت بازنشانی رمز عبور را به صورت زیر ایجاد کرد:

  • مهاجم آدرس ایمیل یا نام کاربری قربانی را در صورت لزوم دریافت می کند و از طرف او یک درخواست بازنشانی رمز عبور ارسال می کند. هنگام ارسال فرم، درخواست HTTP حاصل را کپچر می کند و هدر Host را طوری تغییر می دهند که به دامنه ای که آنها کنترل می کنند (مانند evil.com) اشاره کند. 
  • قربانی یک ایمیل بازنشانی رمز عبور واقعی را مستقیماً از وب سایت دریافت می کند. به نظر می رسد که این شامل یک لینک معمولی برای بازنشانی رمز عبور آنها است و مهمتر از همه، حاوی یک توکن بازنشانی رمز عبور معتبر است که با حساب آنها مرتبط است. با این حال، نام دامنه در URL به سرور مهاجم اشاره می کند:

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

 

  • اگر قربانی روی این پیوند کلیک کند توکن تنظیم مجدد رمز عبور به سرور مهاجم ارسال می شود. 
  • مهاجم اکنون می تواند URL واقعی وب سایت آسیب پذیر را مشاهده کند و توکن سرقت شده قربانی را از طریق پارامتر مربوطه جایگذاری کند. سپس می تواند رمز عبور کاربر را به هر چیزی که دوست دارند بازنشانی کند و متعاقباً وارد حساب کاربری قربانی شوند.

 

راهکار های امن سازی

  • ساده ترین روش، استفاده از مقادیر هدر برای تعریف ناوبری سایت است. هدرهای درخواست، فیلدهای محافظت شده نیستند و کاربر می تواند آن ها را برای تزریق ورودی های مخرب تغییر دهد. علاوه بر این، انجام اعتبار سنجی هدر میزبان و حذف پشتیبانی از سرصفحه های نادیده گرفته شده مانند X-Forwarded-Host ، می تواند استراتژی های کاهش دهنده خوبی باشد.
  • یک برنامه‌ نویس می‌تواند این آسیب‌پذیری را با استفاده از $_SERVER[‘SERVER_NAME’] به جای $_SERVER[‘HTTP_HOST’] هنگام ایجاد پیوند بازنشانی رمز عبور کنترل کند.
  • برای جلوگیری از حملات مبتنی بر مسیریابی به زیرساخت داخلی، باید متعادل کننده بار (Load Balancer) یا هر پروکسی معکوس را پیکربندی کرد تا درخواست ها را فقط به لیست سفید دامنه های مجاز ارسال کند.
  • هنگام استفاده از میزبانی مجازی، باید از میزبانی وب‌سایت‌ها و برنامه‌های کاربردی داخلی بر روی همان سروری که محتوای عمومی است، خودداری شود. در غیر این صورت، مهاجمان ممکن است بتوانند از طریق دستکاری هدر میزبان به دامنه های داخلی دسترسی پیدا کنند.
  • اگر گنجاندن دامنه فعلی ضروری است، باید در یک فایل پیکربندی سفارشی در کد سمت سرور مشخص شود و نباید به سربرگ میزبان بستگی داشته باشد.
  • باید هدر میزبان مورد اعتبارسنجی قرار گیرد.

بازنشانی رمز عبور با دستکاری پارامتر ایمیل

توصیف آسیب پذیری

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

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

 

 چنانچه پارامتر ایمیل قابل دستکاری باشد، ممکن است بتوان یک حمله بازنشانی رمز عبور با دستکاری پارامتر که منجر به تصاحب حساب می شود را به صورت زیر ایجاد کرد: 

  • مهاجم آدرس ایمیل قربانی را در صورت لزوم دریافت و از طرف او یک درخواست بازنشانی رمز عبور ارسال می کند. در هنگام ارسال فرم، درخواست HTTP حاصل ذخیره (Capture) می شود.
  • معمولاً درخواست مورد نظر اینگونه به نظر می رسد:

  • پارامتر ایمیل طوری تغییر می یابد که به ایمیل تغییر داده شده، اشاره کند.
  • Email=victim@email.com&attacker@email.com

 

 

راهکار های امن سازی

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

  

نشت توکن از طریق ارجاع دهنده بازنشانی رمزعبور

توصیف آسیب پذیری

URL از چندین بخش تشکیل شده است: داده ها، دامنه، مسیر و درخواست. این داده ها ممکن است حاوی برخی اطلاعات حیاتی باشند. یک مسیر ممکن است حاوی رمز بازنشانی رمز عبور باشد. در حالت ایده آل، رمز عبور برای احراز هویت کاربری استفاده می شود که اعتبار خود را در یک وب سایت فراموش کرده است. هنگامی که کاربر از سایت درخواست می کند که پیوند بازنشانی رمز عبور ایجاد کند، وب سایت یک پیوند بازنشانی ایجاد می کند (معمولاً یک بار قابل استفاده) و آن را از طریق ایمیل برای کاربر ارسال می کند. توکن باید در URL باشد، زیرا اکثر سرویس گیرندگان ایمیل به ایمیل های HTML اجازه نمی دهند درخواست های POST را انجام دهند و درخواست از کاربر برای تایپ مجدد توکن تجربه قابل قبولی نیست. این موضوع توکن را در معرض خطر نشت از طریق هدر ارجاع قرار می دهد. این نشانی اینترنتی توکن بسیار مهم است، زیرا هر کسی که این نشانی اینترنتی را داشته باشد می‌تواند رمز عبور کاربر را بازنشانی کرده و حساب کاربری را تصاحب کند.

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

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

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

  • کاربر بر روی فراموشی رمزعبور سایت com کلیک می کند.
  • com یک پیوند بازنشانی رمز عبور یکبار مصرف ایجاد می کند و آن را برای کاربر ارسال می کند.
  • درخواست مشابه زیر است:

https://trusted.com/reset-password/abcaa2ss-asd2s-23412aasdzla

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

https://google.com/analytics.js

Referrer:https://trusted.com/reset-password/abcaa2ss-asd2s-23412aasdzl

  • دامنه شخص ثالث از گزارش های برنامه خود ممکن است به این داده ها دسترسی پیدا کند و رمز عبور را بازنشانی کند.

 

راهکار های امن سازی

سرصفحه های ارجاع دهنده نباید در همه URL ها و همه دامنه ها تنظیم شوند. می توان تعیین کرد که چه زمانی هدر ارجاع دهنده ارسال شود و چه زمانی ارسال نشود. این با آنچه سیاست ارجاع نامیده می شود تعریف می شود.

  • تمام اطلاعات حساس موجود در یک درخواست POST ارسال می شود. اگر داده‌های حساس باید در رشته جستجوی URL ارسال شوند، داده‌ها باید قبل از انتقال رمزگذاری شود.
  • فقط کد HTML زیر در بین تگ هایhtml صفحه قرار داده شود:

 با این کار سرصفحه های ارجاع دهنده به وب سایت های شخص ثالث ارسال نمی شود.

سیاست های مشترک شامل  موارد زیر است:

  • Referrer-Policy: no-referrer

ارسال اطلاعات ارجاع دهنده در سرصفحه درخواست را غیرفعال می کند.

  • Referrer-Policy: Origin

با تنظیم این مورد فقط دامنه میزبان را در ارجاع دهنده ارسال می کند، نه کل مسیر URL را.

  • Referrer-Policy: Same-Origin

اطلاعات هدر را فقط در صورتی ارسال می کند که هر دو طرف (پیوند منبع و پیوند مقصد) در یک دامنه باشند.

 



نويسنده :
سعيد باجلان
منبع :
 آشنا ایمن

پویش #دو_درجه_کمتر
نمایش بیشتر

سعید باجلان

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Time limit is exhausted. Please reload the CAPTCHA.

دکمه بازگشت به بالا