خب بچهها بیاید درمورد یه موضوع باحال درباره پیدا کردن باگ توی نرمافزارها صحبت کنیم: فازینگ! حالا اصلاً فازینگ چیه؟ فازینگ (Fuzzing) یعنی اینکه یه سری ورودی تصادفی یا به اصطلاح رندوم بدیم به برنامه و بریم ببینیم کجاها خراب میشه یا باگ خفن داره. کلی باگ خیلی جدی با همین روش پیدا میشه. اما یه مشکل بزرگ اینه که خب این کار خیلی اتفاقیه و شانسیه – ممکنه روزها یا حتی هفتهها طول بکشه تا یه باگ پیدا شه!
از گذشته تلاش کردن که این تصادفی بودن رو یه کم کنترل کنن. بهمین خاطر یه چیزی ساختن به اسم Directed Fuzzing یا فازینگ هدایتشده که یعنی فازر سعی میکنه به جای اینکه همینجوری شانسی همهجارو بگرده، مستقیم بره سراغ نقاط مشکوک یا آسیبپذیر. اما بازم حتی این مدل هم خیلی تحت تاثیر همون بدشانسی و تصادفه و وقتکُش!
حالا این مقاله اومده یه ایده خیلی جالب داده: گفتن چرا از Large Language Models یا همون LLMها استفاده نکنیم که دیگه کمتر رندوم بازی دربیارن و بیشتر با فکر جلو برن؟ مثلاً LLMها مثل ChatGPT که میتونن کد بنویسن و تحلیل کنن. یعنی دیگه اون بخش بزرگی از شانسی بودن کار رو با دلیل و هوش جایگزین کنیم!
دو تا چیز مهم توی فازینگ هست: یکی Seeds یعنی نمونههای ورودی اولیه که باهاشون تست شروع میشه و دومی Mutators که اینا مسئول تغییر دادن اون ورودیها هستن تا شاید ورودی جدیدی پیدا کنن که باعث باگ شه. هردوی اینا پر از تصادف و شانسه!
حالا راهکار مقاله اینه: با کمک LLMها، Seedsهایی تولید کنن که مستقیماً به بخشهای آسیبپذیر برنامه برسونن و همینطور Mutatorهایی بسازن که فقط و فقط برای همون نوع خاص باگ مناسبن، یعنی دقیقاً متناسب با باگی که مد نظره.
برای این کار سیستمی ساختن به اسم RandLuzz. این RandLuzz میاد ساختار برنامه (مثلاً زنجیرهی فراخوانی تابعها یا کارایی برنامه) رو آنالیز میکنه، بعد به LLM میگه “بیا یه ورودی (Seed) بساز که دقیقاً برسه به فلان کد آسیبپذیر”. یعنی به جای شانسی، این بار با تحلیل درست.
برای ساختن Mutator مخصوص باگ هم، RandLuzz به مدل زبانی میگه: “بیا این باگو بررسی کن، دلیلش رو بگو و یه راهکار پیشنهادی برای تبدیل ورودی به نمونه آسیبزا بده” – یعنی Mutatorی میسازه که فقط برای همون باگ کار میده.
حالا میرسیم به بخش جذاب نتایجشون! اومدن RandLuzz رو با چهار تا از معروفترین فازرهای هدایتشده مقایسه کردن: AFLGo، Beacon، WindRanger، و SelectFuzz. نتایج نشون داده وقتی این فازرها با Seedsهایی که RandLuzz تولید کرده کار کنن، سرعت پیدا کردن باگها به طور میانگین ۲.۱ تا ۴.۸ برابر سریعتر میشه! یعنی با همون فازرهای قبلی، اما ورودیهای خوب ساخته شده، خیلی سریعتر باگ پیدا میشه.
یه نکتهی باحال دیگه اینکه وقتی روی باگهای تکی این روش رو تست کردن، RandLuzz تا ۲.۷ برابر نسبت به دومین روش سریعتر، سریعتر باگ رو رو کرد! تازه روی ۸ تا از باگهایی که تست کردن، تونستن توی کمتر از ۶۰ ثانیه پیداش کنن. این یعنی واقعاً واسه برنامهنویسها و مسئولای امنیت نرمافزار خبر خوشیه.
در کل میشه گفت این مقاله نشون داد دیگه تقریباً میشه کاری کرد که بجای شانس و تصادف، باگگیری واقعا منطقی و هوشمند باشه – اونم با کمک هوش مصنوعیهای زبانی که الان همهجور کار عجیب ازشون برمیاد. خلاصه اگه تو حوزه امنیت کار میکنین یا براتون مهمه باگها رو سریعتر و بهتر پیدا کنین، حتماً این روش جدید رو جدی بگیرین!
منبع: +