作者:Nilo Redini, Andrea Continellay, Dipanjan Das, Giulio De Pasquale, Noah Spahn, Aravind Machiryz, Antonio Bianchiz, Christopher Kruegel∗, and Giovanni Vigna
单位:UC Santa Barbara, University of Twente, Purdue University
出处:S&P 2021
原文:https://www.computer.org/csdl/proceedings-article/sp/2021/893400b131/1t0x90VR1OU
Contributor: FRH
笔记:https://jbox.sjtu.edu.cn/l/6FkkT7

IoT设备固件上的漏洞可能导致攻击者远程控制设备,进而对用户安全、隐私造成破坏(Mirai botnet)。研究人员提出通过分析固件来自动化挖掘漏洞的技术,但这些方法存在局限:

  • 获取IoT设备的固件存在难度
  • 脱壳、分析固件存在难度
    • 不同格式
    • 不同架构
    • 缺乏文档
    • 无法调试

为此,安全研究人员需要对IoT设备进行黑盒测试。已有的黑盒方案需要知道设备接受的数据格式。IoT设备协议的多样性、缺乏文档等特性导致这些方法缺乏实用性。

然而,大多数IoT设备都有配套的应用(companion apps),利用这些应用可以对设备生成合法的输入。基于这一发现,NDSS '18上提出IoTFuzzer,利用配套App对IoT设备进行fuzz。IoTFuzzer提取了应用UI到网络/数据编码方法的所有路径。而后对路径上第一个函数的参数进行fuzz,从而生成大量针对设备的有效输入。尽管这一方法比向IoT设备通过网络随机发送数据表现出更好的结果,但它选择fuzz的时机太早:早于App进行输入的检验/数据处理。因此,当应用进行输入的过滤(sanitization)时(作者实验中超过51%),IoTFuzzer的效果会受到影响。

这篇文章中,作者沿用了IoTFuzzer的思路,但克服了IoTFuzzer的局限:作者提出DIANE,能够准确地定位(并fuzz)App中最佳代码位置,从而输出valid且under-constrained的输入。DIANE结合了静态、动态分析,主要包含两步:

  • fuzzing triggers identification
    • 获取应用内部向IoT设备发送数据的函数,并对其进行跨函数的反向切片,并最终确定fuzzing triggers
  • fuzzing
    • 利用动态插桩技术,使用不同的参数重复调用fuzzing triggers,生成大量网络数据对IoT设备功能进行fuzz,最终发现漏洞。
      最终作者在11个流行IoT设备上发现11个bug,其中9个是0-day漏洞。工作开源在 https://github.com/ucsb-seclab/diane.