| With the rapid development of the Internet and digital technology,software has become a crucial component in various important industry scenarios,playing an essential role in people’s daily lives and economic development.Therefore,software security issues have become increasingly important.In the software development process,using static analysis techniques for vulnerability detection can help security practitioners to discover potential security issues early on,thereby preventing security vulnerabilities from occurring.However,currently,there is no widely accepted static analysis vulnerability detection tool for the Go programing language.Existing tools suffer from problems such as poor effectiveness,long analysis time,and difficulty in dealing with complex code situations.This thesis proposes a static analysis vulnerability detection method for Go language based on abstract syntax trees and static single assignment.The main work of this thesis includes:(1)Used the intermediate representation of Go based on static single assignment form,and based on this design and implementation of the call graph data structure and call graph construction algorithm for subsequent taint analysis.(2)Proposed more complete taint propagation rules for Go based on static single assignment form.This thesis deals with different types of static single assignment nodes to solve the vulnerability detection leakage problem generated by indirect function calls and function calls themselves,thus increasing the accuracy of vulnerability detection.(3)Proposed a taint analysis algorithm with caching mechanism and recursive call characteristics.This algorithm fully utilizes the characteristics of static single assignment form and call graph information to achieve a balance between performance and accuracy,ensuring high accuracy while not causing excessively long running time.Based on this,the Go DV prototype tool for Go language static analysis vulnerability detection was implemented.To validate the effectiveness of Go DV,this thesis selected six benchmark test programs for experimentation and used true positive rate,false positive rate,and Jaccard index evaluation tools to evaluate the performance in detecting four types of vulnerabilities.The experimental results show that compared with the open-source tools Gosec and Safesql,Go DV’s vulnerability detection effectiveness was improved by 64.92% and 79.31%,respectively.In addition,compared with Code QL,Go DV’s Jaccard index only decreased by about 3% in the case of a time cost that is only about one-twenty-eighth of Code QL’s.These experimental results demonstrate that the proposed Go language vulnerability detection method and prototype tool in this thesis can effectively detect target vulnerabilities. |