چكيده فارسي :
با گسترش استفاده از برنامه هاي نرم افزاري، تحليل و آزمون برنامه ها براي اطمينان از عدم وجود آسيب پذيري در برنامه ها امري ضروري است. در ابتدا آزمون برنامه ها با استفاده از ورودي هاي صريح انجام مي شد. اين نوع تحليل علاوه بر هزينه بالا، توانايي پوشش كامل برنامه ها را ندارد. لذا تحليل اتوماتيك برنامه ها مي تواند در بهينه سازي توليد برنامه ها نقش داشته باشد. اجراي نمادين و نيمه نمادين برنامه ها از روش هاي اتوماتيكي هستند كه به طور گسترده مورد استفاده قرار مي گيرند. اجراي نمادين با تبديل متغير هاي آزاد برنامه به نماد و نشان دادن هر يك مسيرهاي برنامه به صورت يك شرط مسير و در نهايت حل كردن يكي از شرط هاي مسير كه منتخب اكتشاف جست و جواست، به ورودي اي كه موجب اجرا شدن آن مسير مي شود دست مي يابد. اجراگر نيمه نمادين نيز تركيبي از اجراگر نمادين و صريح است كه با ثابت در نظر گرفتن تعدادي از متغير هاي برنامه، تعداد شروط مسيرها را كاهش ميدهد و به اين صورت باعث افزايش سرعت تحليل مي شود. اين روش ها در عمل با چالش هاي زيادي روبه رو هستند و امكان پوشش كل برنامه با آن ها امكان ناپذير است. يكي از اين چالش ها انتخاب اكتشاف جست و جوي مناسب است، زيرا انتخاب اكتشاف جست و جويي كه مسير هاي باارزش را براي كاوش پيشنهاد مي دهد نقش مهمي در كشف آسيب پذيري هاي برنامه دارد. تاكنون اكتشاف هاي جست و جوي متنوعي همچون جست و جوي اول عمق ارائه شده اند ولي با توجه به ماهيت متفاوت برنامه ها استفاده از يك اكتشاف جست و جو ثابت براي تمام برنامه ها مناسب نيست و در اين راستا اكتشاف جست و جوي پارامتر شده معرفي شده كه براي هر برنامه مقدار دهي به پارامتر هاي آن متفاوت و مناسب آن برنامه است. روش هايي كه از اين اكتشاف جست و جوي پارامترشدهاستفاده كرده اند با اجراي نيمه نمادين بر روي برنامه ها و تحليل اجراي انجام شده به صورت تكراري مقادير مناسب پارامتر ها براي هر برنامه را به دست مي آورند. با وجود بهبود نتايج هنگام استفاده از اين نوع اكتشاف هاي جست و جوي پارامترشده نسبت به اكتشاف هاي جست و جوي پارامترشده ثابت، متكي بودن اين روش ها بر تكرار اجراي نيمه نمادين سربار زماني به اجراي نيمه نمادين اضافه مي كند. لذا در اين پژوهش براي كاهش زمان انتخاب اكتشاف جست و جوي پارامترشده به يادگيري دو مدل از طريق يادگيري ماشين براي پيش بيني مجموعه اي از اكتشاف هاي جست و جوي پارامترشده از طريق ويژگي هاي ايستاي برنامه پرداخيتم و توانستيم در مدت زمان بسياركوتاه تري نسبت به روش هاي ديگر، اكتشاف هاي جست و جوي پارامترشده اي را ايجاد كنيم كه توانايي پوشش آن ها نزديك به روش هاي ديگر باشد.
چكيده انگليسي :
With the expansion of the use of software programs, it is necessary to analyze the programs to ensure that there are no vulnerabilities in the programs. Traditionally, the programs were tested using explicit inputs. In addition to the high cost, this type of analysis does not have the ability to fully cover the programs. Therefore, the automatic analysis of programs can play a role in optimizing the development of programs. Symbolic execution and concolic execution are automatic methods that are widely used. Symbolic execution by converting the program's free variables into symbols and each path of the program into a path condition, and finally solving one of the path conditions that is selected by the search heuristic, the input that causes the execution of that path can be generated. The concolic execution is also a combination of symbolic and concrete execution, which reduces the number of path conditions by keeping a number of program variables constant, thus increasing the speed of analysis. These methods face many challenges in practice and it is impossible to cover the entire program by them. One of these challenges is choosing the right search heuristic, because choosing a search heuristic that suggests valuable paths to explore, plays an important role in discovering program vulnerabilities. So far, various search heuristics such as depth-first search have been presented, but due to the different nature of programs, using a fixed search heuristic is not suitable for all programs, in this regard, parameterized search heuristic has been introduced, for each program, the parameter values are different and suitable for that program. The methods that have used this search heuristic obtain the appropriate values of the parameters for each program by performing concolic execution on the programs and analyzing the execution repeatedly. Despite the improved results when using this type of search heuristics over static search heuristics, the reliance of these methods on repeating concolic execution adds time overhead to concolic execution. Therefore, in this research, in order to reduce the selection time of parameterized search heuristics, we learned two models through machine learning to predict a set of parameterized search explorations by the static features of the program, and we were able to create parameterized search heuristics in a much shorter period of time than other methods, whose ability to coverage the program is close to other methods.