(论文阅读)FuzzBuilder- Automated building greybox fuzzing environment for C/C++ library

FuzzBuilder: Automated building greybox fuzzing environment for C/C++ library 时间:2019 作者:Joonun Jang、Huy Kang Kim(三星研究院、首尔大学) 会议:ACSAC 开源:https://github.com/hksecurity/FuzzBuilder Abstract​ Fuzzing是发现软件漏洞的一种有效方法,由于fuzzing发现的大多数错误都与安全漏洞有关,因此许多安全社区都对模糊测试这种验证软件安全性的自动化方法很感兴趣。然而,并非所有软件都能通过模糊测试进行测试,因为模糊测试需要运行环境,特别是可执行文件,值得注意的是,就库而言,大多数库实际上都没有相关的可执行文件。 ​ 因此,最先进的fuzzer在测试任意库方面存在局限性,为了克服这个问题,我们提出了 FuzzBuilder,为库提供自动fuzzing environment。FuzzBuilder生成的可执行文件会调用库的 API 函数,从而实现库模糊测试,此外,FuzzBuilder 生成的任何可执行文件都与 AFL 等现有模糊器兼容。 ​ 我们通过测试开源库来评估 FuzzBuilder 的整体性能。因此,我们在实现高代码覆盖率的同时发现了库中的未知错误。我们相信,FuzzBuilder 可以帮助安全研究人员节省库模糊测试的设置成本和学习成本。

阅读全文

(论文阅读)RULF-Rust Library Fuzzing via API Dependency Graph Traversal

RULF: Rust Library Fuzzing via API Dependency Graph Traversal 时间:2021 作者:Jianfeng Jiang、Hui Xu、Yangfan Zhou(复旦大学) 会议:ASE 开源:https://github.com/Artisan-Lab/RULF Abstract​ 鲁棒性是 Rust 库开发的一个关键问题,因为 Rust 承诺,如果开发人员只使用安全的 API,就不会出现未定义行为的风险。Fuzzing是检查程序鲁棒性的一种实用方法,然而,由于缺乏目标,现有的fuzzing工具并不能直接适用于library API。故这项工作主要依靠人工逐个设计fuzzing target,耗费大量人力物力。 ​ 为了解决这个问题,本文提出了一种新颖的自动fuzzing目标生成方法,通过遍历 API 依赖图来fuzzing Rust 库。我们确定了library fuzzing的几个基本要求,包括target的有效性、高 API 覆盖率和fuzzing的效率。为了满足这些要求,我们首先采用了带有剪枝功能的广度优先搜索,以找到长度低于阈值的 API 序列,然后反向搜索更长的序列以查找未覆盖的 API,最后将序列集作为集合覆盖问题进行优化。 ​ 我们实现了fuzz target生成器,并使用 AFL++ 在多个现实世界中流行的 Rust 项目上进行了fuzzing实验。我们的工具最终为每个库生成了 7 到 118 个fuzzing target,API 覆盖率高达 0.92。我们以 24 小时为阈值对每个目标进行测试,并从七个库中发现了 30 个以前未知的错误。

阅读全文

(论文阅读)GraphFuzz-Library API Fuzzing with Lifetime-aware Dataflow Graphs

GraphFuzz: Library API Fuzzing with Lifetime-aware Dataflow Graphs 时间:2022 作者:Harrison Green、Thanassis Avgerinos 会议:ICSE 开源:https://github.com/ForAllSecure/GraphFuzz Abstract​ 提出了一种新fuzzer:GraphFuzz,能够自动测试low-level Library APIs。与其他fuzzer不同的是,GraphFuzz 将已执行函数的序列建模为数据流图,因此能够在data和execution跟踪级别执行graph-based mutations。GraphFuzz 自带自动规范生成器,可最大限度地减少开发人员的集成工作。 ​ 我们使用 GraphFuzz 对 Skia(经过严格测试的 Google Chrome 浏览器图形库)进行分析,并将 GraphFuzz 生成的fuzzing harnesses与手工优化、精心编写的 libFuzzer harnesses进行比较。我们发现,GraphFuzz生成的测试用例平均代码覆盖率提高了2-3倍,而开发工作量却很小,而且在此过程中还发现了以前未知的缺陷。我们通过分析另外四个开源库,发现了数十个以前未知的缺陷,从而证明了 GraphFuzz 在low-level Library APIs上的适用性。开发人员已经报告并修复了所有与安全相关的发现。

阅读全文

(论文阅读)Everything Old is New Again- Binary Security of WebAssembly

