حمله XSS یا تزریق کد چیست؟

0008-what-is-xss-attack-featured-image
بهمن ۱۸, ۱۳۹۵

حمله‌ی تزریق کد از طریق وبسایت یا Cross-Site Scripting که بصورت مخفف به آن حمله XSS (بدلیل شباهت مخفف به CSS از X که همان Cross یا ضربدر هست استفاده می‌شود) گفته میشود، یکی از پر استفاده‌ترین روش‌های در دسترس هکر‌ها می‌باشد. طبق تحقیقی که در سپتامبر ۲۰۱۵ انجام شد۱، براساس درصد، این نوع حمله پراستفاده ترین روش توسط هکر‌ها برای نفوذ به اپلیکیشن های تحت وب بوده است. (شکل زیر)

درصد حملات در اپلیکیشن‌های تحت وب
درصد حملات در اپلیکیشن‌های تحت وب [۱]
در سلسه پست‌هایی که خواهم نوشت، به بررسی حمله XSS، روش‌های مرسوم آن، نمونه‌های مختلفی از تزریق کد و در نهایت به روش‌های مقابله با آن خواهم پرداخت.

XSS چیست؟

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

نحوه‌ی انجام این هک رو می‌توان در عکس زیر مشاهده کرد۲.

حمله‌ی عمومی xss
حمله‌ی عمومی xss

بطور کلی حمله‌ی تزریق کد در دو سناریوی زیر اتفاق می‌افتد:

  1. داده‌ها از طریق یک مجرای غیر قابل اعتماد، عموما یک درخواست وب، وارد صفحه وبسایت می‌شوند.
  2. داده‌ها در صفحات وب داینامیکی که به سمت مرورگر ارسال می‌شود وارد می‌شوند.

داده‌ی مخرب اضافه شده عموما اسکریپت جاوااسکریپت است، اما کد HTML، فایل Flash و بطور کلی هر چیزی که توسط مرورگر اجرا می‌شود را بعنوان داده‌ی مخرب می‌توان استفاده نمود. اهداف حملاتی که بوسیله‌ی XSS انجام می‌شود هیچ محدودیتی ندارند، اما بطور کلی می‌توان اهداف را شامل موارد زیر دانست:

  • انتقال داده های خصوصی و امنیتی، همچون کوکی و هر داده‌ی مربوط به سشن (Session) به حمله کننده
  • انتقال کاربر به صفحه‌ی دیگر تحت کنترل حمله‌کننده
  • انجام عملیات خرابکارانه در کامپیوتر کاربر از طریق حفره‌ی پیدا شده

انواع حملات XSS

در گذشته حملات تزریق کد به سه دسته کلی تقسیم می‌شدند. این سه دسته شامل:

  1. حمله‌ی Stored XSS یا Persistent و یا Type I
  2. حمله‌ی Reflected XSS یا Non-Persistent و یا Type II
  3. حمله‌ی DOM Based XSS یا Type-0

اما بخاطر اینکه حملاتی وجود داشت که نتیجه ادغام دو نوع از حملات XSS بود و در هیچکدام از این دسته بندی‌ها قرار نمیگرفت، از میانه‌ی سال ۲۰۱۲ گروه محققان امنیتی دو دسته بندی زیر را پیشنهاد دادند:

  1. Server XSS
  2. Client XSS

در این دسته بندی جدید، هر دسته شامل حملات Stored XSS و Reflected XSS می‌باشند. همچنین DOM Based XSS زیر مجموعه‌ی Client XSS قرار گرفت. با این دسته‌بندی، کل حملات را می‌توان در یک ماتریس ۲ در ۲ بصورت زیر خلاصه کرد.

مقایسه دو دسته بندی جدید حمله‌ی XSS
ماتریس ۲ در ۲ دسته بندی جدید حمله‌ی XSS

همانطور که گفته شد در این دسته‌بندی جدید حملات DOM Based XSS زیر مجموعه‌ی Client XSS هستند.

در ادامه به معرفی دسته بندی قدیم میپردازیم. چون فارغ از اینکه این نفوذ از چه سمتی رخ داده است، هر حمله را بخوبی می‌توان از طریق این دسته‌بندی معرفی کرد.

حمله‌ی Stored XSS

در این نوع حمله، قطعه کد مخرب توسط نفوذگر بگونه‌ای وارد وبسایت می‌شود که بصورت دایم حضور خواهد داشت. بطور مثال در دیتابیس ذخیره می‌شود. این نوع حمله عموما از طریق بخش‌‌هایی که کاربر‌ها مشارکت دارند، همچون بخش نظر‌دهی وبلاگ‌ها، ویکی‌ها، چت‌ها و… انجام می‌پذیرد. نفوذگر از این طریق می‌تواند یا یک قطعه کد را وارد کند تا با هربار مشاهده صفحه اجرا شده و بطور مثال اطلاعات کوکی بازدید کننده را برای نفوذگر بفرستد. و یا یک لینک مخرب وارد بخش نظرات کند. کاربران بی ملاحظه با کلیک بر روی این لینک، کد مخرب را اجرا می‌کنند.

حمله‌ی Reflected XSS

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

حمله‌ی DOM Based XSS

در این نوع از حمله XSS، قطعه کد HTMLای وارد صفحه می‌شود که کد‌های مورد نظر نفوذگر را اجرا می‌کند. همانند مثال ارایه شده در دسته‌بندی Reflected XSS.

 

در این پست با مفاهیم اولیه‌ی حملات XSS آشنا شدیم. نمونه‌هایی از حملات XSS و همچنین راه‌های مقابله با این حملات را در پست‌های آینده وبلاگ معرفی خواهم کرد. حتما سر بزنید.

لینک‌ها و منابع:

  1. Cross-Site Scripting (XSS) attacks and defense mechanisms: classification and state-of-the-art
  2. Cross Site Scripting (XSS) Attacks