زمانبندی مؤثر بذر (Seed)، در فازینگ پروتکل شبکه، نقش مهمی در بهبود کارایی آزمایش ایفا میکند. روشهای سنتی زمانبندی بذر مبتنی بر حالت (وضعیت) در فازینگ پروتکل شبکه اغلب با انتخاب بذر نامتوازن، استراتژیهای زمانبندی یکپارچه و تخصیص توان ناکارآمد محدود میشوند. برای غلبه بر این محدودیتها، ما SCFuzz را پیشنهاد میکنیم، به طور خاص با استفاده از یک مدل باندیت چنداهرمـی (Multi-Armed Bandit Model) برای ایجاد تعادل پویا بین اکتشاف و بهرهبرداری در چندین مرحله فازینگ، فرآیند فازینگ به مراحل اولیه، میانی و نهایی تقسیم میشود و استراتژیهای انتخاب بذر در هر مرحله برای بهینهسازی کشف حالتها، مسیرها و پوشش کد جدید تطبیق داده میشوند. علاوه بر این، SCFuzz از یک روش تخصیص توان بر اساس وزنهای حالت استفاده میکند و توان را روی پیامهای با پتانسیل بالا متمرکز میکند تا کارایی کلی فازینگ را بهبود بخشد. ارزیابیهای تجربی روی پیادهسازیهای پروتکل متنباز نشان میدهد که SCFuzz به طور قابل توجهی پوشش حالت و کد را بهبود میبخشد و در مقایسه با AFLNet به ۱۷.۱۰٪ حالت بیشتر، ۲۲.۹۲٪ انتقال حالت بالاتر و ۷.۹۲٪ پوشش شاخه کد بیشتر دست مییابد. علاوه بر این، SCFuzz اثربخشی انتخاب بذر را ۳۸۹.۳۷٪ بهبود میبخشد و مصرف برق را ۴۵.۶۱٪ افزایش میدهد و به طور موثری کارایی کلی فازینگ را افزایش میدهد.
کلمات کلیدی: فازینگ پروتکل؛ مدل باندیت چنداهرمـی؛ چند فازی؛ زمانبندی بذر
۱. مقدمه
فازینگ یک تکنیک تست نرمافزار پرکاربرد و مؤثر است که با سطح بالای اتوماسیون، کاربردپذیری گسترده و اثربخشی اثباتشده در شناسایی آسیبپذیریهای نرمافزاری متمایز میشود [1]. در هسته اصلی آن، فازینگ از طریق یک فرآیند تکراری عمل میکند که در آن بذرهای ورودی (input seeds) از یک مخزن اولیه بذر (Seed) انتخاب شده و از طریق جهشها اصلاح میشوند تا موارد تست متنوعی ایجاد شوند. سپس، این موارد بر روی نرمافزار هدف اجرا میشوند.
در سالهای اخیر، تمرکز تحقیقات فازینگ در درجه اول بر فازینگ جعبه خاکستری مبتنی بر پوشش (CGF یا Coverage-based Graybox Fuzzing) بوده است که با بهرهگیری از بازخورد از پوشش کد، کارایی تست را بهبود میبخشد [2]. محققان با تکیه بر مبانی CGF، این تکنیکها را به حوزه تست پروتکل شبکه گسترش دادهاند که منجر به توسعه فازینگ خاکستریِ مبتنی بر پوشش وضعیتمند (SCGF یا Stateful Coverage-based Graybox Fuzzing) شده است. SCGF نه تنها به اطلاعات پوشش کد متکی است، بلکه اطلاعات حالت استخراج شده از پیادهسازیهای پروتکل شبکه را نیز ادغام میکند. این امر به آن اجازه میدهد تا انتقالهای پیچیده حالت پروتکل و تعاملات وابسته به هم را مدیریت کند و رویکردی ظریفتر و مؤثرتر برای شناسایی آسیبپذیریها در پیادهسازیهای پروتکل شبکه ارائه دهد.
یک جنبه اساسی فازینگ مؤثر در زمانبندی بذر نهفته است که به طور قابل توجهی بر کارایی و اثربخشی فرآیند فازینگ تأثیر میگذارد. زمانبندی بذر عموماً شامل دو وظیفه اصلی است: انتخاب بذر و تخصیص توان. انتخاب بذر تعیین میکند که کدام ورودیها از مجموعه بذر باید برای آزمایش در اولویت قرار گیرند، در حالی که تخصیص توان، تلاش محاسباتی را به این بذرهای انتخاب شده اختصاص میدهد تا پوشش آزمایش را به حداکثر برساند. برخلاف CGF، که در آن زمانبندی بذر معمولاً فقط با بازخورد پوشش کد هدایت میشود، SCGF همچنین باید حالتهای خاص در پیادهسازی پروتکل شبکه را در نظر بگیرد. این امر مستلزم شناسایی حالت هدف برای آزمایش و سپس انتخاب بذرهایی است که قادر به تحریک این حالت باشند. با گنجاندن اطلاعات وضعیت پروتکل در فرآیند زمانبندی، SCGF میتواند به طور مؤثرتری فضاهای وضعیت پیچیده را پیمایش و کاوش کند.
تحقیقات فعلی در مورد زمانبندی بذر در SCGF عمدتاً بر روشهای نمایش حالت تمرکز دارد [3-5]. با این حال، صرف نظر از روش نمایش حالت مورد استفاده، روشهای زمانبندی بذر در فازینگ پروتکل شبکه با سه چالش مهم روبرو هستند:
چالش 1: استراتژی انتخاب بذر نامتوازن (Imbalanced Seed Selection Strategy)
روشهای انتخاب بذر (Seed) موجود تمایل دارند که به طور مکرر زیرمجموعه کوچکی از بذرهای با فرکانس بالا را انتخاب کنند، که منجر به آزمایش بیش از حد حالتها و مسیرهای کد با فرکانس بالا میشود، در حالی که کاوش سایر حالتها و مسیرهای بالقوه بحرانی را نادیده میگیرد. این عدم تعادل، وسعت فازینگ را کاهش میدهد، استفاده مؤثر از بذرهای ارزشمند را در مخزن بذر محدود میکند و مانع کاوش جامع کد و فضای حالت پیادهسازی پروتکل میشود.
چالش ۲: استراتژی انتخاب بذر یکپارچه (Monolithic Seed Selection Strategy)
استراتژی رایج اتخاذ شده، انتخاب بذر (Seed) مبتنی بر حالت است، که در آن ابتدا حالت هدف انتخاب میشود و سپس یک توالی پیام که قادر به رسیدن به آن حالت هدف است از مجموعه بذر انتخاب میشود. با این حال، در مراحل بعدی فازینگ، تعداد حالتها تمایل به تثبیت دارد و نسبتاً کوچک باقی میماند. همانطور که در جدول ۱ نشان داده شده است، در بین ۱۳ پیادهسازی پروتکل موجود در ProFuzzBench [6]، تقریباً دو سوم از پیادهسازیهای پروتکل معمولاً حاوی بیش از ۲۵ حالت (state) نیستند؛ صرفنظر از روش نمایش حالتی که استفاده شده است. در مقابل، تعداد بذرها میتواند به هزاران برسد. این رویکرد تک الگویی میتواند منجر به فیلتر شدن بذرهای بالقوه ارزشمند متعدد در طول مرحله انتخاب حالت شود و از پیشرفت آنها به مرحله جهش بعدی جلوگیری کند.
چالش ۳: استراتژی تخصیص توان نامتوازن (Uneven Power Allocation Strategy)
استراتژیهای تخصیص توان موجود معمولاً توان را بر تغییر پیامهای خاص در حالتهای هدف متمرکز میکنند و ارزش بالقوه سایر پیامها را نادیده میگیرند. از آنجایی که فایلهای بذر (Seed) اغلب از چندین پیام تشکیل شدهاند، این تخصیص توان بیش از حد متمرکز منجر به توزیع نامتوازن منابع میشود و از بهرهبرداری کامل از پتانسیل فایل بذر جلوگیری کرده و کارایی کلی فرآیند فازینگ را کاهش میدهد.
ما در این مقاله، SCFuzz را پیشنهاد میکنیم که یک راهحل مؤثر برای چالشهای زمانبندی بذر در فازینگ پروتکل است. برای پرداختن به چالش اول، مسئله انتخاب بذر را به عنوان یک مدل باندیت چنداهرمـی (Multi-Armed Bandit Model) مدلسازی میکنیم که در آن فرآیند انتخاب بذر باید بین اکتشاف و بهرهبرداری تعادل برقرار کند. این امر تضمین میکند که فازر میتواند حالتها و مسیرهای جدید را کشف کند و در عین حال از بذرهای با ارزش بالای شناساییشده نیز به طور کارآمد استفاده کند. برای چالش دوم، فرآیند فازینگ را به چندین مرحله تقسیم میکنیم و در هر مرحله از مدل باندیت چنداهرمـی برای هدایت انتخاب بذر استفاده میکنیم. استراتژی انتخاب به صورت پویا با توجه به نیازهای هر مرحله تنظیم میشود و مکانیزم زمانبندی را قادر میسازد تا با افزایش تعداد بذرها و اشباع کشف حالت در مراحل بعدی سازگار شود.
مراحل این استراتژی تضمین میکند که بذرهای ارزشمند درون مخزن بذر، حتی با پیشرفت آزمایش، به طور کامل مورد استفاده قرار گیرند. برای پرداختن به چالش سوم، ما تخصیص توان را با تجزیه و تحلیل حالتهای ایجاد شده توسط بذرهای انتخاب شده و استفاده از وزن پیامهای مربوط به آن حالتها اصلاح میکنیم. این امر به توان اجازه میدهد تا روی پیامهایی متمرکز شود که احتمال بیشتری برای کشف حالتها یا مسیرهای جدید دارند و در نتیجه کارایی و پوشش کلی فرآیند فازینگ را افزایش میدهند.
به طور خاص، ما از الگوریتم باندیت چنداهرمـی از یادگیری تقویتی برای پرداختن به تعادل بین اکتشاف و بهرهبرداری استفاده میکنیم. علاوه بر این، ما فرآیند فازینگ را به سه مرحله مجزا تقسیم میکنیم و به صورت پویا تمرکز انتخاب بذر را بر اساس الزامات آزمایش هر مرحله تنظیم میکنیم. در مرحله اولیه، فرآیند فازینگ قادر به ایجاد حالتهای جدید و انتقال حالتهای متعدد است، بنابراین تمرکز باید بر کاوش گسترده فضای حالت برای به حداکثر رساندن کشف حالتهای جدید باشد. در طول مرحله میانی، کشف حالتهای جدید به طور فزایندهای دشوار میشود و معمولاً فقط تعداد کمی از انتقال حالتها ثبت میشوند. در این مرحله، استراتژی باید هم انتخاب حالت و هم انتخاب مسیر را به طور جامع در نظر بگیرد. در مرحله نهایی، فضای حالت به اشباع نزدیک میشود و کشف حالتها و انتقالهای جدید تقریباً متوقف میشود و تنها چند مسیر جدید برای کشف باقی میماند. پس از انتخاب بذرها، ما تمام حالتهای هدف بالقوه را با محاسبه وزن حالتهای فعال شده تجزیه و تحلیل میکنیم. با توجه به اینکه حالتهای مختلف دارای سطوح اهمیت متفاوتی هستند، ما از مجموعهای از قوانین اکتشافی برای محاسبه وزن هر حالت استفاده میکنیم. بر اساس این وزنها، ما با توزیع توان بیشتر به پیامهای مربوط به حالتهای بحرانی، تخصیص توان دقیقتری را انجام میدهیم. این امر امکان تخصیص دقیقتر منابع را فراهم میکند و در نتیجه پوشش و اثربخشی کلی فرآیند فازینگ را افزایش میدهد.
ما یک نمونه اولیه از SCFuzz را پیادهسازی کردیم و اثربخشی آن را بر روی پنج پیادهسازی پروتکل متنباز پرکاربرد ارزیابی کردیم. نتایج ارزیابی نشان میدهد که SCFuzz بهبودهای قابل توجهی نسبت به فازر پروتکل جعبه خاکستری پیشرفته، AFLNET، در معیارهای مختلف ارائه میدهد. به طور خاص، SCFuzz به طور متوسط بهبودی معادل ۱۷.۱۰٪ در تعداد حالتهای کشف شده، بهبود ۲۲.۹۲٪ در انتقال حالتها و بهبود ۷.۹۲٪ در پوشش شاخه کد را به دست آورده است. علاوه بر این، اثربخشی انتخاب بذر به طور متوسط ۳۸۹.۳۷٪ بهبود یافته است، در حالی که اثربخشی استفاده از توان ۴۵.۶۱٪ بهبود یافته است. به طور خلاصه، سهم اصلی این مقاله به شرح زیر است:
- ما یک استراتژی انتخاب بذر چند مرحلهای را پیشنهاد میکنیم، که در آن فرآیند فازینگ به چندین مرحله تقسیم میشود. مسئله انتخاب بذر به عنوان یک مسئله باندیت چنداهرمـی مدلسازی میشود و استراتژی انتخاب به صورت پویا در هر مرحله تنظیم میشود تا بذرهایی را با بیشترین پتانسیل برای کشف حالتها و مسیرهای جدید اولویتبندی کند.
- ما یک استراتژی تخصیص توان بر اساس وزنهای حالت پیشنهاد میکنیم. با محاسبه وزن پیامهای مربوط به حالتهای درون بذر انتخابشده، این استراتژی توان بیشتری را به پیامهایی که مهمتر تلقی میشوند، اختصاص میدهد.
ما SCFuzz را پیادهسازی و آن را بر روی پیادهسازیهای پروتکل پرکاربرد ارزیابی کردیم و نتایج نشان میدهد که SCFuzz در چندین معیار کلیدی، از جمله پوشش حالت و کد، اثربخشی انتخاب بذر و اثربخشی استفاده از توان، از فازر پیشرفته AFLNET بهتر عمل میکند.
این مقاله به شرح زیر سازماندهی شده است. بخش 2 پیشینه مطالعه را ارائه میدهد.
بخش 3 کارهای مرتبط در این زمینه را بررسی میکند. بخش 4 شرح مفصلی از روش پیشنهادی ارائه میدهد. بخش 5 تنظیمات آزمایشی را تشریح کرده و نتایج را ارائه میدهد.
بخش 6 محدودیتهای رویکرد پیشنهادی را مورد بحث قرار میدهد. در نهایت، بخش 7 مقاله را نتیجهگیری کرده و مسیرهایی را برای کارهای آینده پیشنهاد میدهد.
2. پیشینه
در این بخش، پیشینه CGF، SCGF و مدل باندیت چنداهرمـی (Multi-Armed Bandit Model) را معرفی میکنیم.
2.1 CGF
CGF یکی از محبوبترین و مؤثرترین تکنیکها در زمینه کشف آسیبپذیری، به ویژه در تشخیص آسیبپذیریها در برنامههای بدون وضعیت است. ایده اصلی CGF جمعآوری اطلاعات پوشش کد از طریق ابزار دقیق و استفاده از این اطلاعات برای هدایت فرآیند فازینگ و در نتیجه به حداکثر رساندن پوشش کد است CGF. ابزار دقیق کد سبک را در مکانهای بحرانی قرار میدهد تا اجرا را نظارت کرده و اطلاعات پوشش را ثبت کند. در طول اجرای موارد آزمایشی، این نقاط نظارتی، مسیرهای کد فعال شده را ثبت میکنند. اگر یک مورد آزمایشی مسیر جدیدی را فعال کند یا کدی را که قبلاً کشف نشده است پوشش دهد، برای فازینگ بعدی به مخزن بذر (Seed) اضافه میشود.
اگرچه CGF در کشف آسیبپذیری برای برنامههای بدون وضعیت عملکرد خوبی دارد، اما هنگام اعمال بر روی پروتکلهای شبکه دارای وضعیت با چالشهای زیادی روبرو میشود. پروتکلهای شبکه ذاتاً دارای وضعیت هستند، زیرا اجرای آنها به زمینه و توالی پیامهای قبلی بستگی دارد. این ویژگی، کاوش فضای حالت را با استفاده از استراتژیهای فازینگ بدون وضعیت سنتی پیچیده میکند. علاوه بر این، ورودی و خروجی پروتکلهای شبکه اغلب به زمانبندی پیچیده و مکانیسمهای رویدادمحور متکی هستند که پیچیدگی فازینگ را بیشتر افزایش میدهد. از آنجایی که CGF در درجه اول بر پوشش کد تمرکز دارد و اطلاعات وضعیت را به طور ناکافی مدیریت میکند، اثربخشی آن هنگام برخورد با پروتکلهای پیچیده شبکه محدود است.
2.2 SCGF
برای رفع محدودیتهای CGF در مدیریت پروتکلهای شبکه وضعیتمند (حالتمند)، محققان SCGF را توسعه دادهاند. SCGF نقاط قوت CGF سنتی را که از پوشش کد برای هدایت فازینگ استفاده میکند، ترکیب میکند. در عین حال، مدیریت اطلاعات وضعیت را بهبود میبخشد و امکان کاوش کارآمدتر فضای وضعیت را در برنامههای حالتمند فراهم میکند.
SCGF اطلاعات حیاتی را در طول اجرای پروتکلهای شبکه ضبط میکند، وضعیت سرور را استنباط میکند و به صورت پویا یک ماشین وضعیت میسازد. سپس این ماشین وضعیت فرآیند فازینگ را هدایت میکند و کاوش وضعیتها و مسیرهای کد را که احتمال بیشتری برای افشای آسیبپذیریها دارند، در اولویت قرار میدهد.
شکل 1 گردش کار کلی SCGF را نشان میدهد. قبل از شروع فازینگ، آزمایشکنندگان دادههای ارتباط شبکه بین کلاینت و سرور ،مثلاً فایلهای pcap تولید شده توسط tcpdump را برای به دست آوردن مجموعهای از توالیهای تبادل پیام واقعی ضبط میکنند. سپس این توالیهای پیام تجزیه شده و برای ساخت مجموعه اولیه بذر (Seed) استفاده میشوند. با این مجموعه اولیه بذر، SCGF فرآیند فازینگ را آغاز میکند که میتواند در طول حلقه فازینگ به چهار مرحله تقسیم شود:
مرحله 1: انتخاب حالت هدف. SCGF حالتهایی را که در طول فرآیند فازینگ کمتر بررسی شدهاند یا آنهایی که ممکن است منجر به انتقال حالت جدید شوند، اولویتبندی میکند تا پوشش فضای حالت پروتکل را افزایش دهد.
مرحله 2: انتخاب توالی پیام (بذر). پس از شناسایی حالت هدف، SCGF یک توالی پیام M را از مجموعه بذر انتخاب میکند که میتواند به آن حالت برسد.
مرحله 3: جهش توالی. SCGF توالی پیام اصلی M را به سه بخش تقسیم میکند: پیشوند M1، که توالی پیام لازم برای اجرای حالت هدف است. میانوند M2، شامل تمام پیامهای اجرا شده پس از پیشوند M1 در حالی که هنوز در حالت s باقی میمانند؛ و پسوند M3، که توالی باقی مانده پیامها است. SCGF فقط میانوند M2 را جهش میدهد تا اطمینان حاصل شود که توالی جهشیافته M′ همچنان میتواند پایداری حالت هدف s را حفظ کند.
مرحله 4: اجرا و جمعآوری بازخورد. موارد آزمایشی جهشیافته به سرویس تحت آزمایش (SUT) ارسال میشوند و بازخورد جمعآوریشده در طول اجرا برای بهروزرسانی ماشین حالت و نقشه بیتی استفاده میشود.
2.3 مدل باندیت چنداهرمـی (Multi-Armed Bandit Model)
مدل باندیت چنداهرمـی (MAB) یک مسئله بهینهسازی کلاسیک است که به طور گسترده در آمار، یادگیری ماشین و نظریه تصمیمگیری [7] کاربرد دارد. این نام از دستگاههای اسلات در کازینوها گرفته شده است، جایی که هر دستگاه دارای چندین اهرم (بازو) است و هر کشش اهرم پاداشی را به همراه دارد. هسته مسئله MAB در ایجاد تعادل بین اکتشاف و بهرهبرداری نهفته است: در منابع یا زمان محدود، تصمیمگیرنده باید از بین چندین بازوی موجود انتخاب کند که هر کدام ممکن است پاداشهای متفاوتی تولید کنند، اما توزیع این پاداشها ناشناخته است. از طریق آزمایشهای مداوم، تصمیمگیرنده به تدریج ارزش مورد انتظار پاداشها برای هر اهرم را یاد میگیرد و هدف آن به حداکثر رساندن پاداشهای تجمعی در درازمدت است.
در فازینگ، مسئله انتخاب بذر (Seed) شباهت قابل توجهی به مسئله MAB دارد، زیرا شامل تعادل بین اکتشاف و بهرهبرداری نیز میشود. تحت محدودیتهای زمان و منابع محدود، آزمایشکننده باید بین استفاده از بذرهای مؤثر شناخته شده و اکتشاف بذرهای جدید برای دستیابی به یک استراتژی بهینه برای کشف آسیبپذیریها و به حداکثر رساندن پوشش کد، وزنکشی کند. با این حال، مدلهای سنتی MAB تعداد ثابتی از بازوها را در نظر میگیرند که پاداش هر اهرم یا قطعی است یا از یک توزیع از پیش تعریفشده پیروی میکند. در فازینگ، موارد تست با عملکرد بالا در طول اجرا در یک مخزن بذر ذخیره میشوند و در نتیجه تعداد بذرهایی که هر کدام پتانسیل تغییر پویا را با پیشرفت آزمایش دارند، به طور مداوم در حال افزایش است. بنابراین، مدلهای سنتی MAB را نمیتوان مستقیماً در مسئله انتخاب بذر در فازینگ اعمال کرد.
مدل باندیت چنداهرمـی (MAB) متخاصم [8] نوعی از مسئله MAB سنتی است که در آن توزیع پاداش هر اهرم میتواند به طور پویا با گذشت زمان تغییر کند. برخلاف مسئله استاندارد MAB، MAB خصمانه به الگوریتمهایی نیاز دارد که به سرعت با این تغییرات پاداش سازگار شوند و پاسخ دهند تا پاداشهای تجمعی را در یک محیط پویا به حداکثر برسانند. این ویژگی MAB خصمانه را به ویژه برای فرآیند انتخاب بذر در فازینگ مناسب میکند. در این زمینه، بذرها را میتوان به عنوان باندیت چند اهرمـی در نظر گرفت. با پیشرفت فازینگ، اثربخشی بذرها کاهش مییابد زیرا احتمال کشف پوشش کد جدید یا آسیبپذیریها با گذشت زمان کاهش مییابد.
بنابراین، مدل باندیت چنداهرمـی متخاصم میتواند به صورت پویا استراتژیهای انتخاب بذر را ا توجه به تغییر اثربخشی بذرها در طول فرآیند آزمایش تنظیم کند و در نتیجه به حداکثر رساندن کارایی فازینگ در مراحل مختلف را به همراه داشته باشد.
3. کارهای مرتبط
3.1 فازینگ پروتکل
توسعه فازینگ پروتکل شبکه در درجه اول از دو مرحله عبور کرده است:
فازینگ جعبه سیاه و فازینگ جعبه خاکستری. فازینگ پروتکل جعبه سیاه [9-13] به ساختار داخلی پیادهسازی پروتکل متکی نیست؛ بلکه صرفاً بر ورودیها و خروجیها تمرکز دارد و موارد آزمایشی را بر اساس دانش قبلی از قالب پروتکل تولید میکند [14]. Peach، مدلهای توصیفشده در XML را برای تولید خودکار موارد آزمایشی متنوع پیکربندی میکند، در حالی که SPIKE [15] از یک رویکرد آزمایش مبتنی بر بلوک استفاده میکند، پروتکلها را به چندین بلوک تقسیم میکند و موارد آزمایشی مختلفی را طبق قوانین از پیش تعریفشده تولید میکند. این ابزارها به طور مؤثر موارد آزمایشی را بدون نیاز به اطلاعات پروتکل داخلی تولید میکنند، اما به دلیل پوشش کم محدود هستند و برای شناسایی نقصهای منطقی پیچیده تلاش میکنند.
فازینگ پروتکل Graybox 5،[16-19] از اطلاعات بازخورد از فرآیند اجرا برای هدایت تولید موارد آزمایشی استفاده میکند و در نتیجه اثربخشی آزمایش را افزایش میدهد.
Pham و همکاران. [20] اولین ابزار فازینگ پروتکل graybox stateful، AFLNet، را بر اساس AFL [21] توسعه دادند. پس از این، فازینگ پروتکل graybox به سرعت پیشرفت کرده است. به عنوان مثال، SGPFuzzer [22] با اصلاح استراتژیهای جهش توالی پیام، اثربخشی موارد آزمایشی تولید شده را بهبود میبخشد، در حالی که SnapFuzz [23] از فناوری snapshot برای افزایش سرعت تولید موارد آزمایشی و توان عملیاتی سیستم استفاده میکند.
3.2 زمانبندی اولیه
تحقیقات در مورد مرحله زمانبندی اولیه فازینگ پروتکل حالتمند نسبتاً محدود است و بیشتر مطالعات بر انتخاب حالت و روشهای نمایش حالت متمرکز هستند. برخی از محققان تلاش کردهاند تا روشهای انتخاب حالت را برای افزایش اثربخشی زمانبندی اولیه بهینه کنند. لیو و همکاران [24] جستجوی درخت مونت کارلو [25] را در AFLNetLegion معرفی کردند و مدل حالت سرور را به یک ساختار درختی گسترش دادند و گرههای حالت را بر اساس کدهای پاسخ متمایز کردند. بورچردینگ و همکاران [26] مدلسازی مسئله انتخاب حالت را به عنوان یک مسئله باندیت چنداهرمـی (Multi-Armed Bandit) [7] پیشنهاد کردند و فرآیند انتخاب حالت را با متعادل کردن اکتشاف و بهرهبرداری بهینه کردند. علاوه بر این، برخی از مطالعات به دنبال بهبود زمانبندی اولیه از طریق نمایشهای دقیقتر حالت بودهاند. StateAFL [3] عکسهای فوری (snapshot) از حافظه با عمر طولانی را ثبت میکند و از یک الگوریتم هشینگ حساس به محل برای نگاشت محتوای حافظه به شناسههای حالت منحصر به فرد استفاده میکند. در مقابل، NSFuzz [4] و SGFUZZ [5] از تحلیل استاتیک و ابزار دقیق سبک برای شناسایی حالت v استفاده میکنند.
اگرچه تحقیقات در مورد زمانبندی بذر (Seed) در فازینگ پروتکل حالتمند محدود است، اما تحقیقات گستردهای در مورد زمانبندی بذر در فازینگ سنتی مبتنی بر پوشش انجام شده است.
دسته اول روشها تمایل دارند پتانسیل بالاتری را به بذرهایی اختصاص دهند که مسیرهایی با فرکانس اجرای پایینتر را کاوش میکنند [27-30]. AFLFast [31] از یک مدل زنجیره مارکوف استفاده میکند تا توضیح دهد که مسیرهای عمیقتر نیاز به اجراهای بیشتری دارند، در نتیجه قدرت بیشتری را به مسیرهای با فرکانس پایین اختصاص میدهد. Truzz [32] ، بذرهایی را با پتانسیل بالاتر برای کشف مسیرهای جدید اولویتبندی میکند. FairFuzz [33] با اختصاص قدرت به بذرهایی که احتمالاً به شاخههای نادر میرسند، پوشش تست را افزایش میدهد و در نتیجه فرکانس جهش این بذرها را کنترل میکند.
دسته دوم، بذرهای با سود بالا را که به بلوکهای کد کشف نشده نزدیکتر هستند، ترجیح میدهد [34،35]. زمانبند K [35] (K-scheduler) نمودار جریان کنترل را به یک گراف افق لبه (edge horizon graph) تبدیل میکند و امتیازهای اولیه را بر اساس مرکزیت گراف محاسبه میکند، که در آن امتیازهای بالاتر نشان دهنده پاداشهای اولیه بالاتر است. BELIEFuzz [36] تعداد بالقوه مسیرهای کشف نشده برای هر بذر را بر اساس نمودار جریان کنترل محاسبه میکند و این را با فرکانس اجرا ترکیب میکند تا پتانسیل جهش هر بذر را به طور جامع ارزیابی کند.
4. روششناسی
برای غلبه بر محدودیت انتخاب بذر (Seed) سنتی مبتنی بر حالت، ابتدا مروری بر طراحی کلی SCFuzz ارائه میدهیم و سپس جنبههای فنی کلیدی آن را توضیح میدهیم.
4.1 مرور کلی
همانطور که در شکل 2 نشان داده شده است، SCFuzz از سه ماژول اصلی تشکیل شده است: انتخاب بذر (Seed) چند فازی، تخصیص توان بر اساس وزنهای حالت، و جهش و اجرا.
انتخاب بذر چند مرحلهای. ما یک استراتژی انتخاب بذر چند مرحلهای را پیشنهاد میکنیم که از روشهای سنتی انتخاب بذر مبتنی بر حالت فاصله میگیرد. این استراتژی از یک مدل باندیت چنداهرمـی (Multi-Armed Bandit Model) برای ایجاد تعادل پویا بین اکتشاف و بهرهبرداری در مراحل مختلف فرآیند فازینگ استفاده میکند. فرآیند فازینگ به مراحل اولیه، میانی و نهایی تقسیم میشود و روش محاسبه احتمال پاداش بذر در هر مرحله تنظیم میشود تا کشف حالتها، مسیرها و پوشش کد جدید بهینه شود.
تخصیص توان بر اساس وزنهای حالت. برای بهبود استفاده مؤثر از توان، ما از یک استراتژی تخصیص توان بر اساس وزنهای حالت استفاده میکنیم. در فازینگ پروتکل، بذرها از توالیهایی از چندین پیام تشکیل شدهاند که نیاز به تخصیص توان به پیامهای منفرد دارند. با محاسبه وزن حالتهای مربوط به هر توالی پیام، ما به طور غیرمستقیم پتانسیل اکتشاف پیادهسازی پروتکل در هر حالت را ارزیابی میکنیم. بر اساس این وزنها، توان به طور مناسب به پیامهای مربوطه اختصاص داده میشود.
جهش و اجرا. ما پیامهای مربوط به هر حالت را بر اساس توان اختصاص داده شده به حالتهای موجود در بذر، جهش میدهیم. توان اختصاص داده شده به یک حالت، تعداد جهشهای اعمال شده بر پیامهای مرتبط با آن را تعیین میکند، به طوری که حالتهایی که توان بیشتری دریافت میکنند، عملیات جهش بیشتری را متحمل میشوند. پس از جهش، بذر، موارد آزمایشی جدیدی تولید میکند که سپس برای آزمایش به سرور هدف ارسال میشوند. در طول آزمایش، موارد آزمایشی بر اساس بازخورد دریافتی ارزیابی و فیلتر میشوند. اگر یک مورد آزمایشی پوشش حالت یا پوشش کد جدیدی را ایجاد کند، ذخیره شده و برای آزمایشهای بعدی به مجموعه بذر اضافه میشود.
در ادامه، شرح مفصلی از طرحهای اصلی SCFuzz، از جمله انتخاب بذر چند مرحلهای و تخصیص توان بر اساس وزنهای حالت، ارائه میدهیم.
۴.۲ انتخاب بذر چند مرحلهای
در این زیربخش، انتخاب بذر (Seed) چند مرحلهای را معرفی میکنیم، آن را به عنوان یک مسئله باندیت چنداهرمـی (Multi-Armed Bandit Problem) مدلسازی میکنیم، فازینگ را به سه مرحله تقسیم میکنیم و روشهای انتخاب بذر را برای هر مرحله شرح میدهیم.
۴.۲.۱ مدل انتخاب بذر
قبل از مدلسازی مسئله انتخاب بذر (Seed) به عنوان یک مسئله MAB، دو فرض زیر را برای سرور تحت آزمایش پیشنهاد میکنیم که با SUT نشان داده میشوند:
فرض ۱. تحت شرایط ورودی یکسان، نتایج اجرای SUT باید ثابت بماند. به طور خاص، انتظار میرود حالتهای فعال شده و مسیرهای کد اجرا شده در طول اجراها ثابت بمانند.
این فرض، ثبات در رفتار SUT را تحت شرایط ورودی یکسان برقرار میکند و در نتیجه تکرارپذیری و قابلیت اطمینان نتایج آزمایش را تضمین میکند.
فرض ۲. تعداد زنجیرههای حالت و مسیرهای کد در SUT محدود است. مجموعه زنجیرههای حالت با SC = {sc1,sc2, . . . ,scn1} و مجموعه مسیرهای id با CP = {cp1, cp2, . . . , cpn2} نشان داده میشوند. این فرض تضمین میکند که تعداد زنجیرههای حالت و مسیرهای کد در SUT محدود است، در نتیجه فرآیند تحلیل را ساده کرده و قابلیت کنترل رفتار برنامه را افزایش میدهد.
با تکیه بر دو فرض فوق، تعاریف کلیدی زیر را معرفی میکنیم که پایه نظری استراتژی انتخاب بذر بعدی را بنا مینهند.
تعریف ۱. در زمان t، مجموعه بذرها در مخزن بذر (Seed) به صورت Seed = {seed1, . . . ,seedm} نشان داده میشود.
مجموعه زنجیرههای حالت فعال شده توسط این بذرها به صورت SC = {sc1,sc2,sc3, . . . ,scm1} و مجموعه مسیرهای کد به صورت CP = {cp1, cp2, cp3, . . . , cpm2} نشان داده میشود.
این تعریف، مجموعه بذرها در مخزن بذر را در طول فازینگ پروتکل و همچنین زنجیرههای حالت مربوطه که SC فعال میکند و مسیرهایی که CP پوشش میدهد، روشن میکند. زنجیرههای حالت SC نشاندهندهی گذارهای حالت ایجاد شده توسط بذرها هستند، در حالی که مسیرهای CP نشاندهندهی مسیرهای کدی هستند که اجرا شدهاند. با تجزیه و تحلیل زنجیرههای حالت و مسیرها، میتوان اثربخشی فازینگ را ارزیابی کرد و استراتژی انتخاب بذر را برای بهبود پوشش بیشتر بهینه کرد.
تعریف ۲. احتمال گذار. در زمان t، فرض کنید که یک بذر در مخزن بذر، یک زنجیره حالت sci و یک مسیر cpi را فعال میکند. احتمال گذار زنجیره حالت psci نشان دهندهی این احتمال است که یک مورد آزمایشی که خور بذر اک را جهش میدهد، زنجیره حالت scj را فعال کند. به طور مشابه، احتمال گذار مسیر pcpi نشان دهندهی این احتمال است که یک مورد آزمایشی که بذر را جهش میدهد، مسیر کد cpj را اجرا کند.
این تعریف توضیح میدهد که در فازینگ پروتکل، احتمالات گذار، احتمال تولید زنجیرههای حالت و مسیرهای کد مختلف را در طول جهش بذر اندازهگیری میکنند. این احتمالات، بذرهایی را که به احتمال زیاد پوشش را بهبود میبخشند، برجسته میکنند و راهنماییهای مهمی را برای بهینهسازی فرآیند فازینگ ارائه میدهند.
تعریف ۳. فرکانس انتقال. فرکانس انتقال، نرخی را تعیین میکند که در آن یک بذر جهشیافته بذر، یک زنجیره حالت خاص scj را فعال میکند یا یک مسیر کد خاص cpj را در طول فرآیند آزمایش اجرا میکند.
فرکانس انتقال برای زنجیرههای حالت به شرح زیر محاسبه میشود:
که در آن fsci (scj) نشان دهنده تعداد دفعاتی است که seedt جهش یافته، زنجیره حالت scj را فعال میکند، و f(seedt) نشان دهنده تعداد کل جهشها برای seedt است. به طور مشابه، فرکانس انتقال برای مسیرهای کد با فرمول زیر داده میشود:
که در آن fcpi (cpj) نشان دهنده تعداد دفعاتی است که seedt جهش یافته، مسیر کد cpj را اجرا میکند و f(seedt) نشان دهنده تعداد کل جهشها برای seedt است.
فرکانس انتقال، معیار کمی از احتمال تولید زنجیرههای حالت یا مسیرهای کد خاص توسط یک بذر مشخص را ارائه میدهد و بینشهای مهمی را برای زمانبندی بذر در تست فاز ارائه میدهد. فرکانس انتقال بالاتر نشان میدهد که بذر احتمال بیشتری دارد که زنجیرههای حالت یا مسیرهای کد خاص تولید کند و در نتیجه به افزایش پوشش تست و کارایی اکتشاف کمک میکند.
تعریف 4. احتمال پاداش. در فازینگ پروتکل، پاداش هر جهش بذر به عنوان مورد آزمایشی تعریف میشود که یک زنجیره حالت جدید تولید و فعال میکند یا یک مسیر کد جدید را اجرا میکند. وقتی seedt برای آزمایش انتخاب میشود و پاداشی دریافت میکند که با R(seedt) = 1 نشان داده میشود، احتمال اینکه بذر جهشیافته یک زنجیره حالت جدید را فعال کند با P(scnew | R(seedt) = 1) داده میشود.
به طور مشابه، احتمال پاداش برای اجرای یک مسیر کد جدید P(cpnew | R(seedt) = 1) است.
بر اساس تعاریف 1 و 2، احتمال اینکه seedt برای فعال کردن یک زنجیره حالت جدید پاداش دریافت کند را میتوان به صورت زیر بدست آورد:
به طور مشابه، احتمال دریافت پاداش توسط بذر seedi برای اجرای یک مسیر کد جدید را میتوان مطابق زیر محاسبه کرد:
بر اساس فرضیات و تعاریف فوق، ما مسئله انتخاب بذر در SCGF را به یک مسئله باندیت چنداهرمـی (Multi-Armed Bandit) متخاصم نگاشت میکنیم. وظیفه عامل، انتخاب یک بذر از مخزن بذر برای فازینگ و انتخاب بذری است که هم پوشش حالت و هم پوشش کد را به حداکثر برساند.
سلاحها. فرض کنید A نشاندهنده مجموعهای از بازوهای موجود برای انتخاب توسط عامل باشد. هر بازو
ai ∈ A مربوط به یک بذر متمایز ti در مخزن بذر است. در هر دور انتخاب، عامل محدود به انتخاب یک بازو است که مربوط به انتخاب یک بذر برای فازینگ است. نتیجه این انتخاب بر تصمیمات آینده تأثیر میگذارد، زیرا عامل به طور تکراری استراتژی خود را بر اساس بازخورد تنظیم میکند و به تدریج امیدوارکنندهترین بذر را از مخزن انتخاب میکند.
احتمال پاداش. در مدل MAB برای انتخاب بذر، لازم است پاداش مورد انتظار برای هر بازو محاسبه شود تا بازویی با بالاترین پاداش مورد انتظار، یعنی بذری با بیشترین پتانسیل برای کشف پوشش حالت یا کد جدید، انتخاب شود. با این حال، محاسبه دقیق پاداش مورد انتظار برای هر بازو غیرعملی است. برای پرداختن به این مشکل، ما اندازهگیری پتانسیل یک بذر را بر اساس احتمال پاداش آن پیشنهاد میکنیم. هرچه احتمال پاداش Seed بیشتر باشد، احتمال کشف پوشش حالت یا کد جدید بیشتر است. از آنجایی که هدف از انتخاب بذر، به حداکثر رساندن پوشش حالت و کد است، احتمال پاداش یک بذر را میتوان با ترکیب معادلات (3) و (4) به صورت زیر فرموله کرد:
P(R(seedt) = 1) = α · P(scnew|R(seet) = 1) + (1 − α) · P(cpnew|R(seedt) = 1) (5)
که در آن α ∈ [0, 1].
همانطور که در معادلات (3) و (4) نشان داده شده است، محاسبه احتمال پاداش به احتمال گذار بستگی دارد. در AFLFast [31]، احتمالات گذار از طریق تحلیل محدودیت مسیر محاسبه میشوند؛ با این حال، این روش برای برنامههایی با روابط محدودیت پیچیده تقریباً غیرممکن میشود. برای پرداختن به این مشکل، ما از روش تخمین فرکانس خود-انتقالی استفاده شده در EcoFuzz [28] برای محاسبه احتمال انتقال هر بذر استفاده میکنیم. از آنجایی که احتمال پاداش به تدریج در طول فرآیند فازینگ کاهش مییابد، ما این ویژگی را با استفاده از شاخص بذر متعادل میکنیم. طبق معادلات (1) و (3)، احتمال انتقال زنجیره حالت را میتوان تقریباً به صورت زیر فرموله کرد:
به طور مشابه، احتمال گذار مسیر را میتوان به شکل تقریبی زیر فرموله کرد:
همانگونه که در معادلات (۵) تا (۷) نشان داده شده است، احتمال پاداش یک بذر را میتوان به صورت زیر تقریب زد:
که در آن α ∈ [0, 1].
۴.۲.۲ اکتشاف در مقابل بهرهبرداری
پس از مدلسازی مسئله انتخاب بذر (Seed) به عنوان یک مسئله باندیت چنداهرمـی (Multi-Armed Bandit) ، هر انتخاب بذر شامل تعادلی بین اکتشاف و بهرهبرداری است. اکتشاف به انتخاب بازوهای مختلف برای جمعآوری اطلاعات بیشتر اشاره دارد، حتی اگر این بازوها لزوماً حداکثر پاداش فوری را ارائه ندهند. با این حال، از طریق اکتشاف، میتوانیم درک جامعتری از توزیع پاداش بالقوه هر بازو به دست آوریم. از سوی دیگر، بهرهبرداری به انتخاب بازویی اشاره دارد که انتظار میرود بالاترین پاداش را بر اساس مشاهدات فعلی برای به حداکثر رساندن پاداشهای فوری به دست آورد. با این وجود، از آنجایی که اطلاعات شناخته شده بر اساس مشاهدات محدود است، بازوی بهینه فعلی ممکن است بهینه جهانی نباشد. بنابراین، یافتن تعادل معقول بین اکتشاف و بهرهبرداری برای به حداکثر رساندن پاداشهای تجمعی ضروری است.
در فازینگ، فرآیند انتخاب بذر شامل ایجاد تعادل بین اکتشاف و بهرهبرداری است که اساساً به معنای انتخاب بین بذرهای انتخاب شده و انتخاب نشده است. مجموعه بذر را میتوان به دو حالت طبقهبندی کرد: اکتشاف و بهرهبرداری. در طول حالت اکتشاف، هنگامی که بذرهای انتخاب نشده در مخزن وجود دارند، این بذرها باید اولویتبندی شوند تا اطمینان حاصل شود که هر یک به طور کامل آزمایش شدهاند. پس از انتخاب همه بذرها، مخزن به حالت بهرهبرداری منتقل میشود، جایی که معادله (8) برای ارزیابی بذرها و انتخاب امیدوارکنندهترین مورد برای آزمایش بیشتر اعمال میشود.
4.2.3 شناسایی فاز
هدف از فازینگ پروتکل نه تنها به حداکثر رساندن پوشش کد، بلکه به حداکثر رساندن پوشش حالت نیز هست. حالتهای جدید معمولاً در طول مرحله اولیه فازینگ پروتکل کشف میشوند. با پیشرفت فازینگ، یافتن حالتهای جدید در مرحله میانی با تنها چند انتقال حالت ثبت شده، به طور فزایندهای چالش برانگیز میشود. در مرحله نهایی، کشف حالتهای جدید یا انتقال حالت تقریباً غیرممکن است و فقط تعداد محدودی از مسیرهای کد جدید پوشش داده میشوند. بنابراین، فرآیند فازینگ پروتکل به سه مرحله تقسیم میشود که هر کدام اهداف متمایزی بر اساس اهداف در حال تکامل آزمایش دارند.
مراحل فازینگ عمدتاً بر اساس زمان اجرا تقسیم میشوند. به طور خاص، آزمایشکننده باید قبل از شروع فازینگ، فواصل زمانی اجرا را برای مراحل اولیه، میانی و نهایی به طور واضح تعریف کند. با تقسیم زمان به این روش، فازینگ میتواند استراتژی خود را بر اساس نیازهای مراحل مختلف تنظیم کند و در نتیجه پوشش حالتها و مسیرهای کد را بهبود بخشد. SCFuzz زمان اجرای فعلی را در زمان واقعی با زمان فاز از پیش تعیین شده مقایسه میکند تا فاز فعلی فازینگ را تعیین کند. تمرکز آزمایش بر اساس ویژگیهای هر مرحله تغییر میکند: در مرحله اولیه، تأکید بر پوشش گسترده حالتهای پروتکل و انتقال حالتها است، بنابراین α > 0.5 در ارزیابی احتمال پاداش اولیه نشان داده شده در معادله (8) تنظیم میشود. در مرحله میانی، آزمایش پوشش حالتها و مسیرهای کد را متعادل میکند و به تدریج تلاش بیشتری را برای کاوش مسیرهای کد صرف میکند و α = 0.5 را تنظیم میکند. در مرحله نهایی، با نزدیک شدن کاوش فضای حالت به اشباع، تمرکز به کاوش کامل مسیرهای کد کشف نشده با α < 0.5 تغییر میکند تا عمق آزمایش در فضای کد افزایش یابد.
4.2.4 انتخاب بذر
پس از تکمیل مراحل «کاوش در مقابل بهرهبرداری» و «شناسایی فاز»، وضعیت مجموعه بذر (Seed) و فاز فازینگ فعلی تعیین میشود. این به SCFuzz اجازه میدهد تا محدوده انتخاب بذر و فرمول محاسبه احتمالات پاداش بذر را تعریف کند.
الگوریتم 1 فرآیند انتخاب بذر را با جزئیات نشان میدهد. این الگوریتم مجموعه بذر، وضعیت مجموعه بذر و فاز فازینگ فعلی را به عنوان ورودی میگیرد. ابتدا، الگوریتم وضعیت مجموعه بذر را بررسی میکند. اگر مخزن بذر در حالت اکتشاف باشد، به این معنی که بذرهایی وجود دارند که هنوز انتخاب نشدهاند، یک انتخاب تصادفی از بین این بذرهای ادغام نشده انجام میشود (خطوط 1-2). اگر مخزن بذر در حالت بهرهبرداری باشد، جایی که همه بذرها قبلاً انتخاب شدهاند، الگوریتم بر اساس احتمال پاداش هر بذر در مخزن بذر، یک بذر را انتخاب میکند (خطوط 4-15). احتمال پاداش طبق معادله (8) با پارامتر α که توسط فاز فازی فعلی تعیین میشود، محاسبه میشود.
Input: P: Seed pool, Pstate: State of the seed pool, Fphase: Fuzzing phase
Output: seed: Selected seed
if Pstate is exploration then
seed ← RandomChooseFromUnfuzzedSeeds (P)
else
if Fphase is initial then
α ← δ1
else if Fphase is middle then
α ← δ2
else
α ← δ3
end if
for i = 0 to length(P) − 1 do
if i = 0 or computeProbability (P[i], α) > computeProbability (P[seed], α) then
seed ← P[i]
end if
end for
end if
return seed
در طول فاز اولیه فازینگ، α روی مقدار بالاتری تنظیم میشود و اولویت کاوش حالت را تعیین میکند. در فاز میانی، α روی مقدار متوسطی تنظیم میشود و هم پوشش حالت و هم پوشش مسیر کد را متعادل میکند. در فاز نهایی، α کاهش مییابد تا کاوش عمیقتر مسیرهای کد را تسهیل کند.
پس از تعیین مقدار α، احتمال پاداش همه بذرهای موجود در مخزن محاسبه میشود و بذری که بالاترین احتمال پاداش را دارد برای دور بعدی فازینگ انتخاب میشود.
۴.۳ تخصیص توان بر اساس وزنهای حالت
در این زیربخش، ما یک روش تخصیص توان ریزدانه بر اساس وزنهای حالت پیشنهاد میکنیم. این فرآیند با مقداردهی اولیه توان جهانی آغاز میشود که توان اولیه را به بذر (Seed) انتخاب شده اختصاص میدهد تا توزیع بهینه منابع تضمین شود. در مرحله بعد، ارزیابی حالت ،وزنهای حالتهای مربوط به هر پیام در بذر را محاسبه میکند. در نهایت، تخصیص توان ریزدانه، توان بیشتری را به پیامهای مرتبط با حالتهای با وزن بیشتر اختصاص میدهد و در نتیجه پوشش کلی و اثربخشی فازینگ را افزایش میدهد.
۴.۳.۱ مقداردهی اولیه توان سراسری
SCFuzz بر اساس استراتژی مقداردهی اولیه توان ابزار فازینگ جعبه خاکستری پروتکل موجود، یعنی AFLNet، توان را برای بذر (Seed) انتخابشده مقداردهی اولیه میکند. این استراتژی عواملی مانند زمان اجرای بذر، پوشش کد و زمان معرفی در تست را در نظر میگیرد.
از طریق این مکانیسم، توان اولیه بالاتر به بذر ایی هدایت میشود که در اجرا کارآمد هستند، به پوشش بیشتری دست مییابند یا به تازگی معرفی شدهاند و در نتیجه شانس آنها را برای جهش در چرخههای فازینگ بعدی افزایش میدهد. با بهینهسازی پویای توزیع منابع در زمان واقعی، این استراتژی مقداردهی اولیه توان، کارایی کلی تست را افزایش میدهد.
۴.۳.۲ ارزیابی حالت
در فازینگ پروتکل، بذرها (Seed) از توالیهای پیام تشکیل شدهاند و تغییر کل بذر را به طور مستقیم غیرعملی میکند. در عوض، باید توان به پیامهای منفرد در بذر اختصاص داده شود. از آنجایی که ارزیابی مستقیم پتانسیل جهش یک پیام واحد دشوار است، ما حالتهای مربوط به توالی پیام را ارزیابی میکنیم تا پتانسیل جهش هر پیام را تخمین بزنیم و در نتیجه تخصیص مؤثرتری از توان را امکانپذیر کنیم.
همه حالتها پتانسیل جهش یکسانی ندارند. ما از قوانین اکتشافی زیر برای تعیین وزن هر حالت در بذر استفاده میکنیم.
- به حالتهایی با فرکانس انتخاب پایینتر، توان بیشتری اختصاص میدهیم. حالتهایی که کمتر انتخاب میشوند، نشان میدهند که به ندرت در تلاشهای فازینگ قبلی بررسی شدهاند. به دلیل آزمایش ناکافی، این حالتها ممکن است آسیبپذیریهای بالقوه یا رفتارهای کشف نشده را پنهان کنند و بنابراین باید برای تخصیص توان در اولویت قرار گیرند.
- به حالتهایی با فرکانس تحریک پایینتر، توان بیشتری اختصاص میدهیم. حالتهایی که کمتر در طول آزمایش تحریک میشوند، ممکن است پتانسیل کشف نشده بیشتری داشته باشند. اولویتبندی این حالتها میتواند به کشف رفتارهای ناشناختهتر و خطرات امنیتی کمک کند.
- به حالتهایی با تعداد بیشتری لبه انتقال حالت، توان بیشتری اختصاص میدهیم. حالتهایی با لبههای انتقال بیشتر معمولاً پیچیدهتر هستند و ممکن است منجر به چندین مسیر آزمایش نشده شوند. اختصاص توان بیشتر به این حالتها میتواند پوشش مسیر را به طور قابل توجهی افزایش دهد.
- به حالتهایی که در ماشین حالت پروتکل پیادهسازی شده عمیقتر هستند، توان بیشتری اختصاص دهید. حالتهای عمیقتر، که برای رسیدن به آنها نیاز به چندین انتقال است، معمولاً نشاندهنده سختی آزمایش بالاتر هستند. با اختصاص توان بیشتر به این حالتها، اطمینان حاصل میکنیم که این حالتهای سختدسترس به طور کافی آزمایش میشوند.
- به حالتهایی که از نظر تاریخی چندین بار مسیرهای جدید را کشف کردهاند، توان بیشتری اختصاص دهید. این حالتها قبلاً پتانسیل خود را برای ایجاد مسیرهای اجرایی جدید در طول آزمایشهای قبلی ثابت کردهاند. ادامه اختصاص توان به این حالتها میتواند مسیرهای جدید بیشتری را آشکار کند و اثربخشی کلی فازینگ را افزایش دهد.
بر اساس پنج قاعده اکتشافی ذکر شده در بالا، فرمولی برای محاسبه وزن حالت طراحی میکنیم. برای یک حالت دادهشده si، وزن آن به صورت زیر محاسبه میشود:
در معادله (۹)، discoverd_pathssi نشاندهنده تعداد مسیرهای جدید کشفشده در هنگامی است که حالت si به عنوان حالت هدف برای فازینگ انتخاب میشود. depthsi به عمق حالت si درون ماشین حالت اشاره دارد، در حالی که transsi تعداد گذرها از حالت si را نشان میدهد. fuzzssi تعداد دفعاتی را نشان میدهد که حالت si فعال شده است و selected_timessi تعداد دفعات انتخاب شدن حالت si به عنوان حالت هدف را بیان میکند. از آنجایی که مقادیر fuzzssi و selected_timessi نسبتاً بزرگ هستند، برای جلوگیری از بزرگ شدن بیش از حد مخرج و در نتیجه کاهش تفاوت در وزنها، معادله (۹) اندازه آنها را کاهش میدهد. با استفاده از معادله فوق، میتوانیم ارزیابیهای کمّی دقیقی از هر حالتی که بذر انتخابشده میتواند فعال کند، انجام دهیم و در نتیجه درک جامعتری از پتانسیل آزمون و ارزش این حالتها به دست آوریم.
۴.۳.۳ تخصیص توان ریزدانه
پس از تعیین وزن حالتها با توجه به اینکه بذر (Seed) انتخابشده میتواند فعال شود، ما باید قدرت بذر سراسری را به هر حالت به صورت دقیقتری اختصاص دهیم. بر اساس وزن هر حالت، قدرت بذر به طور متناسب بین حالتهای مختلف توزیع میشود و تضمین میکند که حالتهای با وزن بالاتر، منابع آزمایش بیشتری دریافت میکنند. این رویکرد به طور مؤثر فرکانس جهش حالتهای با پتانسیل بالا را افزایش میدهد و در نتیجه پوشش کلی و کارایی فرآیند فازینگ را افزایش میدهد.
در مرحله مقداردهی اولیه توان سراسری، با فرض اینکه توان کل بذر برابر با power_total باشد، توان اختصاص داده شده به هر یک از n حالت در فایل بذر به صورت زیر محاسبه میشود:
powersi = power_total ×wsi∑ni=1 wsi(10)
که در آن، wsi نشان دهنده وزن حالت si و ∑ ni=1 wsi مجموع کل وزنها برای همه حالتها است. این روش تخصیص تضمین میکند که حالتهای با وزن بالاتر، توان بیشتری دریافت میکنند و به حالتهای نادر یا با پتانسیل بالا اجازه میدهد تا برای آزمایش در اولویت قرار گیرند و در نتیجه پوشش کلی و کارایی فرآیند فازینگ بهبود یابد.
تخصیص توان به حالتهای درون یک بذر اساساً به معنای تخصیص توان به پیامهای منفرد درون بذر است. با در نظر گرفتن بذر و زنجیره حالت مربوطه آن در شکل 3 به عنوان مثال، وزن هر حالت در زنجیره برای ارزیابی پتانسیل جهش آن محاسبه میشود و پس از آن توان بر اساس آن توزیع میشود. برای مثال، اگر توان اختصاص داده شده به حالت S2 برابر با توان 1 باشد، به پیام بعدی M3 واحد توان 1 اختصاص داده خواهد شد، به این معنی که M3 تحت تلاشهای جهش توان 1 قرار خواهد گرفت.
۵. ارزیابی
در این بخش، عملکرد SCFuzz را ارزیابی کرده و آن را با فازرهای پروتکل پیشرفته مقایسه میکنیم. در ارزیابی SCFuzz بر سوالات تحقیقاتی زیر تمرکز میکنیم.
- سوال اول: پوشش حالت. SCFuzz در مقایسه با حالت پایه چقدر در پوشش حالت بهبود ایجاد میکند؟
- سوال دوم: پوشش کد. SCFuzz در مقایسه با حالت پایه چقدر در پوشش کد بهبود ایجاد میکند؟
- سوال سوم: اثربخشی انتخاب بذر. SCFuzz چگونه اثربخشی انتخاب بذر (Seed) را در مقایسه با حالت پایه افزایش میدهد؟
- سوال چهارم: اثربخشی استفاده از توان. SCFuzz چگونه اثربخشی استفاده از توان را در مقایسه با حالت پایه بهبود میبخشد؟
۵.۱ تنظیمات تجربی
پیادهسازی. ما SCFuzz را بر اساس چارچوب فازینگ پروتکل پرکاربرد AFLNET توسعه میدهیم. ما تمام آزمایشها را روی یک سرور مجهز به اوبونتو ۶۴ بیتی ۲۰.۰۴، با دو پردازنده Intel (R) Xeon (R) E5-2690@2.90 GHz و ۱۲۸ گیگابایت رم اجرا میکنیم.
هر پیادهسازی پروتکل انتخاب شده و هر فازر به صورت جداگانه در کانتینرهای داکر جداگانه راهاندازی شدهاند و از منابع محاسباتی یکسان برای ارزیابی تجربی استفاده میکنند.
برای اطمینان از منصفانه بودن نتایج آزمایش، هر فازر تحت ۲۴ ساعت فازینگ روی هر پیادهسازی پروتکل قرار گرفت و آزمایشها پنج بار تکرار شدند.
طی ۲۴ ساعت فازینگ، فرآیند را به سه مرحله تقسیم کردیم. ۶ ساعت اول نشان دهنده فازینگ اولیه است که در آن پارامتر α را روی ۰.۸ تنظیم و عمدتاً بر کاوش فضای حالت تمرکز کردیم. ۸ ساعت میانی نشان دهنده فازینگ میانی است که در آن α روی ۰.۵ تنظیم شده و کاوش فضای حالت و فضای کد را متعادل میکند. در نهایت، 10 ساعت پایانی نشاندهنده مرحله نهایی فازینگ است، که در آن α روی 0.2 تنظیم شده است و بیشتر بر کاوش فضای کد تمرکز داشت.
معیار سنجش. جدول 2 اطلاعات دقیقی در مورد پیادهسازیهای پروتکل شبکه مورد استفاده در ارزیابی ما ارائه میدهد. ما اهداف فازینگ را از معیار فازینگ پروتکل شبکه، یعنی ProFuzzBench [6]، انتخاب میکنیم. ارزیابی ما شامل سه پروتکل شبکه مجزا است که توسط پنج پیادهسازی سرویس شبکه مختلف نشان داده میشوند، از جمله پروتکلهای پرکاربرد مانند FTP، RTSP و DAAP.
مبنای مقایسه. ما مقایسهای بین SCFuzz و ابزار فازینگ جعبه خاکستری متنباز پایهای برای پروتکلهای شبکه، AFLNet، انجام دادیم. AFLNet به طور خاص برای فازینگ پروتکلهای شبکهی حالتمند طراحی شده است. این ابزار با معرفی یک استراتژی بازخورد آگاه از وضعیت، AFL پرکاربرد را گسترش میدهد. این ابزار، انتقال وضعیتهای خاص پروتکل را در طول فازینگ نظارت میکند و پوشش بهتری را در سرویسهای شبکهی حالتمند فراهم میکند. سایر فازرهای پرکاربرد، مانند StateAFL [3] و NSFuzz [4]، نیز بر اساس AFLNet ساخته شدهاند، اما روش زمانبندی اولیهی خود را اصلاح نکردهاند. بهبودهای ایجاد شده توسط این ابزارها، متعامد با بهبودهای معرفی شده توسط SCFuzz است. با مقایسهی آزمایشهای خود با AFLNet، میتوانیم اثربخشی روش زمانبندی اولیهی پیشنهادی در این مقاله را در رابطه با فازرهای موجود ارزیابی کنیم.
5.2 پوشش حالت (RQ1)
برای ارزیابی قابلیت کاوش فضای حالت SCFuzz، تعداد حالتها و انتقال حالتهای فعالشده توسط فازرهای مختلف را در عرض 24 ساعت فازینگ مقایسه کردیم. از آنجایی که SCFuzz روش زمانبندی اولیه را بدون تغییر روش نمایش حالت بهبود میبخشد، از کدهای پاسخ از پیامهای پاسخ به عنوان نمایش حالت استفاده میکند که مشابه AFLNet است. برای تعیین کمیت بهبود SCFuzz نسبت به خط پایه، درصد بهبود در پوشش حالت بهدستآمده در عرض 24 ساعت (Improv) و احتمال اینکه یک کمپین تصادفی SCFuzz از یک کمپین تصادفی خط پایه (Aˆ12) بهتر عمل کند را گزارش کردیم که با اندازه اثر Vargha-Delaney [37] اندازهگیری میشود.
جدول 3 نتایج تجربی در مورد پوشش حالت را ارائه میدهد. میتوان مشاهده کرد که SCFuzz در مقایسه با AFLNet تعداد بیشتری از حالتها و انتقال حالتها را فعال میکند. به طور خاص، SCFuzz در مقایسه با AFLNet، به طور متوسط بهبودی معادل ۱۷.۱۰٪ در تعداد حالتها و ۲۲.۹۲٪ در انتقال حالتها در ۲۴ ساعت فازینگ دست مییابد. برای همه پروتکلهای آزمایششده، نشان میدهد که SCFuzz در کاوش فضای حالت، برتری آشکاری نسبت به AFLNet نشان میدهد.
بهبودهای SCFuzz در LightFTP قابل توجه نیست. به طور خاص، میانگین افزایش تعداد حالتها ۴.۳۵٪ است، در حالی که افزایش انتقال حالتها ۴.۹۰٪ است. تجزیه و تحلیل نشان میدهد که LightFTP یک برنامه سبک وزن مبتنی بر پروتکل FTP با عملکرد نسبتاً ساده است که اثربخشی SCFuzz را در این برنامه محدود میکند.
به طور مشابه، SCFuzz در Forked-daapd عملکرد خوبی ندارد، جایی که انتقال حالتها فقط ۴.۵۵٪ افزایش یافته است. پس از تجزیه و تحلیل، دریافتیم که دلیل اصلی، سرعت اجرای پایین این برنامه پروتکل است که مانع از پتانسیل کامل SCFuzz میشود.
در نتیجه، SCFuzz پوشش حالت بیشتری نسبت به حالت پایه به دست میآورد. SCFuzz از طریق کاوش عمیقتر در فضای حالت، مزایای آشکاری را در فازینگ پروتکل نشان میدهد. این روش حالتها و انتقالهای جدید بیشتری را شناسایی میکند و اثربخشی و پوشش فرآیند فازینگ را بهبود میبخشد.
۵.۳ پوشش کد (RQ2)
پوشش کد همواره یک معیار کلیدی برای ارزیابی ابزارهای فازینگ بوده است. به طور کلی، پوشش کد بالاتر نشان دهنده آزمایش جامعتر برنامه هدف است و احتمال ایجاد آسیبپذیریهای برنامه را افزایش میدهد. جدول ۴ پوشش شاخه، پوشش خط و پوشش مسیر به دست آمده توسط فازرهای مختلف را در طول پنج جلسه فازینگ ۲۴ ساعته نشان میدهد. برای تعیین کمیت بهبودهای SCFuzz نسبت به حالت پایه، درصد بهبود (Improv) را در معیارهای مختلف پوشش گزارش میدهیم.
نتایج جدول ۴ نشان میدهد که SCFuzz در مقایسه با AFLNet، پوشش شاخه، خط و مسیر بالاتری را در هر پنج پیادهسازی پروتکل به دست میآورد. به طور خاص، SCFuzz به طور متوسط بهبود ۷.۹۲٪ در پوشش شاخه، ۶.۶۱٪ در پوشش خط و ۱۳.۰۰٪ در پوشش مسیر نسبت به AFLNet را به دست میآورد. نرخ بهبود در سه معیار پوشش به طور کلی ثابت است. پروتکلهایی که بهبودهای بیشتری در پوشش شاخه نشان میدهند، تمایل دارند پوشش خط و مسیر بالاتری را نیز نشان دهند. به عنوان مثال، در پیادهسازی پروتکل Pure-FTPD، SCFuzz پوشش شاخه را ۲۰.۵۷٪، پوشش خط را ۱۳.۷۳٪ و پوشش مسیر را ۲۸.۹۵٪ بهبود میبخشد.
شکل ۴ پوشش شاخه را در طول زمان در طول فرآیند فازینگ ۲۴ ساعته برای SCFuzz و AFLNet نشان میدهد. همانطور که در شکل نشان داده شده است، SCFuzz و AFLNet عملکرد پوشش کد مشابهی را در مراحل اولیه آزمایش نشان میدهند. با این حال، با گذشت زمان، SCFuzz شروع به نشان دادن پوشش بالاتری میکند، به خصوص در مراحل بعدی، که پوشش شاخههای آن به طور قابل توجهی از AFLNet پیشی میگیرد. در نتیجه، SCFuzz در مقایسه با فازرهای پروتکل موجود، به پوشش کد بالاتری دست مییابد. روش زمانبندی بذر (Seed) آن به طور موثر بذرهایی را با بیشترین پتانسیل برای کاوش در فضای کد انتخاب میکند و در نتیجه پوشش کد را در طول فرآیند آزمایش تسریع میکند.
۵.۴ اثربخشی انتخاب بذر (RQ3)
برای ارزیابی اینکه آیا استراتژی انتخاب بذر (Seed) چند مرحلهای در SCFuzz میتواند به طور مؤثر بذرهایی با بیشترین پتانسیل برای پاداش را انتخاب کند، نسبت بذرهای انتخاب شدهای را که در طول فرآیند فازینگ ۲۴ ساعته پاداش دریافت کردهاند (یعنی کد یا پوشش حالت جدید کشف کردهاند) محاسبه کردیم. این نسبت در مقایسه با تعداد کل انتخابهای بذر اندازهگیری میشود تا اثربخشی فرآیند انتخاب بذر ارزیابی شود. نرخ بالاتر انتخاب موثر نشان میدهد که فازر در شناسایی بذرهایی که میتوانند حالتها یا پوشش کد جدید را کشف کنند، کارآمدتر است و در نتیجه امکان کاوش عمیقتر در پیادهسازی پروتکل هدف را فراهم میکند.
جدول ۵، اثربخشی انتخاب بذر SCFuzz و AFLNet را در پیادهسازیهای مختلف پروتکل ارائه میدهد. بدیهی است که SCFuzz از نظر نرخ انتخاب بذر موثر در تمام پیادهسازیهای پروتکل، به طور مداوم از AFLNet بهتر عمل میکند. به طور متوسط، AFLNet به نرخ انتخاب مؤثر ۹.۸۶٪ دست مییابد، در حالی که SCFuzz به ۲۷.۴۵٪ دست مییابد که نشاندهنده بهبود ۳۸۹.۳۷٪ است. در پیادهسازیهای پروتکل پیچیدهتر مانند ProFTPD و Forked-daapd، SCFuzz به ترتیب به نرخ انتخاب مؤثر ۳۳.۱۰٪ و ۴۲.۸۶٪ میرسد که به طور قابل توجهی بالاتر از ۱۰.۴۱٪ و ۲۶.۴۳٪ AFLNet است.
این نشان میدهد که SCFuzz در انتخاب بذرهایی با پتانسیل بالاتر برای کشف وضعیت جدید و پوشش کد، مؤثرتر است و در نتیجه کارایی کلی فازینگ را بهبود میبخشد.
حتی در پیادهسازی نسبتاً ساده پروتکل LightFTP ،SCFuzz به نرخ انتخاب مؤثر ۲۹.۷۳٪ دست مییابد که به طور قابل توجهی از نرخ ۳.۱۱٪ به دست آمده توسط AFLNet پیشی میگیرد و مزیت SCFuzz را در مدیریت پیادهسازیهای پروتکل سبک نشان میدهد.
در نتیجه، استراتژی انتخاب چند مرحلهای بذر در SCFuzz مزایای قابل توجهی در انتخاب بذرهای مؤثر نشان میدهد. از طریق این استراتژی، SCFuzz قادر است بذرهایی با پتانسیل بیشتر را در طول هر تکرار فازینگ به طور مؤثر شناسایی و انتخاب کند، و این بذرها عملکرد برتر را در کشف پوشش کد یا حالت جدید نشان میدهند.
این مکانیسم انتخاب بذر نه تنها کارایی فرآیند فازینگ را بهبود میبخشد، بلکه کاوش عمیقتر در پیادهسازی پروتکل را نیز تسهیل میکند.
5.5 اثربخشی استفاده از توان (RQ4)
برای ارزیابی اینکه آیا استراتژی تخصیص توان بر اساس وزنهای حالت در SCFuzz اثربخشی استفاده از توان را در فازینگ بهبود میبخشد، ما نسبت توانی را که برای راهاندازی موفقیتآمیز پوشش کد یا حالت جدید در طول فرآیند فازینگ 24 ساعته استفاده میشود، محاسبه کردیم. اثربخشی بالاتر در استفاده از توان نشان میدهد که فازر قادر است منابع را به طور مؤثرتری تخصیص دهد و تضمین کند که توان به سمت هستههایی با بالاترین پتانسیل برای کشف مسیرهای کد جدید و انتقال حالتها هدایت میشود و در نتیجه اثربخشی کلی فرآیند فازینگ را به حداکثر میرساند.
جدول 6 اثربخشی استفاده از توان SCFuzz و AFLNet را در پیادهسازیهای مختلف پروتکل ارائه میدهد. نتایج تجربی نشان میدهد که SCFuzz در تمام پیادهسازیهای پروتکل، اثربخشی استفاده از توان بالاتری را نشان میدهد. به طور متوسط، AFLNet به طور متوسط به اثربخشی استفاده از توان 0.37٪ دست مییابد، در حالی که SCFuzz به 0.54٪ دست مییابد که نشاندهنده بهبود 45.61٪ نسبت به AFLNet است. به طور خاص، در پیادهسازی پروتکل ProFTPD، SCFuzz به اثربخشی استفاده از توان 1.45٪ در مقایسه با 0.99٪ به دست آمده توسط AFLNet میرسد. این بهبود نشان میدهد که استراتژی تخصیص توان مبتنی بر وزنهای حالت SCFuzz امکان توزیع کارآمدتر توان را فراهم میکند، منابع بیشتری را به پیامهای درون بذرهایی (Seed) که پتانسیل بالاتری دارند اختصاص میدهد و جهشهای بیشتری را به این پیامها اعمال میکند که منجر به کشف کد جدید یا پوشش حالت میشود.
در نتیجه، استراتژی تخصیص توان بر اساس وزنهای حالت SCFuzz، مصرف توان را بهبود میبخشد و به فازر اجازه میدهد تا کد و فضاهای حالت را با کارایی بیشتری تحت منابع توان محدود بررسی کند و در نتیجه پوشش کلی آزمون را افزایش دهد.
6. بحث
اگرچه SCFuzz اثربخشی زمانبندی اولیه را افزایش میدهد و کارایی کلی فازینگ را بهبود میبخشد، اما هنوز محدودیتهای خاصی دارد.
اول، در تقسیم فرآیند فازینگ به مراحل اولیه، میانی و نهایی، ما در حال حاضر مدت زمان هر مرحله را به عنوان مقادیر ثابت تعیین شده در شروع فازینگ تعریف میکنیم. در حالی که این تقسیم فاز به طور کلی با پویاییهای فازینگ (Fuzzing Dynamics) رایج همسو است، ممکن است به طور جهانی در تمام پیادهسازیهای پروتکل قابل اجرا نباشد. پویاییهای فازینگ میتواند بین پروتکلهای مختلف به طور قابل توجهی متفاوت باشد و یک مدل با مدت زمان فاز ثابت ممکن است تفاوتهای ظریف هر جلسه فازینگ را نشان ندهد. SCFuzz هنوز توانایی تطبیق مدت زمان فازها را بر اساس بازخورد در زمان واقعی ندارد، که میتواند پیشرفت واقعی فازینگ را بهتر منعکس کند.
توسعه این قابلیت تطبیقی، مسیری امیدوارکننده برای تحقیقات آینده را نشان میدهد. به طور خاص، میتوان از نظارت بلادرنگ بر نرخ کشف حالت و انتقال برای تنظیم پویای مدت زمان فازها استفاده کرد و استفاده کارآمدتر از منابع را تضمین نمود.
دوم، زمانبندی بذر (Seed) و جهش بذر دو عامل اصلی هستند که بر اثربخشی فازینگ تأثیر میگذارند. زمانبندی بذر جهت انتخاب آزمون را تعیین میکند، در حالی که جهش بذر بر اعتبار و کیفیت موارد آزمون تولید شده تأثیر میگذارد. این دو عامل به هم وابسته هستند – انتخاب بهینه بذر به تنهایی نمیتواند بدون روشهای جهش مؤثر، به طور کامل از پتانسیل بذرها بهرهبرداری کند. با این حال، اکثر مطالعات موجود، زمانبندی بذر و جهش را به طور مستقل بهینه میکنند، که تعمیمپذیری و مقیاسپذیری رویکردهای آنها را محدود میکند. در SCFuzz، اگرچه ما بر بهبود زمانبندی بذر تمرکز میکنیم، اما اذعان داریم که عملکرد استراتژی انتخاب بذر میتواند در صورت همراه شدن با یک استراتژی جهش پیچیدهتر، بیشتر بهبود یابد. عدم همافزایی فعلی بین تکنیکهای زمانبندی بذر و جهش، یک محدودیت کلیدی است. بنابراین، بررسی یک رویکرد یکپارچهتر که هر دو عنصر – زمانبندی و جهش – را ترکیب میکند، میتواند پیشرفتی در عملکرد فازینگ باشد. این استراتژی ترکیبی میتواند ویژگیهای هر بذر را در نظر بگیرد و نه تنها ترتیب انتخاب، بلکه رویکرد جهش اعمال شده برای هر بذر را نیز تنظیم کند. تحقیقات بیشتر در مورد استراتژیهای جهش تطبیقی، که به طور بالقوه از تکنیکهای یادگیری ماشین یا یادگیری تقویتی استفاده میکنند، میتواند به تنظیم جهشها بر اساس حالتهای خاص ایجاد شده توسط بذرها کمک کند.
به طور خلاصه، اگرچه SCFuzz در مقایسه با ابزارهای فازینگ موجود پیشرفت قابل توجهی داشته است، اما هنوز حوزههای مختلفی وجود دارد که میتوانند بیشتر بهبود یابند. تحقیقات آینده باید بر طراحی مکانیسمهای مدیریت فاز تطبیقی و ادغام عمیقتر زمانبندی بذر و استراتژیهای جهش تمرکز کنند. این پیشرفتها نه تنها تعمیمپذیری و عملکرد SCFuzz را افزایش میدهند، بلکه کاربرد ابزارهای فازینگ را در محیطهای آزمایش پیچیدهتر و متنوعتر نیز ارتقا میدهند. پرداختن به این چالشها، پایه محکمی برای توسعه ابزارهای فازینگ کارآمدتر و دقیقتر ایجاد میکند و در نتیجه، پذیرش گسترده فناوری فازینگ را در کاربردهای عملی پیش میبرد.
۷. نتیجهگیری
ما در این مقاله، SCFuzz را ارائه کردیم که یک رویکرد نوآورانه برای بهینهسازی زمانبندی بذر در فازینگ پروتکل شبکه است. با مفهومسازی انتخاب بذر به عنوان یک مسئله باندیت چنداهرمـی (Multi-Armed Bandit) و تقسیم فرآیند فازینگ به فازهای مجزا، SCFuzz به صورت پویا بین اکتشاف و بهرهبرداری تعادل برقرار میکند و رویکرد خود را با الزامات منحصر به فرد هر فاز تطبیق میدهد. علاوه بر این، یک استراتژی تخصیص توان مبتنی بر وزنهای حالت، توزیع متمرکز منابع را به پیامهای با پتانسیل بالا تضمین میکند و در نتیجه پوشش و کارایی فرآیند فازینگ را بهبود میبخشد. سهم علمی این مطالعه ریشه در ادغام جدید انتخاب بذر چندمرحلهای با یک موازنه پویای اکتشاف/بهرهبرداری و تخصیص توان وزندار حالت دارد. این روش یکپارچه، پوشش فازینگ و کارایی کلی آزمایش را به طور قابل توجهی افزایش میدهد و چالشهای کلیدی در زمینه فازینگ پروتکل را برطرف میکند.
نتایج تجربی، اثربخشی SCFuzz را اثبات میکنند و عملکرد برتر آن را در مقایسه با AFLNet در چندین پیادهسازی پروتکل متنباز پرکاربرد نشان میدهند. به طور خاص، SCFuzz تا ۱۷.۱۰٪ حالتهای کشفشده بیشتر، ۲۲.۹۲٪ انتقال حالت بیشتر و ۷.۹۲٪ پوشش شاخه کد بالاتر را به دست میآورد. علاوه بر این، اثربخشی انتخاب اولیه ۳۸۹.۳۷٪ بهبود مییابد، در حالی که مصرف برق ۴۵.۶۱٪ افزایش مییابد و در نتیجه به سؤالات تحقیقاتی مطرحشده در این مطالعه پاسخ داده میشود.
ورای دستاوردهای فنی، این پژوهش دارای پیامدهای اجتماعی نیز هست، زیرا با تقویت امنیت پیادهسازیهای پروتکلهای ارتباطی، از طریق افزایش کارایی فازینگ، SCFuzz امکان شناسایی آسیبپذیریها در مراحل اولیهتر را فراهم میکند و بدینترتیب خطرات ناشی از نقصهای امنیتی در سیستمهای حیاتی را کاهش میدهد.
در نتیجه، SCFuzz راهحلی مؤثر برای چالشهای فازینگ پروتکل ارائه میدهد و هم در درک علمی از راهبردهای فازینگ و هم در امنیت عملی پروتکلهای ارتباطی نقش ایفا میکند. کارهای آتی میتوانند به بررسی مدیریت تطبیقی مراحل و تلفیق زمانبندی دادههای ورودی (seed scheduling) با راهبردهای جهش (mutation) بپردازند تا عملکرد فناوریهای فازینگ هرچه بیشتر پالایش و بهبود یابد.
8. منابع
1. Manès, V.J.; Han, H.; Han, C.; Cha, S.K.; Egele, M.; Schwartz, E.J.; Woo, M. The art, science, and engineering of fuzzing: A survey. IEEE Trans. Softw. Eng. 2019, 47, 2312–2331. [CrossRef]
2. Wu, W.C.; Nongpoh, B.; Nour, M.; Marcozzi, M.; Bardin, S.; Hauser, C. Fine-grained coverage-based fuzzing. ACM Trans. Softw. Eng. Methodol. 2024, 33, 1–41. [CrossRef]
3. Natella, R. Stateafl: Greybox fuzzing for stateful network servers. Empir. Softw. Eng. 2022, 27, 191. [CrossRef]
4. Qin, S.; Hu, F.; Ma, Z.; Zhao, B.; Yin, T.; Zhang, C. Nsfuzz: Towards efficient and state-aware network service fuzzing. ACM Trans. Softw. Eng. Methodol. 2023, 32, 1–26. [CrossRef]
5. Ba, J.; Böhme, M.; Mirzamomen, Z.; Roychoudhury, A. Stateful greybox fuzzing. In Proceedings of the 31st USENIX Security Symposium (USENIX Security 22), Boston, MA, USA, 10–12 August 2022; pp. 3255–3272.
6. Natella, R.; Pham, V.T. Profuzzbench: A benchmark for stateful protocol fuzzing. In Proceedings of the 30th ACM SIGSOFT International Symposium on Software Testing and Analysis, Virtual, 11–17 July 2021; pp. 662–665.
7. Slivkins, A. Introduction to multi-armed bandits. Found. Trends Mach. Learn. 2019, 12, 1–286. [CrossRef]
8. Auer, P.; Cesa-Bianchi, N.; Freund, Y.; Schapire, R.E. Gambling in a rigged casino: The adversarial multi-armed bandit problem. In Proceedings of the IEEE 36th Annual Foundations of Computer Science, Milwaukee, WI, USA, 23–25 October 1995; pp. 322–331.
9. Banks, G.; Cova, M.; Felmetsger, V.; Almeroth, K.; Kemmerer, R.; Vigna, G. SNOOZE: Toward a Stateful Network protocol fuzzer. In Proceedings of the Information Security: 9th International Conference, ISC 2006, Samos Island, Greece, 30 August–2 September 2006; Proceedings 9; Springer: Berlin/Heidelberg, Germany, 2006; pp. 343–358.
10. Miki, H.; Setou, M.; Kaneshiro, K.; Hirokawa, N. All kinesin superfamily protein, KIF, genes in mouse and human. Proc. Natl. Acad. Sci. USA 2001, 98, 7004–7011. [CrossRef] [PubMed]
11. Gorbunov, S.; Rosenbloom, A. Autofuzz: Automated network protocol fuzzing framework. IJCSNS 2010, 10, 239.
12. Peng, H.; Shoshitaishvili, Y.; Payer, M. T-Fuzz: Fuzzing by program transformation. In Proceedings of the 2018 IEEE Symposium on Security and Privacy (SP), San Francisco, CA, USA, 20–24 May 2018; pp. 697–710.
13. De Ruiter, J.; Poll, E. Protocol state fuzzing of TLS implementations. In Proceedings of the 24th USENIX Security Symposium (USENIX Security 15), Washington, DC, USA, 12–14 August 2015; pp. 193–206.
14. Eddington, M. Peach Fuzzer: A Smart Fuzzer for Complex Inputs. Available online: https://www.peachfuzzer.com (accessed on 6 October 2024).
15. Aitel, D. The Advantages of Block-Based Protocol Analysis for Security Testing; Immunity Inc.: Miami, FL, USA, 2002; pp. 105–106.
16. Meng, R.; Mirchev, M.; Böhme, M.; Roychoudhury, A. Large language model guided protocol fuzzing. In Proceedings of the 31st Annual Network and Distributed System Security Symposium (NDSS), San Diego, CA, USA, 26 February–1 March 2024.
17. Hu, Z.; Pan, Z. A systematic review of network protocol fuzzing techniques. In Proceedings of the 2021 IEEE 4th Advanced Information Management, Communicates, Electronic and Automation Control Conference (IMCEC), Chongqing, China, 18–20 June 2021; Volume 4, pp. 1000–1005.
18. Zeng, Y.; Lin, M.; Guo, S.; Shen, Y.; Cui, T.; Wu, T.; Zheng, Q.; Wang, Q. Multifuzz: A coverage-based multiparty-protocol fuzzer for iot publish/subscribe protocols. Sensors 2020, 20, 5194. [CrossRef] [PubMed]
19. Zardus. Preeny Repository. Available online: https://github.com/zardus/preeny (accessed on 6 October 2024).
20. Pham, V.T.; Böhme, M.; Roychoudhury, A. AFLNet: A greybox fuzzer for network protocols. In Proceedings of the 2020 IEEE 13th International Conference on Software Testing, Validation and Verification (ICST), Porto, Portugal, 24–28 October 2020; pp. 460–465.
21. Zalewski, M. American Fuzzy Lop. Available online: https://lcamtuf.coredump.cx/afl/ (accessed on 6 October 2024).
22. Yu, Y.; Chen, Z.; Gan, S.; Wang, X. SGPFuzzer: A state-driven smart graybox protocol fuzzer for network protocol implementations. IEEE Access 2020, 8, 198668–198678. [CrossRef]
23. Andronidis, A.; Cadar, C. Snapfuzz: High-throughput fuzzing of network applications. In Proceedings of the 31st ACM SIGSOFT International Symposium on Software Testing and Analysis, Virtual, 18–22 July 2022; pp. 340–351.
24. Liu, D.; Pham, V.T.; Ernst, G.; Murray, T.; Rubinstein, B.I. State selection algorithms and their impact on the performance of stateful network protocol fuzzing. In Proceedings of the 2022 IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER), Honolulu, HI, USA, 15–18 March 2022; pp. 720–730.
25. Browne, C.B.; Powley, E.; Whitehouse, D.; Lucas, S.M.; Cowling, P.I.; Rohlfshagen, P.; Tavener, S.; Perez, D.; Samothrakis, S.; Colton, S. A survey of monte carlo tree search methods. IEEE Trans. Comput. Intell. Games 2012, 4, 1–43. [CrossRef]
26. Borcherding, A.; Giraud, M.; Fitzgerald, I.; Beyerer, J. The Bandit’s States: Modeling State Selection for Stateful Network Fuzzing as Multi-armed Bandit Problem. In Proceedings of the 2023 IEEE European Symposium on Security and Privacy Workshops (EuroS & PW), Delft, The Netherlands, 3–7 July 2023; pp. 345–350.
27. Wang, J.; Song, C.; Yin, H. Reinforcement learning-based hierarchical seed scheduling for greybox fuzzing. In Proceedings of the Network and Distributed Systems Security Symposium, Virtual, 21–25 February 2021.
28. Yue, T.; Wang, P.; Tang, Y.; Wang, E.; Yu, B.; Lu, K.; Zhou, X. EcoFuzz: Adaptive Energy-Saving greybox fuzzing as a variant of the adversarial Multi-Armed bandit. In Proceedings of the 29th USENIX Security Symposium (USENIX Security 20), Berkeley, CA, USA, 12–14 August 2020; pp. 2307–2324.
29. Zhao, L.; Duan, Y.; Xuan, J. Send Hardest Problems My Way: Probabilistic Path Prioritization for Hybrid Fuzzing. In Proceedings of the Network and Distributed System Security Symposium (NDSS), San Diego, CA, USA, 24–27 February 2019. Electronics 2024, 13, 4962 20 of 20
30. Zhao, Y.; Wang, X.; Zhao, L.; Cheng, Y.; Yin, H. Alphuzz: Monte carlo search on seed-mutation tree for coverage-guided fuzzing. In Proceedings of the 38th Annual Computer Security Applications Conference, Austin, TX, USA, 5–9 December 2022; pp. 534–547.
31. Böhme, M.; Pham, V.T.; Roychoudhury, A. Coverage-based greybox fuzzing as markov chain. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security, Vienna, Austria, 24–28 October 2016; pp. 1032–1043.
32. Zhang, K.; Xiao, X.; Zhu, X.; Sun, R.; Xue, M.; Wen, S. Path transitions tell more: Optimizing fuzzing schedules via runtime program states. In Proceedings of the 44th International Conference on Software Engineering, Pittsburgh, PA, USA, 21–29 May 2022; pp. 1658–1668.
33. Lemieux, C.; Sen, K. Fairfuzz: A targeted mutation strategy for increasing greybox fuzz testing coverage. In Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering, Montpellier, France, 3–7 September 2018; pp. 475–485.
34. Li, Y.; Xue, Y.; Chen, H.; Wu, X.; Zhang, C.; Xie, X.; Wang, H.; Liu, Y. Cerebro: Context-aware adaptive fuzzing for effective vulnerability detection. In Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, Tallinn, Estonia, 26–30 August 2019; pp. 533–544.
35. Kim, S.; Kim, Y. K-Scheduler: Dynamic intra-SM multitasking management with execution profiles on GPUs. Clust. Comput. 2022, 25, 597–617. [CrossRef] 36. Huang, H.; Chiu, H.C.; Shi, Q.; Yao, P.; Zhang, C. Balance seed scheduling via monte carlo planning. IEEE Trans. Dependable Secur. Comput. 2023, 21, 1469–1483. [CrossRef] 37. Arcuri, A.; Briand, L. A hitchhiker’s guide to statistical tests for assessing randomized algorithms in software engineering. Softw. Testing Verif. Reliab. 2014, 24, 219–250. [CrossRef]