Everything Old is New Again: Binary Security of WebAssembly 时间:2020 作者:Daniel Lehmann(德国斯图加特大学),Johannes Kinder(慕尼黑联邦国防大学) 会议:USENIX’2020 Abstract​ WebAssembly是一种越来越流行的编译目标,其旨在通过严格分离代码和数据、强制执行类型和限制间接控制流,在浏览器和其他平台上安全可靠地运行代码。不过,内存不安全的源语言的漏洞仍然可以转化为WebAssembly二进制文件的漏洞。 ​ 在文本中,我们分析了什么样的漏洞在WASM二进制文件中是可利用的,以及其与本地代码的比较。我们发现,许多经典的漏洞,由于常见的缓解措施,在本地二进制文件中不再可利用,但在WebAssembly中却完全暴露。另外,WebAssembly能够实现一些独特的攻击,例如覆盖所谓的常量数据或使用堆栈溢出操纵堆。 ​ 我们提出了一套攻击原语,使攻击者(i)能够写入任意内存,(ii)能够覆盖敏感数据,以及(iii)能够通过转移控制流或操纵主机环境来触发意外行为。我们提供了一套易受攻击的POC应用程序,以及完整的端到端漏洞,其中涵盖了三个WebAssembly平台。对真实世界的二进制文件和SPEC CPU程序编译成WebAssembly的经验性风险评估表明,我们的攻击原语在实践中可能是可行的。总的来说,我们的发现表明,WebAssembly缺乏二进制的安全性,这也许是令人惊讶的,我们讨论了潜在的保护机制,以减轻由此产生的风险。

阅读全文

(论文阅读)Fuzzm-Finding Memory Bugs through Binary-Only Instrumentation and Fuzzing of WebAssembly

Fuzzm: Finding Memory Bugs through Binary-Only Instrumentation and Fuzzing of WebAssembly 时间:2021 作者:Daniel Lehmann(德国斯图加特大学),Martin Toldam Torp(丹麦奥胡斯大学) Abstract​ WebAssembly二进制文件通常是由内存不安全的语言,如C和C++编译而成。由于WebAssembly的线性内存和缺失的保护功能,例如堆栈canaries,源码级的内存漏洞在编译的WebAssembly二进制文件中是可以利用的,有时甚至比本地代码更容易。 ​ 本文通过第一个只针对WebAssembly的二进制fuzzer来解决检测此类漏洞的问题。我们的方法被称为Fuzzm,它结合了检测堆栈和堆的溢出的canaries插桩、有效的代码覆盖率插桩、WebAssembly虚拟机和一个流行的AFL fuzzer的输入生成算法。除了作为fuzzer的oracle,我们的canary还可以作为独立的二进制加固技术,以防止生产中的脆弱二进制文件被利用。 ​ 我们用28个真实世界的WebAssembly二进制文件来评估Fuzzm,其中一些是从源代码编译的,还有一些是在野外发现的,没有源代码。该fuzzer探索了数以千计的执行路径,触发了几十次崩溃,每秒执行数百次程序执行。当用于二进制加固时,该方法可以防止先前公布的针对脆弱的WebAssembly二进制文件的漏洞,同时施加较低的运行时间开销。

阅读全文

(论文阅读)WAFL- Binary-Only WebAssembly Fuzzing with Fast Snapshots Oracle for WebAssembly

WAFL: Binary-Only WebAssembly Fuzzing with Fast Snapshots 时间:2021 作者:Keno Haßler,Dominik Maier(柏林工业大学) 期刊:ROOTS’21 Abstract​ WebAssembly 是一种用于二进制代码的开放标准,正在迅速在网络和其他领域得到应用。由于这些二进制文件通常是用低级语言(如C和C++)编写的,它们可能存在与传统对应物相同的错误。目前存在着很少的工具可以用于发现这些 WebAssembly 二进制文件中的错误。 ​ WAFL 在 WAVM(WebAssembly 虚拟机)中添加了一组补丁,以生成用于流行的 AFL++ 模糊测试工具的覆盖率数据。借助于提前编译(AOT)的 WAVM,WAFL 的性能已经非常高效。WAFL 还添加了轻量级的虚拟机快照,通过用 WAFL 的快照替换传统上在 AFL++ 测试中使用的fork函数,WAFL 的测试可以在原始模糊测试性能方面甚至超过具有编译时插桩的本机测试。据我们所知,WAFL 是首个用于仅限二进制 WebAssembly 的覆盖率引导模糊测试工具,而无需源代码。 ​ 总结来说,WAFL 是一种用于对 WebAssembly 二进制文件进行模糊测试的工具,通过在 WAVM 中添加补丁和轻量级虚拟机快照,提供了高效的覆盖率引导模糊测试能力。

阅读全文

(论文阅读)WasmFuzzer- A Fuzzer for WebAssembly Virtual Machines

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智能合约的漏洞。

阅读全文