| # Setup |
| |
| Instructions for running OpenBSD host, OpenBSD vm, amd64 kernel. |
| In addition, the host must be running `-current`. |
| |
| Variables used throughout the instructions: |
| |
| - `$KERNEL` - Custom built kernel, see [Compile Kernel](#compile-kernel). |
| Defaults to `/sys/arch/amd64/compile/SYZKALLER/obj/bsd` if the |
| instructions are honored. |
| - `$SSHKEY` - SSH key ***without a passphrase*** used to connect to the VMs, |
| it's advised to use a dedicated key. |
| - `$USER` - The name of the user intended to run syzkaller. |
| - `$VMIMG` - VM disk image. |
| - `$VMID` - The numeric ID of last started VM. |
| |
| ## Install syzkaller |
| |
| 1. Install dependencies: |
| |
| ```sh |
| # pkg_add git gmake go |
| ``` |
| |
| In order for reproducers to work, GCC from ports is also required: |
| |
| ```sh |
| # pkg_add gcc |
| ``` |
| |
| 2. Clone repository: |
| |
| ```sh |
| $ git clone https://github.com/google/syzkaller |
| $ cd syzkaller |
| $ gmake all |
| ``` |
| |
| ## Compile Kernel |
| |
| A `GENERIC` kernel must be compiled with |
| [kcov(4)](https://man.openbsd.org/kcov.4) |
| enabled: |
| |
| ```sh |
| $ cd /sys/arch/amd64 |
| $ cat <<EOF >conf/SYZKALLER |
| include "arch/amd64/conf/GENERIC" |
| pseudo-device kcov 1 |
| EOF |
| $ cp -R compile/GENERIC compile/SYZKALLER |
| $ make -C compile/SYZKALLER obj |
| $ make -C compile/SYZKALLER config |
| $ make -C compile/SYZKALLER |
| ``` |
| |
| ## Create VM |
| |
| 1. [vmd(8)](https://man.openbsd.org/vmd.8) |
| must be configured to allow non-root users to create VMs since it removes the |
| need to run syzkaller as root: |
| |
| ```sh |
| $ cat /etc/vm.conf |
| vm "syzkaller" { |
| disable |
| disk "/dev/null" |
| local interface |
| owner $USER |
| allow instance { boot, disk, memory } |
| } |
| ``` |
| |
| 2. Create disk image: |
| |
| ```sh |
| $ vmctl create -s 4G "qcow2:$VMIMG" |
| ``` |
| |
| 3. Install VM: |
| |
| ```sh |
| $ vmctl start -c -t syzkaller -b /bsd.rd -d "$VMIMG" syzkaller-1 |
| ``` |
| |
| Answers to questions that deviates from the defaults: |
| |
| ``` |
| Password for root account? ****** |
| Allow root ssh login? yes |
| ``` |
| |
| 4. Restart the newly created VM and copy the SSH-key: |
| |
| ```sh |
| $ vmctl stop -w syzkaller-1 |
| $ vmctl start -c -t syzkaller -d "$VMIMG" syzkaller-1 |
| $ ssh "root@100.64.${VMID}.3" 'cat >~/.ssh/authorized_keys' <$SSHKEY.pub |
| ``` |
| |
| 5. Optionally, library ASLR can be disabled in order to improve boot time: |
| |
| ```sh |
| $ ssh "root@100.64.${VMID}.3" 'echo library_aslr=NO >>/etc/rc.conf.local' |
| ``` |
| |
| 6. Finally, stop the VM: |
| |
| ```sh |
| $ vmctl stop -w syzkaller-1 |
| ``` |
| |
| ## Configure and run syzkaller |
| |
| ```sh |
| $ pwd |
| ~/go/src/github.com/google/syzkaller |
| $ cat openbsd.cfg |
| { |
| "name": "openbsd", |
| "target": "openbsd/amd64", |
| "http": ":10000", |
| "workdir": "$HOME/go/src/github.com/google/syzkaller/workdir", |
| "kernel_obj": "/sys/arch/amd64/compile/SYZKALLER/obj", |
| "kernel_src": "/", |
| "syzkaller": "$HOME/go/src/github.com/google/syzkaller", |
| "image": "$VMIMG", |
| "sshkey": "$SSHKEY", |
| "sandbox": "none", |
| "procs": 2, |
| "type": "vmm", |
| "vm": { |
| "count": 4, |
| "mem": 512, |
| "kernel": "$KERNEL", |
| "template": "syzkaller" |
| } |
| } |
| $ ./bin/syz-manager -config openbsd.cfg |
| ``` |