امنیت اطلاعات قسمت ششم – انواع حملات تحت وب

امنیت اطلاعات قسمت پنجم – حملات مهندسی اجتماعی و انواع آنها
2016-07-04
بیانیه ایرانسل در واکنش به افشای اطلاعات مشترکان
2016-07-05

امنیت اطلاعات قسمت ششم – انواع حملات تحت وب

در انتهای این سری از مقالات امنیت اطلاعات لیزاردوب شما قادر خواهید بود انواع حملات تحت وب که برروی نرم افزارهای تحت وب و وب سایت ها انجام می شود را شناسایی کنید ، شما با حملات client-Side یا حملاتی که بر روی کامپیوترهای کلاینت یا سرویس گیرنده انجام می شود آشنا خواهید شد و سپس یاد می گیرید که چگونه یک حمله از نوع سر ریز بافر یا Buffer Overflow انجام می شود. در بخش حملات شبکه شما با انواع حملات خارج از سرویس کردن یا DOS آشنا خواهید شد و در کنار آن انواع حملات شنود و استراق سمع و Poisoning را در شبکه مشاهده خواهید کرد . امیدواریم اگر ابهامی در کلمات بکار رفته وجود دارد با ما تا انتهای مقاله باشید و ابهام های خود را برطرف کنید.

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

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

حملات نوع خاصی وجود دارند که به Web Application Attacks یا حملات به نرم افزارهای کاربردی مشهور هستند ، اینگونه حملات با توجه به گسترش روز افزون وب سایت ها و نرم افزارهای تحت وب بصورت فزاینده ای در حال زیاد شدن هستند. در بهترین شرایط ممکن اگر کسی بخواهد جلوی اینگونه حملات را بگیردمدت زمانی طول می کشد که در همین زمان می توان از نقاط ضعف بوجود آمده استفاده کرده و به هدف حمله کرد. به نقاط ضعفی که هنوز شناسایی نشده اند و بروز رسانی امنیتی برای آنها ارائه نشده است در اصطلاح Zero Day گفته می شود ، در zero-day مدافع زمانی برای آماده شدن برای دفاع در مقابل حمله ندارد. معروف ترین حملات Web Application به عنوان Cross Site Scripting ، SQL Injection ، XML Injection ، Command Injection و Directory Traversal شناخته می شوند که در ادامه در خصوص هر یک از اینگونه حملات با هم صحبت خواهیم کرد.

Cross-Site Scripting یا XSS چیست ؟

امنیت اطلاعات قسمت ششم – انواع حملات به وب سایت ها و نرم افزارهای تحت وب

امنیت اطلاعات قسمت ششم – انواع حملات به وب سایت ها و نرم افزارهای تحت وب

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

مخفف کلمه Cross-Site Scripting بصورت CSS می باشد اما این مخفف به دلیل اینکه با ساختاری به نام CSS که در طراحی وب وجود دارد شباهت دارد به XSS تغییر داده شد. اکثر کدهایی که توسط هکر ها در نرم افزارهای تحت وب وارد می شود که در سمت کلاینت اجرا شود معمولا به زبان جاوا اسکریپت نوشته می شود. و سپس به سرور تزریق یا Inject می شود. اگر کمی با ساختار طراحی صفحات وب پویا یا داینامیک آشنایی داشته باشید متوجه می شوید که درخواست ها در سرور اجرا می شوند و نتیجه به سمت کلاینت ارسال می شود . همیشه در هر جا نامی از Inject کردن شنیدید ، به این معناست که حمله از طریق وارد کردن اطلاعات به درون یک فیلد اطلاعاتی انجام می شود. XSS که به نام XSS Injection نیز معروف است نیز از این مورد استثناء نیست ، در این نوع حمله هکر به دنبال فیلد های ورود اطلاعاتی می گردد که در وب سایت مورد نظر قرار دارد و در صورت عدم رعایت موارد امنیتی مناسب در وب سرور می تواند به آن وب سایت حمله کند. بیشتر اطلاعاتی که از طریق XSS بدست می آید از طریق Cookie هایی است که کلاینت بر روی مرورگر خود بر جای می گذارد.

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

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

SQL Injection یا تزریق SQL چیست ؟

