Verified Boot on the Beaglebone Black
=====================================

Introduction
------------

Before reading this, please read verified-boot.txt and signature.txt. These
instructions are for mainline U-Boot from v2014.07 onwards.

There is quite a bit of documentation in this directory describing how
verified boot works in U-Boot. There is also a test which runs through the
entire process of signing an image and running U-Boot (sandbox) to check it.
However, it might be useful to also have an example on a real board.

Beaglebone Black is a fairly common board so seems to be a reasonable choice
for an example of how to enable verified boot using U-Boot.

First a note that may to help avoid confusion. U-Boot and Linux both use
device tree. They may use the same device tree source, but it is seldom useful
for them to use the exact same binary from the same place. More typically,
U-Boot has its device tree packaged wtih it, and the kernel's device tree is
packaged with the kernel. In particular this is important with verified boot,
since U-Boot's device tree must be immutable. If it can be changed then the
public keys can be changed and verified boot is useless. An attacker can
simply generate a new key and put his public key into U-Boot so that
everything verifies. On the other hand the kernel's device tree typically
changes when the kernel changes, so it is useful to package an updated device
tree with the kernel binary. U-Boot supports the latter with its flexible FIT
format (Flat Image Tree).


Overview
--------

The steps are roughly as follows:

1. Build U-Boot for the board, with the verified boot options enabled.

2. Obtain a suitable Linux kernel

3. Create a Image Tree Source file (ITS) file describing how you want the
kernel to be packaged, compressed and signed.

4. Create a key pair

5. Sign the kernel

6. Put the public key into U-Boot's image

7. Put U-Boot and the kernel onto the board

8. Try it


Step 1: Build U-Boot
--------------------

a. Set up the environment variable to point to your toolchain. You will need
this for U-Boot and also for the kernel if you build it. For example if you
installed a Linaro version manually it might be something like:

   export CROSS_COMPILE=/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.8-2013.08_linux/bin/arm-linux-gnueabihf-

or if you just installed gcc-arm-linux-gnueabi then it might be

   export CROSS_COMPILE=arm-linux-gnueabi-

b. Configure and build U-Boot with verified boot enabled:

   export ARCH=arm
   export UBOOT=/path/to/u-boot
   cd $UBOOT
   # You can add -j10 if you have 10 CPUs to make it faster
   make O=b/am335x_boneblack_vboot am335x_boneblack_vboot_config all
   export UOUT=$UBOOT/b/am335x_boneblack_vboot

c. You will now have a U-Boot image:

   file b/am335x_boneblack_vboot/u-boot-dtb.img
b/am335x_boneblack_vboot/u-boot-dtb.img: u-boot legacy uImage, U-Boot 2014.07-rc2-00065-g2f69f8, Firmware/ARM, Firmware Image (Not compressed), 395375 bytes, Sat May 31 16:19:04 2014, Load Address: 0x80800000, Entry Point: 0x00000000, Header CRC: 0x0ABD6ACA, Data CRC: 0x36DEF7E4


Step 2: Build Linux
--------------------

a. Find the kernel image ('Image') and device tree (.dtb) file you plan to
use. In our case it is am335x-boneblack.dtb and it is built with the kernel.
At the time of writing an SD Boot image can be obtained from here:

   http://www.elinux.org/Beagleboard:Updating_The_Software#Image_For_Booting_From_microSD

You can write this to an SD card and then mount it to extract the kernel and
device tree files.

You can also build a kernel. Instructions for this are are here:

   http://elinux.org/Building_BBB_Kernel

or you can use your favourite search engine. Following these instructions
produces a kernel Image and device tree files. For the record the steps were:

   export KERNEL=/path/to/kernel
   cd $KERNEL
   git clone git://github.com/beagleboard/kernel.git .
   git checkout v3.14
   ./patch.sh
   cp configs/beaglebone kernel/arch/arm/configs/beaglebone_defconfig
   cd kernel
   make beaglebone_defconfig
   make uImage dtbs   # -j10 if you have 10 CPUs
   export OKERNEL=$KERNEL/kernel/arch/arm/boot

c. You now have the 'Image' and 'am335x-boneblack.dtb' files needed to boot.


Step 3: Create the ITS
----------------------

Set up a directory for your work.

   export WORK=/path/to/dir
   cd $WORK

Put this into a file in that directory called sign.its:

/dts-v1/;

/ {
	description = "Beaglebone black";
	#address-cells = <1>;

	images {
		kernel {
			data = /incbin/("Image.lzo");
			type = "kernel";
			arch = "arm";
			os = "linux";
			compression = "lzo";
			load = <0x80008000>;
			entry = <0x80008000>;
			hash-1 {
				algo = "sha1";
			};
		};
		fdt-1 {
			description = "beaglebone-black";
			data = /incbin/("am335x-boneblack.dtb");
			type = "flat_dt";
			arch = "arm";
			compression = "none";
			hash-1 {
				algo = "sha1";
			};
		};
	};
	configurations {
		default = "conf-1";
		conf-1 {
			kernel = "kernel";
			fdt = "fdt-1";
			signature-1 {
				algo = "sha1,rsa2048";
				key-name-hint = "dev";
				sign-images = "fdt", "kernel";
			};
		};
	};
};


The explanation for this is all in the documentation you have already read.
But briefly it packages a kernel and device tree, and provides a single
configuration to be signed with a key named 'dev'. The kernel is compressed
with LZO to make it smaller.


Step 4: Create a key pair
-------------------------

See signature.txt for details on this step.

   cd $WORK
   mkdir keys
   openssl genrsa -F4 -out keys/dev.key 2048
   openssl req -batch -new -x509 -key keys/dev.key -out keys/dev.crt

Note: keys/dev.key contains your private key and is very secret. If anyone
gets access to that file they can sign kernels with it. Keep it secure.


Step 5: Sign the kernel
-----------------------

We need to use mkimage (which was built when you built U-Boot) to package the
Linux kernel into a FIT (Flat Image Tree, a flexible file format that U-Boot
can load) using the ITS file you just created.

At the same time we must put the public key into U-Boot device tree, with the
'required' property, which tells U-Boot that this key must be verified for the
image to be valid. You will make this key available to U-Boot for booting in
step 6.

   ln -s $OKERNEL/dts/am335x-boneblack.dtb
   ln -s $OKERNEL/Image
   ln -s $UOUT/u-boot-dtb.img
   cp $UOUT/arch/arm/dts/am335x-boneblack.dtb am335x-boneblack-pubkey.dtb
   lzop Image
   $UOUT/tools/mkimage -f sign.its -K am335x-boneblack-pubkey.dtb -k keys -r image.fit

You should see something like this:

FIT description: Beaglebone black
Created:         Sun Jun  1 12:50:30 2014
 Image 0 (kernel)
  Description:  unavailable
  Created:      Sun Jun  1 12:50:30 2014
  Type:         Kernel Image
  Compression:  lzo compressed
  Data Size:    7790938 Bytes = 7608.34 kB = 7.43 MB
  Architecture: ARM
  OS:           Linux
  Load Address: 0x80008000
  Entry Point:  0x80008000
  Hash algo:    sha1
  Hash value:   c94364646427e10f423837e559898ef02c97b988
 Image 1 (fdt-1)
  Description:  beaglebone-black
  Created:      Sun Jun  1 12:50:30 2014
  Type:         Flat Device Tree
  Compression:  uncompressed
  Data Size:    31547 Bytes = 30.81 kB = 0.03 MB
  Architecture: ARM
  Hash algo:    sha1
  Hash value:   cb09202f889d824f23b8e4404b781be5ad38a68d
 Default Configuration: 'conf-1'
 Configuration 0 (conf-1)
  Description:  unavailable
  Kernel:       kernel
  FDT:          fdt-1


Now am335x-boneblack-pubkey.dtb contains the public key and image.fit contains
the signed kernel. Jump to step 6 if you like, or continue reading to increase
your understanding.

You can also run fit_check_sign to check it:

   $UOUT/tools/fit_check_sign -f image.fit -k am335x-boneblack-pubkey.dtb

which results in:

Verifying Hash Integrity ... sha1,rsa2048:dev+
## Loading kernel from FIT Image at 7fc6ee469000 ...
   Using 'conf-1' configuration
   Verifying Hash Integrity ...
