三篇物联网漏洞挖掘综述
由于物联网设备存在硬件资源受限、硬件复杂异构, 代码、文档未公开的问题, 物联网设备的漏洞挖掘存在较大的挑战:
- 硬件资源受限性: 通用动态二进分析技术需要在运行程序外围实施监控分析。由于物联网设备存储资源(存储)的受限性, 无法部署相关的分析模块,导致动态分析技术无法适用。同时硬件 CPU 的计算能力有限, 会造成动态分析性能下降。
- 硬件的复杂异构: 一方面, 物联网设备 CPU 架构与通用平台不同, 导致程序指令集上存在差异性。通用软件的指令架构通常是 X86 或 X86_64。而物联网程序通常采用 ARM、MIPS、PowerPC 等嵌入式架构。因此直接基于通用 CPU 指令汇编的静态分析方案不再适用。另一方面, 物联网设备外围 I/O 硬件存在多样化, 增加动态分析技术的适配难度。
- 代码、文档未公开: 对于通用软件, 可以对源代码或者二进制程序进行分析以挖掘漏洞。而对于物联网设备而言, 大多数程序均为定制的商业化程序, 通常只能将设备固件作为分析对象, 只有少量设备有相应的源代码以用于分析。因此, 大量源代码分析技术不再适用于物联网设备漏洞挖掘。另外固件的组织形式和数据内容也区别于通用程序, 因此基于二进制的静态分析技术也不能直接使用。
由于物联网设备自身的特点不仅为漏洞挖掘带来挑战, 同时也带来了更多新的机遇:
- 系统交互的丰富性: 虽然是对物联网设备进行漏洞挖掘, 但物联网设备通常会与终端、云等系统进行交互, 因此设备本身存在更多的攻击面。对于动态二进制分析方案, 可以充分利用外部交互系统的信息, 对新的攻击面的进行测试分析。
- 组件代码的大量复用: 物联网设备程序在开发的过程中, 为了节省开发成本, 大量使用开源的第三方库, 致使大量第三方组件的漏洞也存在于物联网设备中。之前基于二进制比对的静态分析技术主要是通过不同层次信息(控制流、程序块、指令级)的差异性来发现安全漏洞, 而现在可以通过不同层次信息的相似性来挖掘同源漏洞。
- 漏洞类型的趋同性: 通用软件漏洞类型包含内存破坏类(栈溢出、堆溢出、空指针应用、二次释放等)、输入验证类(命令注入等)、配置错误类等。漏洞存在的位置可以是在内核、驱动、用户态服务程序中。而对于含有操作系统的物联网设备固件来说, 同样存在这些类型的漏洞。因此无论是静态二进制还是动态二进制分析技术, 通用的漏洞检测规则仍然适用于物联网设备固件和程序。
虽然通用平台的漏洞挖掘技术和工具不能完全适用于物联网设备, 但大部分程序分析技术、安全测试思路和方案仍可用于物联网设备。因此, 物联网设备漏洞挖掘技术仍然以通用程序分析和安全测试技术作为基础, 结合物联网设备特点, 开展了相关漏洞挖掘技术的研究。同时, 通用漏洞挖掘技术仍然在蓬勃发展, 给物联网设备漏洞挖掘技术不断注入新
当前的物联网设备的漏洞挖掘技术在静态分析、动态模糊测试、同源性分析技术上都有一定的进展。其中, 静态分析技术能够有效解决固件的解析, 以及固件中通用漏洞的分析问题。但对于物联网设备特定漏洞的高效分析, 仍然缺乏深入的思考和探究。此外, 对于无操作系统和包含特定嵌入式操作系统的固件, 仍然缺少系统性的分析和研究。
对于模糊测试技术, 目前能够实现部分设备(如路由器、网络摄像头)固件的高效仿真和灰盒测试, 从而快速发现漏洞。但对于整个物联网设备生态, 目前的模糊测试技术和工具仍然在输入生成、仿真、监控、异常检测等各个方面存在局限性。
对于同源性分析技术, 目前的技术已支持大规模固件的多层次关联, 从而实现同源漏洞的发现。之后的发展方向应该是针对特定漏洞类型, 有效提取特征并进行编码, 从而实现特定类型同源漏洞的精准, 快速发现。
从固件获取开始, 根据固件的不同类型, 需要选择性的完成程序集提取、目标程序提取、程序表示、执行信息恢复等分析步骤。
固件获取: 该步骤通过多种方式获得固件以用于后续分析。获取方式主要分为两大类: 直接从物联网设备中提取, 或是从厂商的官网进行下载。对于第一大类, 共有两种方式。第一种是通过UART 或 JTAG 硬件调试接口登入系统并读取内存, 从而恢复出固件内容; 第二种是直接利用读写器完成 flash 芯片内固件的直接提取。而本项目的数据来源是由奇安信所提供的1000个固件数据集,所以本项目不着重考虑获得固件数据。
固件格式分析: 该步骤分析固件的组织形式和数据内容。固件按照组织形式通常分为两类: 包含操作系统的固件和不包含操作系统的固件。在包含操作系统的固件中, 大部分设备功能由用户程序完成, 系统调用操作、程序加载过程、库函数调用均有规范的定义。其中, 操作系统可以是通用操作系统,如定制化的 Linux,;也可以是特定嵌入式操作系统,如实时操作系统 VxWorks。在不包含特定操作系统的固件中, 固件直接工作在设备上, 包含了简单的任务调度等类操作系统功能。无论是哪一类型的固件, 首先需要判断固件是否被压缩。若固件压缩, 需先解压, 然后再进一步分析。
固件程序提取技术: 该步骤是从包含操作系统的固件中提取所有的文件和程序。对包含操作系统的固件, 由于操作系统和文件系统通常都在头部含有特征码或特征字符串, 因此可以通过基于签名匹配的方式识别出操作系统镜像和文件系统, 并进一步对文件系统进行解压, 提取出所有文件和程序。
目标程序分析提取: 对含有操作系统的固件, 该步骤对提取出的所有程序和文件集合, 进一步提取出待分析的目标程序。当前, 目标程序的提取主要是通过搜寻特定文件名实现。若目标程序是 Web 服务程序, 只需搜索文件名包含 http 的文件, 即可找到目标程序。这种方法通常直接且有效, 但对于大规模固件的目标程序提取, 具有较低的召回率。因此, 大规模固件的特定目标服务程序提取技术仍需深入研究。
程序表示技术: 该步骤是将二进制代码以中间语言或汇编等形式表示。无论是对于无操作系统的固件或是待分析的目标服务程序, 均需将二进制转换成汇编代码。有时为了屏蔽汇编指令格式的差异性, 需进一步转化为统一的中间语言。
执行信息恢复技术: 该步骤将恢复程序的加载地址、入口地址等执行信息。对于包含操作系统的固件, 其目标服务程序的文件格式(如广泛采用Linux 下的 ELF 可执行文件格式)通常是标准、公开的, 逆向技术已经相当成熟。而对于无操作系统的固件程序, 由于缺少固件执行的描述信息, 导致程序信息恢复不完整,无法进一步实现精准的程序分析。缺失的信息包括: 第一,固件运行时的加载地址。这将导致很多跳转无法被解析; 即使已恢复出指令信息, 控制流信息仍不完整。第二,程序入口地址。这将导致无法深入分析。
目前, 目标程序提取与信息恢复技术能够有效解决包含操作系统的物联网设备固件的分析。从固件解压, 文件系统解析, 可执行程序解析到可执行程序的逆向, 技术基本上已经成熟。而对于无操作系统设备固件分析, 整个固件就是特殊的可执行程序, 对该类固件的分析仍处于起步阶段。
在目标程序提取与信息恢复之后, 通过建立漏洞分析规则, 并结合静态程序分析技术, 实现漏洞的挖掘。除了通用漏洞类型(如污点类漏洞), 物联网设备漏洞挖掘更关注特定漏洞类型和模块, 如硬编码、认证绕过等后门漏洞。该漏洞类型属于物联网设备特定漏洞, 通常为了方便设备调试人员进入系统或进行特权操作。其在物联网设备上普遍存在, 而在通用程序上较为少见。
针对硬编码漏洞类型, Thomas等提出基于静态数据分析的漏洞挖掘方法。该工作首先识别出程序中的静态数据比对函数, 通过提取函数特征并对静态数据比对函数进行建模来识别。接着通过程序控制流分析技术来判定静态数据比对的重要性,根据它影响代码块的独特性, 之后进一步评估出函数的重要性。通过进一步对重要性函数的静态分析, 发现了硬编码的认证后门漏洞, 并恢复出 FTP、SOAP 协议的重要指令集。该工作具有很强的实用性, 然而在后门漏洞挖掘与基于文本的协议指令恢复的这两个应用中, 均不能保证准确性和召回率。因此, 该方案在大规模测试中的适用性无法得到保证。为了进一步识别物联网设备固件程序中的后门, Thomas利用半监督学习的方法, 构造了识别固件中二进制功能的分类器。并通过自定义二进制函数功能描述语言, 识别二进制中的非预期功能。实验表明有96.45%的二进制功能的识别准确率, 并在Tenda设备中挖掘出后门漏洞。
针对认证绕过漏洞类型, Shoshitaishvili等提出基于程序分析的物联网设备认证绕过漏洞的挖掘方法。首先, 该工作人为定义程序特权点,包括未认证的情况下不能输出的数据、未认证情况下不可执行的系统操作、对内存绝对地址的访问、人工分析出的相关特权函数。在此基础上, 构建固件代码的控制流、数据依赖、控制依赖图, 然后基于切片技术生成到特权点的路径, 并采用符号执行技术求解路径条件, 从而发现物联网设备认证绕过漏洞。该工作采用切片技术对程序路径进行简化, 使符号执行分析有较高的分析性能。然而, 该工作无法解决程序被混淆之后的分析难题。
针对通用污点类漏洞类型, Cheng等提出物联网设备固件污点类漏洞的检测方法, 主要通过函数分析提取变量描述、定义对、数据类型等信息, 并解决函数数据流分析、指针别名分析、数据结构恢复等难题。该工作发现了8个已知漏洞和13个零日漏洞, 且在时间开销上优于Angr。
针对协议解析模块, Cojocar等首次提出基于协议解析模块识别的物联网设备漏洞挖掘方法。该工作通过协议解析模块离散特征的提取以及分类器的构造, 实现协议解析模块的精确识别, 并聚焦于该类模块的漏洞挖掘, 发现 GPS 接收器、电表、硬盘驱动、程序逻辑控制器多类型物联网设备的漏洞。在此基础上, Zheng 等提出基于多维度特征的应用层协议解析模块的识别技术, 并与基于二进制属性图的可疑脆弱点推断技术相结合, 实现污点类漏洞的快速发现。
目前基于程序分析的漏洞发现技术能够有效的针对特定漏洞类型(硬编码、认证绕过、污点类)和模块(协议解析模块)。然而这些研究工作大多需要人工辅助, 自动化程度不足。此外, 研究工作的分析对象仍然是用户程序。在针对物联网设备特定实时操作系统方面, 仍然缺少相应的漏洞挖掘工作。
随着近些年人工智能的快速发展,其也被运用到了漏洞挖掘这个领域,尤其是静态分析方法。
在静态分析方法中,用的最多的是代码相似性检测。其通过对比待分析代码与漏洞代码的相似度来进行漏洞挖掘。因为人工智能中的模型的输入为向量的形式,所以就需要对待分析代码进行特征提取,从特征形式的角度,主要可以把其划分为四种,分别为代码度量,基于Token的表征,基于抽象语法树的表征,基于图的表征。
代码度量:代码度量可以作为表示代码特性的度量指标,常用的有代码行数、图复杂度、继承深度和类耦合等
基于Token的表征:基于 Token 的表征形式通过对源代码进行词法分析得到,即:在编译过程中扫描源代码的字符流,依据程序语言的词法规则标记源代码的标识符、关键字、函数名和运算符等重要信息,从而将源代码的字符流转换成等价 Token 序列
基于抽象语法树的表征:抽象语法树(abstract syntax tree,简称 AST)是编译过程中的一种中间表示形式,树节点上存储的是代码的语法结构信息。基于 AST 的表征形式通常先使用 LEX/YACC、FLEX/BISON、ANTLR 等开源的词法和语法分析工具进行预处理,生成词法分析器和语法分析器。接着对代码进行词法分析和语法分析,将分析的结果构建成 AST,对语法树节点进行编码作为代码的特征
基于图的表征:图是一种比树更为抽象复杂的表示形式,图的顶点之间是多对多的关系,并且不具有树结构中明确的父子节点层次划分.因此,基于图的表征形式能够反映代码中更丰富的语法和语义特征,有很好的检测能力.如常用的程序依赖图表示软件程序的控制依赖和数据依赖关系,控制流图(control flow graph,简称CFG)则是由编译器在内部维护的一种程序的抽象表现,代表了程序执行过程中会遍历到的所有路径.
相关文章:

