تست امنیت نرم افزار (AST) فرآیندی است که به منظور مقاومسازی برنامههای کاربردی در برابر تهدیدات امنیتی با شناسایی و رفع آسیبپذیریهای امنیتی انجام میشود.
در ابتدا، تست امنیت نرمافزار یک فرآیند دستی بود. اما با توجه به رویههای توسعه سریع و پرحجم امروزی، تست امنیت نرمافزار باید به صورت خودکار انجام شود. دلایل اصلی نیاز به اتوماسیون عبارتند از: ماژولار بودن بیشتر نرمافزارهای سازمانی، اجزای متعدد متنباز، تعداد زیاد آسیبپذیریهای شناختهشده و بردارهای حمله. اکثر سازمانها برای انجام تست امنیت نرمافزار از ترکیبی از ابزارهای امنیت نرمافزار استفاده میکنند.
نکات کلیدی قبل از تست امنیتی نرمافزارها
قبل از اینکه بتوانید برنامههای کاربردی را به طور کامل از نظر آسیبپذیریهای امنیتی تست کنید، نکات کلیدی زیر را در نظر بگیرید:
- یک فهرست کامل از برنامه های خود ایجاد کنید.
- برنامههای خود را از نظر حساسیت، تاثیر و کاربرد در کسب و کار درک کنید.
- مشخص کنید کدام برنامه ها را باید تست کنید، معمولا بهتر است تست را از سیستم عمومی و اپلیکیشنهای موبایل شروع کنید.
نحوه تست
برای اینکه با موفقیت برنامه های کاربردی را از نظر آسیبپذیریهای امنیتی تست کنید، باید پارامترهای زیر را تعیین کنید:
- تست با احراز هویت در مقابل بدون احراز هویت – میتوانید برنامهها را از دیدگاه یک فرد خارجی (رویکرد جعبه سیاه) تست کنید. با این حال، انجام تست با احراز هویت برای کشف مسائل امنیتی که بر کاربران احراز هویت شده تأثیر میگذارد، بسیار با ارزش است. این کار میتواند به کشف آسیبپذیریهایی مانند تزریق SQL و دستکاری جلسه کمک کند.
- از چه ابزارهایی استفاده کنید؟ – به طور ایدهآل، تست باید شامل ابزارهایی باشد که بتوانند آسیبپذیریها را در کد منبع شناسایی کنند، ابزارهایی که بتوانند برنامهها را در زمان اجرا از نظر ضعفهای امنیتی تست کنند و اسکنرهای آسیبپذیری شبکه.
- تست در محیط تولید در مقابل محیط تست (استیج) – تست در محیط تولید مهم است زیرا می تواند مسائل امنیتی را که در حال حاضر سازمان و مشتریان آن را تهدید می کند، شناسایی کند. با این حال، تست در محیط تولید می تواند بر عملکرد تأثیر بگذارد. تست در محیط تست دستیابی به آن را آسانتر میکند و امکان رفع سریعتر آسیبپذیریها را فراهم میکند.
- آیا سیستم های امنیتی را در حین تست غیرفعال کنید؟ – برای اکثر تستهای امنیتی، غیرفعال کردن فایروالها، فایروالهای برنامههای وب (WAF) و سیستمهای پیشگیری از نفوذ (IPS) یا حداقل قرار دادن IP ابزارهای تست در لیست سفید، ایده خوبی است، در غیر این صورت ابزارها میتوانند با اسکن تداخل داشته باشند. با این حال، در یک تست نفوذ کامل، ابزارها باید روشن بمانند و هدف اسکن برنامهها در عین حال اجتناب از شناسایی است.
- چه زمانی تست کنیم؟ – انجام تست امنیتی در دورههای خارج از ساعات کاری برای جلوگیری از تأثیر بر عملکرد و قابلیت اطمینان برنامههای کاربردی تولید، معمولاً توصیه میشود.
- چه چیزی را گزارش کنیم؟ – بسیاری از ابزارهای امنیتی گزارشهای بسیار دقیقی را در رابطه با حوزه تست خاص خود ارائه میدهند و این گزارشها برای افراد غیر متخصص امنیتی قابل درک نیستند. تیمهای امنیتی باید مرتبطترین بینشها را از گزارشهای خودکار استخراج کنند و آنها را به روشی معنادار به ذینفعان ارائه دهند.
- تست تأیید – بخش مهمی از تست امنیتی، تأیید این است که رفعپذیریها با موفقیت انجام شده است. اینکه یک توسعهدهنده بگوید رفعپذیری انجام شده کافی نیست. شما باید تست را دوباره اجرا کنید و مطمئن شوید که آسیبپذیری دیگر وجود ندارد، در غیر این صورت بازخورد را به توسعهدهندگان ارائه دهید.
انواع تست امنیت نرم افزار
سه نوع اصلی تست امنیت نرم افزار وجود دارد:
تست نفوذ جعبه سیاه (Black Box Security Testing)
در تست جعبه سیاه، سیستم تست کننده به اجزای داخلی سیستم تحت تست دسترسی ندارد. این دیدگاه یک مهاجم بیرونی است. یک ابزار تست یا تستر انسانی باید برای شناسایی سیستمهایی که در حال تست هستند و کشف آسیبپذیریها، شناسایی اولیه (reconnaissance) انجام دهد. تست جعبه سیاه بسیار با ارزش است اما به تنهایی کافی نیست، زیرا نمی تواند ضعف های امنیتی درونی برنامه ها را تست کند.
تست نفوذ جعبه سفید (White Box Security Testing)
در تست جعبه سفید، سیستم تست کننده دسترسی کامل به اجزای داخلی برنامه تحت تست دارد. یک مثال کلاسیک آنالیز استاتیک کد است که در آن یک ابزار تست دسترسی مستقیم به کد منبع برنامه دارد. تست جعبه سفید می تواند آسیب پذیری های منطق کسب و کار، مشکلات کیفیت کد، پیکربندی های امنیتی غلط و رویه های ناامن کد نویسی را شناسایی کند. تست جعبه سفید همچنین می تواند شامل تست دینامیک باشد که از تکنیک های تزریق داده (fuzzing) برای اجرای مسیرهای مختلف در برنامه و کشف آسیب پذیری های غیرمنتظره استفاده می کند. نقطه ضعف رویکرد جعبه سفید این است که همه این آسیبپذیریها در محیطهای تولید واقعاً قابل سوء استفاده نیستند.
تست نفوذ جعبه خاکستری (Gray Box Security Testing)
در تست جعبه خاکستری، سیستم تست کننده به اطلاعات محدودی در مورد اجزای داخلی برنامه تحت تست دسترسی دارد. به عنوان مثال، ممکن است به تستر اعتبار ورود (login credentials) داده شود تا بتواند برنامه را از دید کاربری که وارد سیستم شده است، تست کند. تست جعبه خاکستری می تواند به درک سطح دسترسی کاربران دارای امتیاز و میزان خسارتی که آنها می توانند در صورت به خطر افتادن یک حساب کاربری وارد کنند، کمک کند. تست های جعبه خاکستری می توانند تهدیدات داخلی یا مهاجمانی را که قبلاً از حریم شبکه عبور کرده اند، شبیه سازی کنند. تست جعبه خاکستری با برقراری تعادل بین رویکردهای جعبه سیاه و جعبه سفید، بسیار کارآمد در نظر گرفته می شود.
ابزارها و راهکارهای امنیت نرم افزار
فایروال برنامه های وب (WAF)
فایروال برنامه های وب (WAF) ترافیک HTTP را که بین یک برنامه وب و اینترنت رد و بدل می شود، کنترل و فیلتر می کند. فناوری WAF تمام تهدیدات را پوشش نمی دهد، اما می تواند در کنار مجموعه ای از ابزارهای امنیتی برای ایجاد یک دفاع جامع در برابر بردارهای حمله مختلف کار کند.
در مدل اتصال باز سیستم ها (OSI)، WAF به عنوان یک دفاع لایه هفتم پروتکل عمل می کند که به محافظت از برنامه های وب در برابر حملاتی مانند اسکریپت نویسی بین سایتی (XSS)، جعل بین سایتی، تزریق SQL و الحاق فایل کمک می کند.
برخلاف یک سرور پروکسی که از طریق یک واسطه از هویت رایانه های مشتری محافظت می کند، WAF مانند یک پروکسی معکوس عمل می کند که سرور را از افشا شدن محافظت می کند. WAF به عنوان سپری عمل می کند که در مقابل یک برنامه وب قرار می گیرد و آن را از اینترنت محافظت می کند – کلاینت ها قبل از اینکه بتوانند به سرور برسند، از WAF عبور می کنند.
محافظت خودکار برنامه در زمان اجرا (RASP)
فناوری RASP می تواند رفتار کاربر و ترافیک برنامه را در زمان اجرا تجزیه و تحلیل کند. این فناوری با دستیابی به دید در کد منبع برنامه و تجزیه و تحلیل آسیبپذیریها و نقاط ضعف، به شناسایی و جلوگیری از تهدیدات سایبری کمک میکند.
ابزارهای RASP می توانند نقاط ضعف امنیتی را که قبلاً مورد سوء استفاده قرار گرفته اند شناسایی کنند، این جلسات را خاتمه دهند و برای ارائه حفاظت فعال هشدار دهند.
مدیریت آسیب پذیری
مدیریت آسیب پذیری یک جنبه مهم از امنیت نرم افزار است. این کار شامل شناسایی، طبقه بندی، اولویت بندی و کاهش آسیب پذیری های نرم افزار است. ابزارهای مدیریت آسیب پذیری، برنامه های شما را برای آسیب پذیری های شناخته شده مانند مواردی که در پایگاه داده Common Vulnerabilities and Exposures (CVE) فهرست شده اند، اسکن می کنند.
پس از شناسایی، این آسیب پذیری ها بر اساس شدت آنها طبقه بندی می شوند. گام بعدی اولویت بندی آسیب پذیری هایی است که باید ابتدا برطرف شوند. این لیست اولویت به سازمان ها کمک می کند تا تلاش های خود را روی مهم ترین مسائل امنیتی متمرکز کنند. در نهایت، آسیب پذیری ها اغلب از طریق رویه های مدیریت وصله (patch) کاهش می یابد.
لیست موارد تشکیل دهنده نرم افزار (Software Bill of Materials – SBOM)
لیست مواد تشکیل دهنده نرم افزار (SBOM) فهرستی جامع از اجزای تشکیل دهنده یک نرم افزار است. این لیست، شفافیت را در مورد ترکیب یک برنامه ایجاد می کند و ردیابی و مدیریت هرگونه آسیب پذیری را آسانتر می کند. یک SBOM می تواند شامل جزئیاتی در مورد اجزای متن باز و اختصاصی، کتابخانه ها و ماژول های استفاده شده در نرم افزار باشد.
با استفاده از SBOM، سازمان ها می توانند به سرعت هر مؤلفه ای با آسیب پذیری های شناخته شده را شناسایی کنند. این امر به ساده سازی فرآیند مدیریت آسیب پذیری و اطمینان از پاسخ سریع در صورت کشف نقص امنیتی کمک می کند. SBOM به ویژه با افزایش نرم افزار متن باز و خطرات امنیتی مرتبط با آن، اهمیت بیشتری پیدا می کند.
آنالیز ترکیب نرم افزار (Software Composition Analysis – SCA)
ابزارهای SCA فهرستی از اجزای متن باز و تجاری شخص ثالث را که در محصولات نرم افزاری استفاده می شوند، ایجاد می کنند. این ابزارها به یادگیری اینکه کدام اجزا و نسخه ها به طور فعال استفاده می شوند و شناسایی آسیب پذیری های امنیتی جدی که بر این اجزا تأثیر می گذارد، کمک می کنند.
سازمان ها از ابزارهای SCA برای یافتن اجزای شخص ثالثی که ممکن است حاوی آسیب پذیری های امنیتی باشند استفاده می کنند.
برای مطالعه بیشتر در مورد آنالیز ترکیب نرم افزار (SCA) کلیک کنید.
تست ایستای امنیت نرم افزار (Static Application Security Testing – SAST)
ابزارهای SAST به تسترهای جعبه سفید در بررسی عملکرد داخلی برنامه ها کمک می کنند. این کار شامل بررسی کد منبع ایستا و گزارش ضعف های امنیتی شناسایی شده می شود.
SAST می تواند به یافتن مشکلاتی مانند خطاهای سینتکس، مشکلات اعتبارسنجی ورودی، ارجاعات نامعتبر یا ناامن، یا خطاهای ریاضی در کد غیر کامپایل شده کمک کند. می توانید از تحلیلگرهای باینری و بایت کد برای اعمال SAST روی کد کامپایل شده استفاده کنید.
تست پویای امنیت نرم افزار (Dynamic Application Security Testing – DAST)
ابزارهای DAST به تسترهای جعبه سیاه در اجرای کد و بررسی آن در زمان اجرا کمک می کنند. این ابزارها به شناسایی مشکلاتی که به طور بالقوه نشان دهنده آسیب پذیری های امنیتی هستند، کمک می کند. سازمان ها از DAST برای انجام اسکن های گسترده که سناریوهای تست مخرب یا غیرمنتظره متعددی را شبیه سازی می کنند، استفاده می کنند. این تست ها گزارش هایی در مورد پاسخ برنامه ارائه می دهند.
DAST می تواند به شناسایی مشکلاتی مانند رشته های کوئری، استفاده از اسکریپت ها، درخواست ها و پاسخ ها، نشت حافظه، احراز هویت، مدیریت کوکی و جلسه، اجرای اجزای شخص ثالث، تزریق DOM و تزریق داده کمک کند.
تست تعاملی امنیت نرم افزار (Interactive Application Security Testing – IAST)
ابزارهای IAST از تکنیک ها و ابزارهای SAST و DAST برای شناسایی طیف وسیع تری از مشکلات امنیتی استفاده می کنند. این ابزارها به صورت پویا اجرا می شوند تا نرم افزار را در زمان اجرا بررسی کنند. این فرآیند از داخل سرور برنامه برای بررسی کد منبع کامپایل شده اتفاق می افتد.
ابزارهای IAST می توانند با ارائه اطلاعات در مورد علت اصلی آسیب پذیری ها و شناسایی خطوط خاص کد آسیب دیده، رفع مشکلات را آسانتر کنند. این ابزارها می توانند جریان داده، کد منبع، پیکربندی و کتابخانه های شخص ثالث را تجزیه و تحلیل کنند. همچنین می توانید از ابزارهای IAST برای تست API استفاده کنید.
تست امنیت برنامه های موبایل (Mobile Application Security Testing – MAST)
ابزارهای MAST از تکنیک های مختلفی برای تست امنیت برنامه های موبایل استفاده می کنند. این کار شامل تجزیه و تحلیل استاتیک و دینامیک و بررسی داده های پزشکی قانونی جمع آوری شده توسط برنامه های موبایل می شود.
سازمان ها از ابزارهای MAST برای بررسی آسیب پذیری های امنیتی و مشکلات خاص موبایل مانند جیلبریک شدن، نشت داده از دستگاه های تلفن همراه و شبکه های وای فای مخرب استفاده می کنند.
پلتفرم بومی ابری برای محافظت از برنامه های کاربردی (Cloud Native Application Protection Platform – CNAPP)
پلتفرم بومی ابری برای محافظت از برنامه های کاربردی (CNAPP) یک پنل کنترل متمرکز برای ابزارهای مورد نیاز برای محافظت از برنامه های کاربردی بومی ابری ارائه می دهد. این پلتفرم، پلتفرم محافظت از بار کاری ابری (CWPP) و مدیریت وضعیت امنیتی ابری (CSPM) را با سایر قابلیت ها ادغام می کند.
فناوری CNAPP اغلب شامل مدیریت مجوز هویت، کشف و محافظت API و اتوماسیون و هماهنگی امنیت برای پلتفرمهای تنظیم کننده کانتینر مانند Kubernetes است.