基于模糊测试的漏洞挖掘及攻防技术

常见漏洞挖掘技术

  • 手工测试

  • 补丁比对

    • 定义:一种通过对比补丁之间的差异来挖掘漏洞的技术。
    • 优点:发现速度快
    • 缺点:已知漏洞
    • 常见工具:PatchDiff2、bindiff
  • 程序分析

    • 静态

      • 定义:是指在不运行计算机程序的条件下,通过词法分析、语法分析、语义分析、控制流分析、污点分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性等指标的一种代码分析技术。
      • 优点:覆盖率100%,自动化程度高
      • 缺点:漏报和误报(RICE,程序分析问题不可判定)
    • 动态

      • 定义:在运行计算机程序的条件下,验 证代码是否满足规范性、安全性等指标的一种代码分析技术。一般通过插桩技术分析程序的异常行为。
      • 插桩技术是指在保证被测程序逻辑完整性的基础上在程序的关键位置插入一些“桩”,即加入一些测试代码,然后执行插桩后的程序,通过“桩”的执行获取程序的控制流和数据流信息,进而分析程序的异常行为。
      • 优点:自动化程度高、覆盖率较高
      • 缺点:漏报和误报(RICE,程序分析问题不可判定)
      • 工具:Android:Xposed
  • 二进制审核

    • 定义:源代码不可得,通过逆向获取二进制代码,在二进制代码层次上进行安全评估
    • 优点:缺点: 同静态审核
    • 逆向导致信息丢失,理解困难,甚至引入逻辑错误。
    • 二进制及编辑工具:IDA Pro、Ollydbg、UltraEdit、Hex Workshop以及WinHex
  • 模糊测试

    • 定义:通过向被测目标输入大量的畸形数据并监测其异常来发现漏洞
    • 关键:测试用例构造,自动化。
    • 优点:无须源码、误报低、自动化程度高
    • 缺点:覆盖率低
    • 工具:Peach、Sulley、Autodafe、SPIKE等

漏洞挖掘示例

  • 路由器协议漏洞挖掘
  • NFC漏洞挖掘
    • NFC(Near Field Communication)技术是一种近距离的双向高频无线通信技术,能够在移动终端、智能标签(Tag)等设备间进行非接触式数据交换。
    • NFC技术具有通信距离短、一次只和一台设备连接(1V1)、硬件安全模块加密等特点,具有较好的保密性和安全性
  • 微信XSS漏洞

Android常用工具

  • 静态分析工具

    • JEB 收费
    • Androwarn—静态分析APK的Dalvik字节码(smali),并把潜在的恶意行为提示给用户。
    • Androguard是一个静态工具集。功能:反汇编/反编译/静态分析apk/相似度对比/测试混淆程度/恶意代码检测/
    • DroidBox—Android应用程序动态分析工具
  • 动态分析工具

    • Mercury—是一个开源的Android APP应用安全评估框架,它最赞的功能是可以动态的与android设备中的应用进行IPC(组件通信)[包括Activity,Broadcast receivers,Content providers与Services]交互。
    • Drozer是一款针对Android系统的安全测试框架。
    • TaintDroid —是一动态实时的隐私监控工具。它是利用动态污点分析技术检测隐私数据的。
  • 逆向分析工具

    • Smali/Baksmali:DEX文件汇编和反汇编工具。
    • Apktool:是GOOGLE提供的APK编译工具。可用于修改APK文件后,重新打包
    • Dex2Jar:把apk文件转换成.jar包,配合JD-GUI工具查看和分析java源代码。
    • JD、Dedexer、Redexer…

模糊测试阶段

  • 确定测试目标
  • 确定输入向量:是否能找到所有的输入向量是模糊测试能否成功的关键。
  • 生成模糊测试数据
  • 执行模糊测试数据
  • 监视异常:一定要对异常和错误有监视,否则不知道是什么数据触发faults,则这次模糊测试就没有意义
  • 判定发现的漏洞是否可能被利用:这种过程是典型的手工过程,需要操作者具有特定的安全知识。

模糊测试的局限性

  • 访问控制漏洞:模糊测试无法识别应用程序本身的权限问题
  • 糟糕的设计逻辑:模糊测试无法识别发现的问题是否是由于安全问题造成的
  • 后门:模糊测试无法识别是否是后门功能
    破坏:SIGSEGV信号会导致模糊测试无法识别是否触发内存破坏
  • 多阶段安全漏洞:模糊测试对识别单个漏洞很有用,但对小的漏洞链构成的漏洞则作用不大

黑盒测试与模糊测试

黑盒测试的主要作用:

黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误。

  • 1.功能不正确或遗漏;
  • 2.界面错误;
  • 3.输入和输出错误;
  • 4.数据库访问错误;
  • 5.性能错误;
  • 6.初始化和终止错误等。
模糊测试

模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。
主要是通过输入大量数据,发现程序中存在的问题。可以通过使程序某些内容溢出出现异常,或者输入的是程序规定的范围内的数据结果出现异常,从而找出程序的bug。

模糊测试技术的发展方向

