مفهوم آسیب پذیری امنیت وب و جلوگیری از آن در نرم افزار تحت وب

سه شنبه 26 خرداد 1394

امروزه اینترنت یکی از مهم ترین و گسترده ترین ارتباطات در سراسر جهان می باشد و نقش بسیار مهمی را ایفا می کند .

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

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

نحوه ایجاد یک سایت امن در ASP.Net

در این بخش انواع تهدیدات امنیتی و راه های متفاوتی جلوگیری از آن ارئه شده است .

حملات Code Injection

این یکی از حملات بسیار معمول است که در آن کاربر مخرب می تواند برخی از اسکریپت های دلخواه را به برنامه  تزریق کند .کد وارد شده برای ایجاد آسیب در برنامه اجرا می شود.
حملات Sql Injection و Cross Site Scripting دو حمله رایج در این رده هستند .
 
Session Hijacking
Session یک شناسه منحصربفرد که توسط نرم افزار تحت وب برای شناسایی کاربر متصل ایجاد شده است .این شناسه ها اغلب در cookie ها و آدرس های اینترنتی که به جلو رفته و به  سرور بازمی گردد ذخیره می شوند .در این حمله شناسه Session کاربر را سرقت کند و با آن Session به وبسایت متصل شود.نرم افزار تحت وب درخواست مهاجم را دریافت می کند و به مهاجم اجازه دسترسی به هرچیزی که کاربر دسترسی دارد را می دهد .
نحوه انجام آن بصورت یر می باشد :
1. یک مهاجم می تواند از حمله XSS و افزودن برخی script ها که اطلاعات cookie را ارسال می کند استفاده کند .
2 . یک مهاجم می تواند از ابزار جستجوی شبکه استفاده کند و اطلاعات حساس در شبکه که از وبسایت منتقل می شوند را دریافت کند . این معمولا Network eavesdropping نامیده می شود .
نحوه جلوگیری از Session Hijacking
1. از آسیب پذیری Cross-Site Scripting  در وبسایت جلوگیری کنید .
2.جلوگیری از ذخیره سازی برخی اطلاعات امن  در بخش های Hidden، رشته ای Query و... . که به آن حمله Web Parameter Tampering یا Parameter manipulation گفته می شود .
3 . همیشه از SSL در تایید اعتبار صفحات و ماژول هایی که برخی معاملات امن را انجام می دهند استفاده کنید .
4 . به سیستم های چند کاربره اجازه اتصال به Session یکسان از سیستم های مختلف را ندهید . می توانید این کار را با محدود کردن کاربران به اتصال از یک IP انجام دهید .
5 . زمانی که معاملات امن انجام می شود اعتبار کاربران را مجددا تایید کنید .
6 . کاربران را با پرسیدن برخی سوالات امنیتی در هنگام انجام معاملات امن تایید کنید .
 
جعل هویت (Identity spoofing)
Identity spoofing مکانیزمی است که در آن مهاجم هویت کاربر موجود در برنامه را سرقت می کند و به قسمت های محدود شده دسترسی پیدا می کند .
 این کار بطور معمول با حدس نام کاربری و رمز عبور انجام می شود،سرقت نام کاربری و رمز عبور از لینک های ارتباطی non-SSL  می باشد .
 
نحوه انجام بصورت زیر می باشد :
 
1 . Username و Password را حدس می زند . مهاجم می تواند برای انجام این کار از یک حمله Brute force یا حمله Dictionary استفاده کند . این  اتفاق زمانی خواهد افتاد که سایت شما هیچ سیاست رمز عبوری نداشته باشد .
 
2 . استفاده از ابزار جستجوی شبکه برای خواندن اطلاعات حفاظت شده ای که درسراسر لینک های ارتباطی non-SSL مانند حمله Network eavesdropping ارسال شده اند .
 
3 . از حمله Sql Injection  استفاده می شود . زمانی که  Password به عنوان یک متن واضح در پایگاه داده ذخیره می شود مهاجم می تواند نام کاربری و رمز عبور را در برنامه دریافت کند .
 
نحوه جلوگیری از Identity spoofing
 
