Fuzzing(模糊测试)的前世今生(上)

Fuzzing(模糊测试)的前世今生(上)_第1张图片 

 

前我们在《Fuzzing(模糊测试)技术,你真的了解吗?》一文中提及了模糊测试概念的兴起,描述比较简单。其实,很多人对于模糊测试的概念一直是比较“模糊”的,并不是特别了解它的前世今生。而且,很多人会把它跟漏洞扫描、渗透测试等技术混为一谈,并不清楚它们的区别与边界。这对炙手可热的模糊测试而言,甚是“冤屈”。

 目前,市面上关于模糊测试的知识点大多是碎片化的,并不系统。小云希望通过上、下两篇内容为大家简述一下模糊测试的前世今生,帮助大家更好地了解它。

模糊测试的由来

1983年,Steve Capps开发了经典的Mac OS应用程序“The Monkey”,这个软件被史蒂夫用来创建随机的鼠标点击和键盘输入,以测试MacWrite和MacPaint应用程序,它就像一只看不见的猴子在不规律地使用计算机,因此得名“猴子测试”。在软件测试中,猴子测试是一种技术,用户通过提供随机输入和检查行为来测试应用程序或系统,或者查看应用程序或系统是否会崩溃。“猴子测试”通常被实现为随机的、自动化的单元测试,也是模糊测试技术的前身。

Fuzzing(模糊测试)的前世今生(上)_第2张图片

图1 猴子测试

直至1988年,模糊测试的概念被威斯康星大学的Barton Miller正式提出。最开始,Barton Miller的实验内容是开发一个基本的命令列模糊器以测试Unix程式。这个模糊器可以用随机数据来「轰炸」这些测试程式直至其崩溃,从而对应用程序进行安全检测。在当时,这一简单的测试方法便已发现运行于 UNIX 系统上的 25%以上的程序崩溃,展现出了无与伦比的测试优越性。也就是从那时起,模糊测试慢慢进入大家的视野。

如今,Fuzzing已发展成为信息安全的一个重要组成部分,在产学研领域都得到了广泛关注。截止目前,国内外已经有众多安全厂商发布了软件和硬件的模糊测试产品。例如,提供白盒产品的代表如SAGE(微软),DeepState,Mayhem等;黑盒代表如PeachFuzzer,无垠协议模糊测试系统(云起无垠)等;灰盒代表如AFL(很多Fuzzing工具的基石),LibFuzzer,Honggfuzz,OSS-Fuzz & ClusterFuzz (Google),Angora,无垠代码模糊测试系统(云起无垠)等。

模糊测试的含义

在讲模糊测试概念之前,我们先简单概述一下大家经常混淆概念的漏洞扫描和渗透测试。它们定义如下:

  • 漏洞扫描是指基于已知漏洞数据库(如已知缺陷、编码错误、数据包构造异常等),通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,发现可利用漏洞的一种安全检测行为。通常情况下,漏洞扫描包括网络漏描、主机漏扫、数据库漏扫等不同种类。

  • 渗透测试是一项在计算机系统上进行的授权模拟攻击,旨在对其安全性进行评估,是为了证明网络防御按照预期计划正常运行而提供的一种机制。换句话说,渗透测试是指渗透人员通过模拟黑客的攻击方法,在不同的位置(如内网、外网等位置)利用各种手段对某个特定网络进行测试,从而发现和挖掘系统中存在的漏洞,然后输出渗透测试报告,提交给网络所有者。网络所有者根据渗透人员提供的渗透测试报告,可以清晰知晓系统中存在的安全隐患和问题。

与之不同的是,模糊测试是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试,它将无效、格式错误或随机的数据注入系统,同时监控输入可能导致的应用程序崩溃或异常情况,从而对应用系统的安全性和健壮性进行测试。

Fuzzing(模糊测试)的前世今生(上)_第3张图片

图2 模糊测试流程

在某些具体的维度上,它们其实有诸多不同之处,如下图所示:

Fuzzing(模糊测试)的前世今生(上)_第4张图片

图3 不同测试技术对比

对比之下,我们可以发现:

1. 渗透测试的特点:

1)渗透测试是由渗透人员通过模拟黑客攻击方法进行的渗透攻击,这种基于人工的方式比较考验渗透人员的能力,它不像漏洞扫描或者模糊测试,借助于安全工具进行安全检测,很难大规模复制;而且,检测结果因渗透人员能力不同,结果也有区分;

2)基于人工的渗透测试需要人工介入较多,非常耗时,且成本昂贵;但是分析会更深入,更彻底;

3)可以有效防止误报;

4)人是安全的基础,渗透测试的漏洞利用中,会存在由于人的因素窃取数据等安全威胁问题;

2. 漏洞扫描的特点:

1)基于已知漏洞库进行安全检测,缺少未知威胁如0day漏洞的检测能力;

