فازینگ

بندانگشتی|تصویری از مراحل آزمون فازینگ
در برنامه‌نویسی و توسعه‌ی نرم‌افزار، فازینگ (fuzzing) یا آزمون فاز (fuzz testing)، یک آزمون تست نرم‌افزار خودمختار است که شامل فراهم کردن داده‌های نامعتبر، غیرمنتظره یا تصادفی، به عنوان ورودی برای یک برنامه‌ی کامپیوتری است. سپس برنامه برای استثناء‌هایی از جمله کرش، عدم موفقیت تایید کد، یا نشت حافظه‌ی بالقوه، نظارت می‌شود. به‌طور معمول، فازرها برای تست برنامه‌هایی هستند که ورودی‌های ساخت‌یافته دریافت می‌کنند. این ساختار مشخص است (برای مثال، در فرمت فایل یا پروتکل) و ورودی معتبر از نامعتبر را تشخیص می‌دهد. یک فازر مؤثر، ورودی‌های نیمه-معتبری تولید می‌کند که "به اندازه‌ی کافی معتبر" در این هستند که توسط تجزیه‌کننده به‌صورت مستقیم رد نمی‌شوند، اما در اعماق عمیق‌تر برنامه، رفتارهایی غیرمنتظره بروز می‌دهند و "به اندازه کافی نامعتبر" هستند که حالات استثنایی‌ای که به‌طور مناسب با آن‌ها برخورد نشده است را آشکار سازند.

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

## تاریخچه
عبارت "fuzz" به لطف یک پروژه‌ی کلاسی در سال 1988 در کلاس لیسانیسیه‌ی سیستم‌های عامل پیشرفته (Advanced Operating Systems) (CS736)، تحت نظر پروفسور بارتون میلر در دانشگاه ویسکانسین، که نتایجش به‌طور پی در پی در سال 1990 منتشر شد، به‌وجود آمد. فاز تست سودمندی یک یونیکس (UNIX)، به این معنا بود که ورودی تصادفی و پارامترهای خط‌فرمان برای سودمندی آن، به‌طور خودکار تولید شوند. این پروژه برای تست اطمینان‌پذیری برنامه‌های خط‌فرمان یونیکس با استفاده از اجرای تعداد زیادی از ورودی‌های تصادفی به‌طور پشت‌سرهم تا وقتی که برنامه کرش کند، طراحی شده بود. تیم میلر توانست کاری کنند 25 تا 35 درصد سودمندی‌هایی را که تست کردند، کرش کنند. سپس هر کرش را برای تعیین علت، اشکال‌زدایی (دیباگ) کردند و هر شکست را گروه‌بندی کردند. برای این‌که محققان دیگر نیز بتوانند آزمایش‌های مشابه را با نرم‌افزارهای دیگر انجام دهند، کد منبع (سورس کد) ابزارها، پروسه‌های تست، و داده‌ی نتایج خام به‌صورت عمومی در دسترس قرار گرفتند. این آزمون فاز اولیه، در حال حاضر فازینگ جعبه‌سیاه (black box)، نسلی، بدون‌ساختار (گُنگ (dumb) یا "کلاسیک") خطاب می‌شود.

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

یک کمک کلیدی در رابطه با این کار  اولیه، یک اورَکل ساده (تقریباً ساده‌گرایانه) بود. یک برنامه شکست می‌خورد اگر کرش می‌کرد یا با دریافت ورودی تصادفی هنگ می‌کرد و در غیر این صورت، موفق در نظر گرفته می‌شد. با این‌که ساختن اورکل‌های تستی می‌تواند چالش‌برانگیز باشد، بکارگیری اورکل این آزمون فاز اولیه، ساده و جامع بود.

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

در سپتامبر 2014، شِل‌شاک (Shellshock) به عنوان خانواده‌ای از باگ‌های امنیتی در پوسته‌ی یونیکس بَش (Bash) که به‌صورت گسترده استفاده می‌شد، فاش شد؛ اکثر آسیب‌پذیری‌های شل‌شاک با استفاده از فازر AFL یافت شدند. (بسیاری از خدمات اینترنتی، مانند به‌کاراندازی‌های وب سرور، از بش برای پردازش درخواست‌های معین استفاده می‌کنند، که به مهاجم این اجازه را می‌دهد نسخه‌های آسیب‌پذیر بش، فرمان‌های دلخواه را اجرا کنند. این باعث می‌شود مهاجم بتواند به سیستم یک کامپیوتر، دسترسی غیرمجاز پیدا کند.)

در آوریل 2015، هانو بِک نشان داد چگونه فازر AFL می‌توانست آسیب‌پذیری خونریزی‌قلبی 2014 را پیدا کند. (آسیب‌پذیری خونریزی‌قلبی در آوریل 2014 آشکار شد. این یک آسیب‌پذیری جدی‌ست که به مهاجمان این اجازه را می‌دهد تا ارتباطات رمزنگاری‌شده را رمزگشایی کنند. این آسیب‌پذیری به‌طور تصادفی در OpenSSL معرفی شد که TLS را پیاده‌سازی می‌کند و توسط اکثریت سرورها در اینترنت، مورد استفاده است. موتور جستجوی شودان (Shodan) گزارش داد 238,000 ماشین در آوریل 2016؛ و 200,000 در ژانویه 2017 هنوز آسیب‌پذیر هستند.)

در اوت 2016،  سازمان پروژه‌های پژوهشی پیشرفتهٔ دفاعی (دارپا) فینال اولین چالش سایبری بزرگ (Cyber Grand Challenge) را برگزار کرد، یک مسابقه‌ی تسخیر پرچم کامل خودمختار که 11 ساعت به درازا کشید. هدف، توسعه‌ی سیستم‌های دفاعی خودکار بود که بتوانند اشکالات نرم‌افزاری را در زمان حقیقی کشف، بهره‌جویی و تصحیح کنند. فازینگ به عنوان یک استارتژی تهاجم مؤثر برای کشف اشکالات در نرم‌افزارهای حریف، استفاده شده بود. فازینگ، پتانسیل بسیاری زیادی در زمینه‌ی خودکارسازی تشخیص آسیب‌پذیری نشان داد. برنده، سیستمی به نام "مِیهِم" (Mayhem) بود که توسط تیم ForAllSecure به رهبری دِیوید براملی توسعه یافته بود.

در سپتامبر 2016، کمپانی مایکروسافت، پروجکت سپرینگ‌فیلد (Project Springfield) را معرفی کرد، یک خدمت آزمون فاز بر پایه فضای ابری برای یافتن باگ‌های حساس‌به‌امنیت در نرم‌افزارها.

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

در مراسم بلَک هَت (Black Hat) 2018، کریستوفر دوماس، از فازینگ برای آشکارسازی وجود هسته‌ی رایانه‌ی کم‌دستور (RISC) در یک پردازنده استفاده کرد و آن را نشان داد. این هسته می‌توانست با دور زدن (بای‌پس کردن) بررسی‌های امنیتی، دستورات حلقه‌ی حفاظتی 0 را از حلقه‌ی حفاظتی 3 اجرا کند.

در سپتامبر 2020، کمپانی مایکروسافت، وان‌فاز (OneFuzz) را منتشر کرد، یک سکوی فازینگ-به-عنوان-سرویس خودمیزبان که تشخیص باگ‌های نرم‌افزاری را خودکارسازی می‌کند. این فریم‌ورک، ویندوز و لینوکس را ساپورت می‌کند. سه سال بعد در 1 نوامبر 2023، بایگانی شد.

## جستارهای وابسته
* اشکال نرم‌افزاری
* ابزار تست نرم‌افزار
* هنر گلیچ
* رفع اشکال
* اشکال‌زدا
* اشکال‌زدایی
* خطای منطقی
* اشکال سخت‌افزاری
* اشکال نرم‌افزاری
* جداسازی عمل‌وند
* اتلاف توان سی‌پی‌یو
* مقیاس‌بندی ولتاژ پویا
* دروازه‌بندی ساعت
*  رمزگذاری اتوبوس
* باتری قابل شارژ

## منابع
ویکی پدیای انگلیسی https://en.wikipedia.org/wiki/Fuzzing
* 

رده:تست نرم‌افزار
رده:رویه‌های امنیت رایانه‌ای