همانطور که می دانید واژه SQL مخفف کلمه Structured Query Language می باشد که زبانی برای برقرار ارتباط با پایگاه های داده می باشد ، این زبان می تواند برای انجام پرسش و پاسخ یا Query گرفتن از پایگاه های داده ای مانند MSSQL یا MySQL یا Oracle یا هر پایگاه داده مشابهی مورد استفاده قرار بگیرد. همانطور که قبلا هم اشاره کردیم هرگاه نامی از Injection یا تزریق به گوشمان خورد بلافاصله باید به این فکر بیوفتیم که می توانیم دستورات تعریف نشده ای را به سمت سرور مقصد ارسال و پاسخ دلخواه خود را بدست بیاوریم. ساختار کاری حملات SQL Injection به این صورت است که هرگاه فیلد ورود و خروج اطلاعاتی وجود داشته باشد که در پس زمینه آن یک پایگاه داده باشد ، می توانیم با وارد کردن دستورات غیرمعمول زبان SQL در این فیلد ها پاسخ هایی از سرور مورد نظر دریافت کنیم که حاوی اطلاعات حساس می باشند. در خصوص حملات SQL Injection در مقاله ای بصورت جداگانه و مفصل بحث خواهیم کرد و هدف در اینجا صرفا شناسایی این نوع حمله است.

یکی از فیلدهایی که در وب سایت ها بسیار مورد حملات SQL Injection قرار می گیرد ، فیلد Forgot Password یا فراموشی رمز عبور است. از این فیلد زمانی استفاده می شود که کاربر رمز عبور خود را فراموش کرده است و می خواهد با وارد کردن ایمیل خود ، رمز عبور را بازیابی کند تا بتواند مجددا وارد وب سایت بشود. فرض را بر این بگیرید که یک هکر در این فیلد یک ایمیل با قالب نادرست را وارد می کند ، پاسخی که از پایگاه داده یا سرور بازگردانده می شود ممکن است حاوی اطلاعاتی باشد که چگونگی اعتبارسنجی درخواست داده شده را بررسی می کند ، در این لحظه هکر فیلد ایمیل را با دستورات SQL ای که بر اساس داده های بدست آمده است پر می کند و برای سرور ارسال می کند ، سرور این دستورات را پردازش کرده و خروجی را اعلام می کند.

حملات XML Injection و XPath Injection

قبل از اینکه در خصوص این نوع حملات صحبت کنیم بهتر است بدانیم که منظور از Markup Language چیست ؟ کلماتی مثل XML مخفف Extensible Markup Language و HTML مخفف Hypertext Markup Language می باشند. Markup Language زبانی است که شیوه نمایش اطلاعات در صفحات وب را نشان می دهد . به این معنی که شما با استفاده از این زبان می توانید به متن های خود یادداشت یا حاشیه اضافه کنید. در این میان معروف ترین زبان های Markup به نام HTML و XML شناخته می شوند. اکثر وب سایت ها و نرم افزارهای تحت وبی که امروزه مشاهده می کنید با استفاده از یک روش داده های خود را ذخیره می کنند ، معمولترین روش استفاده از یک پایگاه داده مانند SQL سرور می باشد.

شما در HTML در قالب برچسب ها یا Tag ها صرفا به صفحه وب می گویید که متون را چگونه نمایش دهد ، اما در XML شما داده ها را می توانید نگهداری کنید و قالب بندی چندان مد نظر نیست . برخی از وب سایت ها از XML برای ذخیره سازی داده ها استفاده می کنند ، توجه کنید که زمانیکه نام ذخیره داده در ذهن شما آمد باید به این نتیجه برسید که می توان از این داده Query گرفت ، بنابراین می توان به آن حمله از نوع Injection انجام داد. یکی از معروف ترین روش های حمله به دیتاهای ذخیره شده در XML به نام Xpath می باشد یا XPath Injection . زمانیکه یک وب سایت از پایگاه داده SQL استفاده می کند قطعا باید به فکر حملات SQL Injection ای که به این پایگاه داده می شود نیز باشد ، وب سایت هایی که از XML استفاده می کنند نیز بایستی انتظار این را داشته باشند که مورد حمله حملات XML Injection یا XPath Injection قرار بگیرند. همیشه توجه کنید که اگر از XML به عنوان دیتابیس استفاد می کنید در طراحی فرم های ورودی و خروجی اطلاعات و پاسخ هایی که به Query ها داده می شود دفت کنید. هرگاه وب سایتی که داده های خود را که در قالب XML ذخیره شده اند را به درستی در مقابل ورودی اطلاعات کاربران فیلتر نکرده باشد ، آن وب سایت مستعد حملات XML Injection می باشد.

تزریق دستورات یا Command Injection  و Code Injection

امنیت اطلاعات قسمت ششم – انواع حملات به وب سایت ها و نرم افزارهای تحت وب

امنیت اطلاعات قسمت ششم – انواع حملات به وب سایت ها و نرم افزارهای تحت وب

