فازینگ چیست؟ با بهترین روش تست نرم‌افزار از نظر امنیت و پایداری آشنا شوید

فازینگ چیست؟ با بهترین روش تست نرم‌افزار از نظر امنیت و پایداری آشنا شوید

هر محصول نرم‌افزاری پیش از ورود به بازار باید مجموعه‌ای از تست‌های کنترل کیفیت را پشت سر بگذارد. مهم‌ترین این تست‌ها، آن‌هایی هستند که محصول را از نظر امنیتی، می‌سنجند. یکی از جدیدترین تکنیک‌های کنترل کیفیت که در شناسایی آسیب‌پذیری‌ها (Vulnerabilities) و حفرات امنیتی در نرم‌افزارها کاربرد دارد، تست فازینگ (Fuzzing) است. در این مقاله، می‌خواهیم این نوع تست امنیتی را به طور کامل به شما مخاطبان گرامی مجله سایبرنو معرفی کنیم. با ما همراه باشید.

 

فازینگ چیست؟

فازینگ چیست

 

تست فازینگ که فاز تستینگ (Fuzz testing) نیز نامیده می‌شود، یکی از تکنیک‌های خلاقانه شناسایی آسیب‌پذیری‌ها و باگ‌های امنیتی در نرم‌افزارها است که در آن، حجم بالایی از داده‌هایی نادرست (invalid) یا تصادفی به نام FUZZ به نرم‌افزار معرفی می‌شوند تا باگ‌های احتمالی در نرم‌افزار، خودشان را نشان دهند.

در این روش خودکار، یک ابزار فازینگ که فازر (Fuzzer) نامیده می‌شود ورودی‌های تصادفی یا نادرست را به نرم‌فزار تزریق می‌کند و در عین حال، بر خروجی‌های نرم‌افزار نظارت دارد تا در صورت هر گونه کرش شدن نرم‌افزار یا نشت داده، آن را شناسایی کند. به عبارت ساده‌تر، فازر، حجم زیادی از داده‌ها را وارد نرم‌افزار می‌کند و خروجی‌ها را زیر نظر می‌گیرد تا در صورت هرگونه خروجی نامناسب از نظر امنیتی یا عملکردی، آن را شناسایی و مشکل کدنویسی را پیدا کند.

این تکنیک می‌تواند آسیب‌پذیری‌ها یا خطاهای کدنویسی بسیار مهمی را که در مراحل کدنویسی یا دیباگ کردن (debugging) نرم‌افزار شناسایی نشده‌اند، پیدا کند. این روش کنترل کیفیت محصولات نرم‌افزاری به ویژه در شناسایی آسیب‌پذیری‌هایی که امکان اکسپلویت شدن آن‌ها با تکنیک‌های تزریق SQL (SQL injection)، سرریز بافر (buffer overflow)، انکار سرویس (Denial of Service یا DOS) و XSS وجود دارد، به بهترین شکل ممکن عمل می‌کند. هکرها از این آسیب‌پذیری‌ها برای کرش کردن سیستم‌ها یا سرقت اطلاعات استفاده می‌کنند.

فاز تستینگ در شناسایی آسیب‌پذیری‌هایی که سبب کرش شدن سیستم‌ها نمی‌شوند، مثل آسیب‌پذیری‌های قابل اکسپلویت شدن با جاسوس‌افزارها، تروجان‌ها و کی لاگرها، کارایی کمتری دارد.

 

مروری بر تاریخچه فاز تستینگ

فاز تستینگ

 

پروفسور برتون میلر (Barton Miler) در دهه ۱۹۸۰ اولین کسی بود که از عبارت fuzz استفاده کرد. میلر پس از ورود به یک سیستم یونیکس از طریق یک شبکه دایال-آپ در زمانی که هوا طوفانی بود، متوجه تداخل قابل توجهی در سیگنال دریافتی شد. این تداخل در نهایت باعث کرش سیستم یونیکس شد. سپس، او از دانشجویانش خواست که با استفاده از یک تولیدکننده فاز، سیسستم‌های یونیکس را با نویز بمباران کنند تا ببینند که آیا این سیستم‌ها کرش می‌کنند یا خیر. آن‌ها در مطالعات خودشان متوجه شدند که نرم‌افزارهای ویندوز، مک و یونیکس اگر با داده‌های تصادفی و غیر منتظره بمباران شوند، کرش خواهند کرد. میلر به همراه یکی از همکارانش بعدا کتابی به نام «فازینگ برای تست امنیت و کنترل کیفیت نرم‌افزار» منتشر کرد.

 

تست فازینگ چطور انجام می‌شود؟

روش فازینگ

 

همانطور که گفتیم، فلسفه فاز تستینگ، معرفی داده‌های غیرمنتظره، ناهنجار یا تصادفی به نرم‌افزار برای شناسایی مشکلات آن است. هر فازر سه عنصر کلیدی دارد:

  • سراینده یا پوئت (poet): داده‌های ناهنجار را تولید می‌کند.
  • پیک یا کوریر (courier): داده‌های تصادفی را به نرم‌ازفزار وارد می‌کند.
  • اوراکل (oracle): که نقص‌ها احتمالی در بدافزار را شناسایی می‌کند.

فرایند فازینگ با پوئت شروع می‌شود که داده‌های ناهنجار را تولید می‌کند. این داده‌ها می‌توانند به هر یک از سه حالت زیر باشند:

  • تصادفی (Random): منظور از فازینگ تصادفی، معرفی کردن داده‌های تصادفی به نرم‌افزار است. 
  • تکامل الگو (template evolutionary): چرخه‌ای شامل درج داده‌های ناهنجار در ورودی‌های درست، فیدبک گرفتن از نرم‌افزار و سپس، انجام تست بعدی بر اساس این فیدبک و انجام چندین باره این چرخه
  • نسلی (generational): درک پروتکل، فایل فرمت، یا API مورد تست و تلاش برای شکستن قواعد آن

در مرحله بعدی، پیک یا کوریر داده‌ها را به نرم‌افزار تحویل می‌دهد. روش ورود داده‌ها به نرم‌افزار در تکنیک‌های فازینگ مختلف با همدیگر تفاوت دارد اما هدف نهایی در تمامی این تکنیک‌ها، وارد کردن داده‌های تولید شده توسط پوئت به نرم‌افزار مورد تست است.
نهایتا، اوراکل تعیین می‌کند که نرم‌افزار تست را با موفقیت پشت سر گذاشته است یا خیر. اوراکل با هدف شناسایی مشکلات و کرش‌ها، خروجی‌های نرم‌افزار را بررسی می‌کند. دانستن اینکه دلیل مشکل نرم‌افزار دقیقا چیست، اهمیت زیادی دارد و بدون چنین اطلاعاتی، تست‌کننده‌ها نمی‌توانند مجددا آن مشکل را ایجاد، بررسی و دلیل آن را تعیین کنند. 

 

تفاوت فاز تستینگ با تحلیل رمز چیست؟

تفاوت فازینگ با تحلیل رمز

 

به تعداد راه‌حل‌های قابل آزمایش کردن برای حل مشکلات نرم‌افزاری، فضای راه حل‌های قابل کاوش (the explorable solutions space) گفته می‌شود. هدف تحلیل رمز (cryptanalysis)، کاهش فضای جستجو برای پیدا کردن راه‌حل‌ها یا کلیدها برای کدگشایی از چیزی است. این مفهوم کاملا با تست فازینگ تفاوت دارد.

 

تست فازینگ چه انواعی دارد؟

انواع فازینگ

 

به طور کلی می‌توان فاز تستینگ را به دو نوع کلی زیر تقسیم‌بندی کرد:

  • هدایت شده به وسیله پوشش (coverage-guided): در هنگام اجرای نرم‌افزار روی کد منبع تمرکز دارد و آن را با چالش‌های تصادفی، آزمایش می‌کند تا باگ‌‌ها مشخص شوند. در این روش، تست‌های جدید به طور پیوسته ایجاد می‌شوند و هدف نهایی، کرش کردن نرم‌افزار است. با این کار، امکان شناسایی کد مشکل‌دار، وجود دارد.
  • رفتاری (Behavioral): تست فازینگ رفتاری از ورودی‌های تصادفی برای بررسی اینکه چگونگی عملکرد نرم‌افزار استفاده می‌کند.

 

چرا باید فاز تستینگ انجام دهیم؟

مزیت های فاز تستینگ

 

تست فازینگ، مزیت‌های بسیار زیادی برای تست امنیت و کنترل کیفت نرم‌افزارها دارد که از مهم‌ترین آن‌ها می‌توان به موارد زیر اشاره کرد:

  • این تست، نمایی کلی از کیفیت نرم‌افزار به تصویر می‌کشد. با استفاده از این تکنیک کنترل کیفیت می‌توانید به خوبی امنیت و پایداری نرم‌افزار را بسنجید.
  • فازینگ تکنیک اصلی هکرها برای پیدا کردن آسیب‌پذیری‌های نرم‌افزارها است. شما با استفاده از این تکنیک در غربال‌گری امنیتی محصولات نرم‌افزاری خود می‌توانید از اکسپلویت شدن آسیب‌پذیری‌ها در آن‌ها و حملات هکری روز صفر (zero-day attacks)، جلوگیری کنید. 
  • این تکنیک، کاملا خودکار انجام می‌شود و هزینه بالایی ندارد. زمانی که فازر اجرا می‌شود، به صورت خودکار باگ‌ها و آسیب‌پذیری‌ها را شناسایی می‌کند.
  • فاز تستینگ به شناسایی باگ‌ها، آسیب‌پذیری‌ها و مشکلات دیگر در کدنویسی نرم‌افزار که با روش‌های دیگر و بررسی‌های انسانی شناسایی نشده‌اند، کمک می‌کند.

 

فازینگ چه نقطه ضعف‌هایی دارد؟

معایت فاز تستینگ

 

با اینکه فاز تستینگ یکی از بهترین تکنیک‌های کنترل کیفیت و امنیت نرم‌افزارها است اما این تکنیک، خالی از ایراد نیست. از مهم‌ترین نقطه ضعف‌های فازینگ می‌توان به موارد زیر اشاره کرد:

  • این تکنیک به تنهایی نمی‌تواند تمامی ایرادات کد نویسی و همه آسیب‌پذیری‌های نرم‌افزارها را نشان دهد.
  • فاز تستینگ در شناسایی آسیب‌پذیری‌هایی که سبب کرش شدن سیستم‌ها نمی‌شوند، مثل آسیب‌پذیری‌های قابل اکسپلویت شدن با جاسوس‌افزارها، تروجان‌ها و کی لاگرها، کارایی زیادی ندارد.
  • این تکنیک تنها می‌تواند خطاهای ساده در کدنویسی را پیدا کند.
  • تعیین یک شرط مرزی با ورودی‌های تصادفی با مشکلات زیادی همراه است اما اکنون تست‌کننده‌ها می‌توانند با استفاده از الگوریتم‌های deterministic براساس ورودی‌های کاربران، این مشکلات را حل کنند.

 

کدام صنایع می‌توانند از فاز تستینگ استفاده کنند؟

 

صنایعی که نیازمند نرم‌افزارهای بسیار پایدار و امن هستند، می‌توانند از فازینگ به عنوان یکی از مراحل کنترل کیفیت و غربال‌گری نرم‌افزارهای خود استفاده کنند. این تکنیک، بیشترین کاربرد را در صنایع زیر دارد:

  • خودروسازی
  • هوافضا
  • امور مالی
  • بهداشت و درمان
  • مخابرات
  • انرژی
  • و ...

 

کدام استانداردها فازینگ را به عنوان روشی برای کنترل کیفیت نرم‌افزار، توصیه می‌کنند؟

استانداردهای فازینگ

 

در زیر می‌توانید ببینید که کدام استانداردها، فازینگ را به عنوان روشی برای کنترل کیفیت محصولات نرم‌افزاری، توصیه می‌کنند:

  • ISO2626: خودروهای جاده‌ای – ایمنی عملکردی
  • UNECE WP.29: مجمع جهانی هماهنگی مقررات خودرو
  • ISA/IEC 62443-4-1: الزامات چرخه حیات توسعه محصول امن
  • ISO/SAE DIS 21434: خودروهای جاده‌ای – مهندسی امنیت سایبری
  • UL2900-1 و UL2900-2-1: سیستم‌های سلامت و بهداشت – امنیت سایبری نرم‌افزاری برای محصولات قابل اتصال به شبکه
  • ISO/IEC/IEEE 29119: مهندسی نرم‌افزار و سیستم‌ها – تست نرم‌افزار
  • ISO/IEC 12207: مهندسی سیستم‌ها و نرم‌افزار – فرایندهای چرخه حیات نرم‌افزار
  • ISO 27001: فناوری اطلاعات – تکنیک‌های امنیتی – سیستم‌های مدیریت امنیت اطلاعات
  • ISO 22301: امنیت و پایداری – سیستم‌های مدیریت بقای کسب و کار

 

چرا از فازرهای رایگان و متن-باز استفاده نکنیم؟

معایب فازر رایگان

 

امروزه، ابزارهای فازر زیادی، حتی به صورت رایگان و متن-باز موجود هستند که توسعه‌دهندگان نرم‌افزارها می‌توانند از آن‌ها برای تست کردن محصولات خودشان استفاده کنند. با این حال، فازرهای رایگان و متن-باز موجود، مشکلات زیادی دارند که از مهم‌ترین آن‌ها می‌توان به موارد زیر اشاره کرد:

  • این فازرها خیلی از باگ‌ها، به ویژه باگ‌هایی را که سبب کرش شدن کامل نرم‌افزار می‌شوند یا باگ‌هایی که تنها در شرایط مشخصی ایجاد می‌شوند را شناسایی نمی‌کنند. 
  • تکرار و تحلیل نتایج فازرهای متن-باز، بسیار دشوار است زیرا این فازرها، اطلاعات دقیقی در رابطه با دلیل مشکلات نرم‌افزاری فراهم نمی‌آورند.
  • انجام تست فازینگ روی نرم‌افزارهای دارای ورودی‌های پیچیده نیازمند فازر هوشمند هستند که نرم‌افزار را به طور کامل تست می‌کنند.

 

فازر هوشمند سایبرنو چیست و چرا از آن استفاده کنیم؟

فازر هوشمند سایبرنو، محصول شرکت داخلی سایبرنو است که در زمینه تولید محصولات امنیت سایبری، فعالیت دارد. این محصول که تست فازینگ را برای کنترل کیفیت نرم‌افزارها انجام می‌دهد، دارای ویژگی‌های زیر است:

  • امکان شناسایی آسیب‌پذیری در برنامه‌های نوشته شده برای سیستم عامل ویندوز (فایل‌های اجرایی EXE و DLL)
  • امکان تحلیل درایورهای سطح هسته سیستم عامل ویندوز با ارسال IOCTL یا IRP
  • امکان فازینگ برنامه‌های تحت وب
  • قابلیت قرارگیری در چرخه DevOps و ارتباط با ابزارهای Jenkins ،GitLab CI/CD و...
  • پشتیبانی از Rest-API برای تجمیع با سایر ابزارهای توسعه
  • قابلیت مقیاس‌پذیری و امکان ایجاد Fuzzing Farm

 

جمع بندی

تست فازینگ، یکی از خلاقانه‌ترین و کاربردی‌ترین تست‌های کنترل کیفیت و امنیت نرم‌افزارها است. در این تست، ابزاری به نام فازر، حجم زیادی از ورودی‌های تصادفی و غیرمنتظره را به نرم‌افزار وارد و خروجی‌های آن را برای پیدا کردن مواردی مثل نشت اطلاعات و کرش شدن سیستم، بررسی می‌کند. این تست در صنایع مختلفی مثل هوافضا، خودروسازی، امور مالی، بهداشت و درمان، انرژی و ... کاربرد فراوان دارد. یکی از بهترین ابزارها برای انجام تست فازینگ، توسط شرکت داخلی سایبرنو طراحی شده است. این محصول که فازر هوشمند سایبرنو نام دارد، از قابلیت‌های متعددی برخوردار است و توسعه‌دهندگان نرم‌افزارها می‌توانند برای کنترل کیفیت و بررسی امنیت محصولات نرم‌افزاری خود از این ابزار استفاده کنند.
 

تاریخ انتشار: 1401/10/14
تاریخ بروزرسانی: 1402/11/11
user avatar
نویسنده: امیر ظاهری مدیر تولید محتوا سایبرنو
امیر ظاهری در سال ۱۳۹۴ از دانشگاه «تربیت مدرس» در مقطع کارشناسی ارشد رشته «بیوفیزیک» فارغ‌التحصیل شد. او که به فناوری، امنیت سایبری، رمزنگاری و بلاک‌چین علاقه داشت، نویسندگی در این حوزه‌ها را شروع کرد و در سال ۱۳۹۸ به عضویت هیئت تحریریه «زومیت»، پربازدیدترین مجله تخصصی فناوری ایران، درآمد. او سابقه همکاری به عنوان کارشناس تولید محتوا با استارت‌آپ «جاب ویژن» نیز دارد. در سال ۱۴۰۰ همکاری خودش را با سایبرنو شروع کرد و از آن زمان تاکنون به صورت تخصصی در حوزه امنیت سایبری فعالیت دارد.
برچسب‌های مرتبط
این مطلب را با دوستان خود به اشتراک بگذارید
نظرات کاربران

برای دریافت خبرنامه و اخبار

آدرس پست الکترونیکی خود را وارد کنید

تمامی حقوق مادی و معنوی این سایت متعلق به شرکت مهندسی دنیای فناوری امن ویرا (سایبرنو) می‌باشد.