1. سیاست Password قوی داشته باشید . برای مثال ، رمز عبور هایی با حداقل یک عدد،یک نماد با طول حداقل 8 نویسه در هنگام ثبت نام کاربر قابل قبول باشند .
2 . همیشه از SSL در اعتبار سنجی صفحات و در ماژول هایی که برخی transactionهای امن را انجام می دهند، استفاده شود .

3 . پیشگیری از حملات code injection.

4 . زمان آخرین بازدید و و IP  که کاربر برای اطمینان از اعتبار سنجی مجدد سایت مشاهده کرده ، نمایش داده می شود .کاربر را قادر می سازد که در صورت نیاز رمز عبور را تغییر دهد .

Web Parameter Tampering یا Parameter manipulation

Form fields ، View State و Query String در برابر این حمله آسیب پذیر هستند . کاربر مخرب می تواند اطلاعات حساسی را که از طریق این پارامتر ها ارسال شده اند را نگه داری کند و در عملکرد نرم افزار شما اختلال ایجاد می کند .

نحوه انجام آن بصورت زیر می باشد :

1 .استفاده از ابزار جستجوی شبکه برای خواندن اطلاعات حفاظت شده ای که درسراسر لینک های ارتباطی non-SSL مانند حمله Network eavesdropping ارسال شده اند .

2 . مهاجم میتواند شناسه Session را از Query String سرقت کند و به قسمت محدود شده دسترسی یابد .

3 . مهاجم می تواند cookie ها را سرقت کند و به قسمت های محدود شده دسترسی یابد .

نحوه پیشگیری از Web Parameter Tampering یا Parameter manipulation

1 . همیشه از SSL در اعتبار سنجی صفحات و در ماژول هایی که برخی transactionهای امن را انجام می دهند، استفاده شود .

2 . برای ذخیره سازی تایید اعتبار شناسه Session از cookieهای مداوم استفاده نشود .

3 . به عنوان کاربر،گزینه Remember password را در صفحه Logon یک سیستم عمومی انتخاب نکنید .

Network eavesdropping

مهاجم می تواند از برخی ابزار نظارت بر شبکه برای دسترسی به اطلاعات حساسی که از بسته اطلاعاتی که بین کاربر و سرور ارسال می شوند استفاده کند .

افشای اطلاعات (Information disclosure)

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

نحوه انجام آن بصورت زیر می باشد :

مهاجم می تواند توسط ارائه ورودی های مناسب و ایجاد موارد استثنا با اطلاعات حساس از نرم افزار شما بهره برداری کند .

متن زیر را به عنوان یک پیغام استثنا در نظر بگیرید :

System.Data.SqlClient.SqlException: Invalid object name 'Employees1'.

پیام بالا به روشنی می گوید ، هیچ شی در پایگاه داده بنامEmployees1 وجود ندارد. نرم افزاری که در برابر Sql injection اسیب پذیری دارد می تواند با استفاده از جزئیات بالا براحتی بهره برداری کند . مهاجم می تواند نام های مختلف جدول ها حدس بزند خصوصا  نام هایی که صفحه ارئه میدهد و در نهایت نام صحیح جدول را به دست می آورد و آسیب ایجاد می کند .

نحوه پیشگیری از آسیب پذیری افشای اطلاعات

1 . پیام های عمومی را در موارد استثنا نمایش می دهد. زمانی که هر خطایی رخ دهد می توانید جزئیات استثنا را مشاهده کنید و به منظور اشکال زدایی Trace  کنید .

2 . زمانی که خطایی رخ می دهد مسیر خود را به صفحه خطای عمومی تغییر دهید .

3 . هرگز در Web.Config ویژگی mode را در <customErrors> برابر با Off قرار ندهید.

4 . پیغام خطا را با اطلاعات خاص که مهاجم را به هدفش نزدیک می کند ارائه ندهید. برای مثال،هرگز در صفحه log in پیام هایی مانند “Your userid is invalid”  یا “Your password does not match the typed userid” نمایش ندهید . می توانید از پیامی مانند “Login failed. Try again”  استفاده کنید .

 

 

 

 

 

 

قربانی

نویسنده 44 مقاله در برنامه نویسان

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید