مرحله بعدی در تست نفوذ، جمع آوری اطلاعات است. در طی این مرحله، منابع اطلاعاتی در دسترس را آزادانه تحلیل میکنید. این فرآیند به عنوان جمع آوری اطلاعات منبع باز (OSINT) شناخته شده است. همچنین از ابزارهایی مانند اسکنرهای پورت استفاده میکنید تا بدانید چه سیستمهایی در اینترنت یا شبکه داخلی و همچنین چه نرم افزار در حال اجرایی وجود دارد.
جمع آوری اطلاعات
بر اساس دانش حاصل شده در مرحله جمعآوری اطلاعات در تست نفوذ ما در جایگاه مهاجمان فکر میکنیم و ، ما به سمت مدلسازی تهدید حرکت میکنیم. در تست نفوذ ما در جایگاه مهاجمان فکر میکنیم و برنامههای حمله را براساس اطلاعاتی که جمعآوری کردهایم، توسعه میدهیم. به عنوان مثال، اگر مشتری نرم افزار اختصاصی را توسعه دهد، یک مهاجم میتواند این سازمان را از طریق دسترسی به سیستمهای توسعه داخلی خود، که در آن کد منبع توسعه یافته و تست شده، و اسرار تجاری شرکت به یک شرکت رقیب، از بین ببرد. براساس اطلاعاتی که در جمعآوری اطلاعات در تست نفوذ ما در جایگاه مهاجمان فکر میکنیم و به دست آوردهایم، استراتژیهایی برای نفوذ به سیستمهای مشتری ایجاد میکنیم.
تست نفوذ با مرحله پیشبرد مشارکت (pre-engagement) آغاز میشود که شامل گفتگو با مشتری در مورد اهداف تست نفوذ، نگاشت دامنه (وسعت و پارامترهای تست) و غیره است. وقتی تستر نفوذ و مشتری در مورد دامنه، فرمت گزارش و سایر موضوعات به توافق رسیدند، تست نفوذ واقعی آغاز میشود.
مراحل تست نفوذ
در مرحله جمعآوری اطلاعات در تست نفوذ، تستر نفوذ اطلاعات موجود در مورد کلاینت را جستجو میکند و راههای بالقوه اتصال به سیستمهای آن را شناسایی میکند. در مرحله مدل سازی تهدید (threat modeling) اگر یافته ها اجازه دهد مهاجم به سیستم وارد شود، تستر از این اطلاعات برای تعیین ارزش هر یافته و تأثیر آن بر مشتری استفاده میکند. در تست نفوذ این ارزیابی به تستر نفوذ اجازه میدهد تا برنامه عملیاتی و روشهای حمله را توسعه دهد.
تست نفوذ (penetration testing) عبارت است از شبیهسازی حملات واقعی جهت ارزیابی مخاطرات مربوط به نقض امنیتی بالقوه. در تست نفوذ، تسترها نه تنها آسیبپذیریهایی را که میتواند توسط مهاجمان مورد استفاده قرار گیرد، کشف میکنند، بلکه در صورت امکان، آسیبپذیریها را به منظور ارزیابی آنچه که ممکن است مهاجمان بعد از بهرهبرداری موفق به دست بیاورند، مورد استفاده قرار میدهند.
تست نفوذ
در مواقعی یک خبرنامه در مورد آسیب یک شرکت بزرگ توسط یک حمله سایبری منتشر میشود. اغلب مهاجمان از آخرین و بزرگترین zero-day ها (آسیب پذیریهای وصله نشده توسط ناشران نرم افزاری) استفاده نمیکنند.
نشتی حافظه در تست نرم افزار موضوعی است که هم یک مشکل کارایی (به دلیل اتلاف حافظه) و هم یک مشکل امنیتی محسوب میگردد (به دلیل مصرف بیرویه حافظه که نهایتا منجر به پرشدن حافظه و پایین آمدن سرور میشود و این معضل در تست نرم افزار بطور مستمر مشخص شود). بررسی این مشکل در برنامهنویسی سیستمهای سطح پایین (تولید شده با زبانهایی همچون C و ++C) از اهمیت خاصی برخوردار است و یکی از مهم ترین مراحل بشمار می آید. چرا که به دلایلی همچون عدم وجود virtual machine در زبانهای سطح پایین و امکان استفاده مستقیم از اشاره گرها (pointer)، تشخیص این مشکل بسیار پیچیده است.
نشتی حافظه در تست نرم افزار
البته مشکل نشتی حافطه در زبانهای سطح بالایی همچون Java و #C نیز که در یک محیط sandbox اجرا میشوند، به دلیل برنامهنویسی نامطلوب میتواند رخ دهد و لذا برنامهنویسان باید دقت کافی در این زمینه را بنمایند.
در شرکت مایکروسافت، مقوله تست نرم افزار به عنوان یک دیسیپلین مهم و مجزا در نظر گرفته شده است. برای هر محصول نرم افزاری، تیم خاص تست وجود دارد. همچنین یک تیم مشترک تست نرم افزار به صورت عمومی وجود دارد که برروی راهکارها و ابزارهای عمومی تست نرم افزار فعالیت مینماید.
طبق گزارشات ارائه شده، هر ساله شرکت مایکروسافت بیش از 5000 تولیدکننده استخدام میکند. همچنین بیش از 1000 نفر آزمونگر برای تست محصولات خود جذب مینماید. عنوان رسمی آزمونگر در شرکت مایکروسافت عبارت است از :
* مهندسی توسعه نرم افزار در تست نرم افزار (Software Development Engineer in Test)
آزمونگرها به نوعی نقش تولیدکننده را نیز دارند چرا که طراحی تستها را انجام داده، برروی طراحی محصول تاثیر گذاشته و در عملیاتی همچون ریشه یابی خطا، مرور کد و اسکریپت نویسی نقش دارند. نقشهای زیر خاص تست در شرکت مایکروسافت وجود دارد.
معمار آزمون (Test Architect) در تست نرم افزار
معمار آزمون در تیم تست نرم افزار تقریبا همان نقشی را دارد که مدیر فنی در تیم تولید دارد. معمار آزمون تصمیماتی میگیرد که برروی کیفیت کل یک محصول تاثیر میگذارد درحالیکه سایر نقشهای مربوط به آزمون ممکن است بر روی کیفیت برخی از قابلیتهای یک محصول تاثیر گذار باشند. وظیفه اصلی معمار آزمون، راهبری فنی آزمون و اتخاذ استراتژی برای سازمان تست خود میباشد. طبق آمارهای ارائه شده در حوالی سال 2010، از بین 9000 آزمونگر موجود در شرکت مایکروسافت، 40 نفر از آنها نقش معمار آزمون را برعهده داشتهاند.
آزمونگر ، آزمونگر ارشد، آزمونگر اصلی، شریک آزمونگر
نیروهای نوپا که برای تست نرم افزار در شرکت مایکروسافت جذب میشوند، معمولا در نقش آزمونگر عادی وارد کار شده و دورههای آموزشی لازم را طی میکنند. به مرور زمان و با پیشرفتهای حاصل شده، نقشهای بالاتری همچون آزمونگر ارشد به آنها اختصاص داده میشود. یک آزمونگر ارشد بر روی موارد پیشرفتهای همچون آزمون کارایی یا امنیت ممکن است تمرکز نماید.
مدیر آزمون
مدیریت آزمون در حوزه تست نرم افزار تقریبا نقشی شبیه به مدیریت پروژه در حوزه تولید نرمافزار است. حوزه مدیریت آزمون ممکن است برروی گروهی از قابلیتهای یک محصول، کل یک محصول، یا یک خط تولید محصول باشد و به همین دلیل طبقه بندیهای زیر در این نقش وجود دارد:
رهبر(Leader)، مدیر(Manager)، متصدی(Director).
نحوه تست محصولات نرمافزاری در شرکت مایکروسافت
متدولوژی STEP كه حروف اختصاری Systematic Test and Evaluation Process است، یك متدولوژی برای تست سیستماتیك و مبتنی بر استانداردهای IEEE برای افزایش کیفیت نرم افزار میباشد.
در این مقاله قصد داریم نگاه عمیقتری به تست نرمافزار، شیوهها و کاربردهای آن داشته باشیم. اگر بخواهیم از تست نرمافزار تعریفی ساده داشته باشیم میتوان گفت" تست نرمافزار فرآیند اجرای یک برنامه کاربردی با هدف پیدا کردن اشکالات و متعاقبا بهبود کیفیت نرم افزار است". تست نرمافزاربه عنوان یك فرایند كلیدی در تضمین کیفیت نرم افزار سیستمهای نرم افزاری ایفاء نقش میكند. در حال حاضر تست به عنوان یك صنعت در حوزه نرمافزار محسوب میشود.
در سالهای اخیر آمارهای شگفت آوری از سوی موسسه (NIST(National Institute of Standards and تست نرم افزارTechnologyدرباره شكست سیستمهای نرم افزاری ارائه شده است. در كشور ایالات متحده، این شكستها سالیانه حدود 59.5 میلیارد دلار به اقتصاد این كشور صدمه میزند. طبق بررسیهای انجام شده با بكارگیری تست نرمافزار در تمام فازهای تولید نرم افزار 22.2 میلیارد دلار از این خسارت را میتوان كاهش داد. طبق آمارهای ارائه شده از سوی موسسه (IDC(International Data Corporation، چهل درصد از بودجه نرم افزارها صرف تست آن میگردد.در کشور ما نیز، با توجه به رشد فناوری اطلاعات و ارتباطات در طی چند سال گذشته و تولید بومی بسیاری از نرم افزارهای مورد نیاز، نیاز به این فرایند بیش از پیش احساس شده و در صورت عدم توجه به آن، كاهش كیفیت سیستمهای ارائه شده، عدم رضایت مشتری و در نهایت از دست دادن بازار را به همراه خواهد داشت.
امروزه بسیاری از کارها در زندگی شخصی، صنعت، امور نظامی و غیره به نرم افزارها سپرده شده است. گاهی یک اشتباه کوچک نرمافزاری میتواند سبب خسارات جبران ناپذیری شود. برای تشریح موضوع به چند نمونه اشاره میگردد.
تنها 26% از پروژه های نرم افزاری دنیا با موفقیت اجرا میشوند. معیار های موفقیت پروژه عبارتنداز:
تست نرمافزار بسیاری از پروژههای تولید نرم افزار با شکست مواجه میشوند، هزینه بالایی صرف پروژههای شکست خورده میگردد .
در حالت ایدهآل هر کدام از آزمایشها از بقیه مستقل است. معمولاً تست واحد ها توسط توسعهدهندگان نرمافزار به کار گرفته میشوند. نحوهٔ تست واحدمیتواند از ارزیابی نتیجه روی کاغذ، تا اجرای خودکار چندین آزمایش توسط برنامه و تحلیل نتیجهٔ آنها توسط خود برنامه، متغیر باشد.
در هر صورت، تکنیک های رایج استفاده شده تست نرم افزار در تست محصولات مایکروسافت عبارتند از:
روشهای مرسوم در آزمونهای ساختاری در تست نرم افزار عبارتند از Block Testing, Line Testing, Decision Testing, Condition Testing, Basic Path Testing که برای مطالعه آنها میتوانید به منابع مربوطه مراجعه نمایید.
در شرکت مایکروسافت برای تست نرم افزار از روش Model-Based Testing نیز استفاده میشود که رایجترین آن آزمون مبتنی بر ماشین حالات است. در این روش، فراورده آزمون مورد نظر در ابتدا مدلسازی میشود، سپس آزمونهای لازم از روی مدل استخراج میگردد. ابزارهایی همچون Spec Explorer در این زمینه ارائه شده است که برای تستهای پروتکل در حوزه امنیت کاربرد زیادی دارند.
در زمینه ابزارهای آزمون در تست نرم افزار، مایکروسافت ابزارهای متعددی را در حوزه های مختلف آزمون ارائه داده است که تشریح آنها در این مقاله نمیگنجد. در مورد خودکارسازی آزمون در شرکت مایکروسافت فقط به ارائه چند نکته بسنده میکنیم: برای محصولاتی که دوره نگهداشت بیشتری دارند، خودکارسازی بخش اعظم آزمونها در تست نرم افزار ضروری است چرا که موقع تغییر سیستم، با اجرای تستهای رگراسیون خودکارسازی شده، میتوان از صحت کارکرد بخشهای تغییر داده نشده سیستم اطمینان حاصل نمود.
تکنیک های استفاده شده در تست محصولات نرم افزاری ماکروسافت
در تست نفوذ بهرهبرداریها را در مقابل آسیبپذیریهایی که (گاهی با استفاده از یک ابزار مانندMetasploit ) کشف کردهایم، در تلاش برای دسترسی به سیستمهای مشتری اجرا میکنیم. همانطور که میبینید، بعضی از آسیبپذیریها در تست نفوذ، مانند ورود به سیستم با گذرواژههای پیش فرض، به راحتی قابل استفاده هستند.
تست نفوذ
درباره این سایت