“ OWASP Top 10” یا “یا ۱۰ مورد آسیب پذیری مهم owasp” یک سند استاندارد آگاهی برای توسعه دهندگان و امنیت برنامههای وب است. این یک اجماع گسترده در مورد بحرانیترین خطرات امنیتی برای اپلیکیشن های وب را نشان می دهد. شرکت ها میبایست این سند را بپذیرند و فرآیند اطمینان از اینکه برنامه های کاربردی وب آنها این خطرات را به حداقل رساندهاند، آغاز کنند.
استفاده از OWASP Top 10 شاید موثرترین و اولین قدم برای تغییر فرهنگ توسعه نرم افزار در سازمان ها باشد که منجر به تولید کد ایمنتر میگردد. این مقاله به بررسی گزارش کسپرسکی در خصوص لیست ۱۰ آسیب پذیری برتر و پُر استفاده در برنامههای کاربردی وب بین سالهای ۲۰۲۱ تا ۲۰۲۳ پرداخته است.
مشخصات شرکت کنندگان و برنامه های کاربردی
دادههای مورد نظر از نمونهای از پروژههای ارزیابی امنیت اپلیکیشن که تیم کسپرسکی در سالهای 2021-2023 به انجام رسانده است، جمعآوری شده است. اکثر برنامه های کاربردی وب متعلق به شرکتهای مستقر در روسیه، چین و خاورمیانه میباشند. تقریباً نیمی از برنامهها (44٪) به زبان جاوا نوشته شدهاند و پس از آن NodeJS (۱۷%) و PHP (۱۲%) قرار دارند و بیش از یک سوم (39%) آنها از معماری میکروسرویس استفاده میکنند.
ما دادههای بهدستآمده از طریق ارزیابی اپلیکیشن های وب که از رویکردهای جعبه سیاه، خاکستری و سفید پیروی میکردند را تجزیه و تحلیل کردیم. تقریباً هر برنامهای که با جعبه خاکستری ارزیابی شده بود با جعبه سیاه نیز تجزیه و تحلیل شد. از این رو، ما این دو رویکرد را در آمار خود ترکیب کردیم و اکثریت قریب به اتفاق (83٪) پروژههای اپلیکیشن وب از روشهای جعبه سیاه و خاکستری استفاده کرده بودند.
اختلافات ناشی از رویکردهای متفاوت در تحلیل
از آنجایی که روشهای جعبه سیاه، خاکستری و سفید مستلزم سطوح مختلف دسترسی به برنامهها میباشند، انواع آسیبپذیریهایی که به احتمال زیاد شناسایی میشدند نیز متفاوت بودند. ما آسیبپذیریهای کشف شده را با و بدون دسترسی به کد منبع برنامه مقایسه کردیم. در نتیجه، چهار آسیبپذیری از پنج آسیبپذیری گسترده مطابقت داشتند، اما تفاوتهایی نیز وجود داشت.
جعبه سیاه/خاکستری | جعبه سفید | |
Sensitive Data Exposure (افشای داده های حساس) | در مقایسه با | Broken Access Control (کنترل دسترسی ناقص) |
Broken Access Control (کنترل دسترسی ناقص) | SQL Injection (تزریق SQL) | |
Cross-Site Scripting (اسکریپت بین سایتی) | Sensitive Data Exposure (افشای داده های حساس) | |
Server-Side Request Forgery (جعل درخواست سمت سرور) | Broken Authentication (احراز هویت ناقص) | |
Broken Authentication (احراز هویت ناقص) | Cross-Site Scripting (اسکریپت بین سایتی) |
علاوه بر این، آمار نشان میدهد که رویکرد جعبه سفید امکان یافتن تعداد بیشتری از آسیبپذیریهای شدید مانند SQL Injection را میدهد. به طور متوسط، تجزیه و تحلیل جعبه سیاه/خاکستری، 23 آسیب پذیری و تجزیه و تحلیل جعبه سفید 30 آسیب پذیری را شناسایی کرده است.
اگرچه رویکرد جعبه سفید امکان یافتن تعداد بیشتری از آسیبپذیریها را در هر برنامه فراهم میکند، اما از رویکردهای جعبه سیاه و خاکستری نیز میتوان برای نگاه به برنامه از دیدگاه عامل مخرب استفاده کرد تا آسیبپذیریهایی را که ابتدا باید اصلاح شوند، شناسایی نمود.
10 آسیب پذیری مهم در اپلیکیشنهای وب
کسپرسکی نتایج پروژههای ارزیابی برنامههای کاربردی وب را برای شناسایی گستردهترین و شدیدترین آسیبپذیریهایی که دنیای دیجیتال طی سه سال گذشته با آن مواجه شده بود، تجزیه و تحلیل کرده است که نتیجه آن در جدول زیر ارائه شده است.
۱۰ آسیب پذیری مهم از دیدگاه کسپرسکی | رتبه بندیOWASP |
Broken Access Control (کنترل دسترسی ناقص) | |
Sensitive Data Exposure (افشای داده های حساس) | |
Server-Side Request Forgery (SSRF) (جعل درخواست سمت سرور) | |
SQL Injection (تزریق SQL) | |
Cross Site Scripting (XSS) (اسکریپت بین سایتی) | |
Broken Authentication (احراز هویت ناقص) | |
Security Misconfiguration (پیکربندی نادرست امنیتی) | |
Insufficient Protection from Brute Force Attacks (محافظت ناکافی در برابر حملات بروت فورس) | |
Weak User Password (رمز عبور ضعیف کاربر) | |
Using Components with Known Vulnerabilities (استفاده از کامپوننت هایی با آسیب پذیری های شناخته شده) |
1. کنترل دسترسی ناقص
70 درصد از برنامههای کاربردی وب آنالیز شده حاوی آسیب پذیری های مرتبط با مسائل کنترل دسترسی بودند.
تقریباً نیمی از آسیبپذیریهای “کترل دسترسی ناقص” دارای سطح ریسک متوسط و 37 درصد سطح ریسک بالا میباشند. آسیبپذیریهای پرخطر میتوانند باعث ایجاد خطا در برنامه شوند و بر کسبوکار مشتریان تأثیر بگذارند. اعتبارسنجی ناکافی دادههای ارائه شده در یک برنامه، به ما اجازه میدهد به سرویسهای داخلی دست یابیم و به طور بالقوه حملاتی را اجرا کنیم که منجر به ضرر مالی میشوند.
راهکار امنیتی: کنترلهای احراز هویت و مجوز را با توجه به مدل دسترسی مبتنی بر نقش اجرا کنید. بهطور پیشفرض، دسترسی را رد کنید، مگر اینکه منبع در دسترس عموم باشد.
2. افشای داده های حساس
این نوع آسیبپذیری یکی دیگر از مواردی است که اغلب در برنامههای کاربردی وب یافت میشود. در مقایسه با کنترل دسترسی ناقص، افشای داده های حساس شامل تعداد بیشتری از آسیب پذیری های کم خطر بود، اما آسیب پذیری های پرخطری نیز وجود داشتند.
در میان دادههای حساسی که در طول تجزیه و تحلیل خود شناسایی کردیم، پسوردهای یکبار مصرف رمزگذاری نشده و گواهی های اعتبار، مسیرهای کامل به فهرستهای انتشار برنامههای وب و سایر اطلاعات داخلی وجود داشتند که میتوان از آنها برای درک معماری برنامه استفاده کرد.
راهکار امنیتی: فایلهای حاوی دادههای حساس، مانند گذرواژهها یا نسخههای پشتیبان، را در دایرکتوریهای انتشار برنامههای وب ذخیره نکنید.
3. جعل درخواست سمت سرور (SSRF)
محبوبیت معماری ابری و میکروسرویس در حال افزایش است. معماری میکروسرویس، سطح حمله برای بهره برداری SSRF را به دلیل ارتباط بیشتر سرویس ها از طریق HTTP (یا سایر پروتکل های سبک وزن) در مقایسه با معماری سنتی گسترش میدهد. بیش از نیمی (57%) از برنامههایی که ما آنالیز کردیم حاوی آسیبپذیری بودند که به یک عامل مخرب اجازه میدادند پس از دور زدن منطق برنامه با سرویسهای داخلی ارتباط برقرار کنند ( یعنی جعل درخواست سمت سرور).
به طور خاص، یک مهاجم میتواند از SSRF در زنجیرهای با آسیب پذیریهای دیگر برای توسعه حمله به وب سرور یا خواندن کد منبع برنامه استفاده کند.
راهکار امنیتی: در صورت امکان، یک لیست مجاز از منابعی که برنامه میتواند درخواست کند ایجاد کنید و از درخواست به منابعی که در آن لیست نیستند جلوگیری به عمل آورید. درخواست هایی که حاوی URL کامل هستند را نپذیرید. فیلترهای فایروال را برای جلوگیری از دسترسی به دامنه های غیرمجاز تنظیم کنید.
4. SQL Injection
بیشتر آسیب پذیریهای پرخطر در سالهای 2021-2023 با SQL Injection مرتبط بودند. با این حال، ما این دسته را در رده چهارم قرار دادیم زیرا تنها 43 درصد از برنامههایی که تجزیه و تحلیل کردیم در برابر آن آسیبپذیر بودند.
آسیب پذیری هایی از این نوع میتوانند منجر به سرقت اطلاعات حساس یا اجرای کد از راه دور شوند. SQL Injection در طی یکی از پروژهها، به برنامهای که برای ثبتنام توسط هر کاربر اینترنتی باز بود، به ما اجازه داد تا گواهی اعتبار یک مدیر سیستم داخلی را دریافت کنیم.
راهکار امنیتی: از کوئریهای SQL پارامتر شده در کد منبع برنامه به جای ترکیب آنها با یک الگوی کوئری SQL استفاده کنید. اگر نمیتوانید از کوئریهای SQL پارامتر شده استفاده کنید، مطمئن شوید که هیچ دادهای که توسط کاربر وارد شده و در ایجاد کوئری های SQL استفاده میشود، نمی تواند برای اصلاح منطق کوئری استفاده گردد.
5. اسکریپت بین سایتی (XSS)
آسیبپذیریهای XSS در 61 درصد از برنامههای کاربردی وب آنالیز شده، کشف شدند. این آسیبپذیری در اغلب موارد، دارای ریسک متوسطی بود، از این رو ما آن را در رتبه پنجم قرار دادیم.
بیش از نیمی (55٪) از تمام آسیب پذیری های XSS مربوط به برنامه های کاربردی مورد استفاده توسط شرکتهای فناوری اطلاعات و پس از آن بخش عمومی (39٪) بودند.
یک حمله XSS علیه کلاینت های برنامه میتواند برای به دست آوردن اطلاعات احراز هویت کاربر مانند کوکی ها، فیشینگ یا انتشار بدافزار مورد استفاده قرار گیرد. XSS در یک سناریوی حمله، در زنجیرهای همراه سایر آسیبپذیریها اجازه میدهد رمز عبور کاربر را به یک مقدار شناخته شده تغییر داده و به این ترتیب با سطح دسترسی آن کاربر به برنامه دست یابد.
راهکار امنیتی: با جایگزین کردن کاراکترهای بالقوه ناامن که میتوان از آنها برای فرمت صفحات HTML به معادلهای آنها استفاده کرد، پردازش ورودی کاربر اپلیکیشن وب فراهم میشود. این باید برای هر دادهای که از منابع خارجی به دست میآید و در مرورگر نمایش داده میشود (از جمله هدرهای HTTP، مانند User-Agent و Referer) انجام گردد.
6. احراز هویت ناقص
اگرچه تقریباً نیمی از آسیبپذیریهایی که در این دسته کشف شدهاند دارای سطح ریسک متوسط (47٪) میباشند، اما موارد پرخطر نیز وجود داشته که امکان دسترسی به برنامه وب را از سوی کلاینت مشتریان فراهم کرده است.
به عنوان مثال، یک برنامه خاص فاقد بررسی امضای JWT (Jason Web Token) است، بنابراین یک عامل مخرب میتواند JWT خود را (با مشخص کردن ID کاربر دیگر) تغییر دهد و از توکن به دست آمده برای انجام اقدامات مختلف در داخل حساب استفاده کند.
راهکار امنیتی: اعتبارسنجی مناسب داده های احراز هویت مورد استفاده برای دسترسی به برنامه را اجرا کنید. هنگام استفاده، امضاهای ID نشست و توکن را تأیید کنید. Secretهای مورد استفاده برای احراز هویت (کلیدهای رمزگذاری، امضا و غیره) باید منحصر به فرد بوده و دارای درجه بالایی از آنتروپی باشند. Secretها را در کد برنامه ذخیره نکنید.
7. پیکربندی اشتباه امنیتی
کمتر از نیمی از برنامههای آنالیز شده، دارای آسیبپذیری پیکربندیهای نادرست امنیتی بودند. این دسته، طیفی از آسیب پذیری ها را از حالت “دیباگ فعال تا احراز هویت غیرفعال” را پوشش میدهد.
سرور Nginx یکی از برنامههای آنالیز شده است که اجازه دسترسی به فایلهای موجود در دایرکتوری اصلی (نسبت به دایرکتوری مشخص شده در دستورالعمل Alias) را میدهد و برای دسترسی به فایلهایی که حاوی دادههای محرمانه هستند مورد سوء استفاده واقع میشود.
راهکار امنیتی: هنگام پیکربندی سیستمهای مورد استفاده در زیرساخت فناوری اطلاعات، بهترین شیوه های امنیتی را دنبال کنید. فرآیند راهاندازی را خودکار نموده تا خطاها هنگام راهاندازی سیستمهای جدید حذف شوند. از گواهی های اعتبار مختلف برای سیستم های تست و تولید استفاده نمائید. کامپوننتهایی که مورد نیاز نیستند را غیرفعال کنید.
8. حفاظت ناکافی در برابر حملات بروت فورس
بیش از یک سوم از برنامههای آنالیز شده، اجازه حملات بروت فورس را میدهند. گذرواژههای یکبار مصرف (OTP) و احراز هویت در برابر منابع مختلف، مانند حسابها یا فایل سیستمها، برخی از مکانیزمهایی بودند که ما متوجه شدیم، آسیبپذیر میباشند.
به طور خاص، یک پیادهسازی ضعیف OTP میتواند به مهاجم اجازه دهد تا یک آن را تحت فشار قرار دهد و این عامل احراز هویت (OTP) را دور بزند و در نتیجه دسترسی غیرمجاز به برنامه را آسانتر کند.
راهکار امنیتی: از CAPTCHA استفاده کنید تا کار مهاجم در بروت فورس اعتبارها سختتر گردد. همچنین میتوانید از کنترلهای پیشگیری (WAF، IPS) برای مسدود ساختن سریع اقدامات بروت فورس، هم در ورود ناموفق چندباره به یک حساب و هم ورود ناموفق چندباره به حسابهای مختلف که از یک منبع نشات میگیرند، استفاده کنید.
9. گذرواژه ضعیف کاربر
گذرواژه ضعیف برای 22 درصد از برنامه های کاربردی وب آنالیز شده، تنظیم شده بود.
اگرچه تعداد برنامه های حاوی این نوع آسیب پذیری کم است، اما پیامد سوء استفاده از گذرواژه های ضعیف میتواند قابل توجه باشد. مهاجم بسته به نوع حساب، میتواند به ویژگیهای اصلی برنامه یا سناریوهای مدیریتی دست یابد که بر فرآیندهای تجاری تأثیر میگذارد.
راهکار امنیتی: بررسیهای رمز عبور ضعیف را اجرا کنید (به عنوان مثال، با اجرای گذرواژههای جدید یا تغییر یافته در برابر فهرستی از ۱۰,۰۰۰ رمز عبور بسیار ضعیف). الزامات طول رمز عبور، پیچیدگی و زمان انقضای آن را همراه با سایر سیاست های رمز عبور مبتنی بر شواهد مدرن اعمال نمائید.
10. استفاده از کامپوننتهایی با آسیب پذیری های شناخته شده
آخرین اما نه کماهمیتترین دسته، استفاده از کامپوننتهایی با آسیب پذیریهای شناخته شده است.
در میان کامپوننتهای آسیبپذیر، فریمورکها و الزامات مختلف اپلیکیشنها، مانند کتابخانهها و ماژولها مشاهده شدهاند. برخی از این موارد به ما امکان دسترسی به سرورهای مورد استفاده برنامهها را میدهند و در نتیجه میتوان به شبکههای داخلی مشتریان نفوذ کرد.
راهکار امنیتی: از کامپوننتهای نرم افزاری مورد استفاده، به طور منظم موجودی تهیه کنید و در صورت نیاز آنها را به روزرسانی نمائید. فقط از کامپوننتهای قابل اطمینانی استفاده کنید که تست های امنیتی را با موفقیت پشت سر گذاشتهاند. کامپوننتهای استفاده نشده را غیرفعال کنید.
سخن پایانی
رفع گستردهترین آسیب پذیری های برنامه های کاربردی وب که در این مطالعه مورد بررسی قرار گرفت، به شما کمک میکند تا از دادههای محرمانه خود محافظت کنید و از به خطر افتادن اپلیکیشنهای وب و سیستمهای مرتبط جلوگیری به عمل آورید. برای بهبود امنیت برنامه های کاربردی وب و تشخیص به موقع حملات، توصیه میشود موارد زیر را مورد توجه قرار دهید:
- چرخه عمر توسعه نرم افزار امن (SSDLC) را دنبال کنید.
- ارزیابی امنیتی برنامه را بطور منظم اجرا کنید.
- از لاگها و مانیتورینگ به منظور ردیابی فعالیت برنامه استفاده نمائید.