حمله XSS یا Cross-Site Scripting چیست؟ + ویدئو

whats XSS

آیا تا به حال پیش آمده که در هنگام استفاده از برنامه‌های تحت وب، پیغام‌های عجیبی دریافت کنید؟ یا از شما دسترسی‌های نامعقولی خواسته شود؟ یکی از راه‌هایی که هکرها در فضای اینترنت سعی می‌کنند از طریق آن به سیستم شما نفوذ کنند و اطلاعات‌تان را سرقت کنند، جاوا اسکریپت است و ما در این مقاله قصد داریم در رابطه با حمله XSS یا Cross-Site Scripting، نحوه عملکرد و راه‌های جلوگیری از آن صحبت کنیم.

XSS چیست؟

Cross-site scripting که با نام XSS نیز شناخته می‌شود در حقیقت یک حفره امنیتی در فضای وب است که به مهاجم این اجازه را می‌دهد فعالیت‌های کاربرانی را که از برنامه‌های تحت وب ناامن استفاده می‌کنند، به خطر بیندازد. به این صورت که مهاجم این توانایی را پیدا می‌کند که سیاست‌ها و قوانین اجرا شده برای تفکیک وبسایت‌ها را دور بزند. مهاجم یا همان هکر با استفاده از این نقاط ضعف و حفره‌های امنیتی، خود را به عنوان کاربر یا به اصطلاح “کاربر قربانی” جای میزند و هر رفتاری که کاربر قادر به انجام آن است را می‌تواند تکرار کند و به تمام اطلاعات کاربر دسترسی داشته باشد. حال اگر کاربر قربانی شده به برنامه دسترسی‌های خاص و ویژه‌ای داده باشد، مهاجم ممکن است بتواند با استفاده از دسترسی‌های برنامه، کنترل تمام بخش‌های کاربردی برنامه و داده‌ها را به‌دست بگیرد.

xss or Cross-site Scripting

نحوه عملکرد XSS یا Cross-Site Scripting

Cross-Site Scripting از طریق دستکاری در یک وبسایت آسیب پذیر عمل می‌کند، به این صورت که وبسایت هدف با جاوا اسکریپت دستکاری شده به کاربر پاسخ می‌دهد. وقتی کد جاوا اسکریپت دستکاری شده در برنامه جستجوگر کاربر قربانی اجرا می‌شود، مهاجم قادر خواهد بود تا تمام کاربری برنامه تحت وب را برای کاربر به خطر بیندازد.

تشریح آسیب پذیری XSS

روش‌های مختلف حمله XSS

به طور کلی سه نوع حمله Cross-Site Scripting وجود دارد که عبارتند از:

Reflected XSS: انعکاس، در این نوع نفوذ اسکریپت دستکاری شده از همان HTTP فعلی ارسال می‌شود. ساده ترین نوع Cross-Site Scripting است و زمانی رخ می‌دهد که برنامه اطلاعات را از طریق درخواست HTTP دریافت می‌کند و این درخواست از راه ناامنی پاسخ داده می‌شود. برای درک بهتر آسیب پذیری از این راه نفوذ یک نمونه ساده آن را مثال می‌زنیم:

https://insecure-website.com/status?message=All+is+well

تا اینجای کار برنامه هیچ پردازش دیگری بر روی داده ها انجام نمی‌دهد، در نتیجه نفوذگر به سادگی حمله‌ای را به شکل زیر ترتیب می‌دهد.

https://insecure-website.com/status?message=

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

Stored XSS: ذخیره شده، در این نفوذ اسکریپت مخرب از پایگاه داده وبسایت ارسال می‌شود. این نوع با نام‌های Persistent و یا Second-Order XSS نیز شناخته می‌شود و زمانی رخ می‌دهد که برنامه از منبع نامطمئن داده دریافت می‌کند که این داده‌ها شامل پاسخ‌های بعدی HTTP به روش ناامن هستند.

داده‌های مورد نظر ممکن است از طریق درخواست‌های HTTP به برنامه ارسال شود؛ برای مثال، نظرات گذاشته شده در مقالات بلاگ، نام‌های مستعار کاربران در اتاق‌های گفتگو و یا حتی اطلاعات تماس در سفارشات یک مشتری می‌توانند از این قبیل داده‌ها باشند.

در موارد دیگر داده ممکن است از یک منبع ناامن دیگر آمده باشد؛ برای مثال، یک برنامه وبمیل که پیام دریافت شده‌ای را بر بستر پروتکل SMTP نمایش می‌دهد، یک برنامه فروشگاهی که پستی از رسانه‌های اجتماعی را نشان می‌دهد و یا نرم افزاری برای نظارت شبکه که بسته‌ای از داده‌ها را در ترافیک شبکه نمایش می‌دهد.

در اینجا یک نمونه از Stored XSS آورده شده است، برنامه پیام رسانی که به کاربر اجازه می‌دهد پیامی را برای مشاهده کاربران دیگر ثبت کند.

Hello, this is my message!

برنامه هیچ پردازش دیگری بر روی داده ها انجام نمی‌دهد و مهاجم به سادگی می‌تواند پیغامی به شکل زیر برای حمله به کاربران دیگر ارسال کند.

