github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/docs/linux/setup_ubuntu-host_virtualbox-vm_x86-64-kernel.md (about) 1 # Setup: Ubuntu host, VirtualBox vm, x86-64 kernel 2 3 These are the instructions on how to fuzz the x86-64 kernel in VirtualBox with Ubuntu on the host machine and Debian Trixie in the virtual machines. 4 5 In the instructions below, the `$VAR` notation (e.g. `$GCC`, `$KERNEL`, etc.) is used to denote paths to directories that are either created when executing the instructions (e.g. when unpacking GCC archive, a directory will be created), or that you have to create yourself before running the instructions. Substitute the values for those variables manually. 6 7 ## GCC and Kernel 8 9 You can follow the same [instructions](/docs/linux/setup_ubuntu-host_qemu-vm_x86-64-kernel.md) for obtaining GCC and building the Linux kernel as when using QEMU. 10 11 ## Image 12 13 Install debootstrap: 14 15 ``` bash 16 sudo apt-get install debootstrap 17 ``` 18 19 To create a Debian Trixie Linux user space in the $USERSPACE dir do: 20 ``` 21 sudo mkdir -p $USERSPACE 22 sudo debootstrap --include=openssh-server,curl,tar,gcc,libc6-dev,time,strace,sudo,less,psmisc,selinux-utils,policycoreutils,checkpolicy,selinux-policy-default,firmware-atheros,open-vm-tools --components=main,contrib,non-free trixie $USERSPACE 23 ``` 24 25 Note: it is important to include the `open-vm-tools` package in the user space as it provides better VM management. 26 27 To create a Debian Trixie Linux VMDK do: 28 29 ``` 30 wget https://raw.githubusercontent.com/google/syzkaller/master/tools/create-gce-image.sh -O create-gce-image.sh 31 chmod +x create-gce-image.sh 32 ./create-gce-image.sh $USERSPACE $KERNEL/arch/x86/boot/bzImage 33 qemu-img convert -f raw -O vdi disk.raw disk.vdi 34 ``` 35 36 The result should be `disk.vdi` for the disk image. You can delete `disk.raw` if you want. 37 38 ## VirtualBox 39 40 Open VirtualBox and start the New Virtual Machine Wizard. 41 Assuming you want to create the new VM in `$VMPATH`, complete the wizard as follows: 42 43 * Create New Virtual Machine 44 * Virtual Machine Name and Location: select `$VMPATH` as location and "debian" as name 45 * Guest OS type: Debian 64-bit 46 * Disk: select "Use an existing virtual disk" 47 * Import the `disk.vdi` file, and select the imported `.vdi` file as an Hard Disk File. 48 49 When you complete the wizard, you should have `$VMPATH/debian.vbox`. From this point onward, you no longer need the VirtualBox UI. 50 51 To test the fuzzing environment before getting started, follow the instructions below: 52 Forwarding port 2222 on your host machine to port 22: 53 ``` bash 54 VBoxManage modifyvm debian --natpf1 "test,tcp,,2222,,22" 55 ``` 56 57 Starting the Debian VM (headless): 58 ``` bash 59 VBoxManage startvm debian --type headless 60 ``` 61 62 SSH into the VM: 63 ``` bash 64 ssh -p 2222 root@127.0.0.1 65 ``` 66 67 Stopping the VM: 68 ``` bash 69 VBoxManage controlvm debian poweroff 70 ``` 71 72 If all of the above `VBoxManage` commands work, then you can proceed to running syzkaller. 73 74 ## syzkaller 75 76 Create a manager config like the following, replacing the environment variables $GOPATH, $KERNEL and $VMPATH with their actual values. 77 78 ``` 79 { 80 "target": "linux/amd64", 81 "http": "127.0.0.1:56741", 82 "workdir": "$GOPATH/src/github.com/google/syzkaller/workdir", 83 "kernel_obj": "$KERNEL", 84 "sshkey": "$IMAGE/key", 85 "syzkaller": "$GOPATH/src/github.com/google/syzkaller", 86 "procs": 8, 87 "type": "virtualbox", 88 "vm": { 89 "count": 4, 90 "base_vm_name": "debian" 91 } 92 } 93 ``` 94 95 Run syzkaller manager: 96 97 ``` bash 98 mkdir workdir 99 ./bin/syz-manager -config=my.cfg 100 ``` 101 102 Syzkaller will create full clone VMs from the `debian` VM and then use ssh to copy and execute programs in them. 103 The `debian` VM will not be started and its disk will remain unmodified. 104 105 If you get issues after `syz-manager` starts, consider running it with the `-debug` flag. 106 Also see [this page](/docs/troubleshooting.md) for troubleshooting tips.