امنیت

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

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

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

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

کشف xss

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

دو نکته:

  1. در این فرم به درستی از token استفاده شده بود که جلوی نوع دیگری از ضعف امنیتی که «شبیه‌سازی درخواست از طرف کاربر» است رو می‌گیره. من برای تست xss مجبور شدم که توکن رو دستی کپی کنم و در ارسال مقادیر دستکاری شده به فرم، ازش استفاده کنم.
  2. دستوری که من استفاده کردم یک دستور ساده ارسال پیامه برای اینکه دیده بشه. هکرها از این نمونه دستورها استفاده نمی‌کنند بلکه از این توانایی برای دزدیدن سطح دسترسی کاربرها کمک می‌گیرند.

 

در پایان یادآوری می‌کنم که این ضعف امنیتی در دوران رای‌گیری کشف شد و بلافاصله به مدیران سایت گزارش شد. از عمومی کردن این نوشته تا پایان رای گیری و اعلام برنده‌ها خودداری کردم که تاثیری بر عملکرد دوستان نداشته باشه. وجود مشکل امنیتی در هر سایتی امکان‌پذیره و «چیزی از ارزش‌های اون کم نمی‌کنه». امیدوارم این گزارش‌ها و نوشتن در موردشون بتونه کمکی به افزایش سطح امنیتی وب‌سایت‌های ایرانی بکنه.

استاندارد
امنیت

ضعف امنیتی خطرناک از نوع xss در سایت من‌و‌تو

برای سال‌های متمادی، خطرناک‌ترین ضعف امنیتی که در تعداد بسیار زیادی از سایت‌ها دیده می‌شد، تزریق کد اس‌کیوال یا SQL Injection بود اما به نظر می‌رسه این روزها، رتبه‌بندی تغییر کرده و xss داره جای خودش رو در صدر جدول به دست میاره. به صورت خلاصه اگر بخوام بگم، xss مشکلیه که به هکر اجازه می‌ده تا کدهای جاوا اسکریپت ناخواسته رو در مرورگر مراجعه‌کننده‌های سایت اجرا کنه. نتیجه اجرای این کدهای ناخواسته می‌تونه از دزدیدن دسترسی کاربر به سایت باشه تا توزیع بدافزار و هک کاربرهایی که به اون سایت خاص اطمینان دارند. این شیوه هک، به صورت غیر مستقیم می‌تونه منجر به نفوذ هکر به سایت هم بشه چون نباید فراموش کنیم که ادمین سایت هم مراجعه‌کننده با سایته اما با دسترسی بالاتر.

 xss vulnerability in manoto website

با شروع مسابقه خوانندگی شیکه من‌و‌تو و امکان ثبت رای از طریق وب‌سایت، انتظار می‌ره که بازدید این وب‌سایت رشد زیادی داشته باشه. نکته‌ای که می‌تونه هکرها رو به خودش جلب کنه. با یک نگاه گذرا به سایت manototv.com متوجه شدم که بخش جستحوی این سایت به خوبی بررسی نمی‌شه و امکان تزریق کد جاوا اسکریپت وجود داره. در تست نفوذهای اخیرم، تقریبا نیمی از سایت‌ها این نقص امنیتی رو داشتند و بسیاریشون، مشکل رو در فیلد جستحو داشتند. نمی‌دونم چرا اما به نظر می‌رسه که توسعه‌دهنده‌ها اهمیت چندانی برای این بخش قائل نیستند.

متاسفانه تجریه خوبی در گزارش ضعف امنیتی xss به مدیر سایت‌های پیشین نداشتم و اونها مشکل رو مربوط به کاربران می‌دونستند و فکر می‌کردند چون مستقیم باعث هک سایت نمی‌شه پس مهم نیست. در مورد سایت من‌و‌تو اینجوری نبود. من در تاریخ ۴ فوریه ۲۰۱۶ متوجه مشکل شدم و به مدیر سایت اطلاع اولیه رو دادم. ۵ فوریه فیلم نمونه سو استفاده رو فرستادم و تا ۶ فوریه مشکل برطرف شد.

در مورد فیلم شبیه‌سازی، گفتن دو نکته ضروریه:

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

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

جلوگیری از xss

سمت سایت:

  • اصل اول در جلوگیری از تزریق کد و دستور، اعتبارسنجی و پاک‌سازی اطلاعات وارد شده است. برای مثال در بخش جستجو، نیازی به کاراکترهای < و یا > نیست معمولا.
  • همه ورودی‌ها مهمند، حتی referrer و یا متغیر انتخاب زیان سایت.
  • به فریمورک‌ها اطمینان کامل نداشته یاشید. مستندات فریمورک رو بخونید و ببینید کدام بخش از نکات امنیتی رو بر عهده توسعه‌دهنده گذاشته.
  • امنیت کاربر به اندازه امنیت سایت مهمه. نیابد بین ضعفی مثل xss با نمونه‌هایی مانند SQL Injection و یا Code Injection که مستقیما باعث هک سایت می‌شن، فرق بگذارید.