DOM-Based XSS : در این نوع، آسیب پذیری از قبل در کد سرویس گیرنده و یا کاربر وجود دارد. DOM-Based Cross-Site Scripting زمانی رخ می‌دهد که برنامه از سمت کاربر شامل جاوا اسکریپتی باشد که داده‌ها را از یک منبع نا مطمئن به روشی ناامن پردازش می‌کند.
برای مثال، یک برنامه در حال استفاده از جاوا اسکریپتی برای خواندن مقادیری از ورودی و نوشتن آن مقادیر در قسمتی از HTML است:

var search = document.getElementById(‘search’).value;
var results = document.getElementById(‘results’);
results.innerHTML = ‘You searched for: ‘ + search;

اگر مهاجم بتواند مقدار قسمت ورودی را کنترل کند، می‌تواند به راحتی یک مقدار مخرب ایجاد کند که باعث اجرای اسکریپت خود شود.

در حالت معمول، قسمت ورودی از بخشی از درخواست HTTP مانند “پارامتر رشته پرس و جو URL” تجمیع می‌شود که به مهاجم اجازه می‌دهد تا با استفاده از یک URL مخرب، به همان روش XSS Reflected، نفوذ را انجام دهد.

نحوه نفوذ به وسیله XSS

یک مهاجم به وسیله XSS چه کاری می‌تواند بکند؟

معمولا مهاجمانی که از Cross-Site Scripting استفاده می‌کنند، قادر به انجام رفتارهای زیر با قربانیان خود هستند:

  • جعل هویت کاربر قربانی شده.
  • انجام هر عملی که کاربر قادر به انجام آن است.
  • مشاهده تمام اطلاعاتی که کاربر به آن‌ها دسترسی دارد.
  • ثبت اطلاعات احراز هویت و ورود کاربر.
  • خدشه دار کردن اعتبار وبسایت.
  • تزریق ویروس Trojan به وبسایت.
می‌خواهید ازوب اپلیکیشن‌های خود در برابر حملات XSS محافظت کنید؟
فایروال برنامه تحت وب FortiWeb به شما کمک می‌کند:

بررسی آسیب‌های ناشی از Cross-Site Scripting

تاثیر اصلی XSS عموماً به ماهیت ساختاری برنامه، کاربرد برنامه، اطلاعات و وضعیت کاربر در معرض خطر بستگی دارد. برای مثال:

  •  در یک برنامه تبلیغاتی، که در آن همه کاربران ناشناس هستند و تمام اطلاعات عمومی هستند، تأثیر اغلب کم خواهد بود.
  •  در برنامه‌هایی که اطلاعات حساس و مهمی مانند تراکنش‌های بانکی، ایمیل‌ها و سوابق بیمه را نگهداری می‌کنند، آسیب عموما بسیار جدی خواهد بود.
  •  اگر کاربر هدف از امتیازات دسترسی بالایی در برنامه برخوردار باشد، تأثیر آن عموماً مهم خواهد بود و به مهاجم اجازه می‎دهد کنترل کامل برنامه آسیب پذیر را به‌دست گرفته و تمام کاربران و داده‌های آن‌ها را به خطر بیندازد.

نحوه پیشگیری از حمله XXS

جلوگیری از Cross-Site Scripting در برخی موارد آسان است اما بسته به پیچیدگی برنامه و روش‎های مدیریت داده‎های قابل کنترل توسط کاربر، ممکن است بسیار دشوارتر باشد. به طور کلی، جلوگیری موثر از آسیب پذیری XSS شامل ترکیبی از اقدامات زیر است:

فیلتر کردن ورودی‎ها در هنگام ورود، فیلتر کردن می‎بایست در محلی که ورودی‎های کاربر دریافت می‎شوند و بر اساس داده‌هایی که انتظارشان را دارد و یا اعتبار سنجی منبع ورودی‌ها، تا حد ممکن دقیق انجام شود.

رمزگذاری داده‌ها در خروجی، در نقطه‌ای که داده‎های قابل کنترل توسط کاربر در پاسخ‌های HTTP خارج می‌شوند، خروجی را رمزگذاری کنید. این امر ممکن است بسته به محتوای خروجی نیاز به رمزگذاری ترکیبی از HTML، URL، JavaScript و CSS را داشته باشد.

از هدرهای (Headers) مناسب برای پاسخ استفاده کنید، برای جلوگیری از حملات XSS در پاسخ‌های HTTP که قرار نیست حاوی HTML و JavaScript باشند می‌توانید جهت اطمینان از تفسیر پاسخ های HTTP توسط مرورگرها به روش مورد نظر شما از سرصفحه‌های Content-Typeو X-Content-Type-Options استفاده کنید.

سیاست امنیتی محتوا(CSP)، به‌عنوان خط آخر دفائی شما می‌توانید از Content Security Policy با هدف کاهش خطر حملاتی که همچنان وجود دارند، استفاده کنید.

امیدواریم که این مقاله برای شما مفید واقع شده باشد و بتواند شما را در ایمن‌سازی سیستم و فعالیت‌های اینترنتی خود یاری دهد.

می‌خواهید از خود در برابر حمله XSS محافظت کنید؟ با لیان تماس بگیرید:

علاقمند به حوزه امنیت اطلاعات و آشنا به حوزه تست نفوذ
  • facebook
  • twitter
  • googleplus
  • linkedIn
  • flickr

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.