کمیته رکن چهارم – در حملات XSS، وقتی قربانی وارد وبسایت دیگری میشود کدهای مهاجم اجرا میشود. این حملات شامل حملات منعکسکننده، حملات مبتنی بر DOM و حملات ذخیرهشده هستند.
هکرها در حمله سایبری تزریق اسکریپت از طریق وبسایت (XSS) کد مخرب را در یک فرم وب یا لینک اپلیکیشن تحت وب تزریق میکنند. این کد مخرب که به یک زبان اسکریپتنویسی مثل جاوا اسکریپت یا PHP نوشته شده اقدامات مخرب بسیار زیادی مثل ایجاد خرابکاری در وبسایتی که قصد بارگذاری آن را دارید و سرقت کلمه عبور یا سایر اعتبارنامههای کاربری را انجام میدهد.
وبسایتهای امروزی معمولاً در هنگام بارگذاری، با اجرای یکسری کد در خود مرورگر ایجاد میشوند. حملات XSS نیز از این ویژگی وبسایتها سوءاستفاده میکنند. در نتیجه پیشگیری از چنین حملاتی چندان ساده نیست.
حملات XSS چگونه اجرا میشوند؟
همه افراد میتوانند یک وبسایت حاوی کدهای مخرب طراحی کنند. در حمله تزریق اسکریپت از طریق وبسایت، مهاجم شرایط را بهگونهای تنظیم میکند که وقتی قربانی وارد وبسایت شخص دیگری میشود، کدهای مهاجم اجرا گردد. حملات XSS میتوانند این اقدامات مخرب را بدون نیاز به دسترسی سطح بالا به وب سرور وبسایت برای تزریق کد در آن، انجام دهند. در این روش مهاجمان از شیوه عملکرد صفحات وب امروزی سوءاستفاده میکنند.
به طور کلی نحوه عملکرد صفحات وب به شرح زیر است:
شخصی که قصد ایجاد یک صفحه وب را دارد، یک سند HTML که بر روی یک سرور وب بارگذاری میشود ایجاد مینماید. وقتی کاربری قصد دسترسی به این صفحه را داشته باشد، نشانی سرور را در مرورگر کامپیوتر خود درج میکند و مرورگر هم با استفاده از این نشانی کد HTML را دانلود و آن را تفسیر میکند تا برای کاربر یک نسخه از صفحه وب ایجاد نماید.
البته در این توضیح سادهسازی شده، یکسری از جنبههای صفحات وب امروزی نادیده گرفته شدند. برای مثال صفحات وب امروزی معمولاً پویا هستند. بنابراین برای همه بازدیدکنندگان وبسایت یک کد HTML ثابت و ایستا نمایش داده نشده و این کد به صورت پویا و زنده و بر اساس اطلاعات موجود در پایگاه داده سرور، هنگام ارایه درخواست دسترسی توسط مرورگر ساخته میشود. صفحاتی که توسط مرورگر از سرور دریافت میشوند معمولاً بستگی به اطلاعاتی دارند که در درخواست مرورگر ارسال میگردند. این اطلاعات ممکن است به صورت پارامتر در URL مورد استفاده برای دسترسی به وبسایت درج شوند. وبسایتها همچنین نه تنها شامل کدهای HTML و CSS که نحوه نمایش و تحلیل متون و گرافیکها را نمایش میدهند بلکه شامل کدهای اجرایی هم هستند. این کدهای اجرایی به زبانهای اسکریپت نویسی و اغلب جاوا اسکریپت نوشته میشوند. کارشناسان امنیتی معتقدند که ترکیب دادهها، فایلهای نمایشی و کدهای اجرایی به این روش از جمله عوامل اصلی تهدید امنیت وب هستند.
پس از نوشتن این نشانی در نوار آدرس مرورگر، نتایج جستجوی عبارت CSO Online در گوگل را مشاهده میکنید به گونهای که ظاهراً عبارت CSO Online را در نوار جستجوی مرورگر یا صفحه اصلی وبسایت گوگل درج کرده باشید. همچنین مشاهده میکنید که این عبارت در بخشهای مختلف صفحه از جمله نوار جستجوی بالای صفحه نشان داده میشود.
در اینجا ()doEvil به صورت فرضی به جای یک تابع مخرب قرار گرفته است. در این حالت، گوگل باید به جای نمایش عبارت CSO Online در صفحه حاصل از درج این نشانی، کدهای مخرب ذکر شده را در پردازش صفحه استفاده کند. به این ترتیب این اسکریپت مخرب در مرورگر شما ایجاد شده و پیامدهای ناخوشایندی به همراه خواهد داشت. البته گوگل با استخدام کارشناسان حرفهای امنیت وب و جهت پیشگیری از وقوع چنین حملاتی تدابیر امنیتی خاصی را پیادهسازی کرده ولی همه وبسایتها چنین نیروهایی را در اختیار ندارند. بنابراین گاهی اوقات این حملات با موفقیت اجرا میشوند.
حملات XSS
انواع حملات XSS شامل حملات منعکس شده، حملات مبتنی بر DOM، حملات ذخیره شده هستند. در ادامه این حملات را مورد بررسی قرار میدهیم.
حملات منعکس شده: حملهای که پیش از این توضیح دادیم، حمله منعکس شده یا غیرپایدار نام دارد. در این حملات معمولاً کد جاوا اسکریپت مخرب از مرورگر قربانی به سمت گوگل ارسال و سپس دوباره به شکل اجرایی منعکس شده و به صورت همیشگی و پایدار بر روی سرورهای گوگل ذخیره نمیشود. چنین حملاتی معمولاً یک کلاهبرداری فیشینگ محسوب میشوند. در این حملات لینک مخرب از طریق ایمیل یا پیامک برای قربانی ارسال میشود.
حملات مبتنی بر DOM: این حملات نوع خاصی از حملات منعکس شده هستند و نامگذاری آنها بر اساس مدل شی سند (DOM) که یک API استاندارد میباشد صورت گرفته است. این API شیوه ساختن صفحات وب از روی کدهای HTML یا جاوااسکریپت را مشخص میکند. حملات مبتنی بر DOM معمولاً مشابه حملات منعکس شده هستند که پیش از این درباره آنها صحبت کردیم. البته در این حملات کدهای مخرب برای سرور ارسال نمیشوند بلکه در قالب پارامتر به یک تابع جاوا اسکریپت که در خود مرورگر اجرا میگردد ارسال میشوند در نتیجه سازوکارهای دفاعی سمت سرور قادر به حفاظت از کاربران نیستند.
حملات ذخیره شده: این حملات که آخرین نوع حملات XSS هستند اگرچه ظاهراً ساده میباشند ولی میتوانند مخاطرات امنیتی جدی را ایجاد کنند. در حمله ذخیره شده، مهاجم میتواند از امکانات تعاملی وبسایت استفاده نموده و کدهای مخربی را بر روی سرور وب ذخیره کند. در یکی از نمونههای رایج این حمله، مهاجم یک نظر که حاوی کدهای مخرب جاوا اسکریپت است را برای یک مطلب وبلاگی درج میکند. به این ترتیب دفعه بعد که این صفحه بارگذاری شود، کدهای مخرب درج شده در دیدگاه مدنظر اجرا میگردند.
آسیبپذیری XSS
اگر یک برنامه کاربردی تحت وب ورودیهایی را که از کاربر دریافت میکند بررسی نکرده و کدهای مخرب موجود در آنها را تشخیص ندهد و سپس از این ورودیها برای پردازش یک صفحه وب یا اجرای عملیات دیگر استفاده کند، در برابر حملات XSS آسیبپذیر خواهد بود.
مبحث «سیاست منشأ یکسان» از جمله جنبههای مهم امنیت وب است که بر اساس آن اسکریپتی که بر روی یک صفحه اجرا میشود فقط در صورتی میتواند به دادههای موجود در صفحه دیگر دسترسی یابد که هر دو صفحه منشأ یکسانی داشته باشند (این منشأ به صورت ترکیبی از یک طرح URL، نام میزبان و شماره پورت تعریف میشود). اگر کدهای مخرب جاوا اسکریپت بتوانند در حین دسترسی قربانی به یک وبسایت اجرا شوند، مرورگر به این کدها مجوز دسترسی به دادههای صفحات دیگری که منشأ یکسانی با صفحه آسیبپذیر دارند، میدهد. چنین کد جاوا اسکریپتی میتواند به کوکیها و سایر اطلاعات نشست جاری دسترسی پیدا کند که همین دسترسیها برای نفوذ به حسابهای کاربری کافی هستند.
پیلودهای XSS
در رابطه با بدافزارها، پی لود به کدهای اجرایی گفته میشود که کارهای دلخواه مهاجمان را انجام میدهند. در حمله XSS، پی لود کد اسکریپتی است که مهاجم موفق شده مرورگر قربانی را تشویق به اجرای آن کند.
مخزن payloadbox در گیتهاب شامل فهرستی از پی لودهای XSS نمونه است. اگر با جاوا اسکریپت آشنایی داشته باشید میتوانید با بررسی این کدها با طرز کار مهاجمان XSS آشنا شوید اما حملات XSS بسیار فراتر از درج کردن یک پی لود در یک URL هستند. در واقع مهاجم باید برای اجرای طرح خودش با طرز کار و آسیب پذیریهای صفحهای که به دنبال نفوذ به آن است، آشنا باشد.
پیشگیری و حفاظت در برابر حملات XSS
اگر مدیر یا طراح یک برنامه کاربردی تحت وب یا یک سایت تعاملی هستید، مهمترین تکنیکهایی که میتوانید برای مقابله با حملات تزریق اسکریپت از طریق سایت اجرا کنید، به این ترتیب هستند:
- پاکسازی ورودیها: راهکار طبیعی و اصلی برای پیشگیری از ارسال کدهای مخرب به عنوان ورودی، عدم پذیرش اسکریپتها به عنوان ورودی است. ممکن است شما هم با روشهای خاصی ورودیها را فیلتر کنید اما انجام این کار در عمل خیلی ساده نیست چون بعضی از کدهای اجرایی که با دقت و مهارت طراحی شدهاند قابلیت عبور از فیلترها را دارند. یکی از روشهای مقابله با این مسئله استفاده از فهرست سفید به جای فهرست سیاه است مثلاً به جای اینکه سعی کنید همه کدهای مخرب را فیلتر کنید، برنامه کاربردی را به صورتی بنویسید که دادهها را فقط در قالبهای مشخص شده (مثل شماره تلفن، آدرس ایمیل و غیره) دریافت کند.
- رد کردن خروجی: در این روش از جهتی متفاوت به این مسئله رسیدگی میشود. اگر یک برنامه کاربردی تحت وب دادههای وارد شده توسط کاربر را به یک صفحه وب ارسال میکند، این دادهها باید به خوبی فیلتر شوند تا در صفحه وب مورد نظر تبدیل به کد اجرایی نشوند. اگر کاربر کد تگهای HTML را به عنوان ورودی وارد میکند، برنامه کاربردی شما باید از کاراکترهای رد کردن (escape) استفاده کند طوری که این تگها در صفحه خروجی ایجاد شده به صورت متن نمایان شوند و در کدهای HTML صفحه ادغام نشوند.
- استاندارد سیاست امنیت محتوا (CSP): CSP هم از روش فهرست سفید استفاده میکند و فقط متنها را به عنوان ورودی قبول میکند نه کدهای قابل اجرا. در واقع برنامه کاربردی تحت وب شما هرگز نباید هیچ کدی را اجرا کند مگر اینکه شما آن را مجاز اعلام کرده باشید.
آزمون XSS
آزمون شناسایی آسیبپذیریهای XSS یکی از مهمترین تدابیر برای حفظ امنیت برنامههای کاربردی تحت وب است که پروژه OWASP راهنمای جامعی برای انجام این کار دارد. همچنین این پروژه منبعی پر از کدهای حملات XSS دارد که میتوانند از فیلترهای دفاعی XSS خاصی عبور کنند. این منابع برای اجرای تست نفوذ بسیار مفید هستند.
مقایسه XSS و CSRF
جعل درخواست از طریق وبسایت (CSRF) از جمله حملاتی است که مثل XSS مرورگر کاربر را هدف میگیرد. تفاوت اصلی این دو حمله از این جهت است که CSRF از نشست احراز هویت شده کاربر سوءاستفاده میکند (برای مثال وقتی کاربر وارد حساب بانکی خودش شده باشد) اما برای اجرای XSS نیازی به یک نشست احراز هویت شده وجود ندارد.
بسته به اینکه بانک شما توکنهای نشست را چگونه مدیریت میکند و از چه مرورگری استفاده میکنید، ممکن است دچار مشکل شوید. XSS مسیر حمله خطرناکتری است اما دفاع و حفاظت در برابر هر دو حمله اهمیت زیادی دارد.
حملات مشهور و جدید XSS
یکی از اولین و مشهورترین حملات تزریق اسکریپت از طریق سایت در سال ۲۰۰۵ صورت گرفت زمانی که یکی از کاربران مای اسپیس به نام Samy Kamkar متوجه شد که میتواند در حساب کاربری خودش یک کد جاوا اسکریپت تزریق کند تا هر شخصی که از صفحه او بازدید میکند، به صورت خودکار به فهرست دوستان او اضافه شود – همچنین او میتوانست با کپی کردن این کد در پروفایل این دوستان جدید کاری کند که بازدیدکنندگان صفحه او هم جزء دوستان خودش شوند. به این ترتیب این کاربر توانست ظرف ۲۴ ساعت بیش از یک میلیون کاربر را به فهرست دوستان خودش اضافه کند تا حدی که مای اسپیس مجبور شد برای حل این مشکل سایت خودش را برای مدتی از دسترس خارج کند.
این کرم که به اسم Samy شناخته میشود به طور کلی بی ضرر بود اما بعد از آن حملات مخرب دیگری هم اجرا شدند:
- Ebay سالها آسیب پذیریهای XSS داشت که هکرها با استفاده از آن میتوانستند اعتبارنامههای کاربری را سرقت کنند.
- در سال ۲۰۱۹ مهاجمان XSS توانستند از بازیکنان بازی فورتنایت پول مجازی سرقت کنند.
- در سال ۲۰۱۸ گروه هکر Magecart توانست با اجرای حمله XSS بر ضد شرکت هواپیمایی بریتانیا، هویت صدها هزار کاربر را سرقت کند.
تزریق اسکریپت از طریق وبسایت همچنان یک تهدید مهم محسوب میشود. از سال ۲۰۲۱ آسیب پذیریهای XSS مختلفی در پلتفرم ایمیل Zimbra، وردپرس و پلتفرم مدیریت فناوری اطلاعات متن باز Nagios شناسایی شدند. بعلاوه هکرها معمولاً فقط از یک تکنیک استفاده نمیکنند و مثلاً تزریق اسکریپت از طریق سایت بخشی از یکی از حملات پیچیده جدید است که با استفاده از گواهینامههای TLS به نام ALPACA اجرا میشوند. بنابراین برای پیشگیری از دردسرهای مهم و بزرگ باید مطمئن شوید که آسیب پذیری XSS در سایت شما وجود ندارد.
منبع: فراست