时时勤拂拭,勿使惹尘埃

TOC

Categories

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包包括gclientgclgit-clrepo等。可以通过以下方式安装它:
(需要梯子: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

  1. 需要安装构建依赖项:
    ./build/install-build-deps.sh
    
  2. 使用 gn 生成构建文件:
    gn gen out/Release "--args=is_debug=false"
    
  3. 使用以下命令行进行编译:
    ninja -C out/Release
    
  4. 通过以下方式检查 d8 二进制文件:
    ./out/Release/d8 ./test/fuzzer/parser/hello-world
    
    执行成功应该看到这样的内容:

0x3 Fuzz v8

  1. 使用fuzzilli脚本编译 v8:
    cd $HOME/Fuzzing_v8/v8
    ../../fuzzilli-0.9.3/Targets/V8/fuzzbuild.sh
    
    编译完成后,会生成 ./out/fuzzbuild/d8文件,这个文件即fuzz目标,v8的js shell
  2. 再切换到fuzz文件夹:
    cd $HOME/fuzzilli-0.9.3
    
  3. 需要禁用核心转储文件的创建:
    sudo sysctl -w 'kernel.core_pattern=|/bin/false'
    
  4. 运行 fuzzilli fuzz v8:
    swift run -Xlinker='-lrt' -c release FuzzilliCli --profile=v8 '/home/user/Fuzzing_v8/v8/out/fuzzbuild/d8'
    
    如果执行顺利,应该会出现类似以下内容,之后就坐等crash出现了:

fuzzilli的参数参考help:

swift run -Xlinker='-lrt' FuzzilliCli --help

跑了一段时间,执行了150w+次fuzz但都没出现crash,估计之前版本fuzz的人太多了,现在已经很难再用默认方式fuzz出新的漏洞了,后续需要调整fuzz策略、输入语料等。

0 评论:

发表评论