آزمون فاز یا Fuzz Test چیست؟ آشنایی با فازینگ (Fuzzing) و انواع آن

0 53
۵/۵ - (۲ امتیاز)

فهرست

فازینگ (Fuzzing) چیست؟

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

بنابراین فازینگ به بیان ساده به این شکل است که تعداد زیادی ورودی غیرمنتظره تولید می کنیم و به برنامه تحت تست می دهیم. به امید اینکه برنامه تحت تست، دچار خطا شود. البته این ورودی ها باید از هوشمندی بخصوصی برخوردار باشند. چرا که اگر ورودی ها را کاملا کورکورانه تولید کنیم، اصلا به نقاط حساس برنامه نمی رسند و در همان قسمت های ابتدایی کد، متوقف می شوند.

جایگاه فازینگ

فازینگ بر خلاف دیگر روش های تست، در دسته Negative Testing قرار می گیرد. تست Negative تستی است که Robustness یا دوام یک برنامه را تست می کند. در مقابل، Positive Testing به بررسی Featureها و Performance برنامه می پردازد. کاربرد اصلی فازینگ در پیدا کردن آسیب پذیری های مختلف در برنامه هاست. در حالی که دیگر روش های تست موارد زیر را بررسی می کنند:

  • تست Feature: بررسی اینکه آیا یک قابلیت برروی نرم افزار به درستی مهیا شده است یا خیر (مثلا قابلیت ساخت حساب کاربری در یک سامانه)
  • تست Performance: بررسی اینکه آیا نرم افزار کارایی لازم را دارد یا خیر (مثلا انجام عملیات ذخیره سازی در دیتابیس، در یک زمان قابل قبولی انجام می شود یا خیر)

تاریخچه آزمون فاز (Fuzz Test)

در یک عصر طوفانی در سال ۱۹۸۸، بارتون میلر (Barton Miller)، استاد علوم کامپیوتر در دانشگاه ویسکانسین-مدیسون، در آپارتمان بوسیله Dial-Up یک ارتباط از راه دور با کامپیوتر یونیکسی خود برقرار کرده بود. او در حال دادن ورودی های مختلف به یک برنامه بود منتها مشاهده می کرد که ورودی های او باعث Crash کردن برنامه می شوند. با بررسی هایی که انجام داد متوجه شد ورودی های او بواسطه نویزهای حاصل از طوفان، دچار تغییر می شوند. به این صورت که ورودی های آقای میلر به هنگام عبور از خطوط تلفن، مختل می شدند. از آنجایی که این ورودی ها دچار اختلال شده بودند، برنامه مذکور را دچار اختلال و Crash می کردند، چرا که برنامه انتظار چنین ورودی هایی را نداشت. لغت فاز – Fuzz نیز به همین دلیل انتخاب شد. فاز همان اختلالاتی است که در خطوط تلفن رخ می دهد.

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

مزایای فازینگ (Fuzzing)

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

به گفته جارد دموت، مدیر عامل شرکت تست امنیتی VDA Labs و مدرس چندین دوره آزمایشی Pluralsight، در واقع، مهاجمان اغلب از ابزارهای تست فاز برای شناسایی آسیب‌پذیری‌ها در برنامه‌ها استفاده می‌کنند.

اگر آنچه را که ما آن را چرخه حیات توسعه ایمن می نامیم دنبال کنید… fuzzing بخشی از چرخه حیات است که به بخش تست آن مربوط می شود.

DeMott

انواع مختلفی از تست برای نرم افزار موجود هستند، مانند:

  • تست ایستای امنیت برنامه یا Static Application Security Testing (با همان SAST)
  • تست پویای امنیت برنامه یا Dynamic Application Security Testing (یا همان DAST)

کاربرد فازینگ (Fuzzing)

ابزارهای SAST کد برنامه را در حالت ایستا (بدون اجرا کردن برنامه) بررسی می‌کنند و اشتباهات شناخته‌شده‌ای را که می‌توانند منجر به آسیب‌پذیری‌های امنیتی شوند، اسکن می‌کنند، در حالی که ابزارهای DAST با اجرای برنامه، اشکالات را پیدا می‌کنند. فازینگ مشابه DAST است زیرا بررسی می کند که چگونه یک برنامه در حال اجرا و دریافت ورودی های مختلف رفتار می کند.

دیوید دسانتو، مدیر امنیت محصولات در GitLab گفت: «DAST به دنبال آسیب‌پذیری‌های شناخته‌شده است، چیزهایی مانند تزریق SQL، اسکریپت‌های متقابل… نه چیز ناشناخته‌ای برای آن».

دیوید دسانتو – مدیر امنیت محصولات در GitLab

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

کاربرد فازینگ در باگ بانتی

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

درباره ما

ترجنس | thregence.ir
آکادمی ترجنس | edu.thregence.ir
دوره‌های آکادمی ترجنس | courses.thregence.ir
اینستاگرام | instagram.com/thregence
تلگرام | t.me/thregence
یوتوب | https://bit.ly/30mGowo
آپارات | aparat.com/thregence

ارسال یک پاسخ