یکی از رایج ترین تهدیدات امنیت سایبری، حملات Cross-site Scripting یا XSS می باشد که در سال 2019 با استفاده از این روش نزدیک به 75 درصد از شرکت های بزرگ دنیا مورد حمله قرار گرفته اند. تقریباً 40 درصد از کل حملات در آن سال، برای هدف قرار دادن نقص های XSS انجام شده است.
Cross-site scripting سایت هایی را که توسط شرکت های بزرگ، مانند eBay، Google، Facebook و Twitter اداره میشوند تحت تأثیر قرار داده است. اما این حملات یک تهدید جدید به شمار نمی روند. در واقع، حملات XSS تقریباً از ابتدای ظهور وب وجود داشته اند.
در این مقاله موارد زیر بررسی خواهد شد:
- XSS چیست؟
- نحوه عملکرد آن چگونه می باشد؟
- چرا خطرناک است؟
- انواع حملات XSS کدامند؟
- روش های جلوگیری از حملات XSS چیست؟
Cross-site scripting یا XSS چیست؟
تصویر(1)
Cross-site Scripting یا XSS به حملاتی گفته می شود که در آن اسکریپت های مخرب، به وب سایت های بزرگ و معتبر تزریق می شوند. حملات Cross-site Scripting در HTML، Flash، ActiveX و CSS امکان پذیر هستند. با این حال، چون بیشتر کاربران اینترنت از جاوا اسکریپت استفاده می کنند، اکثر هکرها بر روی این گزینه تمرکز دارند.
جاوا اسکریپت یک زبان برنامه نویسی است که به شما امکان می دهد ویژگی های پیچیده ای را در وب سایت خود پیاده سازی کنید. اکثر وب سایت های بزرگ دنیای وب با استفاده از این زبان برنامه نویسی ساخته شده اند.
جاوا اسکریپت بسیار محبوب است زیرا به شما امکان می دهد تقریباً هر کاری را در یک صفحه وب انجام دهید، در مقابل مجرمان سایبری می توانند از جاوا اسکریپت برای ورود به backend سایت و تزریق اسکریپت های مخرب استفاده کنند.
حملات Cross-site Scripting یا XSS چگونه عمل می کنند؟
هکرها، حملات XSS را در وب سایت های وردپرس با دو روش انجام می دهند:
- از اطلاعات ورودی کاربر سوء استفاده می کنند.
- دور زدن سیاست های same-origin
در ادامه هر دو روش برای درک بیشتر و بهتر Cross-site Scripting یا XSS بررسی خواهد شد.
تغییر اطلاعات ورودی کاربر
مرسوم ترین روشی که مجرمان سایبری از طریق آن حملات XSS را انجام می دهند، سوء استفاده از اطلاعات ورودی کاربر است. اکثر وب سایت های وردپرس دارای فیلدهای ورودی، مانند نوارهای جستجو، فرم نظرات (کامنت ها)، صفحات ورود و فرم های تماس هستند. فیلد ورودی معمولاً توسط افزونه های وردپرس مبتنی بر جاوا اسکریپت یا قالب مورد استفاده در وب سایت، ایجاد می شود.
افزونه ها و قالب های وردپرس 100٪ ایمن نیستند و در واقع بسیاری از آنها نواقص امنیتی XSS دارند، یعنی مجرمان سایبری می توانند از نواقص در فیلدهای ورودی برای اجرای فعالیت های مخرب خود استفاده کنند.
در حالت کلی، نوار جستجوی سایت یا هر فیلد دیگر، باید فقط متن ساده را به عنوان ورودی بپذیرد. با این حال، وردپرس یک نقص امنیتی مرتبط با اطلاعات ورودی کاربر دارد که به هکرها اجازه میدهد یک کد اجرایی را در فیلدها وارد کرده و آن را به پایگاه داده ارسال کنند.
دور زدن سیاست ها یا قوانین Same Origin
سیاست های same-origin، دریافت اطلاعات از سایر صفحات وب را محدود می کند. بر اساس این سیاست، مرورگرهای وب به اسکریپتهای موجود در صفحه اول وب سایت تنها در صورتی اجازه میدهند به دادههای صفحه دوم دسترسی داشته باشند که از منشا یکسانی (مربوط به یک وب سایت) باشند. این سیاست باعث می شود تا هیچ درخواستی بین دو سایت متفاوت (بین سایتی) تبادل نشود.
به طور مثال این خط مشی بیان میکند که اگر صفحه میهن وب هاست و درگاه پرداخت خود را در یک مرورگر باز کنید، این دو وبسایت نمیتوانند اطلاعات را با یکدیگر به اشتراک بگذارند. با این حال، اگر چندین تب میهن وب هاست (که منشا یکسانی دارند و مربوط به یک سایت می باشند) را باز کنید، می توانند اسکریپت و سایر داده ها را بین یکدیگر مبادله کنند.
تصویر(2)
با توجه به سیاست same-origin و سایر اقدامات امنیتی انجام شده برای جلوگیری از درخواستهای بین سایتی، مجرمان سایبری(هکرها) با استفاده از session کوکی ها، راهی برای دور زدن آن پیدا کردهاند. قابلیت مذکور به این شکل عمل می نماید که هر بار مرورگر را باز میکنید، یک session کوکی ایجاد میکند تا به عنوان یک کاربر وبسایت تایید و به شما در جابجایی بین صفحات کمک کند.
session کوکی ها، اطلاعات ورود به سیستم (از جمله برای سایت وردپرس شما)، اطلاعات کارت اعتباری، جزئیات حمل و نقل و سایر دادههای حساس را ذخیره میکنند. به طور مثال فرض کنید، می خواهید به حساب بانکی آنلاین خود وارد شوید. هنگامی که وب سایت را باز می کنید، یک session کوکی شروع به ذخیره شدن می کند. اگر session کوکی نباشد، باید هر بار که میخواهید به صفحه دیگری بروید، به حساب بانکی خود وارد شوید.
به طور کلی وجود نقص امنیتی در مرورگر کاربر غیر عادی نیست و در صورت وجود آن، هکرها از کدی که به فیلد های ورودی کاربر تزریق کرده اند برای سرقت session کوکی ها استفاده می کنند. به این ترتیب، هکرها می توانند کوکی های تمام وب سایت های باز شده در مرورگر کاربر را سرقت کنند. سپس، میتوانند از این کوکیها برای ورود به حساب کاربران، جعل هویت و سرقت دادههای مالی استفاده نمایند.
چرا Cross-site Scripting خطرناک است؟
Cross-site Scripting یکی از رایج ترین نقص های امنیتی خطرناک وردپرس می باشد. حملات XSS بسیار رایج هستند و بر خلاف سایر نقص های امنیتی، رسیدگی به آنها بسیار پیچیده است. حتی زمانی که از یک سیستم امنیتی داخلی استفاده می کنید، امکان ارتکاب اشتباهاتی که موجبات استفاده از Cross-site Scripting را فراهم کند وجود دارد. تنها یک اشتباه در HTML یا جاوا اسکریپت، می تواند وب سایت شما را در برابر حملات Cross-site Scripting آسیب پذیر کند.
وقتی هکرها راهی برای سوء استفاده از نقص های XSS پیدا کنند، میتوانند اطلاعات حساب بانکی و دادههای مالی را به سرقت برده و از طریق فیشینگ کلاهبرداری نمایند. همچنین می توانند کرم های کامپیوتری را در وب پخش کنند یا از راه دور به رایانه کاربران دسترسی یابند. علاوه بر این، حملات XSS به هکرها اجازه می دهد تا کارهای زیر را انجام دهند:
- هک کردن حساب های کاربری
- انتشار بدافزار
- کنترل کامپیوتر کاربر از راه دور
- اسکن و سو استفاده از برنامه های اینترانت
حملات XSS معمولاً به اندازه تزریق SQL خطرناک نیستند. با این حال، وقتی با مهندسی اجتماعی ترکیب میشوند، به مجرمان سایبری اجازه میدهند تا حملات پیشرفته و بسیار خطرناکی از جمله تزریق تروجانها، keylogging، فیشینگ، سرقت هویت و جعل درخواستهای متقابل سایت را انجام دهند.
برای مبارزه با حملات XSS، شرکتهای بزرگ فناوری اطلاعات، برنامه های ویژه رفع باگ (همراه با دادن جایزه) را ارائه میکنند. در این برنامهها که بسیاری از سازمانها آن را پیادهسازی می کنند به کاربرانی که نقص های امنیتی XSS را در اسکریپتها گزارش میکنند، امتیازاتی داده می شود. به این ترتیب، شرکت ها با شناسایی باگ های خود توسط سایرین، هم امنیت سایبری خود را افزایش می دهند و هم در هزینه ها صرفه جویی می کنند.
انواع حملات XSS
سه نوع اصلی از حملات Cross-site Scripting وجود دارد:
- XSS ذخیره شده (Stored cross-site scripting)
- XSS منعکس شده (Reflected)
- XSS مبتنی بر (DOM (Document Object Model
در ادامه هر کدام از انواع حملات XSS بررسی خواهد شد.
Stored cross-site scripting یا XSS ذخیره شده
یک نقص امنیتی XSS ذخیره شده (معروف به نوع I)، به همراه ورودی های کاربر نظیر فیلد نظرات (کامنت)، لاگ بازدیدکنندگان یا سایر ارجاعات به سرور، در دیتابیس ذخیره می شود. سپس کاربر مورد هدف، دادههای ذخیرهشده (که برای ارائه به مرورگر ایمن نشدهاند) را از برنامه تحت وب دریافت می کند. به این ترتیب، هنگامی که هکر حمله را انجام می دهد، بار ترافیکی برای فیلتر XSS مرورگر قابل مشاهده نیست و کاربر در صورت بازدید از صفحه، می تواند به صورت تصادفی نقص امنیتی را فعال کند.
Reflected cross-site scripting یا XSS منعکس شده
نقص امنیتی XSS منعکس شده (معروف به نوع II)، یعنی یک اپلیکیشن اطلاعات ورودی کاربر را در زمان جستجو، بلافاصله با پیغام خطا پاسخ می دهد. در این حالت، دادههای ورودی بدون ذخیره شدن برگشت داده شده و به هکرها اجازه میدهد تا اسکریپتهای مخرب XSS را به جای آن تزریق کنند. برخلاف XSS ذخیره شده که هدف آن کاربران وب سایت هستند، XSS منعکس شده، خود وب سایت را هدف قرار می دهد.
DOM-based XSS یا XSS مبتنی بر (DOM (Document Object Model
این نوع حمله (معروف به نوع 0) در DOM، به عنوان بخشی از کدهای HTML انجام می شود. منبعی که کد مخرب در آن خوانده می شود می تواند یک URL یا یک عنصر خاص از HTML باشد.
چگونه می توان از حملات Cross-site Scripting جلوگیری نمود؟
تصویر(3)
راه های مختلفی وجود دارد که می توانید از وب سایت وردپرس خود در برابر حملات XSS محافظت کنید. اگر دانش کد نویسی دارید می توانید برای امن کردن ورودی های کاربر، از کد استفاده نمایید در غیر اینصورت، می توانید برای جلوگیری از حملات cross-site scripting دو روش زیر را مد نظر قرار دهید:
1. یک افزونه امنیتی نصب کنید
نصب یک افزونه امنیتی در وردپرس، اولین قدم به سوی امنیت کامل وب سایت وردپرسی است. هنگام انتخاب یک افزونه امنیتی، می توانید از چک لیست زیر به عنوان مرجع استفاده کنید تا مطمئن شوید که افزونه انتخابی شما دارای عملکرد مورد نیاز برای ایمن نگه داشتن وب سایت می باشد.
- افزونه به طور منظم وب سایت شما را برای بدافزار اسکن کند.
- افزونه ای که از فایروال ها برای مسدود کردن هرگونه ترافیکی که به نظر مخرب به نظر می رسد استفاده کند.
- افزونه قادر به اجرای اقدامات امنیتی وردپرس باشد.
- افزونه امکان مدیریت تمام به روز رسانی های وردپرس را به کاربر بدهد.
- افزونه از وب سایت وردپرس نسخه پشتیبان تهیه کند، بنابراین در صورت حمله، می توانید وب سایت خود را بازیابی کنید.
2. یک افزونه اختصاصی نصب کنید
نصب یک افزونه ضد XSS راه دیگری برای جلوگیری از cross-site scripting است. افزونه های Anti-XSS با مسدود کردن پارامترهایی که معمولاً در حملات cross-site scripting استفاده می شود، عمل میکنند. به عنوان مثال، این افزونهها میتوانند فیلدهای ورودی کاربر، مانند فرمهای درج دیدگاه وب سایت، فیلدهای ورود یا نوارهای جستجو را ایمن کنند.
نتیجه گیری
39٪ از تمام نواقص امنیتی وردپرس به مسائل cross-site scripting مرتبط است. شرکت ها میلیون ها دلار را برای مبارزه با حملات cross-site scripting هزینه می کنند. برای جلوگیری از حملات XSS که وب سایت شما را مورد هدف قرار می دهند، اطلاع از ماهیت cross-site scripting و اقدامات پیشگیرانه بسیار مهم است.
برای اینکه وب سایت خود را در برابر cross-site scripting در امان نگه دارید، باید فیلدهای ورودی خود را ایمن کنید. علاوه بر این، می توانید افزونه های امنیتی و اختصاصی ضد XSS را نصب نمایید که در ایمن نگه داشتن وب سایت وردپرس، به شما کمک می کنند.