2)误报率较高,需要人工排查,使用成本较高;

3)漏洞扫描仅用于安全性测试,对漏洞是否被利用无法感知;

3. 模糊测试特点:

1)依托工具进行安全检测,自动化程度高,且误报率低,使用成本低

2)基于无规则海量数据输入,可以检测0day漏洞等未知威胁

3)试用阶段覆盖软件研发全生命周期,既可以在早期的研发测试阶段使用,也可以应用于部署运维阶段;

4)对被测软件或者程序支持安全性和健壮性检测;

模糊测试的发展历程

前面我们讲了模糊测试的由来,明确了它的起始。接下来我们为大家简析一下它的发展进程。

Fuzzing(模糊测试)的前世今生(上)_第5张图片

图4 模糊测试发展历程

  • 1988年模糊测试概念被提及以后,一直持续到2004年,这期间主要是以黑盒模糊测试为主,解决了应用程序完全不可见的情况下,对内部安全威胁进行安全检测的问题。比如物联网设备固件中的代码或者通信协议规范未公开或者网络协议中的协议规范或实现代码不可用时,黑盒模糊测试技术便可以针对此类场景进行安全检测。

  • 2001年,PROTOS将模糊测试思想应用到网络协议分析,成为可用的实际工具。在2002年后期获得广泛公开,当时该项目发布了一个令人惊讶的、关于在多种不同的SNMPv1实现中的漏洞列表。PROTOS的开发者对SNMPv1协议进行了解析,并且列举了针对请求和捕获包的所有可能的变换。然后,他们开发了一个实际的事务集合并引入了异常元素的概念,他们将该术语定义为“在实现软件时可能不会被认为是一个正确的输入”。在某些情况下,这些异常元素违反了协议标准,而在其他情形中,他们与协议规范是一致的但是却包含可以破环解析器的内容。PROTOS SNMPv1测试套件的执行结果中保存了非常重要的信息它们识别出了大量的漏洞(Sutton M et al,2009).

  • 2004年,Peach对文件进行模糊测试,采用自定义数据模型的方式生成输入。此外,Peach可以由用户手工定义用于生成输入数据的数据模型,是基于语法生成输入思想的早期应用。其广泛用于发现软件中的漏洞和缺陷,它有两种主要模式,基于生长的模糊测试和基于变异的模糊测试。Peach共有三个版本,目前的Peach3是一个基于.NET框架的跨平台fuzzing工具,是当前较为流行的模糊测试工具之一。

  • 2007年,受益于动态符号执行和测试数据生成技术的进步,诞生了Sage模糊测试方法,该方法是使用符号执行的白盒模糊测试方法。通过使用符号执行技术,在程序运行过程中收集条件语句对输入的约束,通过用约束求解器进行求解产生新的输入。2008年Godefroid等人利用模糊工具SAGE发现了大型windows应用系统中的二十多个未知漏洞,他们展示了一个基于语法的白盒与黑盒结合的模糊测试方法,该方法可以利用符号执行直接产生基于语法的约束,并且输入能够到达很深的深度,也避免了死路。

  • 2009年,出现了Vganesh。通过使用污点分析技术替代了开销巨大的符号执行技术。污点分析技术可以将程序攻击点中使用到的变量值,同输入数据特定部分建立联系,进而指导模糊测试的变异策略,该思想被灰盒模糊测试借鉴使用。

  • 2013年,AFL诞生。AFL是一款以覆盖率为导向的模糊测试工具,通过插装的方法,采用输入数据对应的边覆盖率,作为模糊测试种子选取的衡量指标。AFL通过使用进化算法以及精心构造的变异策略,获得了很好的模糊测试结果,发现了大量漏洞,备受关注。

  • 2013-2020年,虽然AFL有一定的效果,但是其设计上仍有缺陷,比如其能量分配的策略以及种子选择的策略,都会影响AFL的检测效率,而且,AFL更偏向于黑盒一些,对程序内部分析有限,这也限制了其检测深层漏洞的能力。所以通过对程序内部情况进一步分析,获得更好的检测效果是AFL改进的一个方向,此时大量改进工作便开始了。

自2004年以来,模糊测试根据对应用程序分析的程度,划分了黑盒、白盒和灰盒模糊测试,三种模糊测试技术延续至今。而且,该技术成为漏洞检测的重要技术,正在重新定义开发安全新范式,改写开发安全的新历史。云起无垠作为新一代智能模糊测试技术领跑者,基于黑盒和灰盒各自研发了自己的模糊测试系统,针对协议、代码等不同应用程序进行安全及健壮性安全检测,帮助客户解决包含未知威胁的各种漏洞。

模糊测试的技术原理及算法、实践应用等将在下一篇为大家解析,敬请期待!

你可能感兴趣的:(网络安全)