关于openharmony:Wasm软件生态系统安全分析

56次阅读

共计 4133 个字符,预计需要花费 11 分钟才能阅读完成。

本文转载自 OpenHarmony TSC 官网微信公众号《峰会回顾第 12 期 | Wasm 软件生态系统安全剖析》

演讲嘉宾 | 王浩宇
回顾整顿 | 廖   涛
排版校对 | 李萍萍

嘉宾简介
王浩宇,华中科技大学传授,博士生导师,华中科技大学 OpenHarmony 技术俱乐部主任。钻研关注于新兴软件系统中的平安、隐衷和可靠性问题,近五年发表 CCF A 类和 CSRankings 顶会论文近 70 篇,在软件平安和零碎测量畛域的顶会论文成绩在国内名落孙山。

内容起源
第一届凋谢原子开源基金会 OpenHarmony 技术峰会——开发者工具分论坛

视频回顾
视频链接:https://www.bilibili.com/video/BV1UX4y1879e/?spm_id_from=333….

正 文 内 容
WebAssembly(Wasm)是 W3C 标准化组织制订的一种高效、底层、可移植的字节码格局。目前,Wasm 越来越多地用于浏览器、无服务器计算、跨平台容器和区块链 DApp 等场景。Wasm 与 OpenHarmony 生态可能有哪些碰撞呢?华中科技大学网络安全学院王浩宇传授在第一届 OpenHarmony 技术峰会上,分享了以后在 Wasm 平安畛域所做的摸索,并瞻望了 Wasm 与 OpenHarmony 联合的新方向。

01►Wasm 软件生态系统介绍
目前,如 C、C++、Rust、Go、Java、C# 等简直所有支流高级语言都能够被编译到 Wasm,所有的支流浏览器也均反对 Wasm。此外业界也实现了很多独立的 Wasm 虚拟机(运行时),反对解释器、AOT、JIT 等模式。

WebAssembly (Wasm) 及其运行环境

Wasm 的执行架构与设计特点有:
● 类型平安的栈指令:线性工夫类型查看算法,齐全确定栈上值的数量和类型;
● 结构化的控制流指令:外部指令仅能依据嵌套构造跳转,简化了编译器实现;
● 可拓展的线性内存:一页为 64KB,模块中指定初始内存页和最大内存页数量,运行时可动静增长;函数调用栈,返回地址等重要数据由内部运行时保护,保障了安全性;
● 指令和数据齐全拆散:函数“地址”通过下标示意,非间接跳转通过跳转表实现。

Wasm 的利用前景非常广大。例如,Wasm 可能反对高效的 Web 计算,因而基于 Wasm 可能实现大型利用在浏览器中运行;Wasm 也反对跨平台容器技术,实用于嵌入式、可信计算以及云计算等场景。此外,Wasm 在 Web 3.0/ 区块链中的 DApp 和智能合约等畛域也被利用宽泛。

Wasm 多语言、跨平台以及高性能的个性,使其十分符合 OpenHarmony 面向万物互联新场景的开源生态,在挪动设施上利用前景宽泛。目前,WasmEdge 开源项⽬维护者 Michael Yuan 等人曾经发动了 OpenHarmony Wasm-SIG 提案,致⼒于宣传、施行、推⼴ Wasm 与 OpenHarmony 的集成,在 OpenHarmony 终端设备上能够平安高效的运行第三方开发者用 C、C++、Rust 等语言编写的 Wasm 程序,有利于扩充 OpenHarmony 生态的开发者群体。

02►Wasm 平安及相干钻研
Wasm 生态中也有很多平安问题失去了学术界的器重,包含前端编译器平安,代码移植平安,Wasm 二进制平安,Wasm 相干的歹意利用,Wasm 可信执行环境等等。

● 代码内存平安:因为 Wasm 生态还较不成熟,在传统二进制中曾经有成熟进攻措施的破绽依然可能被利用。例如,因为不足 stack canary 机制,攻击者能够轻松利用栈溢出破绽;Wasm 也不足相干的堆爱护机制等。

● 程序移植平安:大量的现有程序能够被“间接”编译到 Wasm,但可能会引入 bug 或平安问题;移植会导致代码行为(如指针大小、内存能力、环境变量等)不同;移植时处理不当可能导致不同的堆内存治理实现艰难、不足安全措施等平安问题。

● 歹意 Wasm 程序:目前很大一部分 Wasm 程序被用于歹意挖矿等行为,Wasm 也能够作为混同或者加壳形式被恶意软件利用。

Wasm (平安) 问题及学术界相干钻研

然而,目前 Wasm 平安相干钻研还处于初级阶段。一方面,Wasm 一直引入的新个性与新场景继续带来新的平安问题和挑战;另一方面,Wasm 简直没有通用的程序剖析框架,大部分工具都是针对特定平台的 Wasm 二进制剖析(只反对局部指令集、只对平台相干库函数做建模),无奈剖析通用 Wasm 二进制;此外,Wasm 的二进制反编译器还处于初期阶段,Wasm 虚拟机和编译器不够成熟,Wasm 代码混同以及代码爱护技术还较为欠缺等。

针对上述平安问题,王浩宇传授所率领的学术团队在 Wasm 二进制翻译、Wasm 程序剖析、Wasm 运行时 / 编译器 bug 检测等方面做了平安加强相干工作。例如,在区块链智能合约场景下,实现了从 EVM 字节码到 eWasm 字节码的平安 Wasm 二进制翻译;提出了 Wasm 符号执行框架 EOSafe、Wasm 含糊测试框架 WASAI、Wasm 通用二进制重写框架 BREWasm、Wasm 二进制混同工具 Chaos 等剖析技术。此外,王浩宇传授团队提出了针对 Wasm 运行时的含糊测试技术,曾经在 wasmer,wasmtime,WAMR,wasm3,Wasm Edge 等运行时中发现了数十个代码缺点。

王浩宇传授的团队 Wasm 相干钻研工作

03►Wasm 二进制重写及其平安利用
在本次峰会的开发者工具分论坛,王浩宇传授介绍了其团队提出的一个通用的 Wasm 二进制重写工具。Wasm 二进制重写具备无需源码、跨平台和跨语言等长处,其利用场景包含 Wasm 程序修复、测试用例生成、代码插桩、辅助动态分析、Wasm 代码破绽检测、Wasm 含糊测试、Wasm 二进制爱护与混同等。目前,学术界已有的 Wasm 二进制重写和插桩的钻研大都只局限于简略的指令级别批改,比方在某一指令前后增加一些指令,对控制流的批改也仅局限于某一特定模式的更改等。然而,一个通用的 Wasm 二进制重写框架是如上泛滥 Wasm 钻研工作的根底。

实现一个通用的 Wasm 二进制重写框架存在一些挑战。

(1)Wasm 不同段之间的耦合性:Wasm 中,一个函数的所有信息,包含函数签名,函数指令等内容散布在不同的 Wasm 段中,这导致对独自一个段的重写不足以实现 Wasm 中的一个渺小性能。而且开发者须要相熟多个段的不同的数据结构能力实现对 Wasm 中某一性能的重写;

(2)结构化控制流与控制流批改:Wasm 没有 goto-like 的跳转指令,且只有将代码块进行嵌套能力增加跳转指令,这对实现灵便的控制流重写带来了较大挑战

(3)Wasm 栈均衡校验和修复:一个正确的 Wasm 二进制须要满足动态校验规定。例如,一个函数的所有信息都靠函数的 index 索引,且函数的指令须要满足栈均衡。在对 Wasm 二进制重写后,如果呈现了 index 之间的索引不统一或某一函数指令没有栈均衡等动态校验问题,则会生成谬误的 Wasm 二进制。

王浩宇传授团队针对上述挑战,别离提出了相应的解决方案。针对挑战(1),除了提供细粒度的对每个段中数据结构的重写性能外,还将各个段的构造形象成一组语义并提供大量针对语义的重写 API,使开发者不须要关怀底层对各个段的批改逻辑。

针对挑战(2),提出控制流构造原子化的办法,在加载 Wasm 模块时,对指令进行宰割和构建代码块(原子化),利用原子化的控制流构造能够组合构建更简单的控制流构造,并在批改完结后,将基于原子化代码块的控制流构造转换回 Wasm 指令。

针对挑战(3),实现两个辅助模块 indices-fixer 和 stack-calculator 以修复索引谬误和栈均衡。

BREWasm 框架

基于上述解决方案,王浩宇传授率领的团队提出了一个通用的 Wasm 二进制重写框架——BREWasm。该框架次要包含以下 5 局部性能:

● Wasm Parser:给定一套繁难 DSL,将 Wasm 段和数据结构形象,并解析为一个可操作对象的列表;
● Section Rewriter:基于 Wasm 段和数据结构形象,实现细粒度段重写 API;
● Semantics Rewriter:将段重写 API 进行组合,实现一组语义更为丰盛的 Semantic API;
● Control Flow Reconstructor:实现了一组可能任意灵便批改控制流且无需关注栈均衡的 Control Flow API;
● Wasm Encoder:将重写后的可操作对象列表依照段和数据结构形象从新编码为非法的 Wasm 二进制。

Wasm 控制流原子化示意以及 BREWasm 中提供的局部 Control Flow API

BREWasm 可能利用在 Wasm 代码混同、Wasm 程序栈溢出爱护、Wasm 程序插桩等场景。例如,在 Wasm 二进制混同上,BREWasm 采取切分原有 Wasm 代码块来取得控制流重写的根本元素,并将这些元素形成一个 switch-case 的控制流构造,再将其插入到 while 控制流中,能够仅用几行代码实现对任意 Wasm 程序的控制流平坦化混同;在 Wasm 程序栈溢出爱护上,仅调用 BREWasm 提供的几个 API,即可实现对可能存在栈溢出问题的函数进行 hook,在函数被调用前提前在栈上插入 canary,在函数执行实现后去检测 canary 的值是否产生扭转,来确定函数执行过程中是否呈现了栈溢出问题;在 Wasm 程序插桩上,BREWasm 可能对 Wasm 二进制插桩,实现动静污点剖析,调用图剖析,内存拜访剖析,歹意挖矿检测等性能,也可能给定插桩规定,对每个 Wasm 指令进行自动化插桩,为 Wasm 二进制导入内部实现的剖析 API。此外,BREWasm 还可能十分不便地利用于 Wasm 代码变换、Wasm 程序修复以及 Wasm 含糊测试等场景。

BREWasm 对任意 Wasm 程序实现控制流平坦化示例

04►总结与瞻望
跨语言、跨平台、跨场景的开源软件生态是发展趋势,也引入泛滥新的攻击面。Wasm 的个性使其十分符合 OpenHarmony 面向万物互联新场景的开源生态,而其中的平安问题也不可漠视。期待学术界和工业界一起,为万物互联的开源生态添砖加瓦,继续为新兴软件平安赋能!

点击关注理解更多 OpenHarmony TSC 技术干货内容

正文完
 0