三篇物联网漏洞挖掘综述
由于物联网设备存在硬件资源受限、硬件复杂异构, 代码、文档未公开的问题, 物联网设备的漏洞挖掘存在较大的挑战: 硬件资源受限性: 通用动态二进分析技术需要在运行程序外围实施监控分析。由于物联网设备存储资源(存储)的受限性,…...

Pytorch深度学习指南 卷I --编程基础(A Beginner‘s Guide) 第1章 一个简单的回归
本章正式开始使用pytorch的接口来实现对应的numpy的学习的过程,来学习模型的实现,我们会介绍numpy是如何学习的,以及我们如何一步步的通过torch的接口来实现简单化的过程,优雅的展示我们的代码,已经我们的代码完成的事…...

【EXCEL_VBA_实战】多工作薄合并深入理解
工作背景:多个工作薄存在冲突的名称,需快速合并 困难点:工作表移动复制时,若有冲突的名称,会不断弹出对话框待人工确认 思路:利用代码确认弹出的对话框 关键代码:Application.DisplayAlerts …...

mysql之表的外键约束
MySQL表的外键约束详细介绍及代码示例 外键约束是数据库中用于维护数据完整性和一致性的重要机制。它确保一个表中的数据与另一个表中的数据相关联,防止无效的数据引用。本文将详细介绍了外键约束的各个方面,并通过具体的代码示例进行演示。 1. 外键约束…...

Tuning the Go HTTP Client Settings
记录一次Go HTTP Client TIME_WAIT的优化 业务流程 分析 通过容器监控发现服务到事件总线的负载均衡之间有大量的短链接,回看一下代码 发送请求的代码 func SendToKEvent(ev *KEvent) error {data, err : json.Marshal(ev.Data)if err ! nil {return err}log.Pri…...

第二十四课 Vue中子组件调用父组件数据
Vue中子组件调用父组件数据 Vue是不建议在不同的组件直接传递值的,我们需要使用props方法来进行组件间的值传递 子组件调用父组件数据 父模板的数据,子组件是无法直接调用的 无法直接调用 1)组件调用顶级对象中的data <div class&quo…...

Jenkins-pipeline语法说明
一. 简述: Jenkins Pipeline 是一种持续集成和持续交付(CI/CD)工具,它允许用户通过代码定义构建、测试和部署流程。 二. 关于jenkinsfile: 1. Sections部分: Pipeline里的Sections通常包含一个或多个Direc…...

小米Vela操作系统开源:AIoT时代的全新引擎
小米近日正式开源了其物联网嵌入式软件平台——Vela操作系统,并将其命名为OpenVela。这一举动在AIoT(人工智能物联网)领域掀起了不小的波澜,也为开发者们提供了一个强大的AI代码生成器和开发平台。OpenVela项目源代码已托管至GitH…...

NodeJs如何做API接口单元测试? --【elpis全栈项目】
NodeJs API接口单元测试 api单元测试需要用到的 assert:断言库 (还要一些断言库比如:Chai)supertest: 模拟http请求 简单的例子: const express require(express); const supertest require(supertest); const assert require(assert);…...

bundletool来特定设备规范的json安装aab包
1、获取自己设备的设备规范json java -jar ./bundletool.jar get-device-spec --outputj:/device-spec.json 2、根据设备规范生成apks包 java -jar ./bundletool.jar build-apks --device-specj:/device-spec.json --bundleapp-dev-release.aab --output随便的文件名.apks -…...

2024年第十五届蓝桥杯青少组国赛(c++)真题—快速分解质因数
快速分解质因数 完整题目和在线测评可点击下方链接前往: 快速分解质因数_C_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/cpp/show-3781.htmlhttps://www.hixinao.com/tiku/cpp/show-3781.html 若如其他赛事真题可自行前往题库中心查找,题…...

.Net Core微服务入门全纪录(四)——Ocelot-API网关(上)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...

chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
问题描述 chrome游览器又一款JSON插件叫JSON Formatter,游览器GET请求调用接口时,如果返回的数据是json格式,则会自动格式化展示,类似这样: 但是今天突然发现怎么也格式化不了,打开一个json文件倒是可以格…...

