本文为看雪论坛优秀文章
看雪论坛作者ID:wx_秀玉轩晨
一
背景介绍
二
WebAssembly程序
文件加载 - WebAssembly 文件体积更小,所以下载速度更快;
解析 - 解码 WebAssembly 比解析 JavaScript 要快;
编译和优化 - 编译和优化所需的时间较少,因为在将文件推送到服务器之前已经进行了更多优化,JavaScript 需要为动态类型多次编译代码;
重新优化 - WebAssembly 代码不需要重新优化,因为编译器有足够的信息可以在第一次运行时获得正确的代码;
执行 - 执行可以更快,WebAssembly 指令更接近机器码;
垃圾回收 - 目前 WebAssembly 不直接支持垃圾回收,垃圾回收都是手动控制的,所以比自动垃圾回收效率更高。
三
模糊测试AFL
该项目的目标是在给定不可预测的输入流的情况下评估各种UNIX实用程序的健壮性。[…]首先,您将构建一个模糊发生器。这是一个将输出随机字符流的程序。其次,您将使用模糊发生器,并使用它来攻击尽可能多的UNIX实用程序,以试图破坏它们。
1 从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage)
2 选择一些输入文件,作为初始测试集加入输入队列(queue)
3 将队列中的文件按一定的策略进行“突变”
4 如果经过变异文件更新了覆盖范围,则将其保留添加到队列中
5 上述过程会一直循环进行,期间触发了crash的文件会被记录下来
四
Fuzzm
五
开始运行
由于要从外网下载各种配置资源,所以这里建议大家kexueshangwang。
5.1 安装各种环境
-
下载 Rust 和 cargo
curl https://sh.rustup.rs -sSf | sh
下载完成后,输入以下命令:
source $HOME/.cargo/env
下载 wasmtime:
curl https://wasmtime.dev/install.sh -sSf | bash
git clone --recurse-submodules
https://github.com/bytecodealliance/wasmtime.git
cd wasmtime
cargo build --release
sudo ln -s /home/mzs/Desktop/fuzzm-project/wasmtime/target/release/wasmtime /usr/bin/wasmtime
sudo apt update
sudo apt install nodejs npm
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-11/wasi-sdk-11.0-linux.tar.gz
tar xvf wasi-sdk-11.0-linux.tar.gz
5.2 开始配置
进入 AFL-wasm文件夹:
make & make install
sudo ln /path/to/fuzzm-project/AFL-wasm/wasmtime-v0.20.0-x86_64-linux-c-api/lib/libwasmtime.so /usr/lib/libwasmtime.so
进入wasm_instrumenter文件夹:
cargo build --release
sudo ln -s /home/mzs/Desktop/fuzzm-project/wasm_instrumenter/target/release/afl_branch /usr/bin/afl_branch
sudo ln -s /home/mzs/Desktop/fuzzm-project/wasm_instrumenter/target/release/canaries /usr/bin/canaries
5.3 开始fuzz
chmod +x vuln-cov-canaries.wasm
WASM_MODE=1 afl-fuzz -i testcases/ -o output_cov_canaries ./vuln-cov-canaries.wasm
./wasm-compile-and-instrument.sh
cd bin/
WASM_MODE=1 afl-fuzz -i ../tests/ -o output_canaries ./opj_compress.instr.wasm
../wasi-sdk-11.0/bin/clang --sysroot=../wasi-sdk-11.0/share/wasi-sysroot -O2 -D USE_JPIP=1 vuln.c -o vuln.wasm
afl_branch vuln.wasm vuln.instr.wasm
canaries vuln.instr.wasm vuln-cov-canaries.wasm
WASM_MODE=1 afl-fuzz -i testcases/ -o outputs ./vuln-cov-canaries.wasm
可以看到:想要转化为wasm文件,需要将所有的依赖文件转化过去。
https://cache.one/read/7565547
https://www.smashingmagazine.com/2017/05/abridged-cartoon-introduction-webassembly/
https://myfzy.top/2021/03/16/symcc+afl/
https://github.com/fuzzm/fuzzm-project
Fuzzm: Finding Memory Bugs through Binary-Only Instrumentation and Fuzzing of WebAssembly
https://arxiv.org/pdf/2110.15433.pdf
看雪ID:wx_秀玉轩晨
https://bbs.pediy.com/user-home-932916.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
原文始发于微信公众号(看雪学苑):Fuzzm: 针对WebAssembly内存错误的模糊测试
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论