sha1,rsa2048:dev+
OK

   Trying 'kernel' kernel subimage
     Description:  unavailable
     Created:      Sun Jun  1 12:50:30 2014
     Type:         Kernel Image
     Compression:  lzo compressed
     Data Size:    7790938 Bytes = 7608.34 kB = 7.43 MB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x80008000
     Entry Point:  0x80008000
     Hash algo:    sha1
     Hash value:   c94364646427e10f423837e559898ef02c97b988
   Verifying Hash Integrity ...
sha1+
OK

Unimplemented compression type 4
## Loading fdt from FIT Image at 7fc6ee469000 ...
   Using 'conf-1' configuration
   Trying 'fdt-1' fdt subimage
     Description:  beaglebone-black
     Created:      Sun Jun  1 12:50:30 2014
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Size:    31547 Bytes = 30.81 kB = 0.03 MB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   cb09202f889d824f23b8e4404b781be5ad38a68d
   Verifying Hash Integrity ...
sha1+
OK

   Loading Flat Device Tree ... OK

## Loading ramdisk from FIT Image at 7fc6ee469000 ...
   Using 'conf-1' configuration
Could not find subimage node

Signature check OK


At the top, you see "sha1,rsa2048:dev+". This means that it checked an RSA key
of size 2048 bits using SHA1 as the hash algorithm. The key name checked was
'dev' and the '+' means that it verified. If it showed '-' that would be bad.

Once the configuration is verified it is then possible to rely on the hashes
in each image referenced by that configuration. So fit_check_sign goes on to
load each of the images. We have a kernel and an FDT but no ramkdisk. In each
case fit_check_sign checks the hash and prints sha1+ meaning that the SHA1
hash verified. This means that none of the images has been tampered with.

There is a test in test/vboot which uses U-Boot's sandbox build to verify that
the above flow works.

But it is fun to do this by hand, so you can load image.fit into a hex editor
like ghex, and change a byte in the kernel:

   $UOUT/tools/fit_info -f image.fit -n /images/kernel -p data
NAME: kernel
LEN: 7790938
OFF: 168

This tells us that the kernel starts at byte offset 168 (decimal) in image.fit
and extends for about 7MB. Try changing a byte at 0x2000 (say) and run
fit_check_sign again. You should see something like:

Verifying Hash Integrity ... sha1,rsa2048:dev+
## Loading kernel from FIT Image at 7f5a39571000 ...
   Using 'conf-1' configuration
   Verifying Hash Integrity ...
sha1,rsa2048:dev+
OK

   Trying 'kernel' kernel subimage
     Description:  unavailable
     Created:      Sun Jun  1 13:09:21 2014
     Type:         Kernel Image
     Compression:  lzo compressed
     Data Size:    7790938 Bytes = 7608.34 kB = 7.43 MB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x80008000
     Entry Point:  0x80008000
     Hash algo:    sha1
     Hash value:   c94364646427e10f423837e559898ef02c97b988
   Verifying Hash Integrity ...
sha1 error
Bad hash value for 'hash-1' hash node in 'kernel' image node
Bad Data Hash

## Loading fdt from FIT Image at 7f5a39571000 ...
   Using 'conf-1' configuration
   Trying 'fdt-1' fdt subimage
     Description:  beaglebone-black
     Created:      Sun Jun  1 13:09:21 2014
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Size:    31547 Bytes = 30.81 kB = 0.03 MB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   cb09202f889d824f23b8e4404b781be5ad38a68d
   Verifying Hash Integrity ...
sha1+
OK

   Loading Flat Device Tree ... OK

## Loading ramdisk from FIT Image at 7f5a39571000 ...
   Using 'conf-1' configuration
Could not find subimage node

Signature check Bad (error 1)


It has detected the change in the kernel.

You can also be sneaky and try to switch images, using the libfdt utilities
that come with dtc (package name is device-tree-compiler but you will need a
recent version like 1.4:

   dtc -v
Version: DTC 1.4.0

First we can check which nodes are actually hashed by the configuration:

   fdtget -l image.fit /
images
configurations

   fdtget -l image.fit /configurations
conf-1
fdtget -l image.fit /configurations/conf-1
signature-1

   fdtget -p image.fit /configurations/conf-1/signature-1
hashed-strings
hashed-nodes
timestamp
signer-version
signer-name
value
algo
key-name-hint
sign-images

   fdtget image.fit /configurations/conf-1/signature-1 hashed-nodes
/ /configurations/conf-1 /images/fdt-1 /images/fdt-1/hash /images/kernel /images/kernel/hash-1

This gives us a bit of a look into the signature that mkimage added. Note you
can also use fdtdump to list the entire device tree.

Say we want to change the kernel that this configuration uses
(/images/kernel). We could just put a new kernel in the image, but we will
need to change the hash to match. Let's simulate that by changing a byte of
the hash:

    fdtget -tx image.fit /images/kernel/hash-1 value
c9436464 6427e10f 423837e5 59898ef0 2c97b988
    fdtput -tx image.fit /images/kernel/hash-1 value c9436464 6427e10f 423837e5 59898ef0 2c97b981

Now check it again:

   $UOUT/tools/fit_check_sign -f image.fit -k am335x-boneblack-pubkey.dtb
Verifying Hash Integrity ... sha1,rsa2048:devrsa_verify_with_keynode: RSA failed to verify: -13
rsa_verify_with_keynode: RSA failed to verify: -13
-
Failed to verify required signature 'key-dev'
Signature check Bad (error 1)

This time we don't even get as far as checking the images, since the
configuration signature doesn't match. We can't change any hashes without the
signature check noticing. The configuration is essentially locked. U-Boot has
a public key for which it requires a match, and will not permit the use of any
configuration that does not match that public key. The only way the
configuration will match is if it was signed by the matching private key.

It would also be possible to add a new signature node that does match your new
configuration. But that won't work since you are not allowed to change the
configuration in any way. Try it with a fresh (valid) image if you like by
running the mkimage link again. Then:

   fdtput -p image.fit /configurations/conf-1/signature-1 value fred
   $UOUT/tools/fit_check_sign -f image.fit -k am335x-boneblack-pubkey.dtb
Verifying Hash Integrity ... -
sha1,rsa2048:devrsa_verify_with_keynode: RSA failed to verify: -13
rsa_verify_with_keynode: RSA failed to verify: -13
-
Failed to verify required signature 'key-dev'
Signature check Bad (error 1)


Of course it would be possible to add an entirely new configuration and boot
with that, but it still needs to be signed, so it won't help.


6. Put the public key into U-Boot's image
-----------------------------------------

Having confirmed that the signature is doing its job, let's try it out in
U-Boot on the board. U-Boot needs access to the public key corresponding to
the private key that you signed with so that it can verify any kernels that
you sign.

   cd $UBOOT
   make O=b/am335x_boneblack_vboot EXT_DTB=${WORK}/am335x-boneblack-pubkey.dtb

Here we are overriding the normal device tree file with our one, which
contains the public key.

Now you have a special U-Boot image with the public key. It can verify can
kernel that you sign with the private key as in step 5.

If you like you can take a look at the public key information that mkimage
added to U-Boot's device tree:

   fdtget -p am335x-boneblack-pubkey.dtb /signature/key-dev
required
algo
rsa,r-squared
rsa,modulus
rsa,n0-inverse
rsa,num-bits
key-name-hint

This has information about the key and some pre-processed values which U-Boot
can use to verify against it. These values are obtained from the public key
certificate by mkimage, but require quite a bit of code to generate. To save
code space in U-Boot, the information is extracted and written in raw form for
U-Boot to easily use. The same mechanism is used in Google's Chrome OS.

Notice the 'required' property. This marks the key as required - U-Boot will
not boot any image that does not verify against this key.


7. Put U-Boot and the kernel onto the board
-------------------------------------------

The method here varies depending on how you are booting. For this example we
are booting from an micro-SD card with two partitions, one for U-Boot and one
for Linux. Put it into your machine and write U-Boot and the kernel to it.
Here the card is /dev/sde:

   cd $WORK
   export UDEV=/dev/sde1   # Change thes two lines to the correct device
   export KDEV=/dev/sde2
   sudo mount $UDEV /mnt/tmp && sudo cp $UOUT/u-boot-dtb.img /mnt/tmp/u-boot.img  && sleep 1 && sudo umount $UDEV
   sudo mount $KDEV /mnt/tmp && sudo cp $WORK/image.fit /mnt/tmp/boot/image.fit && sleep 1 && sudo umount $KDEV


8. Try it
---------

Boot the board using the commands below:

   setenv bootargs console=ttyO0,115200n8 quiet root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait
   ext2load mmc 0:2 82000000 /boot/image.fit
   bootm 82000000

You should then see something like this:

U-Boot# setenv bootargs console=ttyO0,115200n8 quiet root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait
U-Boot# ext2load mmc 0:2 82000000 /boot/image.fit
7824930 bytes read in 589 ms (12.7 MiB/s)
U-Boot# bootm 82000000
## Loading kernel from FIT Image at 82000000 ...
   Using 'conf-1' configuration
   Verifying Hash Integrity ... sha1,rsa2048:dev+ OK
   Trying 'kernel' kernel subimage
     Description:  unavailable
     Created:      2014-06-01  19:32:54 UTC
     Type:         Kernel Image
     Compression:  lzo compressed
     Data Start:   0x820000a8
     Data Size:    7790938 Bytes = 7.4 MiB
     Architecture: ARM
     OS:           Linux
     Load Address: 0x80008000
     Entry Point:  0x80008000
     Hash algo:    sha1
     Hash value:   c94364646427e10f423837e559898ef02c97b988
   Verifying Hash Integrity ... sha1+ OK
## Loading fdt from FIT Image at 82000000 ...
   Using 'conf-1' configuration
   Trying 'fdt-1' fdt subimage
     Description:  beaglebone-black
     Created:      2014-06-01  19:32:54 UTC
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x8276e2ec
     Data Size:    31547 Bytes = 30.8 KiB
     Architecture: ARM
     Hash algo:    sha1
     Hash value:   cb09202f889d824f23b8e4404b781be5ad38a68d
   Verifying Hash Integrity ... sha1+ OK
   Booting using the fdt blob at 0x8276e2ec
   Uncompressing Kernel Image ... OK
   Loading Device Tree to 8fff5000, end 8ffffb3a ... OK

Starting kernel ...

[    0.582377] omap_init_mbox: hwmod doesn't have valid attrs
[    2.589651] musb-hdrc musb-hdrc.0.auto: Failed to request rx1.
[    2.595830] musb-hdrc musb-hdrc.0.auto: musb_init_controller failed with status -517
[    2.606470] musb-hdrc musb-hdrc.1.auto: Failed to request rx1.
[    2.612723] musb-hdrc musb-hdrc.1.auto: musb_init_controller failed with status -517
[    2.940808] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[    7.248889] libphy: PHY 4a101000.mdio:01 not found
[    7.253995] net eth0: phy 4a101000.mdio:01 not found on slave 1
systemd-fsck[83]: Angstrom: clean, 50607/218160 files, 306348/872448 blocks

.---O---.
|       |                  .-.           o o
|   |   |-----.-----.-----.| |   .----..-----.-----.
|       |     | __  |  ---'| '--.|  .-'|     |     |
|   |   |  |  |     |---  ||  --'|  |  |  '  | | | |
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'
                -'  |
                '---'

The Angstrom Distribution beaglebone ttyO0

Angstrom v2012.12 - Kernel 3.14.1+

beaglebone login:

At this point your kernel has been verified and you can be sure that it is one
that you signed. As an exercise, try changing image.fit as in step 5 and see
what happens.


Further Improvements
--------------------

Several of the steps here can be easily automated. In particular it would be
capital if signing and packaging a kernel were easy, perhaps a simple make
target in the kernel.

Some mention of how to use multiple .dtb files in a FIT might be useful.

U-Boot's verified boot mechanism has not had a robust and independent security
review. Such a review should look at the implementation and its resistance to
attacks.

Perhaps the verified boot feature could could be integrated into the Amstrom
distribution.


Simon Glass
sjg@chromium.org
2-June-14