وب سرورها نیز مانند ساختار فایلی که در سیستم عامل وجود دارد دارای سلسله مراتب می باشند ، وب سرورها معمولا دسترسی به ریشه یا root دایرکتوری های خود را محدود می کنند ، کاربران در این حالت می توانند به دایرکتوری های زیر مجموعه دسترسی پیدا کنند اما نمی توانند به مرحله بالاتر که ریشه است دسترسی پیدا کنند ، همچنین نمی توانند بصورت موازی از پوشه های کنار دستی نیز استفاده کنند و صرفا به محلی ارجاع داده می شوند که به آن دسترسی دارند. برخی اوقات به علل مختلف که بارزترین آنها سهل انگاری مدیر وب سرور است ، دسترسی های مناسب برای پوشه ریشه در نظر گرفته نمی شود و همین امر می تواند باعث شود مهاجم به دایرکتوری ریشه وب سرور دسترسی پیدا کند. Directory Traversal یا Path Traversal سوء استفاده از همین نقاط ضعفی است که در سطوح دسترسی یا عدم اعتبارسنجی داده های ورودی کاربر به ویژه نام فایل ها در وب سرور است که در نهاید می تواند باعث شود مهاجم با وارد کردن کاراکترهای مشخصی به Parent Directory یا پوشه بالاسری دسترسی پیدا کند. هدف اینگونه حملات دسترسی پیدا کردن به فایل هایی است که نبایستی بصورت عمومی در دسترس قرار بگیرند ، در این حمله در نهایت هکر می تواند فایل های موجود در قسمت محدود شده یا Restricted را دستکاری کند و نتیجه لازم را بگیرد. حملات نوع Directory Traversal به حملات /.. یا dot dot slash ، Directory Climbing و Backtracking نیز معروف می باشند. برخی از انواع این نوع حملات به نام canonicalization attacks نیز معروف می باشند.

تزریق دستورات یا Command Injection که به Shell Injection و Code Injection نیز معروف است یکی دیگر از حملاتی است که می توان به وب سرورها و نرم افزارهای کاربردی تحت وب انجام داد. هدف اصلی Command Injection وارد کردن و اجرا کردن کدها و دستورات مد نظر مهاجم در نرم افزار دارای نقطه ضعف امنیتی است . در چنین مواقعی نرم افزاری که کدها و دستورات وارد شده ناخواسته را اجرا می کند درکی از این ندارد که کد وارد شده مخرب است یا نیست و هر دستور ورودی از Shell را به عنوان یک دستور مجاز از طرف کاربر سیستم برداشت می کند. دستورات در محیطی وارد می شوند که سطح دسترسی برابر سطح دسترسی نرم افزار کاربردی دارد . این نوع حمله در مواقعی که شما اعتبارسنجی ورود اطلاعات را در برنامه نویسی خود ندیده اید که در اصطلاح به آن Input Validation می گویند انجام می شود و می تواند از پارامترهایی مثل فرمهای ورود و خروج اطلاعات ، کوکی ها ، Http Header ها و غیره استفاده کند.در اصطلاح هک به دسترسی پیدا کردن به خط فرمان سیستم قربانی Shell گرفتن نیز می گویند.

در Command Injection مهاجم دستورات مورد نظر خود را در خط فرمان سیستم قربانی اجرا می کند ، اما در Code Injection مهاجم کدهای مد نظر خود را در نرم افزار کاربردی که وجود دارد قرار می دهد که به جای کد اصلی نرم افزار اجرا شود ، در این حالت بدون نیاز به اجرا دستور خاصی با اجرا شدن اصل نرم افزار کدهای مخرب مورد نظر هکر اجرا خواهند شد ، سطح دسترسی کدهای اجرایی در اینجا برابر سطح دسترسی نرم افزار کاربردی خواهد بود. اکثر کرم های اینترنتی از این حالت برای انتشار و اجرا شدن استفاده می کنند . آنها از نقاط ضعف سیستم عامل استفاده می کنند و خود را به نرم افزارهای مختلف می چسبانند.

خلاصه

تا اینجا با انواع حملاتی که به سمت سرور های اینترنتی و به ویژه وب سرورها انجام می شود آشنا شدید . توجه کنید که هرگاه فرمی برای ورود اطلاعات در یک وب سایت وجود داشته باشد آن وب سایت مستعد بروز حملات تزریق می باشد. SQL Injection ، XML Injection ، XSS Injection و code Injection را در اینجا با هم بررسی کردیم اما واقعا دنیای اینگونه حملات بسیار پیچیده و بزرگ است ، هر گونه پایگاه داده ای که بتوان از آن Query گرفت مستعد انجام Injection است ، چه بسا این روزها LDAP Injection نیز که بر روی پایگاه های داده Directory Service انجام می شود بسیار مرسوم شده است.

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

دیدگاه ها بسته شده است