هر محصول نرمافزاری پیش از ورود به بازار باید مجموعهای از تستهای کنترل کیفیت را پشت سر بگذارد. مهمترین این تستها، آنهایی هستند که محصول را از نظر امنیتی، میسنجند. یکی از جدیدترین تکنیکهای کنترل کیفیت که در شناسایی آسیبپذیریها (Vulnerabilities) و حفرات امنیتی در نرمافزارها کاربرد دارد، تست فازینگ (Fuzzing) است. در این مقاله، میخواهیم این نوع تست امنیتی را به طور کامل به شما مخاطبان گرامی مجله سایبرنو معرفی کنیم. با ما همراه باشید.
تست فازینگ که فاز تستینگ (Fuzz testing) نیز نامیده میشود، یکی از تکنیکهای خلاقانه شناسایی آسیبپذیریها و باگهای امنیتی در نرمافزارها است که در آن، حجم بالایی از دادههایی نادرست (invalid) یا تصادفی به نام FUZZ به نرمافزار معرفی میشوند تا باگهای احتمالی در نرمافزار، خودشان را نشان دهند.
در این روش خودکار، یک ابزار فازینگ که فازر (Fuzzer) نامیده میشود ورودیهای تصادفی یا نادرست را به نرمفزار تزریق میکند و در عین حال، بر خروجیهای نرمافزار نظارت دارد تا در صورت هر گونه کرش شدن نرمافزار یا نشت داده، آن را شناسایی کند. به عبارت سادهتر، فازر، حجم زیادی از دادهها را وارد نرمافزار میکند و خروجیها را زیر نظر میگیرد تا در صورت هرگونه خروجی نامناسب از نظر امنیتی یا عملکردی، آن را شناسایی و مشکل کدنویسی را پیدا کند.
این تکنیک میتواند آسیبپذیریها یا خطاهای کدنویسی بسیار مهمی را که در مراحل کدنویسی یا دیباگ کردن (debugging) نرمافزار شناسایی نشدهاند، پیدا کند. این روش کنترل کیفیت محصولات نرمافزاری به ویژه در شناسایی آسیبپذیریهایی که امکان اکسپلویت شدن آنها با تکنیکهای تزریق SQL (SQL injection)، سرریز بافر (buffer overflow)، انکار سرویس (Denial of Service یا DOS) و XSS وجود دارد، به بهترین شکل ممکن عمل میکند. هکرها از این آسیبپذیریها برای کرش کردن سیستمها یا سرقت اطلاعات استفاده میکنند.
فاز تستینگ در شناسایی آسیبپذیریهایی که سبب کرش شدن سیستمها نمیشوند، مثل آسیبپذیریهای قابل اکسپلویت شدن با جاسوسافزارها، تروجانها و کی لاگرها، کارایی کمتری دارد.
پروفسور برتون میلر (Barton Miler) در دهه ۱۹۸۰ اولین کسی بود که از عبارت fuzz استفاده کرد. میلر پس از ورود به یک سیستم یونیکس از طریق یک شبکه دایال-آپ در زمانی که هوا طوفانی بود، متوجه تداخل قابل توجهی در سیگنال دریافتی شد. این تداخل در نهایت باعث کرش سیستم یونیکس شد. سپس، او از دانشجویانش خواست که با استفاده از یک تولیدکننده فاز، سیسستمهای یونیکس را با نویز بمباران کنند تا ببینند که آیا این سیستمها کرش میکنند یا خیر. آنها در مطالعات خودشان متوجه شدند که نرمافزارهای ویندوز، مک و یونیکس اگر با دادههای تصادفی و غیر منتظره بمباران شوند، کرش خواهند کرد. میلر به همراه یکی از همکارانش بعدا کتابی به نام «فازینگ برای تست امنیت و کنترل کیفیت نرمافزار» منتشر کرد.
همانطور که گفتیم، فلسفه فاز تستینگ، معرفی دادههای غیرمنتظره، ناهنجار یا تصادفی به نرمافزار برای شناسایی مشکلات آن است. هر فازر سه عنصر کلیدی دارد:
فرایند فازینگ با پوئت شروع میشود که دادههای ناهنجار را تولید میکند. این دادهها میتوانند به هر یک از سه حالت زیر باشند:
در مرحله بعدی، پیک یا کوریر دادهها را به نرمافزار تحویل میدهد. روش ورود دادهها به نرمافزار در تکنیکهای فازینگ مختلف با همدیگر تفاوت دارد اما هدف نهایی در تمامی این تکنیکها، وارد کردن دادههای تولید شده توسط پوئت به نرمافزار مورد تست است.
نهایتا، اوراکل تعیین میکند که نرمافزار تست را با موفقیت پشت سر گذاشته است یا خیر. اوراکل با هدف شناسایی مشکلات و کرشها، خروجیهای نرمافزار را بررسی میکند. دانستن اینکه دلیل مشکل نرمافزار دقیقا چیست، اهمیت زیادی دارد و بدون چنین اطلاعاتی، تستکنندهها نمیتوانند مجددا آن مشکل را ایجاد، بررسی و دلیل آن را تعیین کنند.
به تعداد راهحلهای قابل آزمایش کردن برای حل مشکلات نرمافزاری، فضای راه حلهای قابل کاوش (the explorable solutions space) گفته میشود. هدف تحلیل رمز (cryptanalysis)، کاهش فضای جستجو برای پیدا کردن راهحلها یا کلیدها برای کدگشایی از چیزی است. این مفهوم کاملا با تست فازینگ تفاوت دارد.
به طور کلی میتوان فاز تستینگ را به دو نوع کلی زیر تقسیمبندی کرد:
تست فازینگ، مزیتهای بسیار زیادی برای تست امنیت و کنترل کیفت نرمافزارها دارد که از مهمترین آنها میتوان به موارد زیر اشاره کرد:
با اینکه فاز تستینگ یکی از بهترین تکنیکهای کنترل کیفیت و امنیت نرمافزارها است اما این تکنیک، خالی از ایراد نیست. از مهمترین نقطه ضعفهای فازینگ میتوان به موارد زیر اشاره کرد:
صنایعی که نیازمند نرمافزارهای بسیار پایدار و امن هستند، میتوانند از فازینگ به عنوان یکی از مراحل کنترل کیفیت و غربالگری نرمافزارهای خود استفاده کنند. این تکنیک، بیشترین کاربرد را در صنایع زیر دارد:
در زیر میتوانید ببینید که کدام استانداردها، فازینگ را به عنوان روشی برای کنترل کیفیت محصولات نرمافزاری، توصیه میکنند:
امروزه، ابزارهای فازر زیادی، حتی به صورت رایگان و متن-باز موجود هستند که توسعهدهندگان نرمافزارها میتوانند از آنها برای تست کردن محصولات خودشان استفاده کنند. با این حال، فازرهای رایگان و متن-باز موجود، مشکلات زیادی دارند که از مهمترین آنها میتوان به موارد زیر اشاره کرد:
فازر هوشمند سایبرنو، محصول شرکت داخلی سایبرنو است که در زمینه تولید محصولات امنیت سایبری، فعالیت دارد. این محصول که تست فازینگ را برای کنترل کیفیت نرمافزارها انجام میدهد، دارای ویژگیهای زیر است:
تست فازینگ، یکی از خلاقانهترین و کاربردیترین تستهای کنترل کیفیت و امنیت نرمافزارها است. در این تست، ابزاری به نام فازر، حجم زیادی از ورودیهای تصادفی و غیرمنتظره را به نرمافزار وارد و خروجیهای آن را برای پیدا کردن مواردی مثل نشت اطلاعات و کرش شدن سیستم، بررسی میکند. این تست در صنایع مختلفی مثل هوافضا، خودروسازی، امور مالی، بهداشت و درمان، انرژی و ... کاربرد فراوان دارد. یکی از بهترین ابزارها برای انجام تست فازینگ، توسط شرکت داخلی سایبرنو طراحی شده است. این محصول که فازر هوشمند سایبرنو نام دارد، از قابلیتهای متعددی برخوردار است و توسعهدهندگان نرمافزارها میتوانند برای کنترل کیفیت و بررسی امنیت محصولات نرمافزاری خود از این ابزار استفاده کنند.