こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。
Linux Kernelについての脆弱性を自動検査するツール”syzbot”と”syzkaller”について簡単にまとめていきます。
syzbotとsyzkaller
syzbotとsyzkallerは以下のような関係になっています。
- syzkaller
syzkallerはシステムコールに対するfuzzingを行うツールになります。他のkernel fuzzingツールに比べて
- より深いバグを発見できる
- 再現性があるかどうかを確認できる
- リグレッションテストを行う
- スケーラビリティに優れている
というメリットがあります。
- syzbot
syzbotを管理するツールになります。kernel/syzkallerのビルドとアップデートを自動的に行ったり、テストマシン(qemu, Android, ODROID等)の管理を行う、バグのレポートとステータスのトラッキングを行うなどのツールになります。具体的な話は次回に行います。
syzkallerのインストール
インストールするマシンの準備
まずはsyzkallerをインストールしてみましょう。syzkallerは、ざっくりと言うとQEMUでVMを作って実際にクラッシュするかのテストを繰り返すものになりますので
- 実PC
- VMのネスティング
などが必要になります。今回は、実PCを使用します。
- HW: Thinkpad x201: Corei5/8GB Memory/250GB SSD
- OS: Ubuntu 18.04 Workstation
インストール前準備
先に説明したように、syzkallerではQEMUでのVMを使用するため、VMの作成が出来る環境を用意してあげる必要があります。今回はUbuntuを使用したため、Ubuntu日本語フォーラム等で確認した情報を元に、qemu-kvm等をインストールして仮想マシンが作成出来るところまでを確認します。
インストール方法の参照とインストール
インストールは、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のバージョンは変えません。
あとの手順は基本的にリンク先のとおりになっています。簡単に手順だけ説明すると
- gitでLinux Kernelをダウンロードする。
- .configでKASAN等のオプションを有効にする(参考として、手元で使用した.configはこちらになります(gzipped))。
- Kernelのイメージを作成する。
- 作成したKernelイメージでQEMUを立ち上げる(立ち上げられるかをテストする)。
- Go言語をインストールする。
- Go言語でsyzkallerをGetしてビルドする。
- 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 } }
と設定しています。
実際の動作
実際にsyzkallerを動作させるには、一般ユーザ(sios)で上記のgopath/src/github.com/google/syzkallerディレクトリで
./bin/syz-manager -config=my.cfg
とすることにより起動します。
ステータスを見るには、firefox等のブラウザでポート(my.cfgで指定した56741)に接続することで、試行回数やバグを発見した際の情報を確認することが出来ます。
実際に動作させた時に、一度何かを見つけたようですが、再現性がないようです。こちらのブラウザの情報には、そのようなレポートも表示されます。
まとめ
今回は、syzkallerのインストールと実際の動作までを簡単に説明しました。次回は、syzbotの方を見てみます。
セキュリティ系連載案内
- OSSセキュリティ技術の会による日経Linuxでの連載「IoT時代の最新SELinux入門」がITPro上で読めるようになりました。技術の会代表で第一人者である中村さん等による、最新のSELinuxの情報やコマンド類等も更新されているのでお薦めです。
- OSSセキュリティ技術の会によるThinkITでの連載「開発者のためのセキュリティ実践講座」がThinkIT上で開始しました。技術の会の中の人間で、最新の代表的なOSSセキュリティ技術を紹介していきます。
- OSSセキュリティ技術の会により、ThinkITでLinuxSecuritySummit 2017のレポートが紹介されています。
- OSSセキュリティ技術の会の面により、@ITで「OSS脆弱性ウォッチ」が連載されています。
- OSSセキュリティ技術の会の面により、@ITで「OpenSCAPで脆弱性対策はどう変わる?」が連載されています。
セミナー情報 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/にプログラム内容と申し込みページがありますので、是非御確認下さい。