انواع حملات XSS یا اسکریپت نویسی فراوبگاهی در برنامه های کاربردی وب
اسکریپت چیست؟ قبل از شروع آشنایی با حملات XSS بگذارید تا با مفهوم اسکریپت آشنا شویم. اسکریپت یا Script در مبانی کامپیوتری و برنامهنویسی به دنبالهای از دستورالعملهای نوشتاری و کدها گفته میشود که توسط یک نرمافزار خواندهشده و سپس تفسیر و در انتها اجرا میگردد.
زبانهای اسکریپت نویسی در اصل نمونههای کوچکی از زبانهای مادرشان بهحساب میآیند.
اسکریپتها برنامههای کوچکی هستند که میتوان توسط آنها برخی امور و وظایف تکرارشونده و پراستفاده را بهصورت خودکار انجام داد.
درواقع اسکریپت نویسی به کدهایی گفته میشود که غالباً تفسیر میشوند و نیاز به کامپایل ندارند؛ یعنی درواقع کامپایل آنها در زمان اجرا انجام میگردد.
انواع حملات XSS
در زبانهای برنامهنویسی مانند C، هنگامیکه بخواهیم خروجی یک برنامه را ببینیم، باید ابتدا برنامه را کامپایل نماییم و بعد از نداشتن مشکل در برنامه خروجی نمایش داده میشود؛ ولی در زبانهای اسکریپت نویسی وقتی کدها را اجرا مینماییم، از همان خط ابتدایی برنامه شروع به اجرا میکند و هرکجا اشتباه یا خطایی در اسکریپت نویسی رخداده باشد ERROR میدهد و ادامه دستورات را اجرا مینماید.
ازجمله زبانهای اسکریپت نویسی میتوان به Python، Java Scripy، Perl و PHP اشاره نمود.
اسکریپت نویسی فرا وبگاهی یا XSS
زمانی که یک سایت شروع به طراحی میشود برنامهنویس بادانش خود شروع به نوشتن کدهای HTML برای ساختن ساختار وبسایت مینماید و بعدازآن بهوسیلهی CSS، نحوهی چیدمان و به نمایش درآمدن عناصر و المانهای مختلف زبان HTML را طراحی مینماید و در انتها بهوسیلهی زبان Jquery که یک کتابخانه سبک و سریع از جاوا اسکریپت است برای رسیدگی به رویدادها، پیمایش اسناد HTML، متحرکسازی و تعاملات AJAX را بهمنظور توسعه وبسایت، فراهم میآورد.
زمانی که از حملات اسکریپت نویسی فرا وبگاهی یا همان حملات Cross-Site scripting که در اختصار به آن XSS گفته میشود صحبت میکنیم، باید توجه داشت که حملات XSS را با الگوهای آبشاری یا همان Cascading Style Sheet که در اختصار CSS گفته میشود اشتباه گرفته نشود.
شاید معمولترین و مباحثه انگیزهترین آسیبپذیری امنیتی برنامههای کاربردی وب، اسکریپت نویسی فرا وبگاهی یا همان حملات XSS باشد.
ماهیت این حمله به این صورت است که مهاجم اسکریپت مخرب خود را به نحوی در برنامه کاربردی وب تزریق میکند. قربانی اصلی این نوع حملات کاربرانی هستند که از برنامه کاربردی تحت وب و یا وبسایت در حال استفاده هستند.
نفوذ گر به این صورت میتواند اسکریپتی را توسط کاربر سایت فعال کند که ممکن است این اسکریپت راه نفوذی را برای هکر باز کند.
امروزه حملات XSS در هر برنامه کاربردی تحت وبی که ورودیهای کاربر را در خروجی، بدون اعتبار سنجی یا کدگذاری استفاده میکند، وجود دارد.
هکر با استفاده از آسیبپذیری اسکریپت نویسی فرا وبگاهی یا XSS، در جهت ارسال اسکریپتهای مخرب خود به سمت قربانی استفاده مینماید.
مرورگر کاربر نهایی، هیچ راهی برای تشخیص نامطمئن بودن اسکریپت ندارد و آن را اجرا خواهد نمود. ازآنجاییکه مرورگر قربانی فرض را بر این میگیرد که اسکریپتها از منبع مورد اعتماد ارسالشده است، مرورگر به آن اسکریپت مخرب اجازهی دسترسی
به تمام دادههایی که دسترسی به آن توسط مرورگر برای یک سایت امکانپذیر است را میدهد. این اطلاعات حساس میتواند شامل کوکیها، توکن های مربوط به یک نشست یا جلسه و … باشد.
بهوسیله این اسکریپتهای مخرب میتوان یک صفحه سند HTML را مجدداً بازنویسی کرد.
چه زمانی حملات- XSS رخ میدهد؟
حملات XSS بهصورت کلی در دو حال زیر رخ میدهد:
زمانی که دادهها از مبدأ نامطمئن به برنامه کاربردی وب ارسالشده
و یا در بیشتر موارد وارد یک درخواست (Request) وب میشود.
زمانی که داده در محتوای پویا و دینامیک وجود دارد و بدون اعتبار سنجیهای لازم به سمت کاربر ارسال میگردد.
در اکثر موارد، محتوای مخربی که به سمت مرورگر قربانی ارسال میشود،
در شکل و قالب جاوا اسکریپت است؛ اما شاید شامل فایلهای HTML
یا فایلهای فلش و یا هر نوع کد قابلاجرا توسط مرورگر و یا اسکریپتهای سمت گیرنده، نیز باشد.
حملات XSS باعث جابهجا شدن دادههای حساس و خصوصی کاربر مثل کوکیهای یا سایر اطلاعات نشست کاربر به هکر میگردد. منتقل کردن یا Redirect قربانی به صفحهای مخرب که توسط هکر کنترل میشود، نیز یکی از آسیبپذیریهای جدی حملات XSS است. در تصویر زیر یک نمونه از حملات تزریق XSS نمایش دادهشده است.
روش حملات اسکریپت نویسی فراوبگاهی
انواع حملات – XSS یا حملات اسکریپت نویسی فرا وبگاهی
حملات XSS بهصورت کلی به دو دسته حملات XSS ذخیرهشده یا Stored و حملات XSS بازتابی یا Reflected تقسیمبندی میشوند؛ اما یک نوع سومی از این نوع حملات نیز وجود دارد که به آن DOM Base XSS گفته میشود.
اینجا این نکته حائز اهمیت است که بدانیم درگذشته نهچندان دور حملات XSS به سه دسته تقسیم میشدهاند. این سه دسته عبارت بودند از:
حملهی Stored XSS یا Persistent و یا Type I
حملهی Reflected XSS یا Non-Persistent و یا Type II
حملهی DOM Based XSS یا Type-0
اما با توجه به حملات ترکیبی XSS، محققین امنیتی از سال ۲۰۱۲ حملات XSS را در دو دسته کلی ادغام کردند. این دو دسته از حملات بهصورت زیر نامگذاری شدهاند.
حملات Server XSS
حملات Client XSS
در این دستهبندی جدید، هر دسته شامل حملات XSS ذخیرهشده و XSS بازتابی میباشند؛ و همچنین حملات DOM Based XSS زیرمجموعهی حملات Client XSS قرار گرفت. با این دستهبندی، کل حملات را میتوان در یک ماتریس ۲ در ۲ بهصورت زیر خلاصه کرد.
انواع حملات XSS یا اسکریپت
جدیدترین دسته بندی XSS
۱-حملهی XSS ذخیرهشده یا ماندگار یا XSS Stored/Persistent Attack
در این نوع از حملات یک اسکریپت مخرب، بهصورت پایدار بر روی یک سرور ذخیره میگردد. ممکن است این اسکریپت مخرب بر روی پایگاه داده، فروم ها، فیلدهای جستوجو و یا قسمت نظرات قرارگرفته باشد.
زمانی که قربانی درخواست یا Request ی را به سمت سرور مخرب ارسال میکند، سرور پاسخ را از قسمت ذخیرهشده به قربانی تحویل میدهد و سپس اسکریپت مخرب بر روی مرورگر قربانی اجرا میگردد و قربانی طعمهی حملاتی از این نوع میشود. گاهی این نوع حملات را با عنوانهای حملات پایدار، Persistent و یا Type-I نیز معرفی مینمایند.
در اینگونه از حملات، هکر اسکریپتهای مخرب خود را بر روی سروری ذخیره کرده و قربانیان را بهوسیلهی تکنیکهای مهندسی اجتماعی به وبسایتهای مخرب ارجاع میدهد و هکر میتواند کنترل سیستمعامل قربانی را در دست بگیرد.
فروم های کاربر (User Forum)، نشریهها و دیگر مکانهایی که کاربر میتواند ورودی نمایش دادهشده را برای دیگر کاربران ذخیره نماید، بهصورت ایده آل مکانهایی برای این مجموعه از حملات هستند. این حمله بهعنوان یکی از حملات خطرناک در سطح وب شناخته میشود.
۲- حملهی XSS بازتابی یا غیر ماندگار یا XSS Reflected/Non-Persistent Attack
حملات بازتابی XSS بروی یک ارسال کاربر و همچنین یک درخواست گنجاندهشده با حمله XSS تکیه میکند، بنابراین بهاحتمالزیاد برخی از انواع مؤلفهها و تکنیکهای مهندسی اجتماعی در حمله وجود خواهند داشت.
درواقع داشتن یک حمله مهندسی اجتماعی و یک حملهی XSS با یکدیگر، موفقیت را برای حملات هکرها افزایش میدهد، زیرا شما میتوانید بامهارت، یک URL که قسمتی از یک وبسایت واقعی (یک وبسایت شناختهشده و مورد اعتماد کاربر است) است و از XSS استفاده مینماید را برای فریب دیگران بکار ببرید، برای مثال، زمانی که کاربر را بهسوی یک صفحه مخرب تغییر جهت (Redirect) دهیم، حملات XSS به ما اجازه میدهد که اسکریپت مخرب خود را ایجاد و اجرا نماییم.
حملات بازتابی XSS درزمانی رخ میدهد که اسکریپتهای تزریقشده توسط وب سرور بازتاب داده شود. این بازتاب یا برگرداندن جواب توسط وب سرور ممکن است در قالب پیامهای خطا و یا نتایج جستوجو و یا هر پاسخ دیگری باشد. پاسخی که وب سرور بازتاب میدهد، شامل قسمتی و یا تمام ورودی ارسالشده به سمت سرور، در زمان ارسال درخواست است.
زمانی که هکر، کاربر یا قربانی را بهصورت مهندسی اجتماعی فریب دهد و روی لینک آلوده کلیک کند میتوان گفت که این حمله با موفقیت صورت گرفته است و دادهها به سمت هکر ارسال میشود و یا ممکن است که کاربر به سایت آلوده دیگری ارجاع داده شود. حملهی XSS از نوع بازتابی بانامهای ناپایدار یا Persistent-Non و Type-II نیز شناخته میشود.
۳- حملهی- XSS مبتنی بر مدل شی سند XSS Document Object Modal(DOM) Base Attack
حملات Server XSS
علاوه بر دو نوع حملهی XSS که در بالا ذکر کردیم، نوع سومی از این حملات وجود دارد که با عنوان حملات اسکریپت نویسی مبتنی بر مدل شی سند یا همان XSS DOM Base Attack شناخته میشود؛ و در سال ۲۰۰۵ توسط Klein Amit معرفی شد.
اسکریپت نویسی فرا وبگاهی مبتنی بر مدل شی سند یا DOM XSS، یکگونه حملهی منحصربهفرد از آسیبپذیری است که شباهت زیادی به حملات XSS بازتابی دارد ولی با این تفاوت که در حملات DOM XSS دیگر نیاز به ارسال قربانی به لینک وبسایت آسیبپذیر دارای اسکریپت مخرب نیست.
آسیبپذیری مبتنی بر مدل شی سند یا DOM XSS در اصل اکسپلویتکردن و بهرهبرداری از ضعف امنیتی در تصدیق ورودیهایی است که توسط کاربران و کلاینتها به وجود میآید.
بهعبارتدیگر، آسیبپذیری مبتنی بر مدل شی سند یا DOM XSS نتیجه یک ضعف امنیتی درون یک اسکریپت سمت سرور نیست، بلکه نتیجه کنترل نادرست دادههای ارائهشده توسط کاربر در سمت کلاینت است؛ مانند دیگر انواع ضعفهای امنیتی اسکریپت نویسی فرا وبگاهی، آسیبپذیری مبتنی بر مدل شی سند یا DOM XSS میتواند برای دزدیدن اطلاعات حساس یا دزدیدن حسابهای کاربری استفاده شود. بههرحال، این موضوع ضروری است که بدانید، این نوع ضعف امنیتی متکی به جاوا اسکریپت و استفاده ناامن از دادههای بهدستآمده از ساختار است.
نتیجه حملات XSS
در انواع حملات از نوعهای Based DOM,Reflected,Stored نتیجه کار این است که کاربر موردحمله قرارگرفته و در این نوع حملات نتیجه یکسانی به دست میآید ولی تفاوت اصلی این نوع حملات در نحوهی رسیدن هکر به سرور است.
یکی تفکرات رایج و اشتباه این است که سایتهای خبری و سایتهایی که فقط حالت خواندنی هستند، در برابر حملات XSS بازتابی در اماناند. کلاینتها یا همان کاربران نهایی در این نوع حملات دچار مشکلاتی خواهند شد که از آن جمله مشکلات میتوان به اذیت و آزارهای کوچک تا مشکلات کاملاً حاد و جدی در حسابهای بانکی و کاربری نام برد.
بدترین حالت از حملات XSS به سرقت رفتن و افشای کوکیهای نشست کاربر است که هکر میتواند کنترل حساب کاربر و اطلاعات حساس کاربر را به دست آورد. ازجمله خسارتهای خطرناک حملات XSS میتوان به افشای فایلها و اطلاعات کاربر، نصب برنامهها مخرب ازجمله تروجان ها و BackDoor ها، تغییر مسیر یا Redirect کردن کاربر به سایتها و صفحات دیگر برای حملات فیشینگ و مهندسی اجتماعی نام برد.
نوشته انواع حملات XSS یا اسکریپت نویسی فراوبگاهی در برنامه های کاربردی وب اولین بار در هک – امنیت سایت – طراحی سایت – سئو سایت. پدیدار شد.
حملات Server XSS