[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
目录 前言 一、UDP网络编程 1.Qt项目文件 2.UDP类 QUdpSocket QNetworkDatagram 3.UDP回显服务器案例 细节 服务器设计 客户端设计 二、TCP网络编程 1.TCP类 QTcpServer QTcpSocket 2.TCP回显服务器案例 细节 服务器设计 客户端设计 三、HTTP客户端 1.HTTP…...

docker 安装 nginx 详解
在平常的开发工作中,我们经常会用到 nginx,那么在 docker 中 如何安装 nginx呢?又有哪些需要注意的事项呢?简单来说,第一步:拉取 nginx 镜像;第二步:创建 挂载目录并设置 nginx.conf…...

2025年大模型气象预测架构与商业化影响
随着人工智能技术,尤其是大模型(如深度学习、大规模神经网络)的飞速发展,气象预测的传统方法正在经历深刻变革。2025年,气象预测将借助大模型技术进入一个新的阶段。本文将从架构角度详细探讨2025年大模型在气象预测中的应用,并分析其对商业化的潜在影响。 一、2025年大模…...

基于51单片机和ESP8266(01S)、八位数码管、独立按键的WiFi定时器时钟
目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、延时函数2、定时器03、串口4、数码管扫描5、独立按键扫描 四、主函数总结 系列文章目录 前言 有三个版本: ①普中开发板版本1:28800bps11.0592MHz,12T ②普中开发板版本2&am…...

Androidstudio 中,project下的.gitignore和module下的.gitignore有什么区别,生效优先级是什么
在 Android Studio 项目中,project 根目录下的 .gitignore 文件和 module 目录下的 .gitignore 文件作用和生效优先级是不同的,理解它们之间的区别非常重要,可以避免不必要的提交和冲突。 1. project 根目录下的 .gitignore: 作…...

python学习笔记3-字符串常用的方法
一、判断(9个): 二、查找和替换(8个) 三、⼤⼩写转换(5个) 四、⽂本对⻬(3个) 五、去除空⽩字符(3个) 六、拆分和连接 (6个࿰…...

提示词工程(Prompt Engineering)
1. Prompt 是什么? Prompt:提示词,是描述 AI 需要执行的任务的自然语言文本。 如上图所示,Prompt就是用户的提问。其实我们大家都用过Prompt,比如我们使用的ChatGPT、文心一言、豆包等AI产品时的提问就是Prompt&…...

后端开发Web
Maven Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具 Maven的作用 依赖管理 方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题 统一项目结构 提供标准、统一的项目结构 项目构建 标准跨平台(…...

set和map(二)详解
文章目录 mapoperator[ ]的底层operator[ ]使用的实例 multimapequal_range 两道题目题目解析算法原理代码题目解析算法原理代码 map map和set大部分都相似,只有insert插入键值对不同,insert要插入pair,pair中有key和value。erase和find只与key有关&…...

第4章:Python TDD消除重复与降低依赖实践
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...

【语言处理和机器学习】概述篇(基础小白入门篇)
前言 自学笔记,分享给语言学/语言教育学方向的,但对语言数据处理感兴趣但是尚未入门,却需要在论文中用到的小伙伴,欢迎大佬们补充或绕道。ps:本文不涉及公式讲解(文科生小白友好体质)ÿ…...

vue3+uniapp开发鸿蒙初体验
去年7月20号,uniapp官网就已经开始支持鸿蒙应用开发了,话不多说,按照现有规则进行配置实现一下鸿蒙开发效果; 本文基于macOS Monterey 版本 12.6.5实现 开发鸿蒙的前置准备 这里就直接说我的版本: DevEco Studio 5.…...

Android四种方式刷新View
Android四种方式刷新View 1.前言: 最近在切换主题时有个TextView是Gone的状态,切换主题后内容没有显示,于是排查代码,刚开始以为是textView没有设置内容,但是打印日志和排查发现有setText. 2.View.VISIBLE与View.GO…...

【数学建模美赛速成系列】O奖论文绘图复现代码
文章目录 引言折线图 带误差棒得折线图单个带误差棒得折线图立体饼图完整复现代码 引言 美赛的绘图是非常重要得,这篇文章给大家分享我自己复现2024年美赛O奖优秀论文得代码,基于Matalab来实现,可以直接运行出图。 折线图 % MATLAB 官方整理…...

【27】Word:徐雅雯-艺术史文章❗
目录 题目 NO1.2 NO3 NO4 NO5 NO6.7 NO8.9 NO10.11 注意:修改样式的字体颜色/字号,若中英文一致,选择所有脚本。格式相似的文本→检查多选/漏选格式刷F4重复上一步操作请❗每一步检查和保存 题目 NO1.2 F12另存为布局→行号布局…...

web端ActiveMq测试工具
如何用vue3创建简单的web端ActiveMq测试工具? 1、复用vue3模板框架 创建main.js,引入APP文件,createApp创建文件,并加载element插件,然后挂载dom节点 2、配置vue.config.js脚本配置 mport { defineConfig } from "vite&qu…...

2025年最新深度学习环境搭建:Win11+ cuDNN + CUDA + Pytorch +深度学习环境配置保姆级教程
本文目录 一、查看驱动版本1.1 查看显卡驱动1.2 显卡驱动和CUDA对应版本1.3 Pytorch和Python对应的版本1.4 Pytorch和CUDA对应的版本 二、安装CUDA三、安装cuDANN四、安装pytorch五、验证是否安装成功 一、查看驱动版本 1.1 查看显卡驱动 输入命令nvidia-smi可以查看对应的驱…...