حملات تزریق کد (XSS)
گاهی در مباحث مربوط به هک ایمیل و امنیت سایت با حملات XSS یا Cross Site Scripting مواجه میشویم که به دلیل دزدیدن رمز عبور ، ارسال درخواستهای جعلی و در دست گرفتن مدیریت محتوای HTML خطرساز میشوند. در این مقاله به بررسی حملات تزریق کد (XSS) و انواع این حملات و روشهای مقابله با آن خواهیم پرداخت.
Cross Site Scripting یکی از روش های حمله و نفوذ هکرها به وب سایت ها میباشد. در این روش کدهای جاوا اسکریپت به سایت تزریق میشوند و هدف هکر بیشتر کاربرانی هستند که به سایت مراجعه کرده اند. در واقع هکرها در این نوع حمله اطلاعات کاربران یک سایت را بدون اینکه خودشان متوجه شوند، به سرقت میبرند..!
اگرچه مخفف CSS ، Cross Site Scripting میباشد اما با توجه به اینکه CSS به عنوان مخفف Cascading Style Sheets به کار برده میشود، به همین دلیل از XSS برای مخفف Cross Site Scripting استفاده میشود.
روش حمله :
در این حمله با باز کردن یک صفحه وب سایت، کلیک روی یک لینک و یا باز کردن یک ایمیل، کدی به صورت مخفی روی کامپیوتر کاربر اجرا میشود که میتواند اطلاعات مهمی را از سیستم کاربر سرقت کند. هکرها با استفاده از این حمله کوکیها را سرقت میکنند و از طریق آنها به اطلاعات کاربران دسترسی پیدا میکنند.
هنگامی که کاربر وارد یک حساب اینترنتی مانند ایمیل، حساب بانکی یا حساب های دیگر میشود اطلاعاتی (کوکی ها) روی کامپیوتر کاربر ذخیره میشود..
به طور مثال امکان دارد پس از ورود اطلاعات یک کاربر مانند نام کاربری و رمز عبور در سایت یکی از بانکها یا موسساتی که در برابر XSS محافظت نشده اند، این اطلاعات توسط هکر، بدون اینکه کاربر آگاهی یابد، سرقت شود و سپس حساب بانکی کاربر مورد دستبرد واقع شود. این روش در مورد بقیه حساب های کاربری اینترنتی هم امکان پذیر است.
انواع حملات xss :
- طراح سایت خودش کد مخرب را در صفحه قرار داده باشد.
- حفره امنیتی ممکن است در سطح سیستم عامل یا شبکه ایجاد شده باشد.
- یک حفره امنیتی همیشگی در قسمت های عمومی سایت قرار گرفته باشد.
- کاربر بر روی یک لینک حاوی XSS کلیک کند.
- کاربر ایمیل حاوی XSS را باز کند.
روش های مقابله با XSS :
استفاده از مرورگر اینترنتی مناسب : مرورگرهایی مانند Firefox و Opera امنیت بالاتری نسبت به IE دارند. IE مرورگری است که نقاط ضعف زیادی دارد.
استفاده از ابزارهایی که کدهای Script و Flash را محدود میکنند مانند Noscript
کلیک نکردن روی لینک ها و ایمیلهای ناشناس : برای جلوگیری از این نوع حمله میتوان ایمیل را روی حالت HTML یا متنی قرار داد تا کدهای مخرب خود به خود اجرا نشوند.
توصیه میشود کاربران گزینه یادآوری نام کاربری و رمز عبور را در مرورگرهای خود غیر فعال کنند و به صورت دوره ای رمز عبور ایمیل های خود را تغییر دهند.
همچنین بهتر است کاربران از یک ایمیل مجزا برای حساب های کاربری مهم خود مانند حساب بانکی و … استفاده کنند و از آن برای ارتباطات روزانه استفاده نکنند.
وبسایتها در طی یک دهه گذشته شاهد تغییرات زیادی بودهاند. به مرور زمان و با پیشرفت فناوریهای کامپیوتری، سایتها به آهستگی از انواع HTML ساده و استاتیک، به سمت وبسایتهای بزرگ، داینامیک و پویا تکامل یافتهاند. این گذر به سوی وبسایتهای دینامیک باعث شد تا اپلیکیشنهای مخصوص وبسایت که به دیتابیسها متکی هستند، همانند CMSهای وردپرس و جوملا و سایت ساز ها و فروشگاه ساز ها به وجود آیند این تغییر به سوی وبسایتهای دینامیک عرصه را برای بعضی از خطرات جدید باز کرد.
حمله Cross-site scripting یا XSS یک نوع حمله تزریق کد میباشد که در سمت کاربر اتفاق میافتد و در آن حمله کننده میتواند کد و اسکریپت مخرب خود را در قالب یک فعالیت معمولی به وبسایت تزریق کند.
با استفاده از XSS ، حمله کننده قربانی خود را به طور مستقیم مورد هدف قرار نمیدهد بلکه او از وبسایت به عنوان یک وسیله برای حمل و رساندن کد مخرب به مرورگر قربانی استفاده میکند.
از حملات XSS به طور عمده در جاوا اسکریپت استفاده میشود. زیرا جاوا اسکریپت بیشتر در ساخت و طراحی سایت ها مورد استفاده قرار میگیرد و از بخشهای بنیادی یک وبسایت میباشد.
برای اینکه حمله گر بتواند کد مخرب جاوا اسکریپت را روی مرورگر قربانی اجرا کند، ابتدا نیاز است تا راهی برای ورود به صفحه وبسایت و قرار دادن کد در آن پیدا کند. یک راهکار برای این مورد استفاده از تکنیکهای مهندسی اجتماعی (social engineering) است. حمله گر از این طریق میتواند کاربر را ترغیب به بازدید از صفحهای کند که در آن کدهای مخرب فعال هستند.
برای اجرایی شدن حمله XSS ، صفحات و دیتابیس مرورگر قربانی بایستی مقادیر ورودی توسط بازدید کننده را شامل شود. به عنوان مثال، این کد فرضی، جدیدترین نظر ثبت شده در یک صفحه را نمایش میدهد:
این دستور فرضی، آخرین و جدیدترین نظر ثبت شده را از داخل دیتابیس خوانده و روی صفحه مرورگر به کاربر نمایش میدهد.
این کد در برابر حملات XSS آسیب پذیر است زیرا حمله کننده میتواند اسکریپت مخرب خود را در قالب یک نظر به سمت دیتابیس و سایت ارسال کند. مثلا:
مرورگر بازدیدکنندگان در واقع این کد را اجرا خواهد کرد:
وقتی که این صفحه توسط مرورگر لود شود، اسکریپت مخرب به طور اتوماتیک و بدون اطلاع بازدید کننده اجرا خواهد شد.
عواقب این گونه حملات توسط جاوا اسکریپت ممکن است بلافاصله نمایان نشود. چرا که مرورگرها کدهای جاوا اسکریپت را به صورت کنترل شده و محدود اجرا میکنند و دسترسی خیلی محدودی به سیستم عامل کاربر و فایلهای کاربر دارند.
اما از آنجایی که جاوا اسکریپت به موارد زیر دسترسی دارد، باید این موضوع را جدی گرفت:
• کدهای مخرب جاوا اسکریپت مانند دیگر کدها به element های دیگر وب سایت مانند کوکی (cookie) دسترسی دارد. کوکیها معمولا شامل session token میشوند. (session token کلیدی میباشد که هویت کاربر را برای سایت مشخص میکند). با داشتن session token حمله کننده میتواند خود را به عنوان کاربر واقعی سایت جا بزند.
• جاوا اسکریپت میتواند به صورت خودسرانه در DOM مرورگر تغییرات ایجاد کند.
آیا حملات XSS مربوط به خود کاربر میشود؟
اگر شخصی با استفاده از حمله XSS به صورت خودسرانه اسکریپتهای مخرب جاوا را روی سایت شما اجرا کند، امنیت وبسایت شما پایین آمده و در معرض خطر قرار میگیرد. XSS فقط مشکل کاربر نیست و هر خطر امنیتی که کاربر سایت شما را تهدید کند، خود شما را هم تهدید خواهد کرد.
حالا کمی در خصوص انواع حملات XSS توضیح میدهیم:
۱. حمله انعکاسی یا غیر مداوم ( Reflected or Non-persistent)
یک حمله غیر مداوم XSS مستقیما توسط خود حمله کننده به سمت سایت ارسال نمیشود. در واقع در این نوع حمله، حمله کننده از وبسایت برای انعکاس کد مخرب به سوی قربانی استفاده میکند. یک مثال ساده از این نوع حمله، ساختن یک URL ساده است که کد مخرب را به قربانی منتقل میکند:
http://example-website.com/search?search_term=””
حالا کافی است حمله کننده قربانی خود را ترغیب به کلیک کردن روی این لینک و ورود به آن کند. وقتی که کاربر این URL را از سایت درخواست کند، اسکریپتی که حمله کننده نوشته است روی مرورگر قربانی اجرا خواهد شد. چرا که وبسایت، ورودی که از طریق فیلد search_term دریافت کرده است را بدون بررسی و اعتبار سنجی دریافت و قبول کرده است.
مثلا با این روش و با اجرا اسکریپت روی مرورگر قربانی، حمله کننده میتوانند کوکیهای او را به سرقت برده و اطلاعات آن را به دست آورد.
۲. حمله مداوم (Persistent)
این حمله به صورت دائمی است. یعنی نیازی نیست که حمله کننده به صورت دستی لینک مخرب را ساخته و برای قربانی ارسال کند. بلکه او میتواند با وارد کردن کد مخرب در دیتابیس وبسایت، به صورت مداوم تمامی بازدید کنندگان سایت را مورد هدف قرار دهد.
در این روش حمله کننده ابتدا از فرمهای درون وبسایت برای وارد کردن کد مخرب به دیتابیس استفاده میکند. حالا وقتی قربانی از سایت بازدید کرده و صفحهای که به دیتابیس آلوده متصل است را درخواست میکند، وبسایت بدون اطلاع از مخرب بودن آن، صفحه را برای بازدید کننده ارسال کرده و اسکریپتی که حمله کننده نوشته است مانند مثال قبل روی مرورگر او اجرا خواهد شد.
متدهای جلوگیری از حملات XSS
روش اول: Escaping
در این روش اطلاعات ورودی توسط کاربر به نوعی سانسور میشوند. مثلا از ثبت بعضی از کارکترهای خاص مانند > و < که ممکن است در دستورات کد استفاده شوند جلوگیری میشود و باعث میشوند که کدهای مخرب از کار بیفتند.
اگر سایت شما به نوعی است که به کاربران اجازه اضافه کردن کد خود را نمیدهد، راه حل خوب میتواند escape کردن تمامی متون از جمله HTML, URL و Javascript باشد.
ولی در صورتی که سایت از متون غنی(rich text) پشتیبانی میکند مانند سایتها فروم و یا ثبت نظرها، اجرای این روش کمی سخت تر میشود زیرا باید کاراکترهایی که escape میشوند را به دقت انتخاب کنید.
روش دوم: اعتبار سنجی ورودی (Validating Input)
اعتبار سنجی ورودی، پروسهایست که در آن از اطلاعات ورودی به سایت و مرتبط بودن آن اطمینان حاصل میشود. با اعتبار سنجی درست میتوان جلو ورود کدهای مخرب به سایت را گرفت.
در این روش کاربر اجازه ورود یک سری کاراکترهای خاص در فیلدهای مربوط به خود را دارد. مثلا فیلد دریافت شماره تلفن، فقط باید اعداد را دریافت کند و اجازه ورود هر کاراکتری به جز عدد را ندهد.
جمع بندی
حملات XSS با اینکه میتوانند برای هر سایتی بسیار خطرناک باشند و تمامی کاربران سایت را تحت حمله قرار دهند، به راحتی هم قابل پیشگیری هستند و حتی بسیاری ازین حملات در انواع هاستهای لینوکسی و ویندوزی توسط فایروال سرور بلاک میشوند. برای افزایش امنیت شبکه پیشنهاد می شود از تجهیزات فایروال سخت افزاری و نرم افزاری در ساختار شبکه خود استفاده نمایید.