NoFear

Project download

$ git clone https://github.com/cappsule/nofear
$ cd nofear/

You should check the last commit signature with the command:

$ git verify-commit HEAD

NoFear’s GPG key can be downloaded (key.asc) from keybase.io (username: cappsule, fingerprint: C783 9D20 FE95 4EAD 3604 6E6C FFF0 B181 5A6C 1BAD).

Build

The build step is required to generate a default VM filesystem specific to the distribution. If you don’t trust me you should also compile kvmtool and the Linux kernel by yourself; otherwise bzImage and lkvm are automatically downloaded from the release page thanks to dl-release.sh.

The build.sh script downloads the source of the different components and build them into the build/ folder. Each component (bzimage, filesystem and kvmtool) is built by default. If one or several components are given on the command line, the other components aren’t built. Usage examples:

$ ./build.sh
$ ./build.sh filesystem kvmtool

Filesystem

The following command creates a filesystem archive from rootfs/ and adds a few files specific to the distribution:

$ ./build.sh filesystem

The resulting archive is the initial filesystem of the VMs.

kvmtool

The following command applies patches from patches/kvmtool/ and builds the lkvm binary:

$ ./build.sh kvmtool

The kvmtool git repository is reset to a specific revision before being compiled. If an attacker were able to create the same SHA-1 hash with different data, then the repository would have been successfully compromised. I would largely prefer to verify the signature of the last commit; unfortunately kvmtool commits aren’t signed at the time.

Kernel

The following command applies patches from patches/kernel/ and builds the VM kernel:

$ ./build.sh bzimage

The sha256sum of kernel sources is checked. The goal isn’t to verify the source code integrity (which is executed in a VMs once compiled), but to avoid malicious Makefiles which could compromise the host during the build step.