模糊测试技术经过近20余年的发展,已逐步成为一种流行的被广泛应用的漏洞挖掘技术.但是,模糊测试技术仍然存在许多的局限性.例如,通过模糊测试技术挖掘出的漏洞大多仍是传统的溢出类错误,对于后门、鉴权绕过等逻辑上的错误依然无能为力.同时,模糊测试技术也不能准确的发现多条件触发的漏洞. 更重要的是, 模糊测试技术不能保证畸形输入数据能够覆盖到所有的分支代码, 这就使得即使通过模糊测试检验的软件仍可能存在不被发现的漏洞.如何克服缺陷、提高漏洞挖掘的效率是模糊测试技术未来的研究热点.模糊测试技术未来的研究热点可能包括以下几个方面.

  • 5.1 提高测试用例的通过率
    以网络协议的模糊测试为例,即使我们通过模糊测试技术生成了大量的畸形测试数据,但这些测试数据中的绝大部分会被网络协议的校验机制所拒绝,这样的测试效率是极低的. 所以我们并不能用大量的纯随机数据来测试网络协议,而是应该构建出通过率更高的测试用例, 例如, 可以将模糊测试配置成使用已知有效数据、故意错误数据和随机数据的组合,这样既可以提高测试用例的通过率也不会使测试用例过多的受测试人员的主观影响. 再如,也可以在随机测试数据后面增添校验位, 或者在了解待测网络协议的数据包格式后构造出符合规定的测试用例,这些方法可能大幅度提高测试用例的通过率.

  • 5.2 协议格式自动化分析
    正如 5.1 小节所述,对文件、协议格式的深刻理解可以帮助测试人员构建出通过率很高的测试用例,但这繁琐复杂的测前准备工作也给测试工具开发人员带来很大的负担, 可以设想,即使针对一个简单的非公开协议也需要花费编程人员大量的时间研究目标协议的工作规范, 更何况,待测试的网络协议规范很可能是未经公开的. 这就指明了模糊测试技术未来的另一个发展方向, 即实现文件、协议格式的自动化分析.

  • 5.3 引进并行和分布式技术
    模糊测试技术最大的一个特点是可以生成数量巨大的测试用例, 从而使对软件进行全方位测试成为可能. 但巨大的测试用例数量也带来了执行效率低的缺点. 因此, 引进并行和分布式技术, 有效的减少测试时间. 这或许会为未来构造出更大量的测试用例提供良好基础.

  • 5.4 基于知识库构造测试用例
    如何提高测试数据的针对性也是模糊测试技术未来发展必须解决的一个问题可以通过为模糊测试工具连接一个数据库提高测试用例的针对性.假设这个数据库中存储着大量已知的攻击模式,在构造测试用例时,通过从该数据库调用能引起已知攻击的测试数据并在后面加上随机数据的方法来构造针对性强的测试用例. 也可以在该数据库中存储一些有用的资源,例如一些常见系统、数据库和Web 应用的用户名和密码字典, 常用的脚本后门程序,服务器响应信息等,这些资源能有助于测试人员构造出能顺利通过系统检测的测试数据包, 也方便测试人员研究和发现应用程序的安全漏洞.

  • 5.5 提高代码覆盖率
    在构造测试用例过程中无法估算代码覆盖率是模糊测试技术的重大缺陷之一.代码覆盖率是软件测试中的一种度量, 描述程式中源代码被测试的比例和程度. 代码覆盖率常常被拿来作为衡量测试用例好坏的指标, 所以提高代码覆盖率是提高模糊测试效率的一种有效方式. 同时, 如果在构建测试用例时不知道这些测试用例的代码覆盖率, 则很难判断测试的完成情况, 更不清楚是否发现了软件中的所有漏洞.可以通过引入遗传算法达到提高代码覆盖率的目的,也可以在模糊测试工具中集成代码覆盖率计算工具,实现实时监测当前代码覆盖率的功能.

  • 5.6 更多平台的支持
    目前, 几乎所有的模糊测试工具都只能运行在桌面操作系统上, 而对于支持智能手机等嵌入式操作系统的模糊测试工具还需要进一步的研究.另外,大多的模糊测试工具还不具有跨平台的能力,大多只能测试单一操作系统的软件漏洞.因此,研究具有跨平台,支持多种软硬件平台的模糊测试工具非常有价值.

  • 5.7 模糊测试的智能化
    不能发现鉴权绕过和后门等逻辑上的错误一直是模糊测试技术无法规避的一个重大缺点.可以研究在生成测试用例的过程中引入知识或一些人工智能算法,使得模糊测试工具具有学习的能力,从而在一定程度上具备发现逻辑漏洞的能力.模糊测试技术的另一个缺点是不能对漏洞进行准确定位,即通过模糊测试技术只能判断出待测软件中存在何种漏洞并不能准确的定位到程序源代码中是哪一行引发了这个漏洞,可以研究通过结合动态二进制插装或提高监视器的监测精度来克服这个问题.

  • 此外, 目前市场上的大多数模糊测试工具都需要借助其他工具来进行监控或测试评估,所以研究功能更为完善的测试工具也是模糊测试领域的一个重要方向. 这类测试工具应能自动完成文件或协议格式的解析并生成大量符合要求的测试用例,对用例执行情况进行实时监控, 方便地获取用例执行信息,并能在发现漏洞时进行故障定位,完成测试结果的输出.同时还要有高效的算法来协调各个功能模块的执行,提升工具的运行效率.

总结

  • 在这个专题中对模糊测试技术的研究成果进行了回顾和总结, 介绍了模糊测试技术的基本概念、理论基础以及模糊测试技术的发展历程,并展示了几个模糊测试实际攻击的实践例子。也介绍讲解了一些常见的Android攻击方法与攻击工具。
  • 总体收获很多,了解到了模糊测试这个新名词,了解了模糊测试的整体攻击流程,查看一些相关资料后知道模糊测试技术具有传统漏洞挖掘技术无法比拟的优势,被广泛的应用, 是近年来软件测试领域的
    重要研究方向.总之,在未来的若干年中模糊测试技术仍将会是软件测试领域的一个研究热点,甚至可能延伸到硬件测试领域,该领域将会有大量的技术问题值得研究工作者开展进行一步的研究和探讨.

参考

模糊测试:强制发掘安全漏洞的利器

模糊测试技术研究

原文地址:https://www.cnblogs.com/lidong20179210/p/9042999.html