Use o VirtualBox na inicialização segura (UEFI)
É possível usar módulos do kernel auto-compilados em um ambiente de inicialização seguro. Todos os módulos devem ser assinados e as chaves devem ser registradas no BIOS de boot seguro (ou boot loader)
Criar certificado de assinatura e chave
Crie um certificado e uma chave privada para assinar os módulos do kernel (pacote necessário sudo apt-get install openssl
).
## Create a signing key and certificate##
## Signing certificate and keys
sign_key=signing_key.priv
sign_crt=signing_key.x509
## Subject for certificate
sign_sub=""
sign_sub+="/O=Your Name"
sign_sub+="/CN=Module Signing Key"
sign_sub+="/[email protected]"
sign_sub+="/"
## Create certificate and keys
if [[ ! -f "$sign_key" ]] && [[ ! -f "$sign_crt" ]]; then
openssl req -new -x509 -newkey rsa:2048 -keyout "$sign_key" \
-outform DER -out "$sign_crt" -nodes -days 365 -subj "$sign_sub"
fi
## Print certificate
openssl x509 -in "$sign_crt" -inform DER -noout -text
Construa a ferramenta de assinatura do kernel do Linux
Dentro dos cabeçalhos do kernel Linux em /usr/src/
é a ferramenta de assinatura para os módulos do kernel (pacotes obrigatórios sudo apt-get install build-essential libssl-dev
).
## Build signing tool
gcc "/usr/src/linux-headers-$(uname -r)/scripts/sign-file.c" -L \
/usr/include/openssl/ -lcrypto -lssl -o sign-file
Assinando os módulos do VirtualBox
Com a ferramenta de assinatura, todos os módulos do VirtualBox precisam ser assinados.
## Sign virtualbox modules
vbox_mod=()
vbox_mod+=(vboxdrv)
vbox_mod+=(vboxnetadp)
vbox_mod+=(vboxnetflt)
vbox_mod+=(vboxpci)
for module in "${vbox_mod[@]}"; do
echo "Signing module $module"
sudo sign-file sha256 "$sign_key" "$sign_crt" \
"$(modinfo -n "$module")"
done
Adicionar certificado para garantir inicialização
Por fim, o certificado precisa ser adicionado ao BIOS de inicialização segura (requer o pacote sudo apt-get install mokutil
)
## Add key to UEFI keyring
sudo mokutil --import "$sign_crt"
Recomenda-se criar um script para fazer isso, porque a cada atualização do kernel, os módulos precisam ser assinados novamente. O certificado e a chave podem ser reutilizados, portanto, o chaveiro UEFI não deve ser atualizado o tempo todo.