当前位置: 首页 > news >正文

论文分享 | LABRADOR:响应引导的针对物联网设备的黑盒模糊测试

由于固件仿真以及重托管的技术挑战,部分企业级 IoT 设备只能在黑盒环境下进行模糊测试。分享一篇发表于 2024 年 S&P 会议的论文 Labrador,它利用响应来引导请求变异,实现了针对 IoT 设备的高效黑盒模糊测试。

猴先生说:这篇论文提供了一个很好的思路,通过响应来推断程序覆盖情况,引导工具在黑盒的环境下执行灰盒的测试。实践性很强,通用性不好说,需要不少人为的干预,利用响应去推断未必总能成功。但不管怎么说,不失为一种途径,通过经验和数据的积累,说不定能成为一个很厉害的工具。

1 背景介绍

在“万物互联”时代,数十亿台物联网(Internet of Things, IoT)设备通过网络无缝连接人类、机器与物体,为日常生活带来便利与价值。IoT 设备的指数级增长也带来了日益严峻的安全威胁。据报告,近年来针对 IoT 设备的漏洞与攻击数量显著上升。为缓解此类威胁,提前发现并修复漏洞至关重要。

目前,IoT 固件漏洞发现技术主要分为两类:

  • 第一类是静态分析,如 SaTC、KARONTE 等。这类方法通常聚焦于污点型漏洞,首先通过静态分析识别敏感代码(即漏洞触发点,sink),然后利用污点分析或符号执行推断可能触发这些 sink 的可疑路径。然而,这类方法往往存在高误报率和低效率的问题。

  • 第二类是模糊测试(fuzzing)。由于 IoT 设备运行通常依赖外设或特定配置,许多模糊测试方案(如 Firm-AFL、Firmadyne)专注于固件的仿真或重托管,以提高模糊测试的效率、可扩展性及漏洞检测能力。然而,对于一些 IoT 设备,尤其是企业级设备,仿真或重托管其固件极具挑战性。

因此,黑盒模糊测试成为这类设备唯一可行的方案。但是黑盒模糊测试往往缺少反馈机制,不像传统灰盒模糊测试工具依赖代码插桩或硬件追踪技术,在测试过程中收集反馈(如代码覆盖率、距离信息),并利用这些反馈指导模糊测试过程(包括种子保留、选择及变异等)。论文提出的解决方案 LABRADOR 弥补这一缺陷,利用灰盒模糊测试技术获取的知识来指导执行黑盒模糊测试。

2 实例动机

  • IoT 设备的 Web 接口

Web 接口作为 IoT 设备与外界通信的主要通道,通常由前端和后端组成,采用人机交互模式。后端二进制程序的处理逻辑中涉及大量用于接收、解析与输出字符串的函数。直观来看,这些字符串在后端代码中被广泛引用,导致大量基本块(basic blocks)直接或间接关联这些字符串。

在实证研究中发现,显式块(explicit block,即引用显式字符串的代码块)占比超过 50%(如 uci2dat),显式函数(即包含显式块的函数)占比接近 70%(如 tcpdump)。这表明,通过响应中的字符串推断执行轨迹,在获取基本代码块方面具有良好的实用性。

  • 执行轨迹推断

图 1 以 Netgear 设备为例来演示基于响应的路径推断(Response-based Trace Inference,RTI)思路。

图1 后端程序处理与响应的关联示例

图1 后端程序处理与响应的关联示例

当用户通过前端发送一个用于配置 SSL VPN 的 HTTP 请求时,httpd 服务器解析参数并将其传递给 sslVpnConfig 应用。配置处理完成后,结果返回给服务器并输出到响应中。通过对 httpd 和 sslVpnConfig 二进制程序进行静态分析,我们可以提取显式字符串,并通过相似性分析轻松检测出响应中出现的字符串,如:

HTTP/1.0 200 OK
sslRemoteMgmtHandler Invoked
remoteMgmtEnable = 1

通过这些显式字符串的引用关系,我们可以推断出执行轨迹分别为 {BB1, BB5, BB6}。

  • 面向 IO 的距离度量

论文提出一种面向 IO(即请求与响应)的距离度量方法,如图 2 所示,以 Motorola CX2L 路由器为例。

图2 执行轨迹与漏洞触发点的距离推断示例

图2 执行轨迹与漏洞触发点的距离推断示例

用户从前端发送一个 NTP 请求(图 2 左上角),其三个变异数据包基于有效载荷字段的不同构造而成。相应的响应(图 2 右上角)中出现了不同的显式字符串:

第一个响应包含“GET JSON NULL ERROR”,其对应的显式块(OP)距离 sink(SP)为 2 跳;第二个响应包含“SAVE CONFIG ERROR”,其 OP 距离 SP 为 1 跳;第三个响应中,SP 被成功执行,触发了命令注入漏洞,距离为 0 跳。

通过这种方式,系统可以从 Web IO 中的显式字符串推断执行轨迹与 sink 之间的距离,并进一步用于指导变异过程。

3 方案设计

原论文中有许多工程上的计算和定义,为了能够快速掌握所提方案的思路和精髓,本分享中忽略了具体细节。

图 3 详细展示了 LABRADOR 的整体工作流程。

图3 工作流程图

图3 工作流程图

  1. 响应驱动的执行轨迹推断:通过轻量级静态分析,识别响应中出现的显式字符串,从而推测后端可能执行了哪些代码块;
  2. 面向 IO 的距离度量:基于控制流分析,计算请求/响应与漏洞触发点(sink)之间的距离,用于指导定向模糊测试;
  3. 距离引导的变异策略:将请求转为树结构,评估各节点参与变异的概率,并结合类型分析与能量调度,决定如何变异。

3.1 响应驱动的执行轨迹推断

通过观察发现,后端二进制程序中大量被引用的字符串最终会被输出到响应中,作者对 40 多个 Web 后端二进制程序进行了实证研究,结果显示:

  • 显式块(explicit blocks)平均占比为 14.3%;
  • 显式函数(explicit functions)平均占比为 35.8%;
  • 可达敏感调用的显式函数占比高达 62.2%

这些数据表明,通过识别响应中出现的显式字符串,有可能推断出后端实际执行的显式块,从而为黑盒模糊测试提供代码覆盖率反馈。

在推断执行轨迹中,需要对响应中出现的字符串与后端二进制程序中的字符串进行相似性分析。由于显式字符串在前端与后端之间通常保持相似的格式,因此采用词形相似性模型进行匹配。

  • 若两字符串长度接近,使用编辑距离(Levenshtein distance)进行衡量;
  • 若两字符串长度差异较大,但包含相同的显式子串,使用最长公共子串(LCS)进行衡量。

论文获取推断轨迹的算法:1)首先通过静态分析提取后端二进制程序中所有潜在的显式字符串,2)利用预设的请求种子发送给设备获取足够多的响应,3)然后对响应中的每一行字符串与显式字符串比较相似度,4)收集请求种子对应的推断轨迹集合。

该过程类似于将显式字符串及其相似字符串看作是插桩,记录这些字符串所在的代码块并将其视作为轨迹。

3.2 面向 IO 的距离度量

距离度量是定向灰盒模糊测试的核心环节,论文首先执行静态控制流分析,生成简化的控制流图(SCFG),将与请求、响应及 sink 无关的节点全部剔除。

图4 简化的控制流图

图4 简化的控制流图

给定由初始静态分析得到的完整跨进程控制流图(ICFG),为每个基本块添加如下属性标签(图 4 示意):

  • EP(Entry Point):与请求处理相关的显式块;
  • OP(Output Point):与响应输出相关的显式块;
  • SP(Sink Point):包含危险函数(如 system、strcpy)的块;
  • 普通块:上述之外的其他节点。

随后,通过执行可达性分析,剔除所有无法到达任一 sink 的节点,从而将原始 ICFG 规模压缩至约 10%。系统维护了一个危险函数特征库,并通过字符串相似度匹配识别更多潜在 sink。

对于任意种子请求,系统从两个视角度量其与 sink 的距离:

  1. 请求视角(静态):执行前,评估请求本身蕴含的“接近程度”;
  2. 响应视角(动态):执行后,根据 RTI 推断的显式块,修正上述距离。

然后分别定义了显式字符串的增益,距离越小则增益越大;还定义了非显式字符串的增益,确保非显式字符串仍有一定变异概率;通过上述两者定义了最终的 IO 距离,包括了请求的距离和响应的距离,作为后续能量分配和节点选择的直接依据,实现高效定向模糊测试。

该过程类似于找一种损失函数,好为后续操作设定迭代方向。

3.3 距离引导的变异策略

在选中请求种子之后,要决定应该变异多少新用例(即能量分配),在种子的哪个位置进行变异(即节点选择),以及如何实施具体变异(即变异策略)。

针对能量分配,系统根据给定种子产生的请求距离和历史响应距离共同进行计算,令能量与距离成反比,与历史表现正相关,优先发现高潜力的种子,即距离越近的能量越高。

针对节点选择,系统将请求解析成为树,根节点为整个请求,子节点划分为请求头、参数、属性三类,令叶子节点为最小可变异值,如图 5 所示。

图5 请求转换为树结构表示

图5 请求转换为树结构表示

不同节点对"逼近 sink"的贡献差异显著,令参数领域的节点权重更高,且深度越深的和越接近 sink 的节点越优先变异。

针对变异策略,系统分别采用类型级变异,以及结构型变异。类型级变异根据节点的属性生成对应类型的值,结构型变异则修改请求树的结构。每次变异后,将修改后的树重新序列化为 HTTP 请求,发送给设备进行测试,并收集响应用于下一轮反馈更新。

该过程就是典型的模糊测试操作,只不过论文所提方案引入了比较多的工程化设定,利用定义的距离来设计策略。

4 评估对比

论文在企业级 IoT 设备上对 LABRADOR 进行全面评估,选取 14 款企业级网络设备(路由器、防火墙、VPN 网关),均来自主流厂商(Cisco、Netgear、TP-Link、Linksys、TrendNet、Ubiquiti、Motorola)。

分别与 SNIPUZZ、BOOFUZZ、FIRM-AFL、SaTC 进行对比实验,不仅效率上有显著提升,同时漏洞发现上也有明显优势。LABRADOR 共发现了 79 个未知漏洞,61 个 CVE。详细的实验结果最好是去看原始论文。

论文有说实现了原型系统,整体框架划分为静态分析和模糊测试两个阶段,不过代码暂时未开源。


最后,附上文献引用及论文链接:Liu H, Gan S, Zhang C, et al. Labrador: Response guided directed fuzzing for black-box iot devices[C]. 2024 IEEE Symposium on Security and Privacy (SP). IEEE, 2024: 1920-1938.
https://doi.org/10.1109/SP54263.2024.00127

http://www.dtcms.com/a/285793.html

相关文章:

  • 基于ASP.NET+SQL Server的网站登录注册功能设计与实现
  • 软件工程中的《资本论》
  • 文档处理控件TX Text Control系列教程:使用 C# .NET 将二维码添加到 PDF 文档
  • stack and queue 之牛刀小试
  • 【LeetCode 热题 100】199. 二叉树的右视图——(解法一)BFS
  • PDF批量拆分、合并、转图、加密一站式解决方案
  • 文件上传 ,显示文件列
  • 区别下IO多路复用,reactor,事件循环(EventLoop),Epoll这几个的概念以及之间的关系
  • uni-app 跳转外部连接
  • JS获取 CSS 中定义var变量值
  • Android性能优化之网络优化
  • LangChain 源码剖析(三):连接提示词与大语言模型的核心纽带——LLMChain
  • Jmeter使用教程
  • 闭包的定义和应用场景
  • [安洵杯 2019]easy_web
  • 深度学习×第10卷:她用一块小滤镜,在图像中找到你
  • DOM 文档对象模型
  • 【移动端知识】移动端多 WebView 互访方案:Android、iOS 与鸿蒙实现
  • Esbuild-新一代极速前端构建打包工具
  • 基于单片机多功能称重电子称设计
  • 前端下载文件并按GBK编码解析内容
  • C#`Array`进阶
  • Java全栈面试实录:从Spring Boot到AI大模型的深度解析
  • 现代R语言机器学习:Tidymodel/Tidyverse语法+回归/树模型/集成学习/SVM/深度学习/降维/聚类分类与科研绘图可视化
  • 135. Java 泛型 - 无界通配符
  • 【PTA数据结构 | C语言版】二叉堆的朴素建堆操作
  • 防爆手机是什么?能用普通手机改装吗?
  • 国产替代:ASP4644在电信通信设备中的测试与应用前景
  • 上网行为管理-web认证服务
  • Kotlin封装