مقدمه
از جمله مشکلات نسبتا شایع در امنیت، برنامه های کاربردی تحت وب هستند. در واقع علی رغم پیشرفت ها هنوز حملات تزریق کد (XSS) بسیار مهلک و خطرناک اند. این نوع حملات شیوه خاص و منحصر به فردی دارند، به جای حمله مستقیم به سرور، از یک سرور آسیب پذیر به عنوان یک جنگجو برای حمله به کاربر(کلاینت) استفاده می کنند.
این شیوه می تواند منجر به دشوارهایی در ردیابی حمله کننده گردد، به ویژه هنگامی که درخواست ها (Requests) به طور کامل در سیستم لاگ نشوند. نوشته ها و مقالات بسیاری در مورد درج واقعی کدهای اچ تی ام ال در اسکریپت های آسیب پذیر بحث کرده اند ، اما در اکثر آنها توضیح مختصری درباره آنچه می توان برای جلوگیری از حملات موفق انجام داد، ذکر شده . در حالی که این توضیحات تنها برای پیشگیری از بروز حملات کافی است و نه درمان و به تاثیر دقیق حملات تزریق کد به طور کامل پرداخته نشده است.
از آن جا كه بسياري از برنامه هاي كاربردي تحت وب ورودي هاي كاربر را چاپ مي كنند، يكي از رايجترين حملات موجود بر روي آنها، حمله ي XSS است. بسياري از برنامه هاي كاربردي تحت وب داراي روند تكراري نمايش اطلاعات، گرفتن ورودي و همچنين نمايش اطلاعات جديد هستند. اگر يك مهاجم بتواند يك كد آلوده را به عنوان ورودي بفرستد، برنامه ي كاربردي و مرورگر وب بقيه ي كار را انجام مي دهند. به طور كل، يك حمله ي XSS موفق در نتيجه ي طراحي نامناسب برنامه ي كاربردي به وقوع ميپيوندد. دو نوع حمله ي XSS وجود دارد:
- حمله ي مستقيم كه ورودي تزريق شده تنها به يك كاربر اعمال ميشود.
- حمله ي ذخيره شده كه ورودي تزريق شده روي چندين كاربر اعمال ميشود.
معمولا يك حمله ي مستقيم ابتدا سعي مي كند بينشي در مورد برنامه ي كاربردي يا يك وب سايت به دست آورد تا بتواند از آن ها به خوبي بهره برداري كند. يك حمله ي ذخيره شده كه خطرناك ترين نوع از حمله ي XSS است – با توجه به اين كه اثرات آن بي پايان است – به طور نمونه سعي ميكند هويت ها را سرقت كند تا بتواند در بهره برداري هاي بعدي از آنها استفاده كند، مثلا اگر سطوح دسترسي محرمانه ي كاربران به سرقت رود، كل وب سايت در معرض خطر قرار مي گيرد.
تاریخچه
تاریخچه حفره های امنیتی در معرض حملات XSS به سال ۱۹۹۶ و سالهای اولیه صفحات وب باز میگردد. نفوذ گران در آن زمان که پروتکل HTTP جا افتاده بود و طراحان وبگاه ها از زبانهای پردازه نویسی مانند جاوا اسکریپت سود میبردند، دریافتند وقتی کاربران معمولی وارد سایتی میشود میتوان به کمک کد نویسی در حفره های امنیتی وبگاه، صفحه دیگری را در همان صفحه بارگذاری کرد سپس با سود بردن از جاوا اسکریپت داده های کاربر مانند نام کاربری، گذرواژه و یا کوکی (Cookie) ها را دزدید.
در این هنگام رسانه ها این مشکلات را به ضعف امنیتی مرورگر ها نسبت داده بودند. شرکت ارتباطی Netscape که جزو اولین تولیدکنندگان مرورگرهای وب و همچنین سازنده زبان جاوا اسکریپت بود سیاست دامنه شخصی را به این زبان افزود که جلوی دسترسی به آدرسهای خارج از دامنه وبگاه را میگرفت و تا حدودی این حملات را محدود می کرد.
تاکنون حملات زیادی با استفاده از XSS انجام گرفته است که از جمله مهمترین آنها میتوان به موارد زیر اشاره نمود:
- در سال ۲۰۰۵ یک کرم اینترنتی با نام Samy با استفاده از آسیب پذیری XSS در سایت com که یک شبکه اجتماعی میباشد پروفایل بیشتر از یک میلیون کاربر را در عرض ۲۴ ساعت آلوده ساخت.
- در سال ۲۰۰۸ یک آسیب پذیری XSS در سرویس Spreadsheet گوگل توسط Bill Rios کشف گردید که توسط آن هکرها میتوانستند از طریق این سرویس به دیگر سرویسهای گوگل مانند Gmail و Code و .. دسترسی پیدا کنند.
- در نوامبر سال ۲۰۱۲ هکرها با استفاده از مشکل XSS در سایت یاهو قادر به خواندن ایمیل کاربران و حتی فرستادن ایمیل از اکانت کاربران برای بقیه بودند.
تعریف XSS
Scripting يكي از روش هاي حمله هكرها به سايت ها است و يك نقص امنيتي محسوب ميشود. البته در اين حمله کد های سمت کلاینت از قبیل جاوا اسکریپت به سایت تزریق میشوند و هدف اصلي هكرها كاربراني هستند كه به سايت مراجعه كرده اند. در حقيقت هكرها در اين نوع از حمله اطلاعات كاربران يك سايت را بدون اينكه خودشان آگاهي داشته باشند، به سرقت مي برند.
اگرچه مخففCross Site Scripting ، CSS مي باشد اما از آنجا كه CSS به عنوان مخفف Cascading Style Sheets نيز مي باشد، به منظور جلوگيري از بروز اشتباه، XSS را به Cross Site Scripting نسبت داده اند.
در XSSهكرها كدهاي خود را جايگزين كدهاي صفحات وب پويا مي كنند. اين حمله اغلب هنگامي صورت مي گيرد كه يك سايت جهت درخواست اطلاعات كاربر از Query string استفاده مي نمايد. كدهائي كه جايگزين كدهاي صفحات پويا مي شوند، بر روي كامپيوتر كاربر اجرا مي شوند. اين كدها مي توانند اطلاعات با اهميت موجود در كامپيوتر او را سرقت ببرند و به صورت مخرب بكار گيرند.
به عنوان مثال: ممكن است پس از ورود اطلاعات يك كاربر مثل username و password در سايت يكي از بانكها كه در برابر XSS محافظت نشده، اين اطلاعات توسط هكر دزديده شود ( البته بدون آگاهي كاربر ) و آنگاه حساب بانكي كاربر مورد دستبرد واقع شود.
با اینکه بسیاری از وب سایت ها، فیلترهایی برای شناسایی پست های حاوی XSS دارند اما نمی توان همه انواع مختلف XSS را فیلتر نمود. به این ترتیب می توان گفت سایت هایی که اقدام به دریافت اطلاعات از کاربران می کنند، مستعد حملات XSS هستند.
يكي از روش هاي دستيابي به اطلاعات كاربر بدست آوردن cookieاي است كه سايت ها پس از استفاده كاربر در سيستم او ايجاد و ذخيره مي نمايند، تا در ورودهاي بعدي از اطلاعات ذخيره شده در آن استفاده نموده و به كاربر اجازه ورود دهند. با دستيابي به اين فايل در حقيقت هكر به اطلاعات كاربر دست پيدا نموده و مي تواند از آنها استفاده هاي سوئي نمايد.
انواع XSS:
XSS به سه دسته معمولا تقسیم میشود:
- Reflected XSS
برنامه، ورودی (کد اسکریپت) را از کاربر دریافت می نماید و بدون اعتبارسنجی مستقیماً ورودی را بر روی Browser کاربر می فرستد. در این نوع از حملات XSS مهاجم تنها با یک درخواست و پاسخ از سرور (Single request and response) موفق به انجام حمله می شود. از اینرو به این نوع XSS First-Order نیز گفته می شود.
در نگاه اول این مساله مشکل جدی به نظر نمیرسد چرا که کاربران فقط میتوانند اسکریپت مخرب روی صفحات خودشان تزریق نمایند اما با استفاده از تکنیک های Social Engineering مهاجم، کاربر را ترغیب به استفاده از لینک (شامل اسکریپت مخرب) و سرقت اطلاعات کاربران می نماید. بنابراین در این نوع از XSS مهاجم برای رسیدن به اهداف خود نیاز به استفاده از تکنیک های ترغیب کاربر دارد.
مراحل یک حمله از نوع Reflected XSS مطابق شکل زیر می باشد:
۱- کاربر به برنامه وب که آسیب پذیر میباشد Login می نماید.
۲- مهاجم کاربر را ترغیب به استفاده از لینک مخربی که قبلا تهیه کرده است می کند.
۳- کاربر لینک مخرب را از وب سرور درخواست می کند.
۴- سرور جواب درخواست را به همراه اسکریپت مخرب به کاربر ارسال می کند.
۵- اسکریپت مخرب در Browser کاربر اجرا می شود.
۶- Browser ، کوکی Session کاربر را برای مهاجم ارسال می کند.
۷- مهاجم اطلاعات Session کاربر را به سرقت برده و از برنامه استفاده می نماید.
به عنوان مثال برنامه زیر را در نظر بگیرید که از یک صفحه وب برای نمایش خطاها به کاربران استفاده مینماید . آدرس زیر را در نظر بگیرید:
برنامه مقدار پارامتر Message در URL را گرفته و در داخل صفحه Error.aspx نمایش میدهد. مهاجم از لینک زیر برای جایگزینی مقدار پارامتر Message با کد جاوا اسکریپت بمنظور نمایش پنجره پیغام استفاده میکند.
اگر برنامه به نحوی نوشته شده باشد که یک پیغام به نمایش درآید برنامه به XSS آسیب پذیر است.
- لینک دانلود فایل بلافاصله بعد از پرداخت وجه به نمایش در خواهد آمد.
- همچنین لینک دانلود به ایمیل شما ارسال خواهد شد به همین دلیل ایمیل خود را به دقت وارد نمایید.
- ممکن است ایمیل ارسالی به پوشه اسپم یا Bulk ایمیل شما ارسال شده باشد.
- در صورتی که به هر دلیلی موفق به دانلود فایل مورد نظر نشدید با ما تماس بگیرید.