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
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交互:
(技术积累)(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++开发的销售程序,但想开发一个网页端销售接口用于对用户输入的数据进行验证,例如:
(技术积累)Creating your first Wasm module
Creating your first Wasm
module
参考:《WebAssembly in action》
针对Wasm如何与JS交互。
(论文阅读) 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)
使各种动态分析(包括指令计数、调用图提取、内存访问跟踪和污点分析)的实施变得简单易行。
(论文阅读)(Part2)SoK-Sanitizing for Security
(Part2)SoK: Sanitizing for Security
作者:Dokyung Song, Julian Lettner, Prabhu Rajasekaran(UC Irvine)
会议:S&P’19
Program InstrumentationSanitizer 通过在程序中嵌入inlined reference monitors(IRM)来执行其漏洞查找策略,这些IRM会监控和调和所有可能导致漏洞的程序指令,这些指令包括(但不限于)load和store、栈帧分配和释放、调用内存分配函数(如 malloc)和系统调用。IRM可以通过compiler、linker或instrumentation framework嵌入程序中。
(论文阅读)(Part1)SoK-Sanitizing for Security
(Part1)SoK: Sanitizing for Security
作者:Dokyung Song, Julian Lettner, Prabhu Rajasekaran(UC Irvine)
会议:S&P’19
ABSTRACTC 和 C++ 编程语言出了名的不安全,但仍然不可或缺。因此,开发人员采用多管齐下的方法,抢在对手之前发现安全问题。这些方法包括手动、静态和动态程序分析。动态错误查找工具(即 “sanitizers”)可以发现其他类型分析无法发现的错误,因为它们可以观察到程序的实际执行情况,因此可以直接观察到发生的不正确程序行为。
学术界已经开发了大量的sanitizer原型,实践者也对其进行了改进。我们系统地概述了sanitizer,重点介绍了它们在发现安全问题方面的作用。具体来说,我们对现有工具及其涵盖的安全漏洞进行了分类,描述了它们的性能和兼容性,并强调了各种权衡。