برای کمک به شرکت ها و سازمانها ، OWASP یه پروژه ای بنام OWASP Top 10 ، برای شناسایی آسیب پذیری ها و ایمن سازی برنامه های وب ایجاد کرده.
محققای کسپرسکی با بررسی رتبه بندی ارائه شده توسط OWASP ، متوجه تفاوت های مهمی در اولویت بندی آسیب پذیری های مهم شدن. بنابراین اومدن این رتبه بندی رو براساس 8 سال تجربه ای که داشتن، دوباره رتبه بندی کردن و به قول معروف ده آسیب پذیری برتر وب رو از دیدگاه کسپرسکی منتشر کردن. در این پست میخواییم نگاهی به این 10 آسیب پذیری برتر بندازیم.
داده های استفاده شده در این ارزیابی :
داده هایی که در این تحقیق ازشون استفاده شده، پروژه های ارزیابی امنیتی وب بین سالهای 2021 تا 2023 بوده که عمدتا مرتبط با شرکت هایی در روسیه، چین و خاورمیانه بودن.
بنابراین میشه گفت که این تحقیق برای شرکت های ایرانی میتونه خیلی مفید باشه.
تقریبا نصف برنامه ها ، 44 درصد، با جاوا توسعه داده شدن ، 17 درصد با NodeJS و 12 درصد با PHP و بیش از 39 درصد از معماری میکروسرویس استفاده کردن.
محققا داده های بدست اومده از ارزیابی های امنیتی برنامه های وب رو که از طریق رویکرد جعبه سیاه، سفید و خاکستری انجام شده بود رو آنالیز کردن. تقریبا همه ی برنامه های ارزیابی شده با جعبه خاکستری ، با جعبه سیاه هم ارزیابی شدن. بنابراین هر دو رویکرد رو در آمارشون قرار دادن. تقریبا 83 درصد پروژه های ارزیابی از رویکرد جعبه سیاه و خاکستری استفاده کردن.
تفاوت های ناشی از رویکرد های مختلف تحلیل:
با توجه به اینکه رویکردهای جعبه سیاه، خاکستری و سفید به سطوح مختلف دسترسی به برنامه ها اشاره داره، بنابراین انواع آسیب پذیری هایی که در هر رویکرد، احتمالا کشف میشه، میتونه متفاوت باشه.
محققا اومدن یه بررسی بین آسیب پذیری های کشف شده با دسترسی به سورس کد و بدون دسترسی به سورس کد، انجام دادن. نتیجه این بوده که 4 آسیب پذیری از 5 آسیب پذیری رایج مطابقت داشته اما باز تفاوت هایی بینشون هست.
Black/Gray Box | White Box | |
1. Sensitive Data Exposure | VS | 1. Broken Access Control |
2. Broken Access Control | 2. SQL Injection | |
3. Cross-Site Scripting | 3. Sensitive Data Exposure | |
4. Server-Side Request Forgery | 4. Broken Authentication | |
5. Broken Authentication | 5. Cross-Site Scripting |
از دید آماری، رویکرد جعبه سفید، امکان یافتن تعداد بیشتری آسیب پذیری، با شدت بالا مانند SQL injection رو میده. بطور میانگین ،در رویکرد جعبه سیاه/خاکستری 23 آسیب پذیری و در رویکرد جعبه سفید 30 آسیب پذیری ، گزارش شده.
اگرچه رویکرد جعبه سفید ، امکان شناسایی آسیب پذیری بیشتری رو میده، اما رویکرد جعبه سیاه و خاکستری امکان مشاهده ی یک برنامه از دید یه بازیگر تهدید رو میده و آسیب پذیری هایی که باید در اولیت اصلاح قرار بگیرن رو مشخص میکنه.
10 آسیب پذیری برتر برنامه های وب :
محققا 10 آسیب پذیری برتر وب که از پروژه های ارزیابی برنامه های کاربردی وب ، طی سه سال بدست اومده رو بدین شکل لیست و اولویت بندی کردن :
Kaspersky Top 10 | OWASP ranking |
1 Broken Access Control | A01 |
2 Sensitive Data Exposure | A02 |
3 Server-Side Request Forgery (SSRF) | A10 |
4 SQL Injection | A03 |
5 Cross Site Scripting (XSS) | A03 |
6 Broken Authentication | A07 |
7 Security Misconfiguration | A05 |
8 Insufficient Protection from Brute Force Attacks | A07 |
9 Weak User Password | A07 |
10 Using Components with Known Vulnerabilities | A06 |
1- Broken Access Control
70 درصد برنامه های وبی که محققا در این سه سال ارزیابی کردن، دارای این نوع آسیب پذیری بودن. نمودار زیر شدت آسیب پذیری های کشف شده از این نوع رو نمایش میده:
آسیب پذیری های این دسته میتونن منجر به ایجاد خطا در برنامه و در نتیجه باعث تاثیر روی کسب و کار بشن. در یک برنامه کاربردی وب، اعتبارسنجی ناکافی داده های ارسالی به ما این امکان رو میده تا به سرویس های داخلی دسترسی داشته باشیم و بطور کلی حملاتی رو انجام بدیم که منجر به خسارت مالی بشه.
اقدامات کاهشی:
- کنترلهای احرازهویت و مجوزدهی رو براساس مدل دسترسی مبتنی بر نقش (role-based access) اجرا کنید.
- بصورت پیش فرض دسترسی رو مسدود کنید، مگر اینکه منبع در دسترس عموم باشه.
2- Sensitive Data Exposure
این آسیب پذیری در مقایسه با مورد قبلی، اغلب آسیب پذیریها شدت پایین دارن، اما بینشون آسیب پذیری هایی با ریسک بالا هم وجود داره.
اطلاعات حساسی که محققا باهاش اغلب روبرو شدن، اعتبارنامه ها و پسوردهای یکبارمصرف بصورت Plaintext ، مسیرهای کامل به دایرکتوریهای برنامه های منتشر شده و سایر اطلاعات داخلی که منجر به درک معماری سیستم میشه.
اقدامات کاهشی:
- فایلهای حاوی داده های حساس مانند پسوردها یا بکآپ هارو در دایرکتوری های انتشار برنامه های وب قرار ندید.
- هنگام دسترسی به عملکردهای برنامه ، از افشای اطلاعات حساس خودداری کنید، مگه اینکه خود اون عملکرد برای دسترسی به داده های حساس استفاده بشه.
3- Server-Side Request Forgery (SSRF)
محبوبیت معماری ابری و میکروسرویس در حال افزایش هستش. معماری میکروسرویس سطح حمله ی اکسپلویت کردن SSRF رو ، بدلیل ارتباط بیشتر با سرویس ها از طریق HTTP و سایر پروتکلهای سبک ، در مقایسه با معماری سنتی، افزایش میده. 57
درصد برنامه هایی که آنالیز کردن، شامل این آسیب پذیری بوده که به مهاجم این امکان رو میده بعد از دور زدن منطق برنامه، امکان دسترسی به سرویس های داخلی رو داشته باشه.
بازیگر تهدید میتونه با زنجیره کردن SSRF با سایر آسیب پذیری ها ، امکان توسعه ی حمله به وب سرور یا دسترسی به سورس کدها رو داشته باشه.
اقدامات کاهشی:
- در صورت امکان، یک لیست مجاز از منابعی که برنامه میتونه درخواست کنه، ایجاد کنید.
- درخواست به منابعی که در این لیست نیستن رو مسدود کنید.
- درخواستهایی که شامل URLهای کامل هستن رو نپذیرید.
- فیلترهای فایروال رو ، برای جلوگیری از دسترسی به دامنه های غیرمجاز ،تنظیم کنید.
4- SQL Injection :
بیشترین آسیب پذیری های با ریسک بالا، بین سالهای 2021 تا 2023، مرتبط با Sql Injection بودن. محققا این نوع از آسیب پذیری هارو در رتبه چهارم قرار دادن، چون 43 درصد برنامه های وب، تحت تاثیر این آسیب پذیری بودن.
آسیب پذیری های این نوع، میتونن منجر به اجرای کد یا سرقت اطلاعات حساس بشن.
اقدامات کاهشی:
- به جای ترکیب کردن کوئری های SQL با یک الگو (template)، از کوئری های SQL پارامتر شده در سورس کد برنامه استفاده کنید.
- اگه قادر به استفاده از کوئری های SQL پارامتر شده نیستید، اطمینان حاصل کنید که داده هایی که توسط کاربر وارد میشن و در ساخت کوئری های SQL بکار میرن، نمیتونن منطق کوئری رو تغییر بدن.
5- Cross-Site Scripting (XSS) :
آسیب پذیری های XSS در 61 درصد برنامه هایی که آنالیز کردن، کشف شده. با اینکه به لحاظ تعداد زیاد بودن، اما چون اغلبشون ریسک متوسطی رو داشتن، برای همون در رتبه پنجم قرار دادن.
55 درصد آسیب پذیری های XSS ، مربوط به برنامه های وب مورد استفاده ی شرکتهای IT بودن و 39 درصدش مربوط به بخش عمومی.
بازیگران تهدید با استفاده از حملات XSS به کلاینتهای یک برنامه وب، میتونن اطلاعات احرازهویت کاربر مانند کوکی ها رو بدست بیارن، فیشینگ کنن یا بدافزار توزیع کنن. در یک سناریوی حمله ، مهاجم با زنجیره کردن این آسیب پذیری با آسیب پذیری های دیگه، میتونه پسورد یک کاربر رو به یک مقدار مشخصی تغییر بده و به این ترتیب میتونه به برنامه با امتیاز کاربر دسترسی داشته باشه.
اقدامات کاهشی:
برای ایمن سازی ورودی های کاربر در برنامه، کاراکترهای بالقوه ناامن رو که میتونند برای فرمت دهی صفحات HTML استفاده بشن، با معادلهای امن اونا که کاراکتر فرمت دهی نیستن، جایگزین کنید. این کار رو باید روی همه ی دادههایی که از منابع خارجی بدست میان و در مرورگر نمایش داده میشن (از جمله هدرهای HTTP مانند User-Agent و Referer) انجام بدید.
6- Broken Authentication :
آسیب پذیری هایی که در این دسته هستن، اگر چه 47 درصدشون ریسک متوسطی دارن ، اما مواردی بوده که ریسکشون بالا و امکان دسترسی به کلاینت مشتریان رو میداده.
مثلا اگه برنامه ای امضای JWT رو بررسی نکنه، یک مهاجم میتونه JWT خودش رو به یک کاربر دیگه تغییر بده و از توکنی که بدست آورده ، کارهای مختلفی رو داخل اکانت انجام بده.
اقدامات کاهشی:
- برای دسترسی به برنامه، اعتبارسنجی صحیح دادههای احراز هویت رو انجام بدید. هنگام استفاده، امضای توکن و شناسه جلسه رو تأیید کنید.
- کلیدهای رمزگذاری، امضاها و سایر موارد استفاده شده برای احراز هویت ، باید منحصر به فرد باشن و از درجه آنتروپی بالایی برخوردار باشن (آنتروپی معیاری برای تصادفی بودن داده هاست).
- این موارد رو به هیچ وجه در کد برنامه ذخیره نکنید.
7- Security Misconfiguration :
کمتر از نیمی از برنامه هایی که آنالیز کردن، تحت تاثیر این آسیب پذیری بودن. این دسته بندی حاوی آسیب پذیری هایی از فعال بودن debug mode تا غیرفعال بودن احرازهویت رو شامل میشه.
در یکی از ارزیابیهاشون، سرور Nginx امکان دسترس به Parent Directory رو میداده و میشد ازش برای دسترسی به داده های حساس استفاده کرد.
اقدامات کاهشی:
- هنگام پیکربندی سیستمهای بکار رفته در زیرساخت فناوری اطلاعات، بهترین شیوههای امنیتی رو رعایت کنید.
- برای حذف خطا در راه اندازی سیستمهای جدید، فرآیند راهاندازی رو خودکار کنید.
- از اعتبارنامه های متفاوتی برای سیستمهای تست و عملیاتی استفاده کنید.
- مولفه های غیر ضروری رو غیرفعال کنید.
8- Insufficient Protection from Brute-Force Attacks :
بیش از یک سوم برنامه هایی که آنالیز کردن، امکان حملات Brute-Force رو داشتن. پسوردهای یکبار مصرف و احرازهویت برای دسترسی به منابع مختلف ، مانند اکانتها یا سیستم فایل، مواردی بودن که شامل این آسیب پذیری بودن.
یک پیاده سازی ضعیف از OTP ، این امکان رو به مهاجم میده تا OTP رو بروت فورس کنه و بتونه این مکانیسم احرازهویت رو دور بزنه و در نتیجه دسترسی غیرمجاز به برنامه داشته باشه.
اقدامات کاهشی:
- برای دشوارتر کردن حدس زدن پسوردها توسط مهاجم از CAPTCHA استفاده کنید.
- همچنین میتونید از کنترل های پیشگیری (WAF، IPS) برای مسدود کردن سریع تلاش های Brute-Force استفاده کنید. این کار رو ، هم برای لاگین های متعدد به یک حساب خاص که با شکست روبرو شدن و هم برای لاگین های متعدد به حسابهای مختلف که با شکست مواجه شدن و از یک منبع یکسان بودن، انجام بدید.
9- Weak User Password :
22 درصد برنامه هایی که آنالیز کردن ، شامل این آسیب پذیری بودن.
یک دلیل احتمالی برای درصد نسبتاً پایین آسیب پذیری ها در این دسته، اینه که تحلیلگران امنیتی اغلب با محیط های تست مشتریان کار میکنن تا سیستمهای Live.
اگرچه تعداد برنامه هایی که تحت تاثیر این آسیب پذیری هستن، کمه، اما پیامدهای سوء استفاده از این آسیب پذیری میتونه بالا باشه. بسته به نوع اکانت، مهاجم میتونه به ویژگی های اصلی یا مدیریتی برنامه دسترسی داشته باشه و بتونه روی فرایندهای تجاری تاثیر بزاره.
اقدامات کاهشی:
- برای ایمن سازی پسوردها، از بررسیهای اولیه قدرت پسورد استفاده کنید. مثلا، پسوردهای جدید یا تغییر یافته رو با لیستی از 10000 پسورد ضعیف مطابقت بدید.
- طول، پیچیدگی و الزامات انقضای پسوردها رو به همراه سایر خط مشیهای مبتنی بر شواهد مدرن برای پسوردها اعمال کنید.
10- Using Components with Known Vulnerabilities :
مولفه های آسیب پذیر شناخته شده، اگرچه در آخرین رتبه قرار داره، اما این دلیل نمیشه که اهمیت کمی داشته باشن.
فریمورک ها و وابستگی های نرم افزاری مانند کتابخونه ها و ماژولها در این ارزیابی ها مشاهده شدن. در برخی موارد آسیب پذیری ها امکان دسترسی به سرور و در نتیجه امکان نفوذ به شبکه داخلی رو هم میدادن.
اقدامات کاهشی :
- به طور مرتب لیستی از مولفه های نرمافزاری که استفاده میکنید رو تهیه و در صورت نیاز اونارو بروزرسانی کنید.
- فقط از مولفه های قابل اعتماد که با موفقیت تست های امنیتی رو پشت سر گذاشتن، استفاده کنید.
- هر مولفه ی غیر ضروری رو غیرفعال کنید.
نتیجه گیری :
رفع برترین آسیب پذیری های برنامه های کاربردی وب که در این مطالعه توضیح داده شدن، به شما کمک میکنه تا از داده های محرمانه خود محافظت کنید و از به خطر افتادن برنامه های کاربردی وب و سیستم های مرتبط جلوگیری کنید.
برای بهبود امنیت برنامه های کاربردی وب و تشخیص به موقع حملات، توصیه کردن موارد زیر را انجام بدید:
- چرخه عمر توسعه نرم افزار امن (SSDLC) رو دنبال کنید.
- ارزیابی امنیتی برنامه رو بصورت منظم اجرا کنید.
- از لاگ کردن و نظارت برای ردیابی فعالیت برنامه استفاده کنید.