(论文阅读)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之上。

阅读全文

(论文阅读)The Use of Likely Invariants as Feedback for FuzzersVulnerabilities

(论文阅读)The Use of Likely Invariants as Feedback for Fuzzers 时间:2021.8 作者:Andrea Fioraldi、Daniele Cono D’Elia、Davide Balzarotti 会议:USENIX 开源:eurecom-s3/invscov: The Use of Likely Invariants as Feedback for Fuzzers (github.com) 截止2023.5.6被引23次 ABSTRACT​ 如今Fuzzing的主要限制是以coverage-guided为基准设计的fuzzing方法是为了尽可能达到程序的不同部分而逐渐被优化,但若仅仅可达性不足以触发一个漏洞时,这种方法就会陷入困境。实际上,许多bug的触发不仅依赖于特定的控制流,还依赖一些程序的变量的值(数据流)。不幸的是,过去提出的捕捉程序状态的替代探索策略在实践中帮助不大,因为它们会立即导致状态爆炸问题。 ​ 在本文,我们提出了一个新型反馈机制,通过考虑到程序变量的”不变值“和其之间的关系来增强代码覆盖率。为此,我们在基本块层面上学习可能的变量“不变值”,并相应地划分程序状态空间。我们的反馈可以区分输入是否违反了一个或多个不变量,并对其进行奖励,从而完善代码覆盖通常提供的程序状态近似值。 ​ 基于LLVM和AFPL++,我们在一个名为INVSCOV的原型中实现了上述的技术。实验表明,与使用纯代码覆盖反馈的fuzzer相比,我们的方法可以发现更多、更不同的bug。此外,还发现了一个在OSS-Fuzz上每天测试的库中的两个漏洞,而且当时在其最新版本中仍然存在。

阅读全文

(技术总结)The Kernel Address Sanitizer(KASAN)

The Kernel Address Sanitizer(KASAN)1. 兼容性​ KASAN是一个动态内存安全错误检测器,旨在发现内核out-of-bounds和UAF错误。KASAN有三个模块:Generic KASAN、Software Tag-Based KASAN、Hardware Tag-Based KASAN。Generic KASAN兼容许多CPU架构,但性能开销很大;Software Tag-Based KASAN和Hardware Tag-Based KASAN都只兼容arm64架构的CPU,性能开销会更小。 ​ 一般的,称Generic KASAN和Software Tag-Based KASAN为software KASAN; ​ 称Software Tag-Based KASAN和Hardware Tag-Based KASAN为tag-based KASAN。 ​ Generic KASAN支持的指令集架构有:x86_64, arm, arm64, powerpc, riscv, s390, 和 xtensa;tag-based KASAN只支持arm64。

阅读全文

GREBE-Unveiling Exploitation Potential for Linux Kernel Bugs

GREBE: Unveiling Exploitation Potential for Linux Kernel Bugs 时间:2022 作者:Zhenpeng Lin,Yueqi Chen,Yuhang Wu 会议:SP ABSTRACT​ 最近,动态测试工具显著提升了Linux内核漏洞的发掘速度,这些工具会在挖掘漏洞时自动地生成报告,具体说明Linux系统的error。报告中的error暗示了相应的内核错误的可能的exploitability,因此,许多安全分析员使用(报告中)表现出来的error来推断一个错误的可利用性,从而考虑其exploit开发的优先级。然而,使用报告中的error可能会低估一个错误的可利用性。报告中表现出的error可能取决于该error是如何被触发的。通过不同的路径或在不同的背景下,一个error可能表现出各种错误行为,意味着非常不同的利用潜力。 ​ 此文提出了一个新的内核fuzz技术来找到所有可能的内核漏洞的error的表现。与传统的专注于内核代码覆盖率的内核fuzzing技术不同,我们的fuzzing技术更多的是针对有漏洞的代码片段。为了探索不同触发同一个bug的上下文/路径,文章引入了object-driven内核fuzzing技术。通过新探索的error,安全研究人员可以更好地推断出一个error的可利用性。 ​ 为了评估我们提出的技术的有效性、效率和影响,我们将我们的fuzzing技术作为一个工具GREBE来实现,并将其应用于60个真实世界的Linux内核漏洞。平均来说,GREBE可以为每个内核漏洞表现出2个以上的额外错误行为。对于26个内核错误,GREBE发现了更高的开发潜力。我们向内核供应商报告了其中的一些错误—这些错误的可利用性被错误地评估了,相应的补丁还没有被仔细地应用—导致他们迅速地采用补丁。

阅读全文

Demons in the Shared Kernel--Abstract Resource Attacks Against OS-level Virtualization

Demons in the Shared Kernel: Abstract Resource Attacks Against OS-level Virtualization 时间:2021.11 作者:Nanzi Yang(西电)、Wenbo Shen(浙大) 会议:CCS 对docker的一种Ddos攻击,实现了自动化检测。 ABSTRACT​ 由于其更快的启动速度和更好的资源利用效率,操作系统级虚拟化(OS-level virtualization)已被广泛采用,并已成为云计算的一项基本技术。与硬件虚拟化相比,操作系统级虚拟化利用共享内核设计来达到更高的效率,并在共享内核上运行多个用户空间实例(又称容器)。然而,在本文中,我们揭示了一个新的攻击面,此漏洞是操作系统级虚拟化技术所固有的,会影响到Linux、FreeBSD和Fuchsia。 ​ 产生漏洞的根本原因是,操作系统级虚拟化中的共享内核设计导致容器直接或间接地共享成千上万的内核变量和数据结构。在不利用任何内核漏洞的情况下,非特权容器可以轻易地用尽共享的内核变量和数据结构实例,对其他容器进行DoS攻击。与物理资源相比,这些内核变量或数据结构实例(称为抽象资源)更普遍,但受到的保护不足。 ​ 为了显示限制抽象资源(Abstract Resources)的重要性,我们针对操作系统内核的不同方面进行了抽象资源攻击。结果表明,攻击抽象资源是非常实用和关键的。我们进一步进行了系统分析,以识别Linux内核中易受攻击的抽象资源,成功检测出1010个抽象资源,其中501个可以被动态地重复消耗。我们还在四大云厂商的自部署共享内核容器环境中进行了攻击实验。结果显示,所有环境都容易受到抽象资源的攻击。我们得出结论,限制抽象资源的使用是很难的,并给出了减轻此风险的多种策略。

阅读全文