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和真实程序上做了测试。
(技术积累)WasmParser Examples
WasmParser Examples解析
针对Rust库Wasmparesr中给出的如下样例:
https://docs.rs/wasmparser/latest/wasmparser/struct.Parser.html#method.parse
https://docs.rs/wasmparser/latest/wasmparser/struct.Parser.html#method.parse_all
的解析
(论文阅读)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)
ABSTRACTKernel Address Sanitizer(KASAN)是在 Linux 内核中查找UAF和out-of-bounds的重要工具,但它需要内核源代码来进行编译时插桩。要将KASAN应用于闭源系统,我们必须开发一种纯二进制KASAN,而这是一项挑战。使用二进制重写和processor support来为二进制模块运行KASAN的技术需要一个已经插桩好KASAN的内核,因此仍然需要内核源代码。动态插桩提供了一种替代方法,但其大大增加了性能开销,使得内核fuzzing不切实际。
(技术积累)Ret2libc中的main与_start函数
Ret2libc中的main与_start函数1. 题目背景Ret2libc3练习(ret2libc3-CTF Wiki)是一个简单的return to libc练习题,其通过向程序输入两次payload来get shell,第一次payload用于获取__libc_start_main函数真实加载地址,第二次payload通过该加载地址计算出libc中的偏移,进而调用system函数:
(技术积累)Fuzzm Heap&Stack Instrumentation代码解析
Fuzzm Heap&Stack Instrumentation代码解析1. instrument_with_heap_canary_check()
Source: /fuzzm-project/wasm_instrumenter/src/canaries.rs
Functionality: 对Wasm插入heap canary
1. dlmalloc(size)
(论文阅读)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
AbstractWebAssembly (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交互:
(技术积累)(Part 1)How does Wasm module interact with JavaScripte in browser?
(Part 1)How does Wasm module interact with JavaScripte in browser?
Reference:
WebAssembly in Action. Chapter 4.1
Background假设一个公司有一个用C++开发的销售程序,但想开发一个网页端销售接口用于对用户输入的数据进行验证,例如:
(论文阅读) Wasabi-A Framework for Dynamically Analyzing WebAssembly
Wasabi: A Framework for Dynamically Analyzing WebAssembly
**作者:**Daniel Lehmann,Michael Pradel
**会议:**ASPLOS’19
**开源:**http://wasabi.software-lab.org
ABSTRACT这篇文章提出了第一个Wasm动态分析框架,Wasabi。其基于binary instrumentation,通过将用JavaScript写成的测试函数插桩进Wasm binary中来实现分析。对 WebAssembly 进行动态分析会面临一些独特的挑战,例如使用具有固定类型的分析函数跟踪类型多态指令的问题,我们通过按需单态化(on-demand monomorphization)来解决这个问题。
我们在计算密集型的benchmarks和实际应用上对Wasabi的评估表明,Wasabi (i) 忠实地保留了原始程序行为,(ii) 为重量级动态分析带来了合理的开销,(iii) 使各种动态分析(包括指令计数、调用图提取、内存访问跟踪和污点分析)的实施变得简单易行。