سمت کاربر:

  •  از مرورگرهای امن‌تر مانند firefox و یا google chrome استفاده کنید. مرورگرها رو به‌روز نگه دارید.
  • استفاده از افزونه‌هایی که کار ذخیره و وارد کردن پسورد رو انجام می‌دن، می‌تونه در این زمان‌ها مفید باشه. lastpass می‌تونه گزینه خوبی باشه.
  • در زمان ارسال اطلاعات کاربری، به ظاهر سایت اکتفا نکنید و آدرس فرم رو چک کنید. هرچند در نمونه‌ای که فیلمش رو گذاشتم، این بررسی راه به جایی نمی‌بره اما همه‌جا اینجور نیست.
  • استفاده از افزونه‌ای مثل noscript می‌تونه مفید باشه، هرچند گاهی کاربری سایت رو سخت می‌کنه.
  • ضدویروس و ضد بدافزار نصب کنید و همیشه به‌روز نگهش دارید. یک کد جاوا اسکریپت مخرب، می‌تونه حتی از طریق سایت‌های معتبر نیز توزیع بشه و عواقب گاها جبران‌ناپذیری داشته باشه.

پی‌نوشت

استاندارد
امنیت

ضعف امنیتی جعل درخواست

ضعف امنیتی جعل درخواست یا Cross-Site Request Forgery (CSRF) ناشی از عدم بررسی صحیح ارسال کننده درخواست و اجرای درخواست های بدون اعتباره.

این ضعف معمولا منجر می شه به اجرای عملیات ناخواسته از طرف کاربر یا ادمین سایت. هکر با به کار بردن مهندسی اجتماعی (برای مثال تشویق کاربر یا ادمین به باز کردن یک لینک) دستوراتی رو از طرف اونها برای اجرا به سایت می فرسته. دامنه اثرات این درخواست ها می تونه از لو رفتن اطلاعات کاربری، تغییر پسوردها، حذف اطلاعات و کاربرها تا از دست دادن کنترل کامل سایت باشه.

روش های زیادی برای جلوگیری از این ضعف پیشنهاد می شه که بعضی هاش عملا کاربردی نداره. برای مثال گفته می شه درخواست ها رو در قالب شیوه POST ارسال کنید. این روش به راحتی قابل دور زدنه. کافیه که هکر قربانی رو فریب بده که یه فرم رو submit کنه و یا حتی کافیه که جاوا اسکریپت روی مرورگر قربانی فعال باشه و بدون اینکه حتی متوجه بشه یه فرم hidden در سایت هکر، با کمک جاوا اسکریپت ارسال بشه.

شمایی از یک حمله CSRF

شمایی از یک حمله CSRF

برای نمونه می تونیم نمونه زیر رو ببینیم. این مشکل ۶ ماه پیش کشف شده به مدیران سایت گذارش شده، اما بعد از گذشت مدت زیادی، ضعف رو برطرف کردند.

یک کارشناس امنیتی نشون داده سایت Namecheap که یکی از ثبت کننده های معروف دامنه است، در بخش تعیین DNS ضعف CSRF رو داشته.

اثبات:

کد بالا در واقع یک فرم HTML است که یک سری درخواست رو با روش POST به آدرس زیر ارسال می کنه:

در متغیرهای ارسالی، targetdomain.org آدرس سایتی است که قراره هک بشه و ns1.evildns.org و ns2.evildns.org آدرس DNS سروری است که در اختیار هکره.

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

ضعف امنیتی CSRF در کنار ضعف امنیتی دیگه ای به نام XSS، که منجر به اجرای کدهای جاوا اسکریپت ناخواسته می شه، ترکیب بسیار خطرناکی رو تشکیل می دهند که می تونه سایت های بزرگی رو به زانو در بیاره.

در این لینک می تونید روش های کاربردی جلوگیری از CSRF رو ببینید. باید دقت کنیم که هر کدوم از این روش ها نقطه های ضعف و قوت خودشون رو دارند.

برای مثال اجبار کاربر به پر کردن کپچا در هر درخواست می تونه اذیت کننده باشه و تجربه کاربری ناخوشایند و در نتیجه کم شدن استفاده رو در پی داشته باشه. یا چک کردن سایت ارجاع دهنده در صورتیکه هک ترکیبی از CSRF و XSS باشه عملا از کار می افته.

همچنین پیشنهادهایی برای کاربرها و مخصوصا ادمین ها وجود داره:

  • هنگام خروج از محیط کاربری سایت، Loq Out کنید.
  • اجازه ذخیره شدن نام کاربری و پسورد رو به مرورگر ندید و از گزینه “یادآوری” در زمان ورود به سایت استفاده نکنید.
  • از مرورگرهای جداگانه برای ورود به سایت های حساس و وبگردی استفاده کنید.
  • با استفاده از افزونه های مثل No-Script اجرای کدهای جاوا اسکریپت رو روی مرورگرتون محدود کنید.
  • در مرورگری که برای کارهای حساس استفاده می کنید ایمیل ها رو به صورت “متن ساده” بخوانید و html رو غیرفعال کنید.
استاندارد