WasmFuzzer: A Fuzzer for WebAssembly Virtual Machines
时间:2022
作者:Bo Jiang, Zichao Li(北航)
期刊:SEKE(CCF-C)
Abstract WebAssembly是一种快速、安全、可移植的低级语言,适用于各种应用场景,Web浏览器或区块链平台广泛使用WebAssembly虚拟机作为执行引擎。当Wasm虚拟机的实现存在bug时,WebAssembly的执行可能导致应用程序中的错误或漏洞。由于WASM虚拟机的语法检查机制,二进制级别的fuzzing无法暴露bug,因为大多数输入无法到达WASM虚拟机的深层逻辑。
在这项工作中,我们提出了WasmFuzzer,一个用于WASM虚拟机的bytecode级fuzzing工具。WasmFuzzer提出在Wasm字节码级别上生成初始种子进行fuzzing,并设计了一套系统的Wasm字节码突变mutation operators。此外,WasmFuzzer还提出了一种自适应的突变策略,以寻找适用于不同fuzzing目标的最佳mutator。
我们对三个真实的Wasm虚拟机进行评估,结果显示WasmFuzzer在代码覆盖率和唯一崩溃(unique crash)方面明显优于AFL。
(论文阅读)Fuzzing-A Survey for Roadmap
Fuzzing: A Survey for Roadmap
时间:2022
作者:Xiaogang Zhu、Sheng Wen(澳洲斯威本科技大学)
期刊:ACM Computing Surveys(中科院一区)
Abstract 最近,模糊测试(fuzzing)在检测安全缺陷方面有着大量使用,它产生了大量的测试案例,并监控缺陷的执行情况,fuzzing已经在各种应用程序中发现了成千上万的错误和漏洞。
Fuzzing虽然有效,但对其所面临的问题缺乏系统的分析。作为一种缺陷检测技术,fuzzing需要缩小整个输入空间(input space)和缺陷空间(defect space)之间的差距。如果对生成的输入没有限制,输入空间是无限的,然而,应用中的缺陷是稀疏的,这表明缺陷空间要比整个输入空间小得多。此外,由于fuzzing会产生大量的测试用例来反复检查目标,这就要求fuzzing以自动的方式进行,由于应用程序和漏洞的复杂性,对不同的应用程序进行自动化执行具有挑战性
在这篇文章中,我们系统地回顾和分析了这些gap以及它们的解决方案,同时考虑了广度和深度。这项调查可以作为初学者和高级开发人员更好地了解fuzzing的路线图。
(论文阅读) Concolic Execution for WebAssembly
Concolic Execution for WebAssembly
时间:2022
作者:Filipe Marques、José Fragoso Santos、Nuno Santos(里斯本大学)
会议:ECOOP’2022(软工CCF-B)
Abstract WebAssembly(Wasm)是一种新的二进制指令格式,允许用高级语言编写的目标编译代码以接近原生的速度被浏览器的JavaScript引擎执行。尽管Wasm有明显的性能优势,但它为网络程序引入错误或安全漏洞提供了机会,因为用不安全语言编写的程序中已有的问题可以转移到交叉编译的二进制文件中。这种二进制文件的源代码经常无法用于静态分析,这就需要有能够直接处理Wasm代码的工具。尽管这种潜在的安全关键情况,仍然明显缺乏分析Wasm二进制文件的工具支持。
我们提出了WASP,一个用于测试Wasm模块的符号执行引擎,它直接在Wasm代码上工作,并建立在一个符合标准的Wasm参考实现之上。我们对WASP进行了全面的评估:它被用来符号执行测试C语言的通用数据结构库和C语言的亚马逊加密SDK,证明它可以为真实世界的C语言应用找到错误并产生高覆盖率的测试输入;并进一步针对Test-Comp基准进行测试,获得了与成熟的C语言符号执行和测试工具相当的结果。
(论文阅读) WANA-Symbolic Execution of Wasm Bytecode for Extensible Smart Contract Vulnerability Detection
(论文阅读)WANA: Symbolic Execution of Wasm Bytecode for Extensible Smart Contract Vulnerability Detection
时间: 2021
作者: B Jiang, Y Chen, D Wang(北航)
会议: QRS‘2021 (软工CCF-C)
开源: https://github.com/gongbell/WANA
Abstract 许多流行的区块链平台支持智能合约,以建立去中心化的应用程序。然而,智能合约内的漏洞已经证明导致其终端用户的严重经济损失。特别是EOSIO智能合约平台上的智能合约导致了大约38万个EOS代币的损失,在攻击发生时,价值约为190万美元。EOSIO智能合约平台是基于Wasm虚拟机的,它也是支持其他智能合约平台以及网络应用的底层系统。在这项工作中,我们提出了WANA,一个基于Wasm字节码符号执行的可扩展智能合约漏洞检测工具。WANA提出了一套基于Wasm字节码分析的算法来检测EOSIO智能合约的漏洞。我们的实验分析表明,WANA可以有效地、高效地检测EOSIO智能合约中的漏洞。此外,我们的案例研究还表明,WANA可以扩展到有效检测Ethereum智能合约的漏洞。
(论文阅读) Eunomia-enabling User-specified Fine-Grained Search in Symbolically Executing WebAssembly Binaries
Eunomia: Enabling User-specified Fine-Grained Search in Symbolically Executing WebAssembly Binaries
时间:2023.4
作者:Ningyu He、Zhehao Zhao(北大)/Haoyu Wang(华科)
会议:ISSTA‘2023
开源: https://github.com/HNYuuu/Eunomia-ISSTA23
Abstract 尽管现有的技术已经提出了自动化的方法来缓解符号执行的路径爆炸问题,但用户仍然需要通过仔细应用各种搜索策略来优化符号执行。由于现有的方法主要只支持粗粒度的全局搜索策略,它们不能有效地遍历复杂的代码结构。在本文中,我们提出了Eunomia,一种符号执行技术,允许用户指定局部领域知识,以实现细粒度搜索。
在Eunomia中,我们设计了一个富有表现力的领域特定语言(DSL),即AES,让用户可以精确地将本地搜索策略定位到目标程序的不同部分。为了进一步优化局部搜索策略,我们设计了一种基于区间的算法,该算法可以自动隔离不同局部搜索策略的变量背景,避免同一变量的局部搜索策略之间的冲突。
我们将Eunomia作为一个针对WebAssembly的符号执行平台来实现,这使我们能够分析用各种语言(如C和Go)编写但可以编译成WebAssembly的应用程序。据我们所知,Eunomia是第一个支持WebAssembly运行时全部功能的符号执行引擎。
我们用一个专门的符号执行微基准套件和六个真实世界的应用来评估Eunomia。我们的评估显示,Eunomia在现实世界的应用中加速了错误检测,最多可达到三个数量级。根据一项全面的用户研究结果,用户可以通过编写一个简单直观的AES脚本来显著提高符号执行的效率和效果。除了验证六个已知的真实世界的bug,Eunomia还在一个流行的开源项目Collections-C中检测到两个新的0-day bug。
(技术积累)Syzkaller环境配置
Syzkaller环境配置
Syzkaller内核模糊测试工具环境搭建,简单测试
项目地址:google/syzkaller: syzkaller is an unsupervised coverage-guided kernel fuzzer (github.com)
(论文复现)GREBE-Unveiling Exploitation Potential for Linux Kernel Bugs
(论文复现)GREBE: Unveiling Exploitation Potential for Linux Kernel Bugs源码:Markakd/GREBE (github.com)
(论文阅读)Automated WebAssembly Function Purpose Identification With Semantics-Aware Analysis
Automated WebAssembly Function Purpose Identification With Semantics-Aware Analysis
会议:WWW’23(International World Wide Web Conference,CCF-A)
作者:Alan Romano、Weihang Wang(USC)
时间:2023.4
ABSTRACT WebAssembly是最近建立的一个网络标准,用于提高网络应用的性能。该标准定义了一种二进制代码格式,作为各种语言的编译目标,如C、C++和Rust。该标准还定义了一种可读性的文本表示法,不过,WebAssembly模块很难被人类读者解释,无论他们的经验水平如何。这使得理解和维护任何现有的WebAssembly代码变得困难。因此,第三方WebAssembly模块需要被开发者隐含地信任,因为验证功能本身可能是不可行的。
为此,我们构建了WASPur,一个自动识别WebAssembly函数功能的工具。为了构建这个工具,我们首先构建了一个广泛的WebAssembly样本集,代表了WebAssembly的状态。其次,我们分析数据集,并确定所收集的WebAssembly模块的不同使用情况。我们利用WebAssembly模块的数据集来构建模块中功能的语义感知的中间表示(IR)。我们对函数IR进行编码,用于机器学习分类器,我们发现这个分类器可以预测一个给定函数与已知命名函数的相似性,其准确率为88.07%。我们希望我们的工具能够检查优化和减化的WebAssembly模块,这些模块去除了函数名称和大多数其他语义标识符。
(论文阅读)Binary-level Directed Fuzzing for Use-After-Free Vulnerabilities
(论文阅读)Binary-level Directed Fuzzing for Use-After-Free Vulnerabilities
时间:2020
作者:Manh-Dung Nguyen(巴黎萨克雷大学CEA)、Sébastien Bardin、Richard Bonichon
会议:RAID
开源:[1]https://github.com/strongcourage/uafuzz ;[2]https://github.com/strongcourage/uafbench
ABSTRACT Directed fuzzing聚焦于通过利用额外信息(bug stack trace、补丁或者有风险的操作)来测试代码的特定部分,其重要的应用场景包括漏洞复现、补丁测试以及对静态分析报告的验证。尽管Directed fuzzing最近受到了很多关注,但诸如UAF等难以检测的漏洞仍然没有得到很好的解决,特别是在二进制层面。
我们提出了UAFUZZ,第一个针对UAF漏洞的二进制级别directed greybox fuzzer。该技术包括了一个针对UAF特性设计的Fuzzer,一个轻量级的代码插装(code instrumentation)工具和一个高效的bug处理步骤。
对真实案例中的bug复现进行的实验评估表明,UAFUZZ在故障检测率、暴露时间和bug处理方面明显优于最先进的Directed fuzzer。UAFUZZ在补丁测试中也被证明是有效的,在Perl、GPAC和GNU Patch等程序中发现了30个新的错误(7个CVEs)。最后,我们为社区提供了一个专门用于UAF的大型模糊测试基准,该基准建立在真实代码和真实bug之上。