Alguém mexeu no meu boot?!

Publicado por Xerxes em 26/01/2026

[ Hits: 45 ]

 


Alguém mexeu no meu boot?!



Em instalações com criptografia de disco total (LUKS), muitos usuários optam por manter a partição /boot fora do container criptografado para evitar a "senha dupla" (uma no GRUB e outra no sistema).

Como neste artigo:
Embora prático, isso abre margem para o Evil Maid Attack, onde um invasor com acesso físico substitui seu Kernel ou Initramfs por versões maliciosas para capturar sua senha.

Esta dica ajuda a manter a conveniência do boot de senha única, mas adicionando um "sistema de alarme" que monitora a integridade do /boot e dispara alertas no desktop e no terminal.

Linux: Alguém mexeu no meu boot?!


Linux: Alguém mexeu no meu boot?!


Linux: Alguém mexeu no meu boot?!


1. Pré-requisitos

Para o alerta visual, certifique-se de ter o utilitário de notificações instalado:
  • Gentoo: emerge x11-libs/libnotify
  • Debian/Ubuntu: sudo apt install libnotify-bin
  • Arch: sudo pacman -S libnotify

2. O Script de Monitoramento (check_boot.sh)

Salve o script abaixo em um local protegido (dentro da sua partição criptografada), por exemplo: /home/seu_usuario/scripts/check_boot.sh. Não esqueça de alterar o path, seu sistema e seu usuário:

#!/bin/bash
SIG_FILE="/root/boot_signature.sha256"
BOOT_DIR="/boot"
SCRIPT_PATH="/home/xerxes/scripts/check_boot.sh"

# Cores para facilitar a visualização no terminal
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # Sem cor

generate_signature() {
    echo -e "${YELLOW}Gerando nova assinatura do /boot...${NC}"
    # Gera hashes de arquivos, ignora a pasta grub (configurações dinâmicas) e ordena a lista
    find "$BOOT_DIR" -type f -not -path "$BOOT_DIR/grub/*" -exec sha256sum {} + | sort > "$SIG_FILE"
    echo -e "${GREEN}Assinatura salva com sucesso em $SIG_FILE${NC}"
}

check_signature() {
    if [ ! -f "$SIG_FILE" ]; then
        echo -e "${YELLOW}############################################################"
        echo -e "AVISO: Arquivo de assinatura não encontrado!"
        echo -e "Gere uma nova assinatura com: sudo $SCRIPT_PATH gen"
        echo -e "############################################################${NC}"
        return
    fi

    # Cria estado atual temporário
    CURRENT_STATE=$(mktemp)
    find "$BOOT_DIR" -type f -not -path "$BOOT_DIR/grub/*" -exec sha256sum {} + | sort > "$CURRENT_STATE"

    # Comparação binária silenciosa
    if cmp -s "$SIG_FILE" "$CURRENT_STATE"; then
        echo -e "${GREEN}Integridade do /boot: OK${NC}"
        rm "$CURRENT_STATE"
    else
        # --- Alerta Gráfico ---
        # Tenta enviar notificação se houver um ambiente gráfico ativo
        USER_NAME=$(who | awk '{print $1}' | head -n1)
        USER_ID=$(id -u "$USER_NAME")

        if [ -n "$USER_NAME" ]; then
            sudo -u "$USER_NAME" DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$USER_ID/bus" \
            notify-send -u critical -i "security-high" "ALERTA DE SEGURANÇA" "O /boot foi modificado! Verifique o terminal imediatamente." 2>/dev/null
        fi

        # --- Alerta de Terminal ---
        echo -e "${RED}############################################################"
        echo -e "ALERTA CRÍTICO: O /boot FOI MODIFICADO!"
        echo -e "############################################################${NC}"
        echo ""
        echo -e "${YELLOW}DIFERENÇAS DETECTADAS:${NC}"

        echo -e "${GREEN}--- Itens NOVOS ou MODIFICADOS (Hash atual) ---${NC}"
        comm -13 "$SIG_FILE" "$CURRENT_STATE"

        echo -e "\n${RED}--- Itens REMOVIDOS ou ANTIGOS (Hash original) ---${NC}"
        comm -23 "$SIG_FILE" "$CURRENT_STATE"

        echo ""
        echo -e "${YELLOW}ESTA MUDANÇA FOI POR UMA ATUALIZAÇÃO DO GENTOO?${NC}"
        echo -e "-> Se ${GREEN}SIM${NC} (você atualizou o kernel ou o sistema agora):"
        echo -e "   Atualize a assinatura com: ${GREEN}sudo $SCRIPT_PATH gen${NC}"
        echo ""
        echo -e "-> Se ${RED}NÃO${NC} (você não mexeu no sistema recentemente):"
        echo -e "   ${RED}1. NÃO digite senhas ou acesse dados sensíveis (banco, e-mail).${NC}"
        echo -e "   ${RED}2. NÃO mude a senha do LUKS neste sistema (risco de keylogger).${NC}"
        echo -e "   ${RED}3. DESLIGUE imediatamente e use um Live-USB de confiança.${NC}"
        echo -e "   ${RED}4. Pelo Live-USB, monte o LUKS e investigue as datas do /boot.${NC}"
        echo -e "   ${RED}5. Reinstale o Kernel/GRUB via chroot para garantir binários limpos.${NC}"
        echo -e "   ${RED}6. SÓ ENTÃO mude a senha do LUKS via Live-USB:${NC}"
        echo -e "      # cryptsetup luksAddKey /dev/nvme0n1p3"
        echo -e "      # cryptsetup luksRemoveKey /dev/nvme0n1p3"
        echo -e "${RED}############################################################${NC}"
        rm "$CURRENT_STATE"
    fi
}

case "$1" in
    gen) generate_signature ;;
    *)   check_signature ;;
esac

3. Configuração de Permissões e Autostart

Para que o script funcione sem interrupções, ou seja, para executar com sudo sem senha, use:

sudo visudo

E adicione ao final:

seu_usuario ALL=(ALL) NOPASSWD: /home/seu_usuario/scripts/check_boot.sh

Para funcionar no terminal adicione ao seu ~/.bashrc:

sudo /home/seu_usuario/scripts/check_boot.sh

3. Para alertar no desktop de forma automática crie o arquivo ~/.config/autostart/check_boot.desktop:

[Desktop Entry]
Type=Application
Name=Check Boot Integrity
Exec=sudo /home/seu_usuario/scripts/check_boot.sh
Terminal=false

Se quiser testar, crie um arquivo dentro de /boot

sudo touch /boot/test

E reabra o terminal.

4. Considerações sobre Segurança: Detecção vs. Prevenção

É importante entender que este script é uma ferramenta de detecção de intrusão, não de prevenção. Ele não impede o boot de um kernel alterado (função do Secure Boot), mas elimina a invisibilidade do invasor.

O invasor conta com o fato de você digitar sua senha sem suspeitar de nada. Com este alarme, você saberá da modificação no primeiro login, podendo reagir antes que sua senha ou dados sejam comprometidos.

Como o script e a assinatura ficam na partição Root criptografada, o invasor não consegue silenciar o alarme sem antes quebrar sua criptografia principal.

Uso Diário: após configurar, gere a assinatura oficial com:

sudo ~/scripts/check_boot.sh gen

Repita este comando sempre que atualizar o Kernel legitimamente!

Bônus para quem usa Gentoo: automação via Portage Hooks

Para evitar alarmes falsos em atualizações legítimas, vamos automatizar a atualização da assinatura.

Crie o script de hook: /etc/portage/bin/post_inst_signature.sh. Altere o caminho do seu user:

#!/bin/bash
# Pacotes que alteram o /boot
SENSITIVE_PKGS="sys-kernel/gentoo-sources sys-kernel/gentoo-kernel sys-kernel/gentoo-kernel-bin sys-boot/grub"

for pkg in $SENSITIVE_PKGS; do
    if [[ "${CATEGORY}/${PN}" == "${pkg}" ]]; then
        /home/usuario/scripts/check_boot.sh gen
    fi
done

Dê permissão:

chmod +x /etc/portage/bin/post_inst_signature.sh

Ative no Portage editando: /etc/portage/bashrce adicione?

post_pkg_postinst() {
    /etc/portage/bin/post_inst_signature.sh
}

Quando usar o Portage para atualizar kernel ou alterar GRUB, a assinatura vai ser atualizada automaticamente.

Fica a dica!
Outras dicas deste autor

Criando atalho para Whisker Menu no Xfce

Fácil: Watchtower Library no Linux

Autostart no GNOME

Atualização para kernel 4.0.1 no Elementary OS

Colocando Windows como padrão no GRUB

Leitura recomendada

Vídeo laboratório de Pentest - SQLi em PostgreSQL manualmente

Projeto Root - Servidor de LOG no Debian

Falha em autenticação NCSA Basic Auth

Recuperando a senha do root no Red Hat com Grub

Ncat com SSL

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário