“syzbot”と”syzkaller”について (Part 1)



Linux Kernelについての脆弱性を自動検査するツール”syzbot”と”syzkaller”について簡単にまとめていきます。


こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。

Linux Kernelについての脆弱性を自動検査するツール”syzbot”と”syzkaller”について簡単にまとめていきます。



syzbotとsyzkaller

syzbotとsyzkallerは以下のような関係になっています。

  1. syzkaller

    syzkallerはシステムコールに対するfuzzingを行うツールになります。他のkernel fuzzingツールに比べて

    • より深いバグを発見できる
    • 再現性があるかどうかを確認できる
    • リグレッションテストを行う
    • スケーラビリティに優れている

    というメリットがあります。

  2. syzbot

    syzbotを管理するツールになります。kernel/syzkallerのビルドとアップデートを自動的に行ったり、テストマシン(qemu, Android, ODROID等)の管理を行う、バグのレポートとステータスのトラッキングを行うなどのツールになります。具体的な話は次回に行います。


syzkallerのインストール

    1. インストールするマシンの準備

      まずはsyzkallerをインストールしてみましょう。syzkallerは、ざっくりと言うとQEMUでVMを作って実際にクラッシュするかのテストを繰り返すものになりますので

      • 実PC
      • VMのネスティング

      などが必要になります。今回は、実PCを使用します。

      • HW: Thinkpad x201: Corei5/8GB Memory/250GB SSD
      • OS: Ubuntu 18.04 Workstation

    1. インストール前準備

      先に説明したように、syzkallerではQEMUでのVMを使用するため、VMの作成が出来る環境を用意してあげる必要があります。今回はUbuntuを使用したため、Ubuntu日本語フォーラム等で確認した情報を元に、qemu-kvm等をインストールして仮想マシンが作成出来るところまでを確認します。


    1. インストール方法の参照とインストール

      インストールは、syzkallerのサイトにある”How to set up syzkaller”を参照すると、わりと簡単にセットアップできます。今回は「Setup: Ubuntu host, QEMU vm, x86-64 kernel」の所を参考にします。gccのバージョンは

      
      $ gcc -V
      --snip--
      gcc version 8.0.1 20180414
      

      となっているので、gccのバージョンは変えません。

      あとの手順は基本的にリンク先のとおりになっています。簡単に手順だけ説明すると

      1. gitでLinux Kernelをダウンロードする。
      2. .configでKASAN等のオプションを有効にする(参考として、手元で使用した.configはこちらになります(gzipped))。
      3. Kernelのイメージを作成する。
      4. 作成したKernelイメージでQEMUを立ち上げる(立ち上げられるかをテストする)。
      5. Go言語をインストールする。
      6. Go言語でsyzkallerをGetしてビルドする。
      7. syz-managerでsyzkallerを起動する。

      という形になります。

      参考までにですが、Go言語をインストールした後に環境変数として

      
      export KERNEL=/home/webtest/syzkaller/linux
      export IMAGE=/home/webtest/syzkaller/IMAGE
      export GOROOT=/home/webtest/syzkaller/goroot
      export PATH=$GOROOT/bin:$PATH
      export GOPATH=/home/webtest/syzkaller/gopath
      

      を設定しています。また、manage用のcontrolファイルは

      
      webtest@webtest-X61:~/syzkaller/gopath/src/github.com/google/syzkaller$ cat my.cfg
      {
      "target": "linux/amd64",
      "http": "127.0.0.1:56741",
      "workdir": "/home/webtest/syzkaller/gopath/src/github.com/google/syzkaller/workdir",
      "kernel_obj": "/home/webtest/syzkaller/linux",
      "image": "/home/webtest/syzkaller/IMAGE/wheezy.img",
      "sshkey": "/home/webtest/syzkaller/IMAGE/ssh/id_rsa",
      "syzkaller": "/home/webtest/syzkaller/gopath/src/github.com/google/syzkaller",
      "procs": 2,
      "type": "qemu",
      "vm": {
      "count": 2,
      "kernel": "/home/webtest/syzkaller/linux/arch/x86/boot/bzImage",
      "cpu": 1,
      "mem": 2048
      }
      }
      

      と設定しています。


  1. 実際の動作

    実際にsyzkallerを動作させるには、一般ユーザ(sios)で上記のgopath/src/github.com/google/syzkallerディレクトリで

    
    ./bin/syz-manager -config=my.cfg
    

    とすることにより起動します。

    ステータスを見るには、firefox等のブラウザでポート(my.cfgで指定した56741)に接続することで、試行回数やバグを発見した際の情報を確認することが出来ます。

    実際に動作させた時に、一度何かを見つけたようですが、再現性がないようです。こちらのブラウザの情報には、そのようなレポートも表示されます。


まとめ

今回は、syzkallerのインストールと実際の動作までを簡単に説明しました。次回は、syzbotの方を見てみます。

セキュリティ系連載案内


セミナー情報 1

2018年10月22日から10月25日のCSS(Computer Security Symposium)2018で、「OSSセキュリティ技術ワークショップ(OWS) 2018特別セッション」 と題しまして、OSSセキュリティ技術の会後援で特別セッションを開催します。

https://www.iwsec.org/ows/2018/index.htmlにプログラム内容と一般論文申し込みの詳細を載せていきますので、是非御確認下さい(ページは更新中です)。


セミナー情報 2

2018年10月04日に、「OSSの長期利用とメンテナンス 」と題しまして、やまね氏によるセミナーが開催されます。

https://sios.connpass.com/event/100751/にプログラム内容と申し込みページがありますので、是非御確認下さい。

タイトルとURLをコピーしました