Fuzz101-10_fuzz v8 origin
0x0 前言
过程参考:https://github.com/antonio-morales/Fuzzing101/tree/main/Exercise%2010
系统版本: Ubuntu 22.04.2 LTS
0x1 Fuzzilli工具
Fuzzilli是一个(覆盖)引导的模糊器,用于基于自定义中间语言(“FuzzIL”)的动态语言解释器,可以改变并翻译成JavaScript。
可以在官方文档中找到有关Fuzzilli的更多信息
0x11 安装依赖项
环境准备需要安装一些其他工具(例如 Swift、Git)
安装以下依赖项:
sudo apt --yes install clang libpython2.7 libpython2.7-dev libcurl4 git
下载 Swift:
cd $HOME
wget https://download.swift.org/swift-5.7.3-release/ubuntu2204/swift-5.7.3-RELEASE/swift-5.7.3-RELEASE-ubuntu22.04.tar.gz
tar xzvf swift-5.7.3-RELEASE-ubuntu22.04.tar.gz
sudo mv swift-5.7.3-RELEASE-ubuntu22.04 /usr/share/swift
配置 PATH 环境变量:
echo "export PATH=/usr/share/swift/usr/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
0x12 安装Fuzzilli
下载和构建 Fuzzilli:
cd $HOME
wget https://github.com/googleprojectzero/fuzzilli/archive/refs/tags/v0.9.3.zip
unzip v0.9.3.zip
cd fuzzilli-0.9.3/
swift build -c release -Xlinker='-lrt'
0x2下载并构建 V8 引擎
0x21 下载和设置depot_tools
V8
使用名为 depot_tools
的脚本包来管理。depot_tools
包包括gclient
,gcl
,git-cl
,repo
等。可以通过以下方式安装它:
(需要梯子:https://chromium.googlesource.com/chromium/tools/depot_tools.git)
cd $HOME
mkdir depot_tools && cd depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
echo "export PATH=`pwd`/depot_tools:$PATH" >> ~/.bashrc
source ~/.bashrc
0x22 获取 V8 最新源码
cd $HOME
mkdir Fuzzing_v8 && cd Fuzzing_v8
fetch v8
cd v8
git checkout origin
gclient sync
0x23 构建和测试 V8
- 需要安装构建依赖项:
./build/install-build-deps.sh
- 使用 gn 生成构建文件:
gn gen out/Release "--args=is_debug=false"
- 使用以下命令行进行编译:
ninja -C out/Release
- 通过以下方式检查 d8 二进制文件:
执行成功应该看到这样的内容:./out/Release/d8 ./test/fuzzer/parser/hello-world
0x3 Fuzz v8
- 使用fuzzilli脚本编译 v8:
编译完成后,会生成cd $HOME/Fuzzing_v8/v8 ../../fuzzilli-0.9.3/Targets/V8/fuzzbuild.sh
./out/fuzzbuild/d8
文件,这个文件即fuzz目标,v8的js shell - 再切换到fuzz文件夹:
cd $HOME/fuzzilli-0.9.3
- 需要禁用核心转储文件的创建:
sudo sysctl -w 'kernel.core_pattern=|/bin/false'
- 运行 fuzzilli fuzz v8:
如果执行顺利,应该会出现类似以下内容,之后就坐等crash出现了:swift run -Xlinker='-lrt' -c release FuzzilliCli --profile=v8 '/home/user/Fuzzing_v8/v8/out/fuzzbuild/d8'
fuzzilli的参数参考help:
swift run -Xlinker='-lrt' FuzzilliCli --help
跑了一段时间,执行了150w+次fuzz但都没出现crash,估计之前版本fuzz的人太多了,现在已经很难再用默认方式fuzz出新的漏洞了,后续需要调整fuzz策略、输入语料等。
0 评论:
发表评论