اینجور حملات زمانی اتفاق میافتن که یک وبسایت از اطلاعاتی که کاربر وارد میکنه درست استفاده نکنه، یعنی چک نکنه یا تبدیل به یه فرمت بیخطر نکنه.
حالا این هکر چیکار میکنه؟ کدهای مخرب خودش رو از طریق سایت هدف میفرسته به سمت یه کاربر دیگه که اصلا خبر نداره. وقتی اون کد اجرا میشه، مرورگر کاربر فکر میکنه این کد خیلی رسمی و از خود وبسایته و باید اجراش کنه! با این کار هکر میتونه به کوکیها، اطلاعات ورود، یا هرچیز مهمی که مرورگر واسه اون سایت خاص داره دسترسی پیدا کنه. بدتر اینکه حتی میتونه محتوای صفحه رو کلن عوض کنه!
XSS یا همون Cross-Site Scripting «اسکریپت مخرب بین سایتی» چطوری کار میکنه؟
اینجور حملات زمانی رخ میدن که:
- وقتی دادهها از راهی که مطمئن نیست، وارد وبسایت میشه. اکثر وقتا موقعی که کاربر یه فرمی رو پر میکنه یا لینکی رو باز میکنه
- این دیتاها توی محتوای خروجی (همون چیزی که کاربر میبینه) بدون چک شدن یا تغییر فرمت گذاشته میشه.
حالا «مهاجم» چیکار میکنه؟ یه کد خرابکار میفرسته که معمولا جاوااسکریپت هست، اما میتونه HTML، فلش یا هرچیز دیگه هم باشه که مرورگر میتونه اونو اجرا کنه. این جور کدها میتونن دردسرهای خیلی بزرگی درست کنن. مثلا اطلاعات محرمانه کاربر مثل کوکی رو بدزدن، کاربر رو به یه سایت دیگه بفرستن یا حتی بدون اینکه کاربر بفهمه از طرف اون سایت، کارهای خطرناک دیگه روی سیستمش انجام بدن!
انواع حملات XSS
به طور کلی دو نوع حمله XSS داریم: بازتابی (reflected) و ذخیره شده (stored). البته یه نوع سوم هم هست که کمتر معروفه به اسم «XSS مبتنی بر DOM» که رو خود مرورگر مستقیما اثر میذاره.
حملات XSS بازتابی (reflected)
اینجوریه که کد مخرب به سمت سرور فرستاده میشه و بعد سرور همون رو برمیگردونه، مثلا وقتی توی یه ارور یا نتیجه جستجو، قسمتی از ورودی کاربر دیده میشه. حملات بازتابی با روشهای مختلف مثل ایمیل فرستادن یه لینک مخرب به قربانی یا گذاشتنش تو سایتهای دیگه انجام میشه. وقتی کاربر گول بخوره و روی اون لینک بزنه، کد اجرا میشه و به سمت سایت اصلی فرستاده میشه، اون سایت هم فکر میکنه یه ورودی عادیه و اجراش میکنه. واسه همین بهش میگن غیر پایدار (یا نوع اول) «Non-Persistent or Type-I» چون همه ماجرا توی یه درخواست و جواب تموم میشه.
حملههای XSS ذخیره شده (stored)
اینجور حملات وقتی اتفاق میفتن که کد مخرب کلا روی سرور سایت ذخیره شده باشه، مثلا تو پایگاه داده، بخش نظرات و اینجور جاها. بعدش هر کاربری که بیاد و اطلاعات اون قسمت رو بخونه، اون کد مخرب هم براش اجرا میشه. واسه همین بهش میگن پایدار یا نوع دوم. «Persistent or Type-II»
حملههای کور Cross-site Scripting
این مدل یه جورایی میشه زیرمجموعه حملات ذخیره شده. هکر یه کد آلوده رو میذاره تو قسمتهایی از سایت که مستقیما به کاربر عادی نشون داده نمیشه ولی تو سیستم ذخیره میشن، مثلا داخل فرمها. بعدش هر وقت مدیر یا کارمند سایت بخواد اون اطلاعات رو ببینه، اون کد خرابکار هم اجرا میشه. واسه همین تشخیص این مدل از XSS تو عمل یه کم سخته. یکی از بهترین ابزارها که برای شناسایی این شکاف هاست «XSS Hunter» نام داره.
آسیب پذیریهای دیگر XSS
یه نوع XSS دیگه هست که کمتر در موردش کسی میدونه به اسم «XSS مبتنی بر DOM» که اونم خودش کلی پیچیدگی داره. این نوع از حمله مستقیما تو خود مرورگر و بخشهایی که به اسم DOM شناخته میشن اتفاق میفته.
پیامدهای حملات XSS
چه حمله ذخیرهای باشه، چه بازتابی یا حتی مبتنی بر DOM، نتیجه نهایی یکیه، فقط نحوه رسیدن کد مخرب به سرور متفاوته. فکر نکن که اگه یه سایت خیلی سادست یا اصلا اجازه تعامل نمیده، باز هم از این حملات در امانه، اتفاقا سایتهای ساده ممکنه ضربه سنگینتری بخورن. بسته به میزان پیچیدگی حمله، از یه دردسر کوچیک برای کاربر گرفته تا دزدیده شدن کامل اکانت میتونه رخ بده. بدترین حالت وقتیه که کوکیهای کاربر لو بره، اونوقته که هکر میتونه به جای کاربر وارد سایت بشه و از طرف اون خرابکاری کنه. حملات دیگه میتونن به سرقت اطلاعات کاربر، نصب برنامههای خطرناک (مثل تروجان)، تغییر اطلاعات نشون داده شده در سایت، یا انتقال کاربر به یه وبسایت دیگه منجر بشن.
اگه سایت شرکت داروسازی به این روش هک بشه ممکنه یه نفر اطلاعات دارو رو جوری عوض کنه که به کاربر ضرر بزنه. یا مثلا اگه بخش اخبار یه سایتی اینجوری هک بشه، اعتبار شرکت خدشه دار میشه. واسه همین XSS رو دست کم نگیرید.
چطوری متوجه شویم وبسایت ما آسیبپذیر است؟
پیدا کردن حفرههایی که XSS ازشون سو استفاده میکنه سخته و وقت گیره. بهترین راه اینه که کل برنامه سایتت توسط یه متخصص امنیتی بررسی بشه، مخصوصا جاهایی که کاربر میتونه اطلاعات رو وارد کنه یا خروجی سایت به کاربر نشون داده میشه. انواع و اقسام تگهای HTML موجوده که ممکنه کد جاوااسکریپت مخرب توشون جاسازی بشه! البته ابزارهایی هم هستن که میتونن یه اسکن سطحی انجام بدن، اما عموما بازم بخشهای پنهان زیادی ممکنه نادیده گرفته بشن. یادت باشه، اگه یه جای وبسایتت مشکل داشته باشه، احتمال زیاد قسمتهای دیگه هم آسیب پذیرن.
چطور از خودمان محافظت کنیم؟
یه نکته خیلی مهم و ساده اینه که پشتیبانی از پروتکل HTTP TRACE رو روی سرورت خاموش کنی. اینجوری حتی اگه یه هکر اطلاعات کاربر رو بدزده، کار زیادی ازش ساخته نیست. میتونی راجع بهش سرچ کنی و یاد بگیری چجوری باید برای سرورهای مختلف این کار رو انجام داد.
اما با این حال بهتر هست با کارشناس و متخصص امنیت که به حملات XSS آشناست صحبت کنی، توی سیستمهایی مثل وردپرس هم همیشه آپدیت بودن و استفاده از محصولات با نصب بالا میتونه کمک کنه این نوع حملات براتون کمتر پیش بیاد.