有效的对嵌入式操作系统进行消毒处理

news2024/12/29 9:02:34

这篇论文的标题是《Effectively Sanitizing Embedded Operating Systems》,作者是 Jianzhong Liu, Yuheng Shen, Yiru Xu, Hao Sun, Heyuan Shi, Yu Jiang。论文主要研究了嵌入式操作系统的安全性问题,并提出了一种名为 EmbSan 的嵌入式系统消毒器,用于检测和修复嵌入式操作系统中的潜在错误。

以下是论文的主要内容概述:

摘要:

  • 嵌入式操作系统在安全关键应用中广泛使用,但目前缺乏有效的消毒工具来彻底检测和修复错误。
  • 作者提出了 EmbSan,一种通过动态插桩和解耦的宿主运行时库来对多种嵌入式操作系统固件进行消毒的方法。
  • EmbSan 在模糊测试中对多个嵌入式操作系统进行了消毒,包括基于 Embedded Linux、FreeRTOS、LiteOS 和 VxWorks 的固件,并在其中检测到实际的错误。
  • 评估结果表明,EmbSan 能够检测到与 KASAN 参考实现相同的实际错误标准,并且与 KASAN 和 KCSAN 的性能损失相当。

1. 引言:

  • 嵌入式设备的激增要求进行额外的安全测试以保护行业和最终用户的完整性和安全。
  • 嵌入式操作系统设计用于在嵌入式设备上运行专门的软件,这在提出能在广泛嵌入式系统上执行各种消毒操作的消毒器设计时带来了许多困难。

2. 背景和相关工作:

  • 嵌入式操作系统设计用于执行特定任务,如医疗机器人、自动驾驶汽车、物联网设备等。
  • 模糊测试是一种自动错误检测技术,因其在发现错误方面的有效性而闻名。
  • 消毒器通过修改程序来检测目标程序的错误行为。

3. 设计:

  • EmbSan 由三个主要组件构成:消毒器公共功能提取器、嵌入式平台配置探测器和通用消毒器运行时。
  • 工作流程包括预测试探测阶段和测试阶段。

bf90b6756b42441aab54b986c7280208.png

EmbSan 的设计分为三个主要组件,以及一个预测试探测阶段和一个测试阶段。以下是每个部分的详细介绍:

3.1 消毒器公共功能提取器(Sanitizer Common Function Distiller)

  • 目的: 确定测试期间使用的消毒器的接口和行为特征。
  • 过程: 静态处理过程,首先将消毒器的接口头文件输入提取器,生成消毒器的截获 API 列表。然后,使用先前列出的 API 列表解析消毒器的特定源代码文件和插桩传递源文件,构建接口的截获点和调用图,识别外部资源,并将消毒器 API 的逻辑蒸馏成内部领域特定语言(DSL)。

3.2 嵌入式平台配置探测器(Embedded Platform Configuration Prober)

  • 目的: 检测目标固件的平台细节,包括指令集功能、平台设备内存分配和初始固件内存布局。
  • 过程: 主要动态过程,需要预测试试运行来识别所有特征。探测器最终产生配置规格和初始设置例程,使用上述 DSL 编写。针对不同类别的固件,采取不同的探测策略:
    1. 开源固件: 支持编译时消毒器插桩,结合静态和动态方法确定其配置参数。
    2. 缺乏编译时插桩的开源固件: 插桩指令以识别初始化例程和函数。
    3. 闭源二进制固件: 主要使用动态方法结合测试者的先验知识来识别相关信息。

3.3 通用消毒器运行时(Common Sanitizer Runtime)

  • 目的: 接受探测阶段的消毒器和固件描述,编译特定的消毒器运行时,拦截固件执行过程中预定的消毒器敏感指令和截获函数,并将执行转移到每个功能消毒器的运行时库以更新状态或验证操作。
  • 方法: 修改模拟器的执行引擎,通过插入由消毒器指定的回调探针到翻译代码模板中。例如,在 QEMU/TCG 中,对于 KASAN 和 KCSAN 指定的加载指令,运行时通过插入调用代理函数 load_intercept() 来修改其翻译模板。
  • 状态维护: 运行时还维护所有消毒器函数的状态,如统一的影子内存,记录多个消毒器功能的信息。

3.4 预测试探测阶段(Pre-testing Probing Phase)

  • 准备固件二进制和相关描述: 测试者需要确定所需的消毒器,从操作系统内核中提取参考实现,如 Linux 的 KASAN 和 KCSAN 实现。将包含 API 定义的头文件和实际源代码传递给提取器,以生成 DSL 中消毒器截获函数和逻辑的描述。
  • 分析固件源代码: 如果可用,验证其支持编译时消毒器插桩。
  • 根据固件分类调用探测器: 生产平台规格和初始化例程,使用 DSL 指定。
  • 准备固件进行动态测试: 对于有源代码的嵌入式 OS 固件,这与探测器的插桩过程大致相似,将就绪状态挂钩以调用初始化例程。

3.5 测试阶段(Testing Phase)

  • 开始模糊测试或其他动态测试: 运行时组件接受 DSL 描述的消毒器接口和运行时逻辑,以及固件的平台配置和消毒器初始化例程。
  • 运行时组件编译消毒器运行时逻辑: 并将所有相关操作挂钩到模拟器的执行过程中,包括与消毒器相关的指令和函数调用。
  • 测试开始: 消毒器在固件达到就绪状态时初始化,更新运行时内部状态,验证任何敏感操作。

这个设计框架允许 EmbSan 在不同的嵌入式操作系统和平台上进行有效的消毒操作,同时保持较高的适应性和自动化水平。

4. 评估:

  • 作者进行了实验来验证 EmbSan 与现有工具的正确性和有效性,并测量了运行 EmbSan 的运行时开销。
  • 选择了基于 OpenWRT、OpenHarmony 等的固件进行评估,涵盖了基于不同嵌入式操作系统的 x86、ARM 和 MIPS 平台。
  • EmbSan 辅助内核模糊测试工具发现了基于 Embedded Linux、FreeRTOS、LiteOS 和 VxWorks 的固件中的 41 个新错误。

5. 讨论:

  • EmbSan 与现有消毒器相比,具有更好的适应性和错误检测潜力。
  • 尽管 Syzkaller 和 Tardis 是最先进的,但它们仍然需要更多的系统调用规范来覆盖嵌入式固件。

6. 结论:

  • EmbSan 解决了在测试环境中有效消毒嵌入式操作系统的难题。
  • EmbSan 与现有的 KASAN 和 KCSAN 实现一样性能卓越,能够高效运行,并且能够适应更广泛的内核和指令集架构。
  • EmbSan 协助内核模糊测试工具在基于 Embedded Linux、LiteOS、FreeRTOS 和 VxWorks 的固件中发现了 41 个新错误,展示了其在测试具有不同架构的广泛嵌入式内核方面的潜力。

7. 致谢:

  • 研究部分由国家重点研发计划和国家自然科学基金项目资助。

参考文献:

  • 论文列出了一系列相关的研究和工具,包括 Angora、EnFuzz、kmsan、Heartbleed 研究、Gustave、Rtkaller、Tardis、Kcov、AddressSanitizer、ThreadSanitizer、American fuzzy lop、Syzkaller 等。

论文详细介绍了 EmbSan 的设计、实现和评估过程,证明了其在嵌入式系统安全测试中的有效性和实用性。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2143557.html

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

相关文章

计算机的错误计算(九十六)

摘要 探讨 的计算精度问题。 计算机的错误计算(五十五)与(七十八)分别列出了 IEEE 754-2019 中的一些函数与运算。下面再截图给出其另外3个运算。 例1. 已知 x-0.9999999999966 . 计算 不妨在Python下计算,则有&am…

TI DSP TMS320F280025 Note11:F280025时钟系统

TMS320F280025 F280025时钟系统 ` 文章目录 TMS320F280025 F280025时钟系统TMS32F280025时钟系统框图**时钟系统框图分析**时钟源主内部振荡器(INTOSC2)用内部振荡器(INTOSC1)派生的时钟振荡器时钟(OSCCLK)系统锁相环输出时钟(PLLRAWCLK)设备时钟域系统时钟(PLLSYSCLK)CPU时钟(…

PyTorch 激活函数及非线性变换详解

激活函数是深度学习模型的重要组成部分,它们引入非线性,从而使模型能够更好地拟合复杂的数据模式。本文将详细介绍激活函数的作用、常见类型、经典应用示例,并比较它们的优缺点。 激活函数的作用 激活函数的主要作用是引入非线性变换&#…

12 Java文件处理之写入、读取:IO流(中):高级流(缓冲流、转换流、序列化流和反序列化流、打印流)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、缓冲流1 字节缓冲流(1)BufferedInputStream:字节缓冲输入流构造方法---- BufferedInputStream(InputStream in):创建一个使用默认缓冲区大小的缓冲输入流。---- BufferedInputStream(In…

算法题目复习(0909-0917)

1. 连续子序列和 pdd的算法题&#xff0c;根本不记得怎么做 给一个数组&#xff0c;有正数和负数&#xff0c;算出连续子序列的和最大为多少 int maxSubArraySum(vector<int>& nums) {int maxSoFar nums[0];int maxEndingHere nums[0];for (size_t i 1; i <…

说说几款耳机

从前&#xff0c;大约在戴森推出他们那款奇特的发明——戴森耳机与空气净化器组合一年后&#xff0c;人们仍对这个奇怪的产品感到困惑。这款穿戴式空气净化耳机更像是一个实验&#xff0c;缺乏实际用途。回想起那时的评测&#xff0c;大家一致认为这是有史以来最无意义的产品之…

IDEA 2024.3 EAP新特征早览!

0 前言 IntelliJ IDEA 2024.3 第一个 EAP 版本已发布&#xff0c;提前体验 下一个重大版本的一部分改进。 持续关注 EAP 更新&#xff0c;未来几周内将推出更多 IntelliJ IDEA 新功能。尝试这些新功能&#xff0c;分享您的反馈&#xff0c;共同完善 IDE。 1 AI 助手 1.1 内…

Web3入门指南:从基础概念到实际应用

Web3&#xff0c;即“去中心化的第三代互联网”&#xff0c;正在逐步改变我们对互联网的传统认知。从最初的静态网页&#xff08;Web1.0&#xff09;到互动平台和社交媒体为主的互联网&#xff08;Web2.0&#xff09;&#xff0c;Web3的目标是让用户重新掌握对数据和数字资产的…

比特币10年价格数据(2014-2024)分析(基础)

数据入口&#xff1a;【每周挑战】比特币10年价格数据可视化和量化分析 - Heywhale.com 本数据集包含 2014 - 2024 的比特币美元价格数据&#xff0c;具体包含比特币每日的开盘价、最高价、最低价、收盘价以及成交量等关键信息。数据说明如下&#xff1a; 字段说明Date日期&a…

PMP--一模--解题--151-160

文章目录 11.风险管理--规划风险应对--机会应对策略--上报151、 [单选] 早在执行阶段&#xff0c;项目经理就发现&#xff0c;事业环境因素&#xff08;EEF&#xff09;最近发生的变化将使实施成本大幅减少&#xff0c;而且还将缩减项目进度计划&#xff0c;项目经理该如何应对…

《沈阳体育学院学报》

《沈阳体育学院学报》创刊于1982年&#xff0c;是由沈阳体育学院主办&#xff0c;面向国内外公开发行的体育类学术期刊&#xff1b;国际标准刊号为ISSN 1004-0560&#xff0c;国内刊号为CN 21-1081/G8&#xff1b;双月刊&#xff0c;单月中旬出版。 《沈阳体育学院学报》是中文…

Django_Vue3_ElementUI_Release_004_使用nginx部署

1. nginx安装配置 1.1 下载nginx Download nginx 1.2 测试一下 1.3 进入nginx用命令操作 2. 部署 2.1 前端部署 2.1.1 修改nginx监听配置 …conf/nginx.conf http {... # 这里不进行修改server {listen 8010; # 监听 80 端口server_name 192.168.10.24; # 输入服务器 ip…

java进销存系统源码:管店云进销存解决方案

在当今数字化转型的大背景下&#xff0c;企业对高效、可靠的进销存管理系统的需求日益增长。Java作为一种广泛使用的编程语言&#xff0c;以其成熟的技术栈和强大的生态系统&#xff0c;成为了开发高性能进销存系统的首选语言之一。本文将介绍一款基于Java进销存系统源码的“管…

[乱码]确保命令行窗口与主流集成开发环境(IDE)统一采用UTF-8编码,以规避乱码问题

文章目录 一、前言二、命令行窗口修改编码为UTF-8三、Visual Studio 2022修改编码为UTF-8四、Eclipse修改编码为UTF-8五、DevCPP修改编码为UTF-8六、Sublime Text修改编码为UTF-8七、PyCharm、IDEA、VS Code及Python自带解释器修改编码为UTF-8 一、前言 在学习的征途中&#x…

AG32 MCU与内置FPGA的FLASH空间如何划分

AG32与内置FPGA的FLASH空间如何划分 关于芯片flash 大小&#xff1a; 不管所选型号的flash 是多大&#xff0c;请注意最后100K 是留给fpga 使用的。 如果使用的芯片是256K 的flash 空间&#xff0c;那么就是156K 程序100K fpga&#xff0c;用户程序不能 超过156K。如果超过1…

网络流之最大流(dinic算法模板+模板题)

dinic算法&#xff1a;时间复杂度O(), n 代表点的个数&#xff0c;m 代表边的个数。 const int N1e55; struct Edge{int to,w,next; }edge[N*2];//双向边 int head[N],d[N],cur[N]; int n,m,s,t,cnt1;// 从 2 , 3 开始配对 void add(int u,int v,int w){edge[cnt]{v,w,head[…

VirtualBox 7.1.0 发布下载 - 开源跨平台虚拟化软件

VirtualBox 7.1.0 (macOS, Linux, Windows) - 开源跨平台虚拟化软件 Oracle VM VirtualBox 7 请访问原文链接&#xff1a;https://sysin.org/blog/virtualbox-7/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 2024 年 9 月 …

软考中级软件设计师——数据结构与算法基础学习笔记

软考中级软件设计师——数据结构与算法基本概念 什么是数据数据元素、数据项数据结构逻辑结构物理结构&#xff08;存储结构&#xff09; 算法什么是算法五个特性算法效率的度量时间复杂度空间复杂度 什么是数据 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所…

树莓派提示:error: externally-managed-environment 树莓派安装虚拟环境,树莓派flask报错

错误信息 raspberryraspberrypi:~ $ pip install flask error: externally-managed-environment脳 This environment is externally managed 鈺扳攢> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to i…

C语言 | Leetcode C语言接雨水II

题目&#xff1a; 题解&#xff1a; typedef struct{int row;int column;int height; } Element;struct Pri_Queue; typedef struct Pri_Queue *P_Pri_Queue; typedef Element Datatype;struct Pri_Queue{int n;Datatype *pri_qu; };/*优先队列插入*/ P_Pri_Queue add_pri_que…