Diane: Identifying Fuzzing Triggers in Apps to Generate Under-constrained Inputs for IoT Devices

IoT fuzz难点:难以提取和模拟自定义固件,只能进行黑盒测试。但是这种方法会产生不合法输入,导致很容易被丢弃,无法渗透进代码。另一种方法是使用相关APP生成构造好的fuzz输入,但是已有的方案被APP端输入限制,限制了发现漏洞的能力。

本文提出了一种方法。作者观察到APP种已有的函数能够用于生成优化fuzz输入。这些函数称为fuzz触发器,在数据传输函数之前和数据验证函数之后执行。可以生成不被APP端检测函数约束的输入。同时不会被IoT设备丢弃。本文设计了DIANE,结合了静态和动态分析寻找fuzz触发器的工具。使用DIANE分析11个流行的IoT设备,找到了11个bug,9个是0day。并且如果不使用fuzz触发器,对于很多设备来说很难生成bug触发输入。

Methodology

包含APP执行的将用户输入数据转化为网络输入的函数序列,直觉上,序列中第一个函数将用户输入转化为内部数据结构,生成APP端验证约束的数据。最后一个函数编码用户输入,序列化输入到网络中。本文方法的创新性是通过调用APP中特定函数来fuzz IoT设备,调用后,fuzz触发器生成不被APP端验证并具有良好数据结构的输入。

该方法包含静态分析和动态分析

  • fuzz触发器识别:获取APP中发送数据到IoT设备的函数,然后对于每一个函数,建立一个过程间后向切片,动态分析最终识别fuzz触发器。再使用动态插桩使用不同参数重复调用这些函数,就生成了网络数据,可以fuzz目标设备,触发漏洞
  • fuzz

fuzz触发器识别

  1. 识别候选sendMessage:静态分析APP,找到所有的边界函数,即调用native函数的方法或调用Android框架网络IO的函数
  2. sendMessage验证:动态执行APP,hook所有候选函数,观测网络活动,每次函数执行,都收集网络活动和函数执行的时间差,利用kmeans聚类,选择最小的间隔时间的
  3. 数据转换函数识别:首先静态识别sendMessage可能的值,然后定位APP设置的值。

Result

找到了11个bug,其中9个0day

贡献

  • 提出了一种识别fuzz触发器的方法,允许有效fuzz IoT设备
  • 实现了DIANE
  • 评估了11个流行的IoT设备,找到了11个漏洞,9个0day
  • 对于大多数IoT设备来说,利用fuzz触发器生成bug触发输入是很重要的