📬 Toda semana, um resumo de segurança, Clean Code e IA no seu e-mail Inscreva-se →

Hardware Trojans: o que são e como detectar circuitos maliciosos

Praticamente nenhuma empresa hoje projeta e fabrica um chip do zero, do design até o wafer, dentro de casa. O modelo fabless é a regra: você desenha o circuito, manda pra uma fundição terceirizada fabricar, às vezes usando blocos de IP licenciados de outras empresas, ferramentas de EDA de terceiros no meio do caminho. Cada uma dessas etapas é um ponto onde alguém que não é você pode inserir uma modificação no circuito sem que ninguém perceba. Isso é hardware trojan: uma alteração maliciosa inserida no circuito, projetada pra ficar invisível até ser ativada.

Diferente de uma vulnerabilidade de software, que pode ser corrigida com um patch, um hardware trojan está gravado no silício. Se ele está lá, está lá até o chip ser descartado.

Como um trojan é estruturado

A maioria dos hardware trojans segue um modelo de duas partes: trigger (gatilho) e payload (carga maliciosa). O trigger é a condição que ativa o comportamento malicioso — pode ser uma sequência específica e rara de entradas, um contador interno que dispara depois de um número enorme de ciclos, ou uma condição de temperatura/tensão fora do normal. O payload é o que acontece quando o trigger dispara: vazar uma chave criptográfica por um canal secundário, desabilitar uma proteção, degradar a confiabilidade do chip, ou dar acesso privilegiado a alguém que sabe da existência do trojan.

Alguns trojans não têm trigger discreto — são “always-on”, ativos o tempo todo, geralmente fazendo alterações sutis e constantes (por exemplo, degradar levemente a confiabilidade de um componente ao longo do tempo). Esses são mais difíceis de esconder de análises constantes, mas também mais difíceis de associar a um evento específico.

Em termos de classificação, também vale separar por escopo físico: um trojan localizado, concentrado numa área pequena do chip, tende a produzir variação de consumo de energia ou atraso mais perceptível numa análise pontual. Um trojan distribuído, espalhado por várias partes do circuito, é desenhado justamente pra diluir esse sinal e escapar de detecção por side-channel.

Por que é tão difícil de detectar

Aqui está o núcleo do problema, e eu vou ser direto: não existe método de detecção de hardware trojan que funcione de forma confiável pra todos os casos. Cada abordagem tem uma limitação estrutural.

Teste lógico (aplicar vetores de teste e comparar com o comportamento esperado) esbarra num problema de escala: pra n entradas, existem 2ⁿ combinações possíveis, e o gatilho de um trojan bem projetado é justamente uma condição rara — o tipo de combinação que teste aleatório ou até teste dirigido dificilmente vai alcançar em tempo viável. Um trojan projetado pra disparar só com uma sequência específica de 40 bits não vai aparecer num conjunto de testes que cobre milhões de combinações comuns, porque o espaço de possibilidades é astronomicamente maior que qualquer suíte de teste prática.

Análise por side-channel (potência, tempo, emissão eletromagnética) compara o comportamento físico do chip suspeito com um “chip de referência” livre de trojan (golden chip). Funciona razoavelmente bem pra trojans grandes e localizados, que produzem uma assinatura de consumo de energia perceptivelmente diferente. Mas dois problemas reais: primeiro, variação normal de processo de fabricação (dois chips legítimos, mesma máscara, já variam naturalmente em consumo) cria ruído que se mistura com o sinal do trojan, gerando falsos positivos e falsos negativos. Segundo, trojans pequenos e distribuídos produzem variação tão pequena que fica dentro da margem de ruído de fabricação — efetivamente invisíveis pra esse método.

Monitoramento em tempo de execução (unidades de observação embutidas no chip, monitorando comportamento durante operação real) tem a vantagem de pegar trojans que passaram despercebidos no teste de fabricação. A desvantagem: consome recursos do próprio chip, e trojans “always-on” com efeito sutil continuam sendo difíceis de distinguir de variação normal de operação.

Um cenário concreto pra fixar a ideia

Imagine que você contratou uma fundição terceirizada pra fabricar um ASIC que processa autenticação de dispositivo, usando uma chave gravada internamente. Um engenheiro malicioso na etapa de fabricação insere um trojan pequeno, distribuído por várias partes do datapath, com um trigger baseado num contador interno que só dispara depois de dez milhões de operações de autenticação bem-sucedidas — o suficiente pra passar despercebido em qualquer teste de aceitação de fábrica, que normalmente roda algumas centenas ou milhares de ciclos de teste, não milhões. Quando o trigger dispara, o payload vaza um bit da chave por um canal de tempo sutil, a cada nova ativação. Detectar isso exigiria testes de fabricação rodando ordens de grandeza mais ciclos do que é economicamente viável, ou monitoramento em campo por tempo suficiente pra capturar o padrão — e mesmo assim, o efeito é sutil o bastante pra se confundir com ruído.

Esse tipo de cenário é exatamente por que grandes players de defesa e infraestrutura crítica insistem em fundições credenciadas (trusted foundry) pra chips sensíveis, mesmo pagando um prêmio significativo por isso — o custo de auditoria e controle de cadeia de suprimento compensa o risco de um trojan não detectável depois do fato.

O que dá pra fazer na prática, com recursos realistas

Você provavelmente não vai ter orçamento de programa de defesa pra validar cada chip que compra. Mas dá pra reduzir risco de forma proporcional:

  1. Prefira fornecedores de IP e fundições com histórico e reputação estabelecida — não elimina o risco, mas reduz a superfície de quem tem motivo e oportunidade pra inserir um trojan.
  2. Combine side-channel com teste lógico, em vez de confiar só num método. Cada um cobre uma fraqueza do outro parcialmente.
  3. Para funções críticas (autenticação, gerenciamento de chave), considere redundância de projeto — implementar a função crítica de duas formas independentes e comparar resultado, o que torna um trojan inserido em só um dos dois caminhos detectável por divergência.
  4. Monitore comportamento em campo ao longo do tempo, não só em teste de fábrica — um trojan com trigger de longo prazo (como o do exemplo acima) só vai aparecer depois de volume real de uso.

Hardware trojans e side-channel attacks compartilham boa parte do ferramental de detecção — se você ainda não leu o artigo sobre side-channel attacks aqui no blog, vale a leitura complementar, porque power analysis e timing analysis são exatamente as técnicas usadas tanto pra atacar criptografia quanto pra tentar caçar um trojan escondido no silício.

Leandro Rosendo Candido

Leandro Rosendo Candido

Engenheiro de Computação, mestre pela USP, 10+ anos com Embedded Linux. Escreve e grava sobre segurança, Clean Code e IA aplicada à programação.

Rolar para cima