Minha tarefa é a seguinte: é necessário ler todos os dados do firmware UEFI do chip BIOS e calcular a checksum
quantidade desses dados.
Como isso pode ser feito (qual é a área de memória do firmware UEFI e é possível ler o firmware UEFI do kernel Linux)?
Em muitos sistemas, você pode ler a ROM flash onboard usando flashrom , sem nenhum hardware especializado. Instale-o e execute
para verificar se o seu hardware é compatível e
para ler a ROM do seu sistema.
Você pode ter problemas para acessar
/dev/mem
; veja O que posso fazer sobre erros /dev/mem? para obter ajuda para resolvê-los. Observe que descarregar olpc_ich
módulo acionará o watchdog do seu sistema se ele estiver equipado com um e estiver habilitado; se for esse o caso, seu sistema será reinicializado, mas nada de anormal acontecerá além disso (assumindo que você não tenha dados não salvos com os quais se importe no momento).Parte da ROM também pode ser protegida pelo Management Engine (em sistemas Intel), mas geralmente essa é apenas a parte específica do ME; isso pode ou não ser uma preocupação para você, dependendo de suas necessidades exatas.
Ler todos os dados do firmware diretamente, como todo o binário do firmware, é dificilmente possível hoje em dia devido aos mecanismos de proteção dos sistemas modernos.
Os endereços da ROM do sistema
/proc/iomem
podem indicar onde o firmware está localizado, mas o acesso direto a essa área de memória/dev/mem
geralmente é bloqueado pelo kernel por motivos de segurança.Um programador de hardware poderia ler diretamente o firmware do chip com acesso físico e hardware especializado.
Você pode tentar ler os arquivos em
/sys/firmware/efi/efi/
, os serviços de tempo de execução UEFI fornecem arquivos/sys/firmware/efi/efi/
que oferecem alguns metadados, embora este não seja o firmware completo.Verificar se há
efivarfs
As variáveis UEFI são acessíveis no Linux através do sistema de arquivos efivarfs, normalmente montado em
/sys/firmware/efi/efivars
, então você pode tentar ler as variáveis UEFI aqui.ls /sys/firmware/efi/efivars
efivarfs - um sistema de arquivos de variáveis (U)EFI
entradas de variáveis efi em /sys/firmware/efi/efivars/
Isso não fornece acesso direto a todo o binário do firmware, mas a variáveis UEFI específicas.
Confira também
fwupd
fwupdmgr get-devices
arco - fwupd
Há muita coisa que se pode tentar, mas não é possível acessar todas as informações em novos sistemas sem hardware e software especializados.
Acesso às especificações e ferramentas
Interface de Firmware Extensível Unificada
Como acessar as configurações UEFI em sistemas Linux
UEFI Debian Wiki
Acessando informações de hardware UEFI do Linux
Este não é um guia e é apenas para fins informativos!
Por exemplo, tínhamos um laptop Lenovo onde esquecemos a senha do BIOS/UEFI. Conseguimos atualizar o firmware no laptop e inicializar o Linux para visualizar partes do BIOS/UEFI.
No entanto, a área que continha a senha era separada das outras informações e não podia ser lida com o Linux, então usamos hardware no chip com este dispositivo
CH341 24 25 Series EEPROM Flasher USB BIOS, SOIC8 Clip On-Board
para ler os dados diretamente e outros detalhes e redefinir o chip.Leia dados de firmware UEFI diretamente do chip sem restrições, é necessário acesso que vai além do que normalmente está disponível no nível do sistema operacional (Anel 0).
Para ignorar/hackear isso, você precisa operar em um nível mais baixo, como Ring -1, que é o sistema operacional. Existem mecanismos de proteção para impedir o acesso aos dados do firmware UEFI por motivos de segurança. Ignorar/hackear esses mecanismos pode trazer certos riscos.
Como mencionado, você precisa de uma combinação específica de hardware, software e conhecimento, e isso também pode danificar ou destruir o chip.
"checksum para prevenir um invasor" | Talvez você deva perguntar especificamente aqui security.stackexchange.com você tem as melhores opções para isso nas redes Stack Exchange e as melhores respostas/ajuda nesta área para segurança