انواع حملات به وبسایت ها

مقدمه سالها پیش زمانیکه صحبت از یک نرم افزار کاربردی در یک شبکه می شد ، به سراغ استفاده از نرم افزارهایی می رفتیم که قصد استفاده از آن سرویس را داشت دارای این دو قسمت بود : یک قسمت بر روی سرور نصب می شد و قسمت دیگر بر روی کامپیوتری نصب می شد ، با گذشت زمان و رواج یافتن نرم افزار های کاربردی تحت وب این تفکر رواج یافت که اینگونه نرم افزارهای تحت وب دارای امنیت و کاربرد ساده تری نسبت به نرم افزاهای گذشته هستند و به شدت شروع به رشد کردند ، به گونه ای که امروزه اکثر نرم افزارهایی که برای شبکه نوشته می شود در قالب نرم افزارهای کاربردی تحت وب می باشد . تحت وب بودن یک نرم افزار هم مزیت است و هم دارای عیب های زیادی می باشد، مزیت استفاده از این نرم افزارها این است که شما دیگر نیازی به استفاده از یک نرم افزار Agent برای متصل شدن به سرور اصلی خود ندارید و صرفا با وارد کردن آدرس URL سرور نرم افزار کاربردی تحت وب ، می توانید به آن وصل شده و از سرویس های آن استفاده کنید ، اما همین موضوع می تواند نقطه ضعف بزرگی برای اینگونه سیستم ها باشد ، یک هکر یا مهاجم نیز به همان سادگی که شما می توانید به نرم افزار خود متصل شوید می تواند به سیستم شما متصل شود ، در ساختار های قدیمی همین وجود Agent تا حدودی کار را برای هکرها سخت تر می کرد . یکی از مواردی که تحت وب بودن نرم افزارها خطر آفرین است این است که شما هر اندازه شبکه خود را امن کنید در نهایت به دلیل استفاده از نرم افزارهای تحت وب منتشر شده به بیرون از سازمان ، می توان به شبکه شما دسترسی و نفوذ کرد ، به شکل زیر دقت کنید . Web Application Attacks Zero Day حملات نوع خاصی وجود دارند که به Web Application Attacks یا حملات به نرم افزارهای کاربردی مشهور هستند ، اینگونه حملات با توجه به گسترش روز افزون وب سایت ها و نرم افزارهای تحت وب بصورت فزاینده ای در حال زیاد شدن هستند. در بهترین شرایط ممکن اگر کسی بخواهد جلوی اینگونه حملات را بگیرد مدت زمانی طول می کشد که در همین زمان می توان از نقاط ضعف بوجود آمده استفاده کرده و به هدف حمله کرد . به نقاط ضعفی که هنوز شناسایی نشده اند و بروز رسانی امنیتی برای آنها ارائه نشده است در اصطلاح Zero Day گفته می شود. در zero-day مدافع زمانی برای آماده شدن برای دفاع در مقابل حمله ندارد. I.Cross Site Scripting (XSS)مخفف کلمه Cross-Site Scripting بصورت CSS می باشد اما این مخفف به دلیل اینکه با ساختاری به نام CSS که در طراحی وب وجود دارد شباهت دارد به XSS تغییر داده شد .این نوع حمله که همانطور که از نامش پیداست از ساختار اسکریپت نویسی استفاده می کند ، به نرم افزارهای تحت وب از طریق اسکریپت نویسی حمله می کند . هدف اصلی این نوع حمله بدست آودن اطلاعات از کاربران و کلاینت هایی است که به سرور متصل می شود .اکثر کدهایی که توسط هکر ها در نرم افزارهای تحت وب وارد می شود که در سمت کلاینت اجرا شود و معمولا به زبان جاوا اسکریپت نوشته می شود. همیشه در هر جا نامی از Inject کردن شنیدید ، به این معناست که حمله از طریق وارد کردن اطلاعات به درون یک فیلد اطلاعاتی انجام می شود . در صورتیکه برنامه نویس وب سایت شما در فیلد های ورودی اطلاعات خود اعتبارسنجی یا Validation را انجام ندهد ، آن وب سایت مستعد بروز حملات XSS خواهد بود.حملات XSS خود به دو دسته بندی تقسیم می شوند که به عنوان انعکاس و ذخیره شناخته می شوند:در حملات از نوع انعکاس ، هکر یک حفره امنیتی و راهی برای استفاده از آن پیدا می نماید تا کاربر ناشناس را به یک برنامه وب دارای آسیب پذیری XSS هدایت کند . در این هنگام حمله انجام شده است . این حمله به وسیله یک سری از پارامترهای URL که با Urlارسال می شوند، انجام می شود.در حملات از نوع ذخیره ، هکر کدهای مخربی را که یک کاربر در آینده آنها را فراخوانی می کند ذخیره می نماید. در واقع یک کاربر ندانسته به کدهای مخرب برخورد می نماید و کدهای مخرب اجرا می شوند. مسئله اینجاست که هنگام ذخیره سازی کدها و همچنین هنگام واکشی آنها اعتبارسنجی ورودی ها و خروجی ها انجام نشده است.نکته حائز اهمیت این است که حتی درصورت اعتبارسنجی یا Validation کدها در هنگام ذخیره نمودن آنها، چک نمودن خروجی ها و اعتبار سنجی آنها نیز لازم است. II.SQL Injection همانطور که می دانید واژه SQL:مخفف کلمه Structured Query Language می باشد که زبانی برای برقرار ارتباط با پایگاه های داده می باشد ، این زبان می تواند برای انجام پرسش و پاسخ یا Query گرفتن از پایگاه های داده ای مانند Ms SQL یا My SQL یا Oracle یا هر پایگاه داده مشابهی مورد استفاده قرار بگیرد. همانطور که قبلا هم اشاره کردیم هرگاه نامی از Injection یا تزریق به گوشمان خورد بلافاصله باید به این فکر بیوفتیم که می توانیم دستورات تعریف نشده ای را به سمت سرور مقصد ارسال و پاسخ دلخواه خود را بدست بیاوریم. ساختار کاری حملات SQL Injection به این صورت است که هرگاه فیلد ورود و خروج اطلاعاتی وجود داشته باشد که در پس زمینه آن یک پایگاه داده باشد، می توانیم با وارد کردن دستورات غیرمعمول زبان SQL در این فیلد ها پاسخ هایی از سرور مورد نظر دریافت کنیم که حاوی اطلاعات حساس می باشند.یکی از فیلدهایی که در وب سایت ها بسیار مورد حملات SQL Injection قرار می گیرد ، فیلد Forgot Password یا فراموشی رمز عبور است. از این فیلد زمانی استفاده می شود که کاربر رمز عبور خود را فراموش کرده است و می خواهد با وارد کردن ایمیل خود ، رمز عبور را بازیابی کند تا بتواند مجددا وارد وب سایت بشود.SELECT fieldlist FROM table WHERE field = ‘whatever’ or ‘a’=‘a’در این حالت و با وارد کردن دستور بالا توسط هکر ، کلیه ایمیل هایی که در پایگاه داده وجود دارد به نمایش در می آیند.چند نمونه مثال در SQL INJECTIONشناسایی فیلدهای مختلف موجود در دیتابیسwhatever’ AND email IS NULL; شناسایی نام جدول های دیتابیسwhatever’ AND 1=(SELECT COUNT(*) FROM tab name); پیدا کردن کاربرانی با مشخصات تعیین شدهwhatever’ OR full _ name LIKE ‘%yahoo.com%’ تمامی اطلاعات موجود در جدول حذف می شوندwhatever’; DROP TABLE members;III.XML Injection قبل از اینکه در خصوص این نوع حملات صحبت کنیم بهتر است بدانیم که منظور از Markup Language چیست ؟ کلماتی مثل XML مخفف& Extensible Markup Language : HTMLمخفف Hyper Text Markup Language می باشند . : Markup Languageزبانی است که شیوه نمایش اطلاعات در صفحات وب را نشان می دهد . به این معنی که شما با استفاده از این زبان می توانید به متن های خود یادداشت یا حاشیه اضافه کنید. در این میان معروف ترین زبان های Markup به نام HTML و XML شناخته می شوند. اکثر وب سایت ها و نرم افزارهای تحت وبی که امروزه مشاهده می کنید با استفاده از یک روش داده های خود را ذخیره می کنند ، معمولترین روش استفاده از یک پایگاه داده مانند SQL سرور می باشد . شما در HTML در قالب برچسب ها یا Tag ها صرفا به صفحه وب می گویید که متون را چگونه نمایش دهد ، اما در XML شما داده ها را می توانید نگهداری کنید و قالب بندی چندان مد نظر نیست . برخی از وب سایت ها از XML برای ذخیره سازی داده ها استفاده می کنند ، توجه کنید که زمانیکه نام ذخیره داده در ذهن شما آمد باید به این نتیجه برسید که می توان از این داده Query گرفت ، بنابراین می توان به آن حمله از نوع Injection انجام داد . یکی از معروف ترین روش های حمله به دیتاهای ذخیره شده در XML به نام Xpath یا XPath Injection می باشد. <users> <user ID =1> <username>Admin</username> <password>MyPassw0rd</password> <role>admin</role> </userid></users>به کد وارد شده در بالا توجه کنید ، زمانیکه کاربر با استفاده از کد بالا می خواهد اطلاعاتی برای ورود به وب سایت را وارد کند ، بعد از اینکه کاربر نام کاربری و رمز عبور خود را در فرم وارد کرد یک XPath Query در PHP بصورت خودکار ایجاد می شود که حاوی نام کاربری و رمز عبور کاربر است ، این Query شبیه چیزی است که در پایین مشاهده می کنید : <?php$login = simplexml_load_file("users.xml");$result=$login->xpath("//User[username/test()='".$_POST['user']." AND password/text()='".$_POST['pass']."'";?>IV.Command Injectionتزریق دستورات یا Command Injection که به Shell Injection و Code Injection نیز معروف است یکی دیگر از حملاتی است که می توان به وب سرورها و نرم افزارهای کاربردی تحت وب انجام داد. هدف اصلی Command Injection وارد کردن و اجرا کردن کدها و دستورات مد نظر مهاجم در نرم افزار دارای نقطه ضعف امنیتی است . در چنین مواقعی نرم افزاری که کدها و دستورات وارد شده ناخواسته را اجرا می کند درکی از این ندارد که کد وارد شده مخرب است یا نیست و هر دستور ورودی از Shell را به عنوان یک دستور مجاز از طرف کاربر سیستم برداشت می کند. دستورات در محیطی وارد می شوند که سطح دسترسی برابر سطح دسترسی نرم افزار کاربردی دارد . این نوع حمله در مواقعی که شما اعتبارسنجی ورود اطلاعات را در برنامه نویسی خود ندیده اید که در اصطلاح به آن Input Validation می گویند انجام می شود و می تواند از پارامترهایی مثل فرمهای ورود و خروج اطلاعات ، کوکی ها ، Http Header ها و غیره استفاده کند.V.Directory Traversal وب سرورها نیز مانند ساختار فایلی که در سیستم عامل وجود دارد دارای سلسله مراتب می باشند ، وب سرورها معمولا دسترسی به ریشه یا root دایرکتوری های خود را محدود می کنند ، کاربران در این حالت می توانند به دایرکتوری های زیر مجموعه دسترسی پیدا کنند اما نمی توانند به مرحله بالاتر که ریشه است دسترسی پیدا کنند ، همچنین نمی توانند بصورت موازی از پوشه های کنار دستی نیز استفاده کنند و صرفا به محلی ارجاع داده می شوند که به آن دسترسی دارند. برخی اوقات به علل مختلف که بارزترین آنها سهل انگاری مدیر وب سرور است ، دسترسی های مناسب برای پوشه ریشه در نظر گرفته نمی شود و همین امر می تواند باعث شود مهاجم به دایرکتوری ریشه وب سرور دسترسی پیدا کند. Directory Traversal یا Path Traversal سوء استفاده از همین نقاط ضعفی است که در سطوح دسترسی یا عدم اعتبارسنجی داده های ورودی کاربر به ویژه نام فایل ها در وب سرور است که در نهایت می تواند باعث شود مهاجم با وارد کردن کاراکترهای مشخصی به Parent Directory یا پوشه بالاسری دسترسی پیدا کند هدف اینگونه حملات دسترسی پیدا کردن به فایل هایی است که نبایستی بصورت عمومی در دسترس قرار بگیرند ، در این حمله در نهایت هکر می تواند فایل های موجود در قسمت محدود شده یا Restricted را دستکاری کند و نتیجه لازم را بگیرد.Directory TraversalVI.Code Injectionدر Command Injection مهاجم دستورات مورد نظر خود را در خط فرمان سیستم قربانی اجرا می کند ، اما در Code Injection مهاجم کدهای مد نظر خود را در نرم افزار کاربردی که وجود دارد قرار می دهد که به جای کد اصلی نرم افزار اجرا شود.خلاصه تا اینجا با انواع حملاتی که به سمت سرور های اینترنتی و به ویژه وب سرورها انجام می شود آشنا شدید . توجه کنید که هرگاه فرمی برای ورود اطلاعات در یک وب سایت وجود داشته باشد آن وب سایت مستعد بروز حملات تزریق می باشد SQL Injection . ، XML Injection ، XSS Injection و code Injection را در اینجا با هم بررسی کردیم اما واقعا دنیای اینگونه حملات بسیار پیچیده و بزرگ است ، هر گونه پایگاه داده ای که بتوان از آن Query گرفت مستعد انجام Injection است ، چه بسا این روزها LDAP Injection نیز که بر روی پایگاه های داده Directory Service انجام می شود بسیار مرسوم شده است . http://g1.asset.aparat.com/flv_video_new/4421/b1cfae6df2a5d1b7c9514a7bd6f0f97113262870-720p.apt?wmsAuthSign=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6ImUwNTE0ZDI1NzY5OTFkMzQxNTJhYWQ2NzY0MGM2MTdiIiwiZXhwIjoxNTQ3MDgwMjQ4LCJpc3MiOiJTYWJhIElkZWEgR1NJRyJ9.NHZPy46ekAWQyDmOpZ4_2Mu_wptYfyaZh2FhyuDmcVs