(论文阅读)Finding the Dwarf - Recovering Precise Types from WebAssembly Binaries

Finding the Dwarf: Recovering Precise Types from WebAssembly Binaries 会议:PLDI'22 作者:Daniel Lehmann, Michael Pradel 1. 问题背景 随着WebAssembly越来越受欢迎,在越来越多的应用领域应用,Wasm逆向的需求也越来越旺盛。例如,一个开发者可能回想了解其在项目中使用的第三方Wasm module,以更加了解其exported functions。 理解一个WebAssembly binary的第一步就是理解函数的type signatures(参数、返回值)。由于type与理解底层代码高度相关,因此现有的native binary逆向工程工具都以type为目标 [12, 14, 57]。开发人员的研究也表明,static type有助于理解代码。 但Wasm binary中的函数type种类非常受限,wasm只支持i32/i64/f32/f64四种基本类型。一个i32可能是一个signed或者unsigned integer,又或者pointer。因此,如果能恢复高级语言中的type是非常有用的。 恢复高级type的一种方法是基于 "经典 "data-flow anlysis或type inference,即根据程序中值的使用方式收集约束[12]。不过,这种方法实施起来比较复杂,而且通常需要建立在繁重的分析框架上,如 BAP 或 CodeSurfer [43, 54]。支持 WebAssembly,尤其是其略显特别的堆栈机[25],将是一项非同小可的工作。

阅读全文

(论文阅读)Wasmati-An efficient static vulnerability scanner for WebAssembly

Wasmati: An efficient static vulnerability scanner for WebAssembly 作者:Tiago Brito, Pedro Lopes, Nuno Santos 时间:2022.4 期刊:Computers & Security(B刊) Code:wasmati/wasmati: A Generic and Efficient Code Property Graph Infrastructure forScanning Vulnerabilities in WebAssembly Code (github.com) ABSTRACT 本文提出了Wasmati,一种static analysis tool用于寻找Wasm binary中的漏洞。其基于code property graph(CPG)。作者给出了Wasm中CPG的定义和生成方法,自定义了快速生成CPG的算法和一个查询语言Wasmati Query Language(WQL)。作者实现了10中不同的vulnerability查询,并在四种dateset和真实程序上做了测试。

阅读全文

(论文阅读)Binary-only Kernel Address Sanitizer for Effective Kernel Fuzzing

BoKASAN: Binary-only Kernel Address Sanitizer for Effective Kernel Fuzzing 会议:Security'23 作者:Mingi Cho,Dohyeon An,Hoyong Jin,Taekyoung Kwon(Yonsei University) ABSTRACT Kernel Address Sanitizer(KASAN)是在 Linux 内核中查找UAF和out-of-bounds的重要工具,但它需要内核源代码来进行编译时插桩。要将KASAN应用于闭源系统,我们必须开发一种纯二进制KASAN,而这是一项挑战。使用二进制重写和processor support来为二进制模块运行KASAN的技术需要一个已经插桩好KASAN的内核,因此仍然需要内核源代码。动态插桩提供了一种替代方法,但其大大增加了性能开销,使得内核fuzzing不切实际。

阅读全文

(论文阅读)WaVe-a verifiably secure WebAssembly sandboxing runtime

WaVe: a verifiably secure WebAssembly sandboxing runtime 作者:Evan Johnson(UCSD), Evan Laufer(Stanford), Zijie Zhao(UIUC), Fraser Brown(CMU) 会议:SP'23 Abstract WebAssembly (Wasm) 是一种流行的可移植字节码,其编译器会自动插入运行时检查,以确保数据流和控制流被限制在单一内存段内。事实上,现代编译后的Wasm程序已经发展到可以自行验证这些检查的程度,从而将编译器从可信计算基础中移除。 然而,由此产生的完整性属性仅对严格在 Wasm 沙箱内执行的代码有效。与运行时系统的任何交互(运行时系统管理沙箱并公开用于访问操作系统资源的 WebAssembly 系统接口 (WASI))都是在此契约之外进行的。由此产生的难题是,如何在保持 Wasm 强大隔离特性的同时,还允许此类程序与外部世界(即文件系统、网络等)进行交互。 我们的论文通过实现 WASI 的已验证安全运行时系统 WaVe 提出了这一问题的解决方案。我们从机制上验证了与 WaVe 的交互(包括操作系统的副作用)不仅能保持 Wasm 的内存安全保证,还能保持对主机操作系统的存储和网络资源的访问隔离。我们从机制上验证了与WaVe的交互(包括操作系统的副作用)不仅能保持Wasm的内存安全保证,还能保持主机操作系统存储和网络资源的访问隔离。最后,尽管运行时完全脱离了可信计算基础,我们还是证明了WaVe的性能可与现有的工业(但不安全)Wasm运行时媲美。

阅读全文

(技术积累)(Part 2)How does Wasm module interact with JavaScripte in browser?

(Part 2)How does Wasm module interact with JavaScripte in browser? Reference: WebAssembly in Action. Chapter 4.2 Part1中为了使得JS代码可以直接调用Wasm函数,并传递内存,使用了Emscripten提供的ccall,UTF8ToString,_malloc和 _free函数,这些helper functions提供了对标准JavaScripte WebAssembly API的封装。若Emscripten不生成JS plumbing code,即没有这些help functions时,使用下面的方式来使JS和Wasm Module交互:

阅读全文