
چه نوع آسیبپذیریهای امنیتی وجود داره؟
طبق تعریف OWASP، یک آسیبپذیری امنیتی در برنامه “یک حفره یا ضعف در برنامه است که میتونه یک نقص در طراحی یا یک باگ در پیادهسازی باشه و به یک مهاجم این امکان رو بده که به سهامداران برنامه آسیب برسونه.” این سهامداران میتونن شامل مالک برنامه، کاربران برنامه و افرادی باشن که به اون برنامه وابسته هستن. همچنین اگر علاقمند به آموزش هک هستید، با ما همراه باشید.
- چه نوع آسیبپذیریهای امنیتی وجود داره؟
- یک آسیبپذیری امنیتی در برنامه چیست؟
- چه انواع مختلفی از آسیبپذیریهای امنیتی وجود داره؟
- آسیبپذیریهای دفاع متخلخل
- آسیبپذیریهای مرتبط با مدیریت منابع پرخطر
- چطور میشه در برابر این آسیبپذیریها دفاع کرد؟
- آسیبپذیریهای ناشی از تعاملات ناامن بین اجزا
- چه چیزی این آسیبپذیریها رو به هم مرتبط میکنه؟
یک آسیبپذیری امنیتی در برنامه چیست؟
در حالی که MITRE، که فهرست CWE Top 25 از رایجترین ضعفهای امنیتی نرمافزار رو نگهداری میکنه، بهصورت مستقیم از واژه “آسیبپذیری” استفاده نمیکنه، اما در تعریف خودش برای ضعفهای نرمافزاری از این واژه بهره میبره: “ضعفهای نرمافزاری شامل نقصها، خطاها، باگها، آسیبپذیریها و سایر خطاهای موجود در پیادهسازی نرمافزار، کد، طراحی یا معماری هستن که اگه بدون رسیدگی رها بشن، میتونن باعث بشن سیستمها و شبکهها در معرض حمله قرار بگیرن.”
اینا قطعا تعاریف مفیدی هستن که دونستنشون ارزشمنده. اما راستش رو بخواید، چیز خاص و کاربردیای برای توسعه دهندههای نرم افزار ارائه نمیدن تا بتونن تو مسیر کدنویسی امن ازش استفاده کنن.
اینجاست که لیستهای آسیبپذیریهای امنیتی مثل OWASP Top 10 Most Critical Web Application Security Risks و لیست مشابه ولی گستردهتر CWE Top 25 Most Dangerous Software Errors وارد عمل میشن.
این لیستها مهمترین انواع آسیبپذیریهای امنیتی رو که باید موقع توسعه نرمافزار حتما بهشون توجه کنید، مشخص میکنن. اما بعضی از این آسیبپذیریهای نرمافزاری نیاز به بررسی دقیقتر و تلاش بیشتری برای مقابله دارن.
پس بیاید یه نگاه نزدیکتر بندازیم به انواع مختلف آسیبپذیریها و ببینیم کدومها بیشتر نیاز به دقت و پیشگیری دارن.
چه انواع مختلفی از آسیبپذیریهای امنیتی وجود داره؟
OWASP به خاطر لیست 10 آسیبپذیری برتر در امنیت برنامههای تحت وب شناخته شده است. اما این سازمان در وبسایت خودش دهها ورودی دیگه رو هم فهرست کرده که در 20 دسته مختلف از آسیبپذیریهای امنیتی گروهبندی شدن. این دستهبندیها شامل مواردی مثل سوءاستفاده از API، آسیبپذیری اعتبارسنجی ورودی و آسیبپذیری مدیریت نشست (Session Management) میشن. توی توضیحات OWASP در مورد آسیبپذیریهای برنامهای، عوامل ریسک توضیح داده شدن، مثالهایی ارائه شده و به حملات، آسیبپذیریها و کنترلهای مرتبط لینک داده شده.
MITRE و موسسه SANS در سال 2011 آخرین نسخه از لیست 25 آسیبپذیری برتر CWE/SANS رو منتشر کردن. توی این لیست، آسیبپذیریهای امنیتی بر اساس ضعفهای ذاتی به سه دسته اصلی تقسیم شدن:
- دفاعات متخلخل (Porous Defenses)
- مدیریت منابع پرخطر (Risky Resource Management)
- تعامل ناامن بین اجزا (Insecure Interaction Between Components)
آسیبپذیریهای دفاع متخلخل
از بین 25 نوع آسیبپذیری برتر در لیست CWE/SANS، 11 مورد مربوط به دفاعات متخلخل هست. تکنیکهای دفاعی مثل رمزنگاری، احراز هویت و مجوزدهی (Authorization)، وقتی به درستی پیادهسازی بشن، برای امنیت برنامه بسیار ضروری هستن. اما وقتی این تکنیکها به اشتباه اجرا بشن، مورد سوءاستفاده قرار بگیرن، یا حتی نادیده گرفته بشن، تبدیل به آسیبپذیریهایی در برنامه میشن که میتونن مورد حمله قرار بگیرن.
سه مورد از این آسیبپذیریها به دلیل نبود اصول اولیهی نگهداری درست به وجود میان: عدم وجود احراز هویت (Missing Authentication)، عدم وجود مجوزدهی (Missing Authorization) و عدم وجود رمزنگاری (Missing Encryption). سه مورد دیگه هم مربوط به استفاده نادرست یا تصمیمات اشتباه در پیادهسازی روشهای دفاعی در برنامه هستن، از جمله مجوزدهی اشتباه (Incorrect Authorization)، تخصیص نادرست دسترسیها (Incorrect Permission Assignment) و محدودیت نامناسب در تلاشهای اضافی برای احراز هویت (Improper Restriction of Excess Authentication Attempts).
آسیبپذیریهای مرتبط با مدیریت منابع پرخطر
مدیریت منابع یعنی ایجاد، استفاده، انتقال و نابودی منابع سیستم مثل حافظه. مدیریت درست و امن منابع برای دفاع مؤثر از برنامهها کاملا ضروریه. انواع آسیبپذیریهای امنیتی در دستهبندی “مدیریت منابع پرخطر (Risky Resource Management)” از لیست CWE/SANS Top 25 به روشهایی مربوط میشه که نرمافزار بهدرستی از منابع استفاده نمیکنه.
این آسیبپذیریها شامل موارد کلاسیکی مثل سرریز بافر (Buffer Overflow) و مسیریابی مخرب (Path Traversal) هستن، تا موارد پیچیدهتری مثل گنجاندن عملکرد از حوزه کنترل غیرقابل اعتماد (Inclusion of Functionality from Untrusted Control Sphere) و استفاده از توابع بالقوه خطرناک (Use of Potentially Dangerous Function).
چطور میشه در برابر این آسیبپذیریها دفاع کرد؟
برای مقابله با این نوع آسیبپذیریها، دو استراتژی اصلی وجود داره:
- شناسایی منابع ورودی و اطمینان از اینکه این ورودیها از منابع معتبر و قابل اعتماد میان.
- استفاده درست از ورودیها برای مقاصد تعیین شدهشون.
برای کمک به کاهش این تهدیدها، استفاده از sandboxing و whitelisting میتونه موثر باشه، اما هیچ تضمینی وجود نداره. روشهای دیگه شامل تستهای امنیتی برنامهها و ارزیابی آسیبپذیریها هستن تا این دسته از آسیبپذیریها رو قبل از اینکه مشکلی به وجود بیارن، شناسایی کنید.
آسیبپذیریهای ناشی از تعاملات ناامن بین اجزا
دستهبندی “تعامل ناامن بین اجزا (Insecure Interaction Between Components)” کمترین تعداد اعضا رو در لیست CWE/SANS Top 25 داره، اما شامل خطرناکترین آسیبپذیریهای امنیتی شناختهشده هست. این دسته، شامل یک لیست بدنام از آسیبپذیریهاست که همه باهاشون آشنایی دارن، مثل:
- تزریق SQL (SQL Injection)
- اسکریپتنویسی بین سایتی (Cross-Site Scripting – XSS)
- هدایت باز (Open Redirect)
چه چیزی این آسیبپذیریها رو به هم مرتبط میکنه؟
همه این آسیبپذیریها به نحوهی ارسال و دریافت داده بین اجزا، ماژولها، برنامهها، فرآیندها، رشتهها یا سیستمها مربوط میشن. اگه این تعاملات بهدرستی مدیریت نشن، میتونن به یک نقطه ضعف جدی تبدیل بشن و در نهایت منجر به نفوذ یا حمله بشن.
در انتها اگر این مطلب براتون مفید بود، سوالات و نظراتتون رو با ما در میان بگذارین.