موضوع مقاله: فازینگ | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # فازینگ | مقدمه: سپس برنامه برای استثناء‌هایی از جمله کرش، عدم موفقیت تایید کد، یا نشت حافظه‌ی بالقوه، نظارت می‌شود. | ## بخش 1: فازینگ | به‌طور معمول، فازرها برای تست برنامه‌هایی هستند که ورودی‌های ساخت‌یافته دریافت می‌کنند. این ساختار مشخص است (برای مثال، در فرمت فایل یا پروتکل) و ورودی معتبر از نامعتبر را تشخیص می‌دهد. یک فازر مؤثر، ورودی‌های نیمه-معتبری تولید می‌کند که "به اندازه‌ی کافی معتبر" در این هستند که توسط تجزیه‌کننده به‌صورت مستقیم رد نمی‌شوند، اما در اعماق عمیق‌تر برنامه، رفتارهایی غیرمنتظره بروز می‌دهند و "به اندازه کافی نامعتبر" هستند که حالات استثنایی‌ای که به‌طور مناسب با آن‌ها برخورد نشده است را آشکار سازند. برای مثال، فاز کردن کدی که فایل آپلود شده توسط هر کاربری را مدیریت می‌کند، مهم‌تر از فاز کردن کدی‌ست که مسئولیت تجزیه کردن یک فایل پیکربندی که تنها یک کاربر برخوردار به آن دسترسی دارد را بر عهده دارد. فاز تست سودمندی یک یونیکس (UNIX)، به این معنا بود که ورودی تصادفی و پارامترهای خط‌فرمان برای سودمندی آن، به‌طور خودکار تولید شوند. این پروژه برای تست اطمینان‌پذیری برنامه‌های خط‌فرمان یونیکس با استفاده از اجرای تعداد زیادی از ورودی‌های تصادفی به‌طور پشت‌سرهم تا وقتی که برنامه کرش کند، طراحی شده بود. سپس هر کرش را برای تعیین علت، اشکال‌زدایی (دیباگ) کردند و هر شکست را گروه‌بندی کردند. برای این‌که محققان دیگر نیز بتوانند آزمایش‌های مشابه را با نرم‌افزارهای دیگر انجام دهند، کد منبع (سورس کد) ابزارها، پروسه‌های تست، و داده‌ی نتایج خام به‌صورت عمومی در دسترس قرار گرفتند. | ## بخش 2: فازینگ | به گفته‌ی پروفسور بارتون میلر، "در پروسه‌ی نوشتن توضیحات پروژه، لازم بود به این نوع از تست یک نام بدهم. پس از امتحان چندین ایده، عبارت فاز را برگزیدم." یک کمک کلیدی در رابطه با این کار اولیه، یک اورَکل ساده (تقریباً ساده‌گرایانه) بود. یک برنامه شکست می‌خورد اگر کرش می‌کرد یا با دریافت ورودی تصادفی هنگ می‌کرد و در غیر این صورت، موفق در نظر گرفته می‌شد. با این‌که ساختن اورکل‌های تستی می‌تواند چالش‌برانگیز باشد، بکارگیری اورکل این آزمون فاز اولیه، ساده و جامع بود. در آوریل 2012، کمپانی گوگل، کلاسترفاز (ClusterFuzz) را معرفی کرد، یک زیرساخت فازینگ پایه بر فضای ابری، برای اجزاء تشکیل‌دهنده‌ی حساس‌به‌امنیت مرورگر وب کرومیم. محققان امنیتی می‌توانند فازرهای خود را آپلود کنند و در صورتی که کلاسترفاز در فازر آپلودشده، کرش پیدا کند، جایزه‌ی یافتن آن باگ را می‌دهد. (بسیاری از خدمات اینترنتی، مانند به‌کاراندازی‌های وب سرور، از بش برای پردازش درخواست‌های معین استفاده می‌کنند، که به مهاجم این اجازه را می‌دهد نسخه‌های آسیب‌پذیر بش، فرمان‌های دلخواه را اجرا کنند. این باعث می‌شود مهاجم بتواند به سیستم یک کامپیوتر، دسترسی غیرمجاز پیدا کند.) در آوریل 2015، هانو بِک نشان داد چگونه فازر AFL می‌توانست آسیب‌پذیری خونریزی‌قلبی 2014 را پیدا کند. | ## بخش 3: فازینگ | این یک آسیب‌پذیری جدی‌ست که به مهاجمان این اجازه را می‌دهد تا ارتباطات رمزنگاری‌شده را رمزگشایی کنند. این آسیب‌پذیری به‌طور تصادفی در OpenSSL معرفی شد که TLS را پیاده‌سازی می‌کند و توسط اکثریت سرورها در اینترنت، مورد استفاده است. هدف، توسعه‌ی سیستم‌های دفاعی خودکار بود که بتوانند اشکالات نرم‌افزاری را در زمان حقیقی کشف، بهره‌جویی و تصحیح کنند. فازینگ به عنوان یک استارتژی تهاجم مؤثر برای کشف اشکالات در نرم‌افزارهای حریف، استفاده شده بود. در دسامبر 2016، کمپانی گوگل، OSS-Fuzz را معرفی کرد که اجازه می‌دهد به‌طور مستمر، چندین پروژه‌ی منبع‌باز حساس‌به‌امنیت، مورد آزمون فاز قرار بگیرند. در مراسم بلَک هَت (Black Hat) 2018، کریستوفر دوماس، از فازینگ برای آشکارسازی وجود هسته‌ی رایانه‌ی کم‌دستور (RISC) در یک پردازنده استفاده کرد و آن را نشان داد. این هسته می‌توانست با دور زدن (بای‌پس کردن) بررسی‌های امنیتی، دستورات حلقه‌ی حفاظتی 0 را از حلقه‌ی حفاظتی 3 اجرا کند. | ## جمع‌بندی | در سپتامبر 2020، کمپانی مایکروسافت، وان‌فاز (OneFuzz) را منتشر کرد، یک سکوی فازینگ-به-عنوان-سرویس خودمیزبان که تشخیص باگ‌های نرم‌افزاری را خودکارسازی می‌کند.