漏洞挖掘的艺术-动态漏洞挖掘

本文介绍动态漏洞挖掘技术,包括模糊测试、符号执行和污点分析等,并探讨它们的应用与挑战。文章还概述了一种新颖的fuzzing方法,旨在提高异常处理代码的测试效率。

0x00
本文是本系列的第三篇。本文将会介绍动态漏洞挖掘技术,本文的组织结构如下,首先介绍相关典型技术,如模糊测试、符号执行等并给出典型工具介绍,然后介绍相关技术存在的问题,如路径爆炸等,之后会用近期的顶会论文举例来了解的最新的学术界研究动态。

0x01
1.1模糊测试
模糊测试是一种基于缺陷注入的自动软件测试技术,它使用大量半有效的数据作为应用程序的输入,以程序是否出现异常作为标志,来发现应用程序中可能存在的安全漏洞。所谓半有效的数据是指对应用程序来说,测试用例的必要标识部分和大部分数据是有效的,这样待测程序就会认为这是一个有效的数据,但同时该数据的其他部分是无效的.这样,应用程序就有可能发生错误,这种错误可能导致应用程序的崩溃或者触发相应的安全漏洞
模糊测试是一个自动或半自动的过程,这个过程包括反复操纵目标软件并为其提供处理数据.模糊测试中的关键是模糊测试用例的生成方法,用于生成模糊数据的工具可称为模糊器.模糊器可分为两大类:基于变异的模糊器和基于生成的模糊器.前者对已有数据样本应用变异技术创建新的测试用例;后者通过对目标协议或文件格式建模的方法从头开始产生测试用例。
一般Fuzzing工具中,都会综合使用这两种生成方式。基于变异的算法核心要求是学习已有的数据模型,基于已有数据及对数据的分析,再生成随机数据做为测试用例
近年来最火的Fuzzing工具莫过于AFL。
在这里插入图片描述

AFL(American Fuzzy Lop)是由安全研究员Michał Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。
①从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage); ②选择一些输入文件,作为初始测试集加入输入队列(queue); ③将队列中的文件按一定的策略进行“突变”; ④如果经过变异文件更新了覆盖范围,则将其保留添加到队列中; ⑤上述过程会一直循环进行,期间触发了crash的文件会被记录下来。

1.2符号执行
符号执行是一种用符号值代替数字值执行程序的技术,符号是表示一个取值集合的记号。使用符号执行分析程序时,对于某个表示程序输入的变量,通常使用一个符号表示它的取值,这个符号可以表示程序在此处接收的所有可能的输入。此外,在符号执行的分析过程中那些不易或者无法确定取值的变量也常常使用符号表示的方式进行分析。
符号执行的分析过程大致如下:首先将程序中的一些需要关注但是又不能直接确定其取值的变量用符号表示其取值,然后通过逐步分析程序可能的执行流程,将程序中变量的取值表示为符号和常量的计算表达式。程序的正常执行和符号执行的主要去呗是:正常执行时程序中的变量可以看做被赋予了具体的值,而符号执行时,变量的值既可以是具体的值也可以是符号和常量的运算表达式。
以下图的符号执行源代码为例,函数中的参数x,y分别用符号a,b表示
在这里插入图片描述

基于上图的代码可以得到下图所示的程序流程图

在这里插入图片描述

可以看到共有三条执行路径,每条路径都对应着一个路径约束(path constrain,PC)。其中返回true的路径有一条,带入符号后,对应的路径约束为a>60&(b2)==128;返回false的路径有两条,对应的路径约束为a<=60|(a>60&(b2)!=128)
这个例子表明,使用符号执行技术分析程序,对于分析过程中遇到的程序中带有条件的控制转移语句(条件分支语句、循环语句等),可以利用变量的符号表达式将控制转移语句中的条件转化为对符号取值的约束,通过分析约束是否可以满足,判断程序的哪条路径是可行的。这一部分是符号执行分析的关键部分。由此将判断路径条件是否可满足的问题转化为判断符号取值的约束是否可满足的问题。而对于约束是否可满足的判断,通常使用约束求解的方法,该过程由约束求解器完成(约束求解器是对特定形式的约束表示进行求解的工具)。在符号执行的分析过程中,常使用可满足性模理论(satisfiabilti modulo therries,SMT)求解器对约束进行求解,为此需要将符号取值约束的求解问题转为SMT问题,即一阶逻辑的可满足性判断问题。
Angr应该是目前最流行的符号执行工具。
它一个二进制代码分析工具,能够自动化完成二进制文件的分析,并找出漏洞。它基于python的二进制漏洞分析框架,将以前多种分析技术集成进来,它能够进行动态的符号执行分析(如,KLEE和Mayhem),也能够进行多种静态分析。
Angr主要架构如下

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值