مرحله بعدی در تست نفوذ، جمع آوری اطلاعات است. در طی این مرحله، منابع اطلاعاتی در دسترس را آزادانه تحلیل میکنید. این فرآیند به عنوان جمع آوری اطلاعات منبع باز (OSINT) شناخته شده است. همچنین از ابزارهایی مانند اسکنرهای پورت استفاده میکنید تا بدانید چه سیستمهایی در اینترنت یا شبکه داخلی و همچنین چه نرم افزار در حال اجرایی وجود دارد.
بر اساس دانش حاصل شده در مرحله جمعآوری اطلاعات در تست نفوذ ما در جایگاه مهاجمان فکر میکنیم و ، ما به سمت مدلسازی تهدید حرکت میکنیم. در تست نفوذ ما در جایگاه مهاجمان فکر میکنیم و برنامههای حمله را براساس اطلاعاتی که جمعآوری کردهایم، توسعه میدهیم. به عنوان مثال، اگر مشتری نرم افزار اختصاصی را توسعه دهد، یک مهاجم میتواند این سازمان را از طریق دسترسی به سیستمهای توسعه داخلی خود، که در آن کد منبع توسعه یافته و تست شده، و فروش اسرار تجاری شرکت به یک شرکت رقیب، از بین ببرد. براساس اطلاعاتی که در جمعآوری اطلاعات در تست نفوذ ما در جایگاه مهاجمان فکر میکنیم و به دست آوردهایم، استراتژیهایی برای نفوذ به سیستمهای مشتری ایجاد میکنیم.
تست نفوذ با مرحله پیشبرد مشارکت (pre-engagement) آغاز میشود که شامل گفتگو با مشتری در مورد اهداف تست نفوذ، نگاشت دامنه (وسعت و پارامترهای تست) و غیره است. وقتی تستر نفوذ و مشتری در مورد دامنه، فرمت گزارش و سایر موضوعات به توافق رسیدند، تست نفوذ واقعی آغاز میشود.
در مرحله جمعآوری اطلاعات در تست نفوذ، تستر نفوذ اطلاعات موجود در مورد کلاینت را جستجو میکند و راههای بالقوه اتصال به سیستمهای آن را شناسایی میکند. در مرحله مدل سازی تهدید (threat modeling) اگر یافته ها اجازه دهد مهاجم به سیستم وارد شود، تستر از این اطلاعات برای تعیین ارزش هر یافته و تأثیر آن بر مشتری استفاده میکند. در تست نفوذ این ارزیابی به تستر نفوذ اجازه میدهد تا برنامه عملیاتی و روشهای حمله را توسعه دهد.
تست نفوذ (penetration testing) عبارت است از شبیهسازی حملات واقعی جهت ارزیابی مخاطرات مربوط به نقض امنیتی بالقوه. در تست نفوذ، تسترها نه تنها آسیبپذیریهایی را که میتواند توسط مهاجمان مورد استفاده قرار گیرد، کشف میکنند، بلکه در صورت امکان، آسیبپذیریها را به منظور ارزیابی آنچه که ممکن است مهاجمان بعد از بهرهبرداری موفق به دست بیاورند، مورد استفاده قرار میدهند.
تست نفوذ
در مواقعی یک خبرنامه در مورد آسیب یک شرکت بزرگ توسط یک حمله سایبری منتشر میشود. اغلب مهاجمان از آخرین و بزرگترین zero-day ها (آسیب پذیریهای وصله نشده توسط ناشران نرم افزاری) استفاده نمیکنند.
در شرکت مایکروسافت، مقوله تست نرم افزار به عنوان یک دیسیپلین مهم و مجزا در نظر گرفته شده است. برای هر محصول نرم افزاری، تیم خاص تست وجود دارد. همچنین یک تیم مشترک تست نرم افزار به صورت عمومی وجود دارد که برروی راهکارها و ابزارهای عمومی تست نرم افزار فعالیت مینماید. طبق گزارشات ارائه شده، هر ساله شرکت مایکروسافت بیش از 5000 تولیدکننده استخدام میکند. همچنین بیش از 1000 نفر آزمونگر برای تست محصولات خود جذب مینماید. عنوان رسمی آزمونگر در شرکت مایکروسافت عبارت است از :
* مهندسی توسعه نرم افزار در تست نرم افزار (Software Development Engineer in Test) آزمونگرها به نوعی نقش تولیدکننده را نیز دارند چرا که طراحی تستها را انجام داده، برروی طراحی محصول تاثیر گذاشته و در عملیاتی همچون ریشه یابی خطا، مرور کد و اسکریپت نویسی نقش دارند. نقشهای زیر خاص تست در شرکت مایکروسافت وجود دارد. معمار آزمون (Test Architect) در تست نرم افزار معمار آزمون در تیم تست نرم افزار تقریبا همان نقشی را دارد که مدیر فنی در تیم تولید دارد. معمار آزمون تصمیماتی میگیرد که برروی کیفیت کل یک محصول تاثیر میگذارد درحالیکه سایر نقشهای مربوط به آزمون ممکن است بر روی کیفیت برخی از قابلیتهای یک محصول تاثیر گذار باشند. وظیفه اصلی معمار آزمون، راهبری فنی آزمون و اتخاذ استراتژی برای سازمان تست خود میباشد. طبق آمارهای ارائه شده در حوالی سال 2010، از بین 9000 آزمونگر موجود در شرکت مایکروسافت، 40 نفر از آنها نقش معمار آزمون را برعهده داشتهاند. آزمونگر ، آزمونگر ارشد، آزمونگر اصلی، شریک آزمونگر نیروهای نوپا که برای تست نرم افزار در شرکت مایکروسافت جذب میشوند، معمولا در نقش آزمونگر عادی وارد کار شده و دورههای آموزشی لازم را طی میکنند. به مرور زمان و با پیشرفتهای حاصل شده، نقشهای بالاتری همچون آزمونگر ارشد به آنها اختصاص داده میشود. یک آزمونگر ارشد بر روی موارد پیشرفتهای همچون آزمون کارایی یا امنیت ممکن است تمرکز نماید. مدیر آزمون مدیریت آزمون در حوزه تست نرم افزار تقریبا نقشی شبیه به مدیریت پروژه در حوزه تولید نرمافزار است. حوزه مدیریت آزمون ممکن است برروی گروهی از قابلیتهای یک محصول، کل یک محصول، یا یک خط تولید محصول باشد و به همین دلیل طبقه بندیهای زیر در این نقش وجود دارد: رهبر(Leader)، مدیر(Manager)، متصدی(Director).
متدولوژی STEP که حروف اختصاری Systematic Test and Evaluation Process است، یک متدولوژی برای تست سیستماتیک و مبتنی بر استانداردهای IEEE برای افزایش کیفیت نرم افزار میباشد.
متدولوژی (TDD(Test-driven development در تست نرم افزار
در این مقاله قصد داریم نگاه عمیقتری به تست نرم افزار، شیوهها و کاربردهای آن داشته باشیم. اگر بخواهیم از تست نرم افزار تعریفی ساده داشته باشیم میتوان گفت" تست نرم افزار فرآیند اجرای یک برنامه کاربردی با هدف پیدا کردن اشکالات و متعاقبا بهبود کیفیت نرم افزار است". تست نرم افزاربه عنوان یک فرایند کلیدی در تضمین کیفیت نرم افزار سیستمهای نرم افزاری ایفاء نقش میکند. در حال حاضر تست به عنوان یک صنعت در حوزه نرمافزار محسوب میشود. در سالهای اخیر آمارهای شگفت آوری از سوی موسسه (NIST(National Institute of Standards and تست نرم افزارTechnologyدرباره شکست سیستمهای نرم افزاری ارائه شده است. در کشور ایالات متحده، این شکستها سالیانه حدود 59.5 میلیارد دلار به اقتصاد این کشور صدمه میزند. طبق بررسیهای انجام شده با بکارگیری تست نرم افزار در تمام فازهای تولید نرم افزار 22.2 میلیارد دلار از این خسارت را میتوان کاهش داد. طبق آمارهای ارائه شده از سوی موسسه (IDC(International Data Corporation، چهل درصد از بودجه نرم افزارها صرف تست آن میگردد.در کشور ما نیز، با توجه به رشد فناوری اطلاعات و ارتباطات در طی چند سال گذشته و تولید بومی بسیاری از نرم افزارهای مورد نیاز، نیاز به این فرایند بیش از پیش احساس شده و در صورت عدم توجه به آن، کاهش کیفیت سیستمهای ارائه شده، عدم رضایت مشتری و در نهایت از دست دادن بازار را به همراه خواهد داشت.
امروزه بسیاری از کارها در زندگی شخصی، صنعت، امور نظامی و غیره به نرم افزارها سپرده شده است. گاهی یک اشتباه کوچک نرمافزاری میتواند سبب خسارات جبران ناپذیری شود. برای تشریح موضوع به چند نمونه اشاره میگردد.
در سال 1994 خطای محاسبات اعشاری در پردازنده پنتیوم شرکت اینتل، علاوه بر کاهش فروش آن، اعتبار شرکت را تا مدتی خدشهدار کرد.
در سال 1998 مدارگرد مریخ به دلیل یک خطا در محاسبات نرم افزاری، در جهت اشتباهی وارد اتمسفر مریخ شده و منفجر گردید. 327 میلیون دلار صرف این پروژه شده بود.
در سال 1996 ماهواره بر آریان پنج، 38 ثانیه بعد از پرتاب در ارتفاع 3700 متری زمین منفجر شد. علت اصلی این حادثه در اثر سرریز در واحد ممیز شناور اندازهگیری شتاب افقی این ماهواره بر بود. 7 میلیارد دلار و 10 سال زمان برای ساخت این ماهواره بر هزینه شده بود. همچنین باری که این ماهواره بر حمل میکرد، 500 میلیون دلار ارزش داشت.
تنها 26% از پروژه های نرم افزاری دنیا با موفقیت اجرا میشوند. معیار های موفقیت پروژه عبارتنداز:
اتمام به موقع
با بودجه تعیین شده
با تمام قابلیتها و عملکردهای مورد نظر
بدون خطا (با خطای جزئی)
تست نرم افزار بسیاری از پروژههای تولید نرم افزار با شکست مواجه میشوند، هزینه بالایی صرف پروژههای شکست خورده میگردد .
در آمریکا، بیش از 81 میلیارد دلار صرف پروژههای شکست خورده میشود
در انگلیس، بیش از 33 میلیارد دلار صرف پروژههای شکست خورده میشود.
تست وب سرویس: الگوی محاسبات سرویس گرا (SOC) امکان تعامل سیستم های کامپیوتری با یکدیگر را فراهم می سازد. SOC اجازه می دهد اپلیکیشن های توزیع شده، مستقل از بستر پیاده سازی با یکدیگر ترکیب شوند و لذا هزینه ها کاهش پیدا کرده و توسعه سیستم ها نیز راحت تر و سریع تر می گردد. در حال حاضر وب سرویس ها به دلیل عدم وابستگی به پلتفرم یا زبان برنامه نویسی یکی از پذیرفته شده ترین تکنولوژی های مبتنی بر سرویس هستند. در هر حال وب سرویس نیز چالش هایی دارد. برای مثال، تست client-side وب سرویس به دلیل ماهیت پیچیده وب سرویس و عدم دسترسی به کد منبع از تست دیگر نرم افزارهای سنتی سخت تر است. در این مقاله به بررسی تاریخچه تست وب سرویس، نقاط ضعف و قوت استراتژی های تست وب سرویس و شناسایی مسائل برای اقدامات آتی می پردازیم. تست وب سرویس شامل تست عملکردهای اصلی وب سرویس، تست تعامل پذیری وب سرویس، تست کارایی شامل تست بار و فشار، تست امنیت و غیره می باشد.
منظور از تست کارایی، تستهایی هستند که برای سنجش میزان کارایی سیستم صورت میگیرند. اهم این تستها عبارتند از:
تست بار (Load Test): برای سنجش میزان کارایی سیستم در حالتی که بار آن به صورت طبیعی باشد. مورد استفاده قرار میگیرد. منظور از بار طبیعی حالتی است که تعداد متوسط کاربران به سیستم وصل شده باشند.
تست فشار (Stress Test): برای سنجش میزان کارایی سیستم در حالتی که بار آن بیشینه باشد، مورد استفاده قرار میگیرد. در حالت بیشینه، بیشترین تعداد کاربران قابل تصور به سیستم وصل شده و سنجش کارایی صورت میگیرد.
تست پرفورمنس
تست پایداری (Stability Test): در تست کاراییبرای سنجش میزان کارایی در حالتی که سیستم به مدت طولانی زیر بار باشد، مورد استفاده قرار گرفته و رفتار سیستم در این حالت مورد ارزیابی قرار میگیرد.