Здравствуйте.
В прошлом году я впервые решил попробовать этот фаззер, но он оказался сложным в сборке и настройке.
Поэтому решил написать данное руководство для начинающих ну и чтобы самому было где подглядеть.
Разжевывать не буду, только опишу шаги необходимые для достижения результата.
Я считаю в начале важнее получить положительный результат, а уж потом погружаться в детали и тонкости.
Ставим виртуалку, обновляем всё.
Я использовал xubuntu 20.04.
В качестве подопытного будет JavaScripCore, знаменитый javascript движок знаменитого WebKit.
Дальше ставим зависимости JSC.
Далее ставим swift т.к. фаззер написан именно на этом языке программирования.
Сначала библиотеку от которой он зависит.
Затем качаем непосредственно релиз для Ubuntu.
Распаковываем и добавляем в переменную окружения путь до исполняемого файла.
После этого перезапускаем терминал и проверяем.
Теперь клонируем репозиторий проекта WebKit.
Нужно переключиться на коммит к которому применяется патч.
Запускаем встроенный скрипт установки зависимостей.
Всё готов к сборке движка JavaScriptCore.
Для этого нужен скрипт из папки фаззера. Клонируем репозиторий фаззера.
Запускаем сборку движка. Это займет какое-то время, поэтому можно пока продолжить выполнять следующие шаги.
Бинарник будет лежать по пути WebKit/FuzzBuild/Debug/bin/jsc.
Собираем фаззер.
Обязательно прочитайте справку.
Перед запуском нужно создать папку под хранилище.
Перед запуском нужно выполнить одну команду.
Запускается фаззер следующей командой из папки fuzzilli.
--profile это профиль т.е. какой движок фаззить
--storagePath это путь, где хранить разную информацию
--exportStatistics нужен чтобы сохранялась статистика покрытия кода
--exportState сохранить текущее состояние для последующего возобновления
--importState путь откуда импортировать предыдущее состояние.
Т.е. фаззер может запоминать, где его прервали и начинать с того же места.
../WebKit/FuzzBuild/Debug/bin/jsc путь к цели, которую фаззим.
Повторный запуск отличается только указанием имени файла состояния: --importState=./storage/state.json
Fuzzilli Github
Специально для xss.pro
Автор: sploitem
В прошлом году я впервые решил попробовать этот фаззер, но он оказался сложным в сборке и настройке.
Поэтому решил написать данное руководство для начинающих ну и чтобы самому было где подглядеть.
Разжевывать не буду, только опишу шаги необходимые для достижения результата.
Я считаю в начале важнее получить положительный результат, а уж потом погружаться в детали и тонкости.
Ставим виртуалку, обновляем всё.
Я использовал xubuntu 20.04.
В качестве подопытного будет JavaScripCore, знаменитый javascript движок знаменитого WebKit.
Дальше ставим зависимости JSC.
Bash:
sudo apt install binutils git libc6-dev libcurl4 libedit2 libgcc-10-dev libpython2.7 libsqlite3-0 libstdc++-10-dev libxml2 pkg-config tzdata zlib1g-dev -y
Далее ставим swift т.к. фаззер написан именно на этом языке программирования.
Сначала библиотеку от которой он зависит.
Bash:
sudo apt-get install clang libicu-dev
Затем качаем непосредственно релиз для Ubuntu.
Bash:
wget https://swift.org/builds/swift-5.2.5-release/ubuntu2004/swift-5.2.5-RELEASE/swift-5.2.5-RELEASE-ubuntu20.04.tar.gz
Распаковываем и добавляем в переменную окружения путь до исполняемого файла.
Bash:
tar xzf swift-5.2.5-RELEASE-ubuntu20.04.tar.gz
sudo mv swift-5.2.5-RELEASE-ubuntu20.04 /usr/share/swift
echo "export PATH=/usr/share/swift/usr/bin:$PATH" >> ~/.bashrc
source ~/.bashrc
После этого перезапускаем терминал и проверяем.
Теперь клонируем репозиторий проекта WebKit.
Bash:
git clone git://git.webkit.org/WebKit.git && cd WebKit
Нужно переключиться на коммит к которому применяется патч.
Bash:
git checkout -b fuzzing 0bd996a2c1f84c40a4d8b07d396f9d90ef7f8cbd
git apply ../fuzzilli/Targets/JavaScriptCore/Patches/webkit.patch
Запускаем встроенный скрипт установки зависимостей.
Bash:
sudo Tools/gtk/install-dependencies
Всё готов к сборке движка JavaScriptCore.
Для этого нужен скрипт из папки фаззера. Клонируем репозиторий фаззера.
Bash:
cd ~ ; git clone https://github.com/googleprojectzero/fuzzilli.git
Запускаем сборку движка. Это займет какое-то время, поэтому можно пока продолжить выполнять следующие шаги.
Бинарник будет лежать по пути WebKit/FuzzBuild/Debug/bin/jsc.
Bash:
cd WebKit ; ../fuzzilli/Targets/JavaScriptCore/fuzzbuild.sh
Собираем фаззер.
Bash:
cd ~/fuzzilli && swift build
Обязательно прочитайте справку.
Bash:
swift run FuzzilliCli --help
Перед запуском нужно создать папку под хранилище.
Bash:
mkdir storage
Перед запуском нужно выполнить одну команду.
Bash:
sudo sysctl -w 'kernel.core_pattern=|/bin/false'
Запускается фаззер следующей командой из папки fuzzilli.
Bash:
swift run FuzzilliCli --profile=jsc --logLevel=info --storagePath=./storage/ --exportStatistics --exportState ../WebKit/FuzzBuild/Debug/bin/jsc
--profile это профиль т.е. какой движок фаззить
--storagePath это путь, где хранить разную информацию
--exportStatistics нужен чтобы сохранялась статистика покрытия кода
--exportState сохранить текущее состояние для последующего возобновления
--importState путь откуда импортировать предыдущее состояние.
Т.е. фаззер может запоминать, где его прервали и начинать с того же места.
../WebKit/FuzzBuild/Debug/bin/jsc путь к цели, которую фаззим.
Повторный запуск отличается только указанием имени файла состояния: --importState=./storage/state.json
Fuzzilli Github
Специально для xss.pro
Автор: sploitem