Assinando módulos do kernel

De Wiki Hackstore

Desde o kernel Linux versão 3.7.x, foi adicionado suporte para os módulos do kernel assinados. Quando ativado, o kernel Linux só irá carregar os módulos do kernel que são assinados digitalmente com a chave adequada. Isso permite que o sistema seja mais "hardened", não permitindo módulos do kernel não assinados, ou módulos do kernel assinados com a chave errada, a serem carregados. Módulos do kernel maliciosos são um método comum para rootkits entrarem em um sistema Linux.

Caso deseje assinar um módulo individualmente ative este suporte no kernel:

--- Enable loadable module support
[*]   Module signature verification
[*]     Require modules to be validly signed
[*]     Automatically sign all modules
      Which hash algorithm should modules be signed with? (Sign modules with SHA-512) --->


Assine módulos manualmente, por exemplo os módulos do virtualbox (app-emulation/virtualbox-modules):

for i in $(find /lib/modules/$(uname -r) -iname "*vbox*.ko"); do
     perl /usr/src/linux/scripts/sign-file sha512 /usr/src/linux/signing_key.priv /usr/src/linux/signing_key.x509 $i
done


Caso você utilize kernel 4.3.3 ou superior:

MODULES_DIR="/lib/modules/"
for i in $(find ${MODULES_DIR} -maxdepth 1 -type d|grep -vw "${MODULES_DIR}"|sed s,'/lib/modules/',,g);do
    KERNEL_DIR="/usr/src/linux-${i}"
    echo -e "Assinando módulo para kernel ${i}..."
    for z in $(find /lib/modules/${i} -type f -iname "*vbox*.ko");do
        ${KERNEL_DIR}/scripts/sign-file sha512 ${KERNEL_DIR}/certs/signing_key.pem ${KERNEL_DIR}/certs/signing_key.x509 ${z}
    done
done


Funtoo

Configure a assinatura automática

Crie os diretórios necessários:

mkdir -p /etc/funtoo/scripts
mkdir -p /etc/funtoo/msv-sign


Crie o arquivo contendo a lista de modulos. Ex: app-emulation/virtualbox-modules

cat /etc/funtoo/msv-sign/virtualbox-modules
vboxpci
vboxnetadp
vboxnetflt
vboxdrv

Crie o script para assinar os modulos:

cat /etc/funtoo/scripts/msv-sign.sh
#!/bin/bash

VERSION="2.0"

if [ -z "${1}" ];then
        echo "ERROR: Please type name of ebuild"
        exit 1
fi

KERNEL_DIR="/usr/src/$(readlink /usr/src/linux)"
MODULES_DIR="/lib/modules/$(readlink /usr/src/linux|sed s,linux-,,g)"

while read MODULE;do
        # Sign modules
        MODULE_KO="$(find ${MODULES_DIR} -type f -name "${MODULE}.ko")"
        ${KERNEL_DIR}/scripts/sign-file sha512 ${KERNEL_DIR}/certs/signing_key.pem ${KERNEL_DIR}/certs/signing_key.x509 ${MODULE_KO}

        # reload modules
        rmmod ${MODULE} 2> /dev/null
        modprobe ${MODULE} 2> /dev/null

done < /etc/funtoo/msv-sign/${1}