随着互联网的普及,各类App如雨后春笋般产生。受限于代码质量,App中或多或少的会存在各类漏洞。据统计,CVE(http://cve.mitre.org/)及CNNVD(http://www.cnnvd.org.cn/)能够涵盖的漏洞多达100000个,严重威胁着网络及用户安全。当前,二进制漏洞挖掘主要依靠专业人员的人工审计,从而能够提供准确的漏洞点、漏洞利用及修补方案。然而,人工审计与挖掘存在以下缺陷。第一,开发团队往往缺少专业的安全人员,不能及时发现漏洞;第二,面对数量庞大的漏洞,安全人员疲于应对。而自动化漏洞挖掘能够为人工审计提供良好的补充,也更为经济。那么要构建这样一个自动化漏洞挖掘的系统需要哪些技术呢?下面,我们介绍一些具有代表性的相关技术。
一、自动化漏洞挖掘技术
当我们拿到一个App以后,首要的工作是找到该App中的漏洞点。从被检测程序是否被运行的角度可知,自动化漏洞挖掘技术可分为静态分析、动态分析及混合分析。
1.1静态分析
静态分析,指在不执行程序的条件下对程序进行分析。基于图建模的静态分析是指将程序属性建模为图形,如控制流图,数据流图和程序依赖图等。例如Vine,它是BitBlaze的静态分析组件,它提供了一组用于漏洞挖掘的核心实用程序,利用了控制流图,数据流图和最弱前置条件计算等。基于数据建模的静态分析可通过对内存值等数据进行建模,通过数据的流动、差异性等发现漏洞。例如,Josselin Feist等人提出了一个名为GUEB的静态工具,它使用价值集分析(VSA)来推断赋值中的每个变量,并基于抽象内存模型释放指令,以搜索二进制程序中的释放后使用类型的漏洞。图1所示为典型的静态分析工具IDA。