مقدمه و اهداف (فارسی)
این بخش روش آزمایش امنیت برنامه وب OWASP را شرح می دهد و نحوه آزمایش شواهد آسیب پذیری در برنامه را به دلیل نقص در کنترل های امنیتی شناسایی شده توضیح می دهد.
آزمایش امنیت روشی برای ارزیابی امنیت یک سیستم یا شبکه کامپیوتری از طریق اعتبارسنجی روشمند و تایید اثربخشی کنترل های امنیتی برنامه است. آزمایش امنیت برنامه وب فقط بر ارزیابی امنیت یک برنامه وب متمرکز است. این فرآیند شامل تجزیه و تحلیل فعال برنامه برای هر گونه ضعف، نقص فنی یا آسیب پذیری است. هرگونه مشکل امنیتی که پیدا شود، پیشنهادی برای کاهش یا راه حل فنی به مالک سیستم به همراه ارزیابی تأثیر ارائه می شود.
آسیب پذیری یک نقص یا ضعف در طراحی، پیاده سازی، عملیات یا مدیریت یک سیستم است که می تواند برای به خطر انداختن اهداف امنیتی سیستم مورد سوء استفاده قرار گیرد.
تهدید می توانید هر چیزی باشد (یک مهاجم خارجی مخرب، یک کاربر داخلی، یک ناپایداری سیستم و...) که ممکن است با سوء استفاده از یک آسیب پذیری، به دارایی های متعلق به یک برنامه (منابع با ارزش، مانند داده ها در پایگاه داده یا سیستم فایل) آسیب برساند.
آزمایش عملی است برای نشان دادن اینکه یک برنامه الزامات امنیتی ذینفعان خود را برآورده می کند.
رویکرد OWASP باز و مشارکتی است:
- باز: هر متخصص امنیتی می تواند با تجربه خود در پروژه شرکت کند. همه چیز رایگان است.
- مشارکتی: طوفان فکری قبل از نوشته شدن مقالات انجام می شود تا تیم بتواند ایده ها را به اشتراک بگذارد و دید جمعی از پروژه ایجاد کند. این به معنای اجماع، مخاطب گسترده تر و افزایش مشارکت است.
این رویکرد منجر به یک روش آزمایش تعریف شده می شود که به شرح زیر است:
- استوار
- قابل تکرار
- سختگیرانه
- تحت کنترل کیفیت
مشکلاتی که باید به آنها رسیدگی شود کاملاً مستند و آزمایش شده است. استفاده از روش های مختلف برای آزمایش تمام آسیب پذیری های شناخته شده و مستندسازی تمام فعالیت های آزمایش امنیتی مهم است.
آزمایش امنیت هرگز علمی دقیق نخواهد بود که در آن لیست کاملی از تمام مسائل احتمالی که باید آزمایش شوند را بتوان تعریف کرد. در واقع، آزمایش امنیت تنها یکی از چندین تکنیک مناسب برای آزمایش امنیت برنامه های وب تحت شرایط خاص است. هدف این پروژه جمع آوری تمام تکنیک های آزمایش ممکن، توضیح این تکنیک ها و به روز نگه داشتن راهنما است. روش آزمایش امنیت برنامه وب OWASP مبتنی بر رویکرد جعبه سیاه است. آزمایش کننده اطلاعات کمی در مورد برنامه ای که باید آزمایش شود دارد.
مدل آزمایش شامل موارد زیر است:
- آزمایش کننده (تستر): کسی که فعالیت های آزمایشی را انجام می دهد
- ابزار و روش: هسته اصلی این پروژه راهنما
- برنامه: جعبه سیاه برای آزمایش
آزمایش را می توان به عنوان غیرفعال یا فعال دسته بندی کرد:
در طول آزمایش غیرفعال، یک آزمایش کننده سعی می کند منطق برنامه را بفهمد و برنامه را به عنوان یک کاربر نهایی بررسی کند. می توان از ابزارها برای جمع آوری اطلاعات استفاده کرد. به عنوان مثال، یک پروکسی HTTP(S) می تواند برای مشاهده تمام درخواست ها و پاسخ های HTTP(S) استفاده شود. در پایان این مرحله، آزمایش کننده باید به طور کلی تمام نقاط دسترسی و عملکرد سیستم (مانند سرصفحه های HTTP، پارامترها، کوکی ها، APIها، استفاده از فناوری/الگوها و...) را درک کند. بخش Information Gathering (جمع آوری اطلاعات) نحوه انجام آزمایش غیرفعال را توضیح می دهد.
برای مثال، یک آزمایش کننده ممکن است صفحه ای را در URL زیر پیدا کند:
https://www.example.com/login/auth_form
این ممکن است یک فرم احراز هویت را نشان دهد که در آن برنامه یک نام کاربری و رمز عبور درخواست می کند.
پارامترهای زیر دو نقطه دسترسی به برنامه را نشان می دهند:
https://www.example.com/appx?a=1&b=1
در این مورد، برنامه دارای دو نقطه دسترسی (پارامترهای a
و b
) است. تمام نقاط ورودی یافت شده در این مرحله نشان دهنده اهدافی برای آزمایش هستند. پیگیری دایرکتوری یا درخت تماس (call tree) برنامه و تمام نقاط دسترسی می تواند در طول آزمایش فعال مفید باشد.
در طول آزمایش فعال، یک آزمایش کننده از روش هایی استفاده می کند که در بخش های زیر توضیح داده شده است
مجموعه آزمایش های فعال به 12 دسته تقسیم شده است:
- جمع آوری اطلاعات (Information Gathering)
- آزمایش مدیریت پیکربندی و استقرار (Configuration and Deployment Management Testing)
- آزمایش مدیریت هویت (Identity Management Testing)
- آزمایش احراز هویت (Authentication Testing)
- آزمایش مجوز (Authorization Testing)
- آزمایش مدیریت جلسه (Session Management Testing)
- آزمایش اعتبار سنجی ورودی (Input Validation Testing)
- آزمایش رسیدگی به خطا (Testing for Error Handling)
- آزمایش رمزنگاری ضعیف (Testing for Weak Cryptography)
- آزمایش منطق کسب و کار (Business Logic Testing)
- آزمایش سمت مشتری (Client-side Testing)
- آزمایش API (API Testing)