Proteção de firmware nos controladores AVR e PIC

23

Alguém pode extrair o arquivo HEX que eu queimo em um microcontrolador que eu forneço?

Se isso for possível, como alguém pode garantir que seu código seja protegido em sistemas embarcados? No caso dos microcontroladores PIC e AVR, como proteger o firmware contra a reprodução?

Rookie91
fonte
1
No caso 1, você parece sugerir que forneça o arquivo hexadecimal aos seus clientes; nesse caso, eles podem gravá-lo em vários dispositivos clones, sem necessidade real de descompilar o código, embora seja possível. No caso de um dispositivo bloqueado (nº 2), geralmente é uma questão de quão determinados eles estão em obter o código (em outras palavras, quanto estão preparados para gastar), mas geralmente é possível.
alexan_e
1
costumava ser de dois anos, mas hoje em dia a proteção tende a ser derrotada em um ou dois dias para dispositivos populares. basicamente quando alguém decide que vale a pena fazer. Se você realmente quer segurança, precisa entrar no ramo de chips, não terá peças comerciais disponíveis no mercado.
22614 Old_timer #

Respostas:

33

Atualmente, a maioria dos microcontroladores tem métodos específicos para fabricantes ou partes para proteger o código de firmware incorporado. Isso geralmente é feito bloqueando os circuitos que normalmente permitem que a memória de código seja lida. (Você precisará procurar detalhes específicos da peça na folha de dados ou no site do fabricante nas notas de aplicação aplicáveis).

Uma vez bloqueado, não é possível ler a memória do código usando técnicas normais. Isso fornece um nível razoável de proteção para impedir que a maioria dos hackers visualize o código da máquina para seu aplicativo incorporado.

Atualmente, muitos dispositivos MCU possuem memória FLASH integrada para codificar o código do programa. Um programa armazenado e protegido anteriormente armazenado no FLASH geralmente pode ser substituído por um novo código, mas é necessária uma operação de apagamento completo do chip para desbloquear o mecanismo de proteção. Uma vez apagada, a peça funcionará como antes da trava de proteção original. Se um novo programa for carregado, geralmente é possível bloquear novamente a peça para proteger o código de máquina recém-carregado.

Qualquer discussão sobre proteção de código em microcontroladores não estaria completa sem mencionar que geralmente não há garantia de que qualquer esquema de proteção oferecido pelo fabricante da peça seja à prova de idiotas. Os fabricantes até afirmam que os sistemas de proteção não são 100% à prova de idiotas. Uma das razões para isso é que existe toda uma indústria do mercado negro em que, mediante uma taxa, hackers diligentes lêem o código de uma parte protegida para quem quiser pagar. Eles criaram vários esquemas que permitem que o código seja lido nas ROMs ou FLASHes nos microcontroladores protegidos. Alguns desses esquemas são incrivelmente inteligentes, mas trabalham com mais sucesso em algumas famílias do que em outras. Portanto, esteja ciente desse fato e tente proteger seu programa de olhares indiscretos.

Quando alguém coloca a mão na imagem binária do código de máquina que foi lido em um microcontrolador, seja um microcontrolador protegido ou não, eles podem processar o código da máquina por meio de uma ferramenta chamada desmontador. Isso transformará os dados binários de volta no código da linguagem assembly que pode ser estudado para tentar aprender como funcionam os algoritmos do seu programa. Fazer uma desmontagem precisa do código da máquina é um trabalho minucioso que pode exigir grandes quantidades de trabalho. No final, o processo pode levar ao código do assembler como eu descrevi. Se o seu programa foi escrito em alguma linguagem de alto nível, como C, C ++ ou Basic, o código do assembly representará apenas o resultado compilado e vinculado do seu programa. Geralmente, não é possível fazer engenharia reversa do código roubado até o nível de idioma de alto nível.

O que isso significa é que há realmente um benefício em escrever o firmware de seu aplicativo incorporado em um idioma de alto nível. Ele fornece outra camada que dificulta a engenharia totalmente reversa do seu programa. Um benefício ainda maior é o uso do mais avançado estado de arte na otimização de compiladores para compilar o aplicativo incorporado, porque os otimizadores de desempenho mais alto podem literalmente transformar o programa em uma enorme tigela de espaguete cheia de dezenas de chamadas para sub-rotinas curtas que são muito difíceis decifrar em um desmontador.

Os desenvolvedores embarcados mais experientes lhe dirão para seguir em frente e usar qualquer esquema de proteção oferecido no MCU no seu aplicativo ... mas não depender dele até o fim do caminho para o seu produto. Eles lhe dirão que a melhor maneira de se manter à frente da concorrência é atualizar constantemente seu produto para que as versões antigas estejam desatualizadas e desinteressantes quando os hackers clonarem seu código. Altere o código, adicione novos recursos, gire suas placas de PC de tempos em tempos para trocar todas as suas E / Ss e quaisquer outras coisas que você possa imaginar. Dessa forma, você pode vencer a corrida todas as vezes.

Michael Karas
fonte
Muito obrigado @ Michael Karas Essa foi uma resposta completa
Rookie91
12

Eu acho que a resposta de Michael é suficiente para esta pergunta, mas eu adiciono os dois links: Hacking o PIC 18F1320 e tudo o que eles fazem, podemos quebrar! Estes dois foram muito interessantes para mim.

Roh
fonte
O EE diligente deve estudar esse último link e pesquisar / comparar / selecionar dispositivos que estão faltando na lista. A complexidade é sempre mais dissuasora - como adicionar um DS3641 ou ATSHA204 . Embora nenhuma segurança adicional jamais seja 100% inquebrável, a complexidade adicional pode não valer a pena.
Rdtsc 11/04/19