论文分享 | 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.pswp.cn/news/915243.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF为启动界面(Splash Screen)添加背景音乐

1. 添加音频文件到项目 将音频文件(如.mp3/.wav)放入项目文件夹(如Resources)在解决方案资源管理器中右键文件 → 属性: 生成操作:选择Resource(嵌入资源)或Content(内容…

【Jmeter】报错:An error occured:Unknown arg

问题 调试Jmeter时,报错:‘An error occurred: Unknown arg: l’,脚本如下: $JMETER_PATH -n -t "$target_jmx" -l "$SCENARIO_REPORT_DIR/result_${threads}.jtl" -e -o "$SCENARIO_REPORT_DIR/htm…

vue3使用KeepAlive组件及一些注意事项

目录 一、KeepAlive的作用 二、缓存组件配置 2.1、过滤缓存组件 2.2、最大缓存实例数 三、KeepAlive组件的生命周期 四、错误用法 4.1、缓存v-if包裹的动态组件 4.2、拼写错误 一、KeepAlive组件的作用 首先,keep-alive是一个vue的内置组件,官网…

辛普森悖论

辛普森悖论第一步:概念拆解想象你在比较两个班级的考试成绩:​第一天​:实验组(1个学生考了90分),对照组(99个学生平均考了80分)​第二天​:实验组(50个学生平…

有效的括号数据结构oj题(力口20)

目录 目录 题目描述 题目分析解析 解决代码 写题感悟: 题目描述 还有实例 题目分析解析 对于这个题目,我们首先有效字符串需要满足什么,第一个左右括号使用相同类型的括号,这好理解,无非就是小括号和小括号大括号…

Mock 单元测试

作者:小凯 沉淀、分享、成长,让自己和他人都能有所收获! 本文的宗旨在于通过简单干净实践的方式教会读者,如何使用 Mock (opens new window)进行工程的单元测试,以便于验证系统中的独立模块功能的健壮性。 从整个工程所…

MySQL 深度性能优化配置实战指南

🔧 一、硬件与系统层优化:夯实性能基石 ​​硬件选型策略​​ ​​CPU​​:读密集型场景选择多核CPU(如32核);写密集型场景选择高主频CPU(如3.5GHz+)。 ​​内存​​:建议≥64GB,​​缓冲池命中率≥99%​​ 是性能关键指标。 ​​存储​​:​​必用NVMe SSD​​,I…

Visual Studio Code(VSCode)中设置中文界面

在VS Code中设置中文界面主要有两种方法:通过扩展市场安装中文语言包或通过命令面板直接切换语言。‌方法一:通过扩展市场安装中文语言包‌打开VS Code,点击左侧活动栏的"扩展"图标(或按CtrlShiftX)。在搜索…

叉车机器人如何实现托盘精准定位?这项核心技术的原理和应用是什么?

随着智慧物流和智能制造的加速发展,智能化转型成为提升效率、降低成本的关键路径,叉车机器人(AGV/AMR叉车)在仓储、制造、零售等行业中的应用日益广泛。 其中,托盘定位技术是实现其高效、稳定作业的核心环节之一&…

NO.6数据结构树|二叉树|满二叉树|完全二叉树|顺序存储|链式存储|先序|中序|后序|层序遍历

树与二叉树的基本知识 树的术语结点: 树中的每个元素都称为结点, 例如上图中的 A,B,C…根结点: 位于树顶部的结点, 它没有父结点,比如 A 结点。父结点: 若一个结点有子结点, 那么这个结点就称为其子结点的父…

数据集下载网站

名称简介链接Kaggle世界上最大的数据科学竞赛平台之一,有大量结构化、图像、文本等数据集可直接下载✅支持一键下载、APIPapers with Code可按任务(如图像分类、文本生成等)查找模型与数据集,标注 SOTA✅与论文强关联Hugging Face…

Tomcat 生产 40 条军规:容量规划、调优、故障演练与安全加固

(一)容量规划 6 条 军规 1:线程池公式 maxThreads ((并发峰值 平均 RT) / 1000) 冗余 20 %; 踩坑:压测 2000 QPS、RT 200 ms,理论 maxThreads500,线上却设 150 导致排队。军规 2:…

深入解析 Amazon Q:AWS 推出的企业级生成式 AI 助手

在人工智能助手竞争激烈的当下,AWS 重磅推出的 Amazon Q 凭借其强大的企业级整合能力,正成为开发者提升生产力的新利器。随着生成式 AI 技术席卷全球,各大云厂商纷纷布局智能助手领域。在 2023 年 re:Invent 大会上,AWS 正式推出了…

物流自动化WMS和WCS技术文档

导语大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。欢迎大家使用我们的仓储物流技术AI智能体。新书《智能物流系统构成与技术实践》新书《智能仓储项目出海-英语手册,必备!》完整版文件和更多学习资料,…

Web3.0 实战项目、简历打造、精准投递+面试准备

目录 一、获取真实企业级 Web3.0 项目的 5 种方式 1. 参与开源项目(推荐指数:⭐⭐⭐⭐⭐) 2. 参与黑客松(Hackathon) 3. 远程实习 & DAO 协作项目(兼职也可) 4. Web3 Startup 实战项目合…

pymongo库:简易方式存取数据

文档 基础使用 前提:开发机器已安装mongo配置环境,已启动服务。 macOS启动服务:brew services start mongodb-community8.0 macOS停止服务:brew services stop mongodb-community8.0安装:python3 -m pip install pym…

Java 线程池与多线程并发编程实战全解析:从异步任务调度到设计模式落地,200 + 核心技巧、避坑指南与业务场景结合

多线程编程在现代软件开发中扮演着至关重要的角色,它能够显著提升应用程序的性能和响应能力。通过合理利用异步线程、多线程以及线程池等技术,我们可以更高效地处理复杂任务,优化系统资源的使用。同时,在实际应用中,我…

gitee 分支切换

ssh-keygen -t rsa -C "pengchengzhangcplaser.com.cn" ssh -T gitgitee.comgit remote add origin 仓库地址git config --global user.email "youexample.com"git config --global user.name "Your Name"# 1. 更新远程信息 git fetch origin# …

Vue3生命周期函数

在 Vue 3 中,生命周期钩子函数是指组件从创建到销毁的整个过程中,Vue 自动调用的一些特定函数。它们让你能够在组件的不同阶段执行一些自定义操作。Vue 3 提供了组合式 API 和选项式 API 两种方式来定义生命周期钩子。1. onBeforeMount (组合式 API)作用…

基于SEP3203微处理器的嵌入式最小硬件系统设计

目录 1 引言 2 嵌入式最小硬件系统 3 SEP3202简述 4 最小系统硬件的选择和单元电路的设计 4.1 电源电路 4.2 晶振电路 4.3 复位及唤醒电路 4.5 存储器 4.5.1 FLASH存储 4.5.2 SDRAM 4.6 串行接口电路设计 4.7 JTAG模块 4.8 扩展功能(LED) …