A segurança de dispositivos embarcados é um campo crítico da segurança da informação, pois esses sistemas estão presentes em dispositivos IoT, automóveis, equipamentos médicos e infraestrutura crítica. Diferentemente de computadores tradicionais, dispositivos embarcados possuem recursos limitados, vida útil longa e atualizações complexas, o que os torna alvos atrativos para ataques.

Nesta aula, exploraremos quatro pilares essenciais para proteger esses sistemas: firmware, boot, atualização e hardening. Cada tópico apresenta desafios únicos e requer abordagens específicas para garantir a integridade, confidencialidade e disponibilidade do dispositivo.

Firmware

O firmware é o software de baixo nível que controla o hardware do dispositivo. Ele reside em memória não volátil (ROM, Flash) e é executado assim que o dispositivo é ligado. A segurança do firmware é fundamental, pois uma vulnerabilidade nessa camada pode comprometer todo o sistema.

Principais riscos: firmware malicioso (backdoors), modificação não autorizada (trojans), extração de dados sensíveis e execução de código arbitrário. Para mitigar, práticas como assinatura digital do firmware, criptografia do conteúdo e verificação de integridade (hash) são essenciais. Além disso, o uso de memórias protegidas (eFuses, TPM) impede leitura ou gravação não autorizada.

Exemplo de verificação de integridade de firmware com hash SHA-256:

1. Durante a compilação, calcula-se o hash do firmware original.
2. O hash é armazenado em local seguro (ex: one-time programmable memory).
3. No boot, o bootloader recalcula o hash do firmware armazenado.
4. Se os hashes não coincidirem, o boot é abortado ou uma partição de recuperação é carregada.

Boot

O processo de boot em dispositivos embarcados deve ser protegido para garantir que apenas software confiável seja executado. O boot seguro (secure boot) estabelece uma cadeia de confiança desde o código inicial (ROM bootloader) até o sistema operacional e aplicações.

Cada estágio do boot verifica a assinatura digital do próximo estágio antes de executá-lo. Se alguma verificação falhar, o boot é interrompido. Isso impede a execução de firmware adulterado ou malicioso. Exemplos de implementação incluem o UEFI Secure Boot em PCs e o Verified Boot no Android. Em dispositivos embarcados, é comum usar bootloaders como U-Boot ou Coreboot com suporte a assinaturas.

Exemplo de cadeia de confiança no boot seguro:

1. Boot ROM (hardcoded) verifica assinatura do bootloader primário.
2. Bootloader primário verifica assinatura do bootloader secundário.
3. Bootloader secundário verifica assinatura do kernel.
4. Kernel verifica assinatura dos módulos e aplicações.

Atualização

Atualizações de firmware são necessárias para corrigir vulnerabilidades e adicionar funcionalidades. No entanto, o processo de atualização deve ser seguro para evitar que versões maliciosas sejam instaladas. A atualização segura (secure update) envolve autenticação, integridade e confidencialidade.

Recomenda-se que as atualizações sejam criptografadas e assinadas digitalmente. O dispositivo deve verificar a assinatura antes de aplicar a atualização. Além disso, é importante garantir que a atualização não seja interrompida (fail-safe), usando mecanismos como dual-bank (duas partições alternadas) para evitar brick do dispositivo. Outra prática é o rollback protection, impedindo que versões antigas com vulnerabilidades conhecidas sejam reinstaladas.

Exemplo de processo de atualização segura:

1. Servidor de atualização gera pacote com firmware novo + assinatura.
2. Dispositivo baixa o pacote via HTTPS.
3. Dispositivo verifica a assinatura usando chave pública armazenada.
4. Se válido, o firmware é descriptografado e gravado na partição inativa.
5. Após reinicialização, o bootloader alterna para a nova partição.

Hardening

Hardening (endurecimento) é o processo de reduzir a superfície de ataque do dispositivo, desabilitando serviços desnecessários, aplicando permissões mínimas e configurando proteções adicionais. Em dispositivos embarcados, isso inclui desde a configuração do sistema operacional até a proteção de interfaces físicas.

Práticas comuns: desabilitar portas seriais de depuração (UART, JTAG) em produção, usar sistemas de arquivos com permissões restritas (read-only rootfs), ativar ASLR (Address Space Layout Randomization), habilitar DEP (Data Execution Prevention), remover compiladores e shells desnecessários, e configurar firewalls para limitar tráfego de rede. Também é importante proteger o acesso físico, como lacres e sensores de violação.

Exemplo de hardening em Linux embarcado:

1. Desabilitar serviços: systemctl disable sshd
2. Montar sistema de arquivos como somente leitura: mount -o remount,ro /
3. Ativar ASLR: echo 2 > /proc/sys/kernel/randomize_va_space
4. Configurar firewall: iptables -A INPUT -p tcp --dport 22 -j DROP

Boas Práticas

Sempre considere a segurança desde o início do projeto (security by design). Realize testes de penetração e análise de vulnerabilidades regularmente. Mantenha um plano de resposta a incidentes para atualizações emergenciais. E lembre-se: a segurança de dispositivos embarcados é uma responsabilidade compartilhada entre fabricantes, desenvolvedores e usuários finais.

Referências

Exercícios

  1. Explique a importância da cadeia de confiança no boot seguro e cite um exemplo de implementação.
  2. ✓ Resposta: A cadeia de confiança garante que cada estágio do boot verifique a autenticidade do próximo, impedindo a execução de código não autorizado. Exemplo: UEFI Secure Boot, onde o firmware verifica a assinatura do bootloader, que verifica a do kernel, etc.
  3. Quais são as principais ameaças à segurança do firmware? Liste pelo menos três e suas mitigações.
  4. ✓ Resposta: Ameaças: (1) Injeção de código malicioso - mitigação: assinatura digital; (2) Extração de firmware - mitigação: criptografia e proteção de memória; (3) Modificação não autorizada - mitigação: hash de integridade.
  5. Descreva como uma atualização segura (secure update) pode ser implementada em um dispositivo embarcado.
  6. ✓ Resposta: Implementação: usar criptografia e assinatura digital no pacote de atualização; verificar assinatura no dispositivo; usar dual-bank para fallback; aplicar rollback protection; comunicação via HTTPS.
  7. Cite duas práticas de hardening específicas para dispositivos embarcados e explique como elas reduzem a superfície de ataque.
  8. ✓ Resposta: (1) Desabilitar portas de depuração (UART, JTAG) - impede acesso físico direto ao sistema; (2) Montar sistema de arquivos como somente leitura - impede modificação não autorizada de binários.
  9. Qual a diferença entre boot seguro e atualização segura? Eles são dependentes?
  10. ✓ Resposta: Boot seguro verifica a integridade do software no momento da inicialização; atualização segura garante que apenas firmware autêntico seja instalado. Eles são complementares: boot seguro depende de um firmware inicial confiável, que pode ser atualizado de forma segura.