آسیبپذیریهای برنامههای وب، مهاجمان را قادر میسازد تا دسترسی غیرمجاز به سیستمها/فرآیندها/داراییهای حیاتی سازمان داشته باشند. OWASP یا Open Web Security Project یک سازمان خیریه غیرانتفاعی است که بر بهبود امنیت نرم افزارها و برنامه های کاربردی وب تمرکز دارد. این سازمان فهرستی از آسیبپذیریهای امنیتی برتر وب را بر اساس دادههای سازمانهای امنیتی مختلف منتشر میکند. آسیبپذیریهای امنیتی وب بسته به قابلیت بهرهبرداری، شناسایی و تأثیر بر نرمافزار اولویتبندی میشوند. هدف اصلی OWASP Top 10 آموزش توسعه دهندگان، طراحان، مدیران، معماران و سازمان ها در مورد مهم ترین آسیب پذیری های امنیتی است.ما در این مقاله سعی بر این داریم آسیب پذیری های مهم وب سایت را بررسی کنیم.
10 مورد از آسیب پذیری های مهم به شرح زیر می باشد:
- SQL Injection
- Cross Site Scripting
- Broken Authentication and Session Management
- Insecure Direct Object References
- Cross Site Request Forgery
- Security Misconfiguration
- Insecure Cryptographic Storage
- Failure to restrict URL Access
- Insufficient Transport Layer Protection
- Invalidated Redirects and Forwards
آسیب پذیری SQL Injection:
Injection یک آسیبپذیری امنیتی است که به مهاجم اجازه میدهد تا با دستکاری دادههای ارائهشده توسط کاربر، عبارات SQL پشتیبان را تغییر دهد. تزریق زمانی اتفاق می افتد که ورودی کاربر به عنوان بخشی از دستور یا پرس و جو به مفسر ارسال می شود و مفسر را فریب می دهد تا دستورات ناخواسته را اجرا کند و به داده های غیرمجاز دسترسی پیدا می کند.در حالت کلی حملات تزریق زمانی اتفاق می افتد که کاربر بتواند داده های غیر قابل اطمینان را در برنامه وب وارد کند. و این آسیب پذیری از این ناشی میشود که هیچ گونه بررسی بر روی query های ورودی به وب سایت صورت نگیرد.
تزریق به 3 روش انجام میشود:
SQL queries
PHP queries
LDAP queries and OS commands
پیامد های این حمله بدین صورت است که مهاجم می تواند محتوای مخرب را به فیلدهای آسیب پذیر تزریق کند.داده های حساس مانند نام کاربری، رمز عبور و غیره را می توان از پایگاه داده را بخواند.داده های پایگاه داده را می تواند تغییر بدهد (درج/به روز رسانی/حذف).عملیات مدیریت را می تواند در پایگاه داده اجرا کند.
آسیب پذیری ها میتواند از قسمت های فیلدهای ورودی، URL هایی که با پایگاه داده در تعامل هستند اتفاق بیوفتد.
چگونه از رخداد این حمله جلوگیری کنیم؟
- پاکسازی ورودی ها: میتوان با به کارگیری رویکرد لیست سفید در سمت سرور ، از انجام اقدامات مخالف جلوگیری کرد.
- استفاده از API های امن و کوئری های پارامتری شده.
حمله Cross Site Scripting چیست؟
Cross Site Scripting که به نام XSS نیز شناخته می شود. آسیب پذیریهای XSS اسکریپتهای تعبیه شده در صفحه را هدف قرار میدهند که در سمت کلاینت یعنی مرورگر کاربر به جای سمت سرور اجرا میشوند. این نقصها زمانی رخ میدهند که برنامه دادههای غیرقابل اعتماد را دریافت کرده و بدون اعتبارسنجی مناسب به مرورگر وب ارسال کند. مهاجمان می توانند از XSS برای اجرای اسکریپت های مخرب بر روی کاربران در مرورگرهای قربانی استفاده کنند. از آنجایی که مرورگر نمی تواند بداند که آیا اسکریپت قابل اعتماد است یا خیر، اسکریپت اجرا می شود و مهاجم می تواند کوکی های جلسه را ربوده، وب سایت ها را خراب کند یا کاربر را به وب سایت های ناخواسته و مخرب هدایت کند. XSS حمله ای است که به مهاجم اجازه می دهد تا اسکریپت ها را روی مرورگر قربانی اجرا کند.
Broken Authentication and Session Management چه نوع حمله ای است؟
وبسایتها معمولاً یک کوکی جلسه و شناسه جلسه برای هر جلسه معتبر ایجاد میکنند و این کوکیها حاوی دادههای حساسی مانند نام کاربری، رمز عبور و غیره هستند. وقتی جلسه یا با خروج از سیستم یا مرورگر به طور ناگهانی بسته میشود، این کوکیها باید نامعتبر شوند، یعنی برای هر جلسه. باید یک کوکی جدید وجود داشته باشد.
Insecure Direct Object References چیست؟
Insecure Direct Object References یا (IDOR) زمانی رخ می دهد که یک برنامه کاربردی دسترسی مستقیم به اشیا را بر اساس ورودی ارائه شده توسط کاربر فراهم می کند. در نتیجه این آسیب پذیری، مهاجمان میتوانند مجوز را دور بزنند و مستقیماً به منابع موجود در سیستم دسترسی داشته باشند، به عنوان مثال پروندهها یا پروندههای پایگاه داده. ارجاعات مستقیم اشیاء ناامن به مهاجمان اجازه می دهد تا مجوز را دور بزنند و مستقیماً با تغییر مقدار پارامتر مورد استفاده برای اشاره مستقیم به یک شی، به منابع دسترسی پیدا کنند. چنین منابعی می تواند ورودی های پایگاه داده که متعلق به سایر کاربران می باشد،همچنین فایل های موجود در سیستم را هم شامل می شود. این به دلیل این واقعیت است که برنامه ورودی ارائه شده توسط کاربر را می گیرد و از آن برای بازیابی یک object بدون انجام بررسی های مجوز کافی استفاده می کند.
محیط تست این آسیب پذیری را می توان اینگونه طراحی کرد: برای آزمایش این آسیبپذیری، آزمایش کننده ابتدا باید تمام مکانهایی را در برنامه ترسیم کند که ورودی کاربر برای ارجاع مستقیم به object استفاده میشود. به عنوان مثال، مکان هایی که ورودی کاربر برای دسترسی به ردیف پایگاه داده، فایل، صفحات برنامه و موارد دیگر استفاده می شود. سپس آزمایشگر باید مقدار پارامتر مورد استفاده برای ارجاع object را تغییر دهد و ارزیابی کند که آیا امکان بازیابی object متعلق به سایر کاربران وجود دارد یا خیرکه در غیر این صورت دور زدن مجوز امکان پذیر می باشد.
چگونه از این آسیب پذیری جلوگیری کنیم؟
برای جلوگیری از آسیب پذیریهای IDOR پرداخته میشود. این رویکردها، علی رغم اینکه دلیل اصلی آسیب پذیریهای IDOR را برطرف نمیکنند، اما خطرات ناشی از ارجاع مستقیم را کاهش میدهند. اولین رویکرد این است که ارجاعات مورد نظر با ارجاعات غیرمستقیم به object ها، که در ادامه به صورت داخلی به object واقعی Map میشوند، جایگزین شوند. این رویکرد میتواند به معنای استفاده از یکMap ارجاع موقت به ازای هر Session باشد که فقط شامل مقادیری معتبر برای یک کاربر مشخص و همراه با کلیدهایی تصادفی و فاقد ترتیب باشد.
استفاده از Hashهای امن به جای ارجاع به object واقعی یک راه دیگر برای دشوار کردن دستکاری مقادیر قابل کنترل توسط کاربر است. برای مشاهده توصیههایی دقیق در مورد جایگزینی شناسههای مستقیم با Hashهای امن، علاقمندان میتوانند به OWASP IDOR Prevention Cheat Sheet مراجعه کنند.
هر دو روش فوق به طور موثر به پنهان کردن جزئیات پیادهسازی داخلی میپردازند. با این حال، این روشها به مساله اساسی نهفته و زیرین یعنی کنترل دسترسی نمیپردازند. یک رویکرد قویتر برای از بین بردن آسیبپذیریهای IDOR اطمینان از مدیریت مناسب Sessionها و بررسیهای کنترل دسترسی کاربر در سطح object ها است. در این صورت، حتی اگر یک مهاجم خبره موفق به کشف یک ارجاع به object داخلی شده و آن را دستکاری کند نیز قادر به بدست آوردن دسترسی غیرمجاز نخواهد بود.
Cross Site Request Forgery چه حمله ای است؟
CSRF یک آسیبپذیری بسیار رایج است. این حمله ای است که کاربر را مجبور می کند اقدامات ناخواسته ای را روی یک برنامه وب که کاربر در حال حاضر احراز هویت شده است انجام دهد. بسته به برنامه، مهاجم می تواند هر یک از اقداماتی را که کاربر می تواند انجام دهد مانند افزودن کاربر، اصلاح محتوا، حذف داده ها را انجام دهد. تمام قابلیت هایی که در دسترس قربانی است می تواند توسط مهاجم استفاده شود. تنها استثنای این قانون، صفحه ای است که به اطلاعات اضافی نیاز دارد که فقط کاربر قانونی می تواند بداند (مانند رمز عبور کاربر).
راه کار امنسازی:
اطلاعات اضافی را در هر درخواست HTTP ارسال کنید که می تواند برای تعیین اینکه آیا درخواست از منبع مجاز آمده است یا خیر استفاده شود. حدس زدن این «توکن اعتبارسنجی» برای مهاجمی که قبلاً به حساب کاربری کاربر دسترسی ندارد، دشوار است. اگر یک درخواست دارای نشانه اعتبارسنجی نباشد یا نشانه با مقدار مورد انتظار مطابقت نداشته باشد، سرور باید درخواست را رد کند.
اگر فرم را در درخواست ajax ارسال می کنید، از هدرهای HTTP سفارشی می توان برای جلوگیری از CSRF استفاده کرد زیرا مرورگر سایت ها را از ارسال سرصفحه های HTTP سفارشی به سایت دیگری جلوگیری می کند اما به سایت ها اجازه می دهد تا با استفاده از XMLHttpRequest سرصفحه های HTTP سفارشی را برای خود ارسال کنند.
آسیب پذیری Security Misconfiguration چه نوع آسیب پذیری می باشد؟
پیکربندی نادرست امنیتی زمانی رخ می دهد که تنظیمات پیکربندی سیستم یا برنامه وجود نداشته باشد یا به اشتباه اجرا شده باشد و امکان دسترسی غیرمجاز را فراهم کند. تنظیمات اشتباه امنیتی رایج ممکن است در نتیجه تغییر نکردن تنظیمات پیشفرض، تغییرات پیکربندی اشتباه یا سایر مشکلات فنی رخ دهد.این پیکر بندی های می تواند شامل عدم دریافت پچ های آپدیت، صفحات وب استفاده نشده، دایرکتوری ها و فایل های نا ایمن، مجوزهای پیش فرض برای به اشتراک گذاری داده ها بر روی تجهیزات فضای ابری و همچنین خدمات غیر ضروری می باشد. Security misconfiguration ممکن است در سرورهای وب و اپلیکیشن ها، دیتابیس، خدمات شبکه، کدهای سفارشی، قالب ها و تجهیزات مجازی از پیش نصب شده رخ دهد.
برای جلوگیری از این حمله می توان با تغییر تنظیمات پیش فرض webmaster یا CMS، حذف کدهای غیر ضروری و نظارت بر کاربران می توانید مانع از این تهدیدات شد.
Insecure Cryptographic Storage چیست؟
Insecure Cryptographic Storage یکی از شیوههایی است که در آن اطلاعات حساس و محرمانه با استفاده از رمزنگاری ضعیفی ذخیره میشوند. در این شیوه، اطلاعات مانند رمز عبور، اطلاعات کارت اعتباری و دیگر اطلاعات حساس با استفاده از الگوریتمهای رمزنگاری ضعیف یا از نظر امنیتی غیرقابل قبولی ذخیره میشوند.
این نوع ذخیرهسازی معمولا به دلیل عدم صحت و سلامت در تصمیمگیری در مورد استفاده از الگوریتمهای رمزنگاری امن و قابل اطمینان ایجاد میشود. به علاوه، در بسیاری از موارد، این اطلاعات در پایگاه دادههایی با دسترسی عمومی، در فایلهای متنی یا در فضای ذخیرهسازی مبتنی بر ابر ذخیره میشوند که این موضوع احتمال دسترسی غیرمجاز و دزدیده شدن اطلاعات حساس را افزایش میدهد.
به عنوان مثال، اگر یک سایت وب به جای استفاده از الگوریتمهای رمزنگاری امن برای ذخیره رمز عبور کاربران، از رمزنگاری نامناسب و ضعیف استفاده کند، در صورت دسترسی غیرمجاز به پایگاه دادههای سایت، رمز عبور کاربران به راحتی قابل دسترسی و استخراج خواهد بود.
برای مقابله با Insecure Cryptographic Storage و جلوگیری از ذخیرهسازی نامناسب و ضعیف اطلاعات حساس با استفاده از رمزنگاری، میتوانید به روشهای زیر رجوع کنید:
استفاده از الگوریتمهای رمزنگاری امن: بهترین راه برای جلوگیری از Insecure Cryptographic Storage، استفاده از الگوریتمهای رمزنگاری قوی و امن است. الگوریتمهای معروف و امن مانند AES، RSA و SHA-2 برای این منظور مناسب هستند.
استفاده از ابزارهای امنیتی: استفاده از ابزارهای امنیتی مانند فایروال، آنتی ویروس و نرمافزارهای کنترل دسترسی میتواند کمک کند تا دسترسی غیرمجاز به سیستمها و پایگاه دادههای حاوی اطلاعات حساس محدود شود.
ذخیره سازی اطلاعات با استفاده از روشهای امن: برای جلوگیری از دسترسی غیرمجاز به اطلاعات حساس، بهتر است از روشهای ذخیرهسازی امن مانند رمزنگاری پایهای، فشردهسازی، تفکیک داده و رمزنگاری بر روی پایگاه داده استفاده شود.
آموزش و آگاهیبخشی: برای جلوگیری از Insecure Cryptographic Storage و دسترسی غیرمجاز به اطلاعات حساس، کارکنان و کاربران باید آموزش دیده و آگاهیبخشی شوند تا درباره روشهای امنیتی و حفاظت از اطلاعات حساس آگاه شوند و از روشهای نامناسب و ضعیف خودداری کنند.
Failure to restrict URL access چیست؟
Failure to restrict URL access به معنای ناتوانی در محدود کردن دسترسی به URL های حساس در یک وبسایت است. به عبارت دیگر، اگر برخی از صفحات یا منابع وب، اطلاعات حساسی را در اختیار دارند و نباید به کاربران عادی نمایش داده شوند، اما با داشتن آدرس URL، کاربران میتوانند به آنها دسترسی پیدا کنند، در این صورت به Failure to restrict URL access میگویند.
این مسئله بسیار خطرناک است، زیرا اطلاعات حساس مانند اطلاعات شخصی، اعتباری و حساب بانکی کاربران ممکن است در اختیار هکرها و سایر افراد ناشناخته قرار گیرد.
برای جلوگیری از این مشکل، میتوانید از راهکارهای زیر استفاده کنید:
استفاده از فرمانات دسترسی مناسب: استفاده از فرمانات دسترسی مناسب در فایلهای کانفیگ وبسایت مانند .htaccess و web.config کمک میکند تا دسترسی به URL های حساس محدود شود.
تأیید هویت کاربران: برای جلوگیری از دسترسی غیرمجاز به URL های حساس، میتوانید به جای محدود کردن دسترسی با استفاده از IP، از تأیید هویت کاربران با استفاده از اسامی کاربری و رمز عبور استفاده کنید.
محافظت از دیتابیس: برای جلوگیری از انجام حملات Injection و دسترسی غیرمجاز به دیتابیس، باید مطمئن شوید که هیچ پارامتری از URL به عنوان پارامتر ورودی به بانک اطلاعاتی ارسال نشود.
بررسی آمار دسترسی: بررسی آمار دسترسی به صفحات مختلف وبسایت میتواند به شما کمک کند تا مشکلات در زمینه دسترسی به URL های حساس را محدود کنید.
برای جلوگیری از Failure to restrict URL Access و محافظت از اطلاعات حساس وبسایت، میتوانید از راهکارهای زیر استفاده کنید:
استفاده از فرمانات دسترسی: استفاده از فرمانات دسترسی مناسب در فایلهای کانفیگ وبسایت مانند .htaccess و web.config کمک میکند تا دسترسی به URL های حساس محدود شود.
تأیید هویت کاربران: برای جلوگیری از دسترسی غیرمجاز به URL های حساس، میتوانید به جای محدود کردن دسترسی با استفاده از IP، از تأیید هویت کاربران با استفاده از اسامی کاربری و رمز عبور استفاده کنید.
محافظت از دیتابیس: برای جلوگیری از انجام حملات Injection و دسترسی غیرمجاز به دیتابیس، باید مطمئن شوید که هیچ پارامتری از URL به عنوان پارامتر ورودی به بانک اطلاعاتی ارسال نشود.
استفاده از روشهای رمزنگاری امن: اطلاعات حساس مانند رمز عبور باید به صورت رمزنگاری شده در دیتابیس ذخیره شوند تا در صورت دسترسی ناصحیح به دیتابیس، اطلاعات حساس محافظت شود.
بررسی آمار دسترسی: بررسی آمار دسترسی به صفحات مختلف وبسایت میتواند به شما کمک کند تا مشکلات در زمینه دسترسی به URL های حساس را پیدا کرده و بر آنها برای محافظت از اطلاعات حساس وبسایت تمرکز کنید.
ارتقاء سیستم: ارتقاء سیستمهای امنیتی و نرمافزارهای مربوط به وبسایت میتواند به شما کمک کند تا در مقابل حملات امنیتی محافظت شوید.
Insufficient Transport Layer Protection به چه آسیب پذیری می گویند؟
Insufficient Transport Layer Protection (ناکافی بودن محافظت لایه حمل و نقل) به آسیب پذیری امنیتی اشاره دارد که در هنگام انتقال داده از طریق شبکه بدون رمزگذاری و یا مکانیزم های احراز هویت صحیح ایجاد می شود. لایه حمل و نقل مسئول اطمینان از انتقال امن داده ها بین دو موجودیت ارتباط برقرار کننده است. اگر رمزگذاری صحیح و یا مکانیزم های احراز هویت در لایه حمل و نقل وجود نداشته باشد، داده ها در معرض خطر قرار می گیرند و می توانند توسط مهاجمان قابل دسترسی باشند.
برای جلوگیری از آسیب پذیری Insufficient Transport Layer Protection، می توانید از راهکارهای زیر استفاده کنید:
استفاده از پروتکل های امن: برای انتقال داده ها بین دو موجودیت ارتباط برقرار کننده، از پروتکل های امن مانند HTTPS، SSL یا TLS استفاده کنید. این پروتکل ها از رمزگذاری انتقال داده ها استفاده می کنند و احراز هویت صحیح طرف مقابل را تضمین می کنند.
بروزرسانی نرم افزارها و سیستم عامل: اطمینان حاصل کنید که نرم افزارها و سیستم عامل شما بروزرسانی شده و به روز هستند. بروزرسانی های نرم افزاری شامل بهبودهای امنیتی و رفع آسیب پذیری ها است.
استفاده از فایروال: استفاده از فایروال، می تواند به عنوان یک نوع فیلتر بین شما و شبکه اینترنت شما عمل کند و تلاش برای حملات اینترنتی به کامپیوتر شما را محدود کند.
محدود کردن دسترسی: دسترسی به داده های حساس و مهم باید محدود شود و فقط به افرادی که نیاز به آن دارند، اجازه دسترسی داده شود. همچنین، رمزنگاری داده ها و استفاده از مکانیزم های احراز هویت نیز می تواند از جمله راه های محافظت از داده های حساس باشد.
آموزش و پرورش کاربران: آموزش و پرورش کاربران نیز می تواند موثر باشد. برای مثال، آنها باید با مفاهیم امنیتی مانند رمزنگاری، مکانیزم های احراز هویت، و پروتکل های امن آشنا باشند.
Invalidated Redirects and Forwards چه آسیب پذیری می باشد؟
Invalidated Redirects and Forwards یک آسیب پذیری امنیتی است که در زمانی رخ می دهد که یک برنامه وب، ورودی کاربر را که می تواند شامل پارامتر URL باشد، پذیرفته و برای هدایت کاربر به صفحه یا وب سایت دیگری استفاده می کند. این آسیب پذیری می تواند توسط مهاجمان برای هدایت کاربران به وب سایت های مخرب یا دزدیدن اطلاعات حساس بهره برداری شود.
برای مثال، یک حمله فیشینگ ممکن است از یک invalidated redirect استفاده کند تا کاربر را به یک وب سایت مخرب هدایت کند. به طور معمول، مواردی که باعث invalidated redirect می شوند عبارتند از: استفاده از ورودی کاربر بدون بررسی ورودی، تضعیف بررسی ورودی، یا عدم بررسی ورودی کاربر. برای جلوگیری از این آسیب پذیری، برنامه های وب باید ورودی کاربران را بررسی کرده و محدودیت های لازم برای ورودی های کاربر اعمال کنند. همچنین، استفاده از ارتباط امن به صورت HTTPS نیز به کاهش خطرات این نوع آسیب پذیری کمک می کند.
Invalidated Redirects and Forwards چیست؟
برای جلوگیری از Invalidated Redirects and Forwards در برنامه های وب، می توان از روش های زیر استفاده کرد:
بررسی والید بودن URL: برنامه های وب باید بررسی کنند که آیا URL ورودی کاربر معتبر است یا خیر. اگر URL نامعتبر است، کاربر باید به یک صفحه خطا منتقل شود.
محدود کردن URL ورودی: برنامه های وب باید محدودیت های لازم برای URL های ورودی کاربر اعمال کنند. به عنوان مثال، باید فقط به URL هایی که به داخل برنامه هستند، اجازه دسترسی داده شود.
استفاده از HTTP Referer Header: این هدر با ارسال درخواست به سرور مشخص می کند که کاربر از کجا به برنامه هدایت شده است. برنامه های وب می توانند برای بررسی صحت ارجاع از این هدر استفاده کنند.
استفاده از اتصال امن HTTPS: استفاده از ارتباط امن HTTPS به جای HTTP معمول، می تواند کمک کند تا کاربران در برابر حملات مانند invalidated redirects and forwards محافظت شوند.
توجه به مسائل امنیتی در زمان توسعه: برای جلوگیری از وقوع invalidated redirects and forwards، باید در زمان توسعه برنامه های وب به مسائل امنیتی توجه شود و بررسی های لازم برای جلوگیری از این نوع آسیب پذیری انجام شود.