2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WebKitGTK+のリリースtarballをAsanビルドする

Last updated at Posted at 2018-03-16

概要

WebKitの特定のバージョンに存在する脆弱性の挙動を調べるために、該当するバージョンのWebKitGTK+のリリースtarballを拾ってきてAddressSanitizerを有効にしたビルドをUbuntu上で行ったときのメモです。
WebKitGTK+ 2.19.91以降のリリースではENABLE_ADDRESS_SANITIZERフラグによって簡単にAsanビルドができるため、それより前のバージョンが本記事の対象です。

環境

  • OS: Ubuntu 16.04(VMware 仮想マシン)
  • メモリ: 4GB(ホスト: 8GB)
  • ビルド対象: WebKitGTK+ 2.17.92

大まかな手順

  • ビルドに必要な環境の準備
  • AddressSanitizerを有効にする設定
  • ビルド

手順

下準備

プログラム準備

WebKitGTK+のリリースtarballを取得・展開

wget https://webkitgtk.org/releases/webkitgtk-2.17.92.tar.xz
tar -xf webkitgtk-2.17.92.tar.xz

依存するプログラムをインストール

cd webkitgtk-2.17.92
./Tools/gtk/install-dependencies

cmakeして足りないプログラムをチェック

cmake -DPORT=GTK -DCMAKE_BUILD_TYPE=Debug -GNinja

追加で使用するプログラムをインストール

sudo apt install clang llvm-dev ruby-dev -y

パッケージでは必要なバージョンがインストールできないプログラムを取得・ビルド
今回はLibgcryptおよびそのビルドに必要なLibgpg-errorをインストールした

wget https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.28.tar.bz2
tar -xf libgpg-error-1.28.tar.bz2
cd libgpg-error-1.28/ && ./configure && sudo make && sudo make install && cd

wget https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.2.tar.bz2
tar -xf libgcrypt-1.8.2.tar.bz2
cd libgcrypt-1.8.2/ && ./configure && sudo make && sudo make install && cd

AddressSanitizer有効化

  • cmakeファイルを編集してAddressSanitizerをリンクさせる
    • webkitgtk-2.17.92/Source/WebKit/PlatformGTK.cmake内のLDFLAGS指定部分に-fsanitize=address ASAN_OPTIONS=detect_leaks=0を追記する
    • LeakSanitizerが有効だとビルド中にリークが検出されて停止してしまうためオフにしている

ビルド

  • コンパイラオプションでAddressSanitizerを有効化する。また、実験に使うMINIBROWSERのビルドをオンにする
cmake -DPORT=GTK -DCMAKE_BUILD_TYPE=Debug -DENABLE_MINIBROWSER=ON -DUSE_SYSTEM_MALLOC=ON -DCMAKE_CXX_FLAGS="-g -fsanitize=address -fno-omit-frame-pointer" -GNinja
sudo ninja
sudo ninja install
  • SYSTEM_MALLOCについてはよくわかってない

MINIBROWSER実行時の設定

  • LeakSanitizerを抑制する
export ASAN_OPTIONS=detect_leaks=0
  • スタックトレースをシンボル化する
    • llvm-symbolizerのパスを通せばよい
export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-3.8/bin/llvm-symbolizer
  • MINIBROWSER実行
/usr/local/libexec/webkit2gtk-4.0/MiniBrowser
  • 調査したい脆弱性を踏んでエラーが無事検出されたらOK
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?