1. O Secure Debug Unlock pode permitir que a CPU bloqueie e desbloqueie o acesso à depuração com uma chave pública e um ID exclusivo.

Protegendo dispositivos de IoT incorporados de baixo custo

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Proteger dispositivos incorporados para aplicativos IoT e não IoT é uma preocupação cada vez mais importante. Em resposta, os fabricantes de dispositivos estão construindo processadores e microcontroladores incorporados com diversos recursos de segurança integrados.

Infelizmente, a segurança tem um custo tanto no preço desses novos dispositivos quanto no esforço necessário para reprojetar e requalificar o hardware para fazer uso de novos ICs. A boa notícia é que muito pode ser feito em hardware antigo ou de baixo custo para aprimorar a segurança do sistema. Vamos explorar as técnicas que podemos usar para melhorar a segurança nesses sistemas.

Etapas gerais para melhorar a segurança

Muitas técnicas simples estão disponíveis para melhorar significativamente a segurança de sistemas de baixo custo. O primeiro e mais fácil é garantir que os detalhes de hardware e firmware não estejam prontamente disponíveis. É comum ver explorações apresentadas em trabalhos acadêmicos que começam com a localização do firmware ou dos esquemas de um produto em um site ou servidor FTP. Esquemas, código fonte e binários devem ter controle de acesso. Além disso, as atualizações de firmware devem ser criptografadas para impedir que o código seja extraído facilmente de uma atualização. Também é possível tomar medidas mais extremas, como solicitar ICs com marcação personalizada para ofuscar o hardware que está sendo usado.

Limitar as informações dessa maneira é simplesmente ofuscação e não segurança verdadeira. Aumenta a dificuldade de um ataque e melhora a segurança do sistema. No entanto, limitar o acesso a informações importantes reduz a probabilidade de pesquisadores e outros atores de “chapéu branco” analisarem seu produto e alertarem sobre vulnerabilidades de segurança.

Uma maneira de atenuar isso é se envolver com terceiros que realizam análises de código e testes de penetração e fornecem essas informações sob a NDA. Além disso, considere disponibilizar informações no NDA para pesquisadores ou grupos acadêmicos que desejam analisar e atacar seu produto.

Outra técnica comum é proteger a interface de depuração do produto. Embora ICs de baixo custo possam não ter recursos de hardware como o Secure Debug Unlock (Figura 1), eles geralmente permitem que a CPU bloqueie e desbloqueie o acesso à depuração. Esse recurso pode ser usado para implementar um recurso razoável de desbloqueio de depuração.

1. O Secure Debug Unlock pode permitir que a CPU bloqueie e desbloqueie o acesso à depuração com uma chave pública e um ID exclusivo. 1. O Secure Debug Unlock pode permitir que a CPU bloqueie e desbloqueie o acesso à depuração com uma chave pública e um ID exclusivo.

Na forma mais simples do Secure Debug Unlock, cada dispositivo seria programado com a mesma chave pública (unlock_keypub) e um ID exclusivo. Para desbloquear um dispositivo, um token de desbloqueio deve ser gerado assinando seu ID exclusivo com a chave de desbloqueio particular (unlock_keypriv), e esse certificado é enviado ao dispositivo. O firmware do dispositivo verifica a assinatura para garantir que o ID exclusivo esteja sendo enviado pelo titular da chave privada e, em seguida, verifica se o ID exclusivo corresponde ao ID exclusivo dessa parte. Se as duas condições forem atendidas, a interface de depuração poderá ser desbloqueada.

Embora existam implementações mais avançadas, este exemplo simples representa um aumento significativo na segurança por não bloquear a interface, usar um desbloqueio simples baseado em senha ou usar um dispositivo que permita que alguém desbloqueie o dispositivo após apagar o flash.

Além disso, alguns dispositivos oferecem a capacidade de bloquear permanentemente a interface de depuração. Em sistemas em que o acesso à depuração não é necessário para análise de serviço ou falha, essa é geralmente uma maneira muito segura de desativar a porta de depuração.

Em certos sistemas, os terminais de depuração ficam em execução. Como portas de depuração, elas devem ser desativadas para impedir que os invasores as usem para comprometer o sistema. As mesmas técnicas usadas no bloqueio do acesso à depuração podem ser aplicadas para essa finalidade.

Protegendo chaves simétricas de ataques de canal lateral

A consideração é como proteger melhor as chaves simétricas da extração via ataques de canal lateral. Embora esses ataques tenham várias formas, todos eles dependem da observação de algum aspecto do dispositivo (consumo de energia, EMI, tempo) enquanto a descriptografia está sendo executada. Em seguida, essas observações são usadas para extrair a chave via análise estatística.

Os dispositivos incorporados mais recentes podem conter contramedidas de hardware para impedir que um sinal utilizável seja observado. Embora seja tentador tentar reproduzir o efeito dessas contramedidas no software, a realidade é que a análise estatística realizada pelos invasores geralmente é muito eficaz para que o software possa ofuscar o sinal suficientemente.

Na ausência de contramedidas de hardware dedicadas, o objetivo é impedir ataques de canal lateral, impedindo o uso da chave. Se a chave não for usada, o invasor não poderá capturar o número de observações (rastreamentos) necessários para realizar sua análise. Em alguns casos, isso não é possível, e devemos viver com o fato de que a chave é vulnerável a esse estilo de ataque. Em outros casos, podemos limitar efetivamente o uso da chave e impedir que o invasor colete os dados necessários.

Um excelente exemplo disso é um gerenciador de inicialização seguro, que descriptografa uma imagem como parte do processo de instalação. A chave deve ser acessada apenas ao instalar uma atualização válida. Na maioria dos sistemas, as atualizações são realizadas algumas dezenas de vezes por ano. Isso significa que podemos limitar o uso de chaves a algumas vezes por ano, o que é muito menor do que o invasor exige para montar um ataque bem-sucedido. Primeiro, o carregador de inicialização deve impedir o carregamento da mesma imagem repetidamente. Isso pode ser feito facilmente, incluindo um número de versão na imagem e descriptografando-o apenas se a versão for mais recente que a imagem atualmente instalada. Isso evita que os invasores provoquem o uso da chave carregando repetidamente a mesma imagem ou alternando entre as versões (ou seja, N, N-1, N, N-1 …).

Leia Também  Abridor de porta de garagem seguro DIY - Open Electronics

Em seguida, precisamos impedir que o carregador de inicialização carregue uma imagem corrompida ou alterada. Isso é facilmente conseguido assinando a imagem e quaisquer metadados, como a versão. Isso evita que o invasor simplesmente edite a versão da imagem e engane o gerenciador de inicialização para pensar que está recebendo centenas de atualizações válidas.

Inicialmente, o carregador de inicialização deve impedir o carregamento repetido da mesma imagem. O vetor de ataque final é um pouco mais difícil de manusear. Com esses mecanismos acima, o carregador de inicialização descriptografará a imagem se for mais recente que a versão atual e assinada corretamente. No entanto, os invasores ainda podem carregar a imagem várias vezes se abortarem o processo de instalação, removendo a energia ou puxando o pino de redefinição.

Quando ocorre uma redefinição durante a instalação da imagem, a maioria dos gerenciadores de inicialização identifica que um carregamento estava em andamento e tenta novamente a instalação automaticamente. Isso garante que uma instalação com falha não “bloqueie” a peça. Também faz com que a descriptografia da imagem ocorra a cada nova tentativa.

Ao redefinir continuamente a parte no meio da instalação, um invasor pode fazer com que o carregador de inicialização descriptografe repetidamente a imagem. Para evitar esse cenário, o carregador de inicialização pode incluir um contador de “falha na atualização” que é incrementado toda vez que a instalação é iniciada. Esse contador aumentará a cada nova tentativa até atingir um valor (como 20 tentativas), indicando que é provável um ataque e, em seguida, bloqueará o dispositivo (apagará a chave de descriptografia e apagará o aplicativo) para evitar novos ataques à chave . Na maioria dos sistemas, esse conjunto de regras do carregador de inicialização aumentará bastante a dificuldade de executar um ataque de canal lateral.

Outro exemplo é uma chave simétrica usada para proteger a comunicação com uma entidade externa. Normalmente, uma troca de chave pública é usada para trocar chaves simétricas que criptografam a comunicação real entre as duas partes. As chaves simétricas são frequentemente utilizadas por um período prolongado e seu uso pode ser observado por tempo suficiente para permitir a extração de canal lateral. A rotação da chave simétrica em intervalos regulares reduz o número de vezes que é usada e a probabilidade de poder ser extraída através de um ataque de canal lateral.

Como gerar e distribuir uma nova chave consome energia e tempo, há um custo para esse método. No entanto, quando o tráfego protegido é sensível, o aumento da segurança geralmente vale o custo de desempenho.

Figura 2 mostra um protocolo de comunicação que freqüentemente gira a chave simétrica (talvez a cada 1 ms), fazendo com que o transmissor gere uma nova chave simétrica aleatória em intervalos fixos e a envie como parte dos dados criptografados. Uma vez enviado, o link muda para a nova chave. Se os invasores tiverem acesso a qualquer chave simétrica, eles poderão ler todas as mensagens futuras, pois poderão decodificar a próxima chave com a chave quebrada. Para mitigar essa vulnerabilidade, uma troca de chaves assimétrica pode ser realizada em intervalos mais longos (por exemplo, 1 segundo) para garantir que, se uma chave for quebrada, o invasor possa decodificar apenas um segundo de dados.

2. Um protocolo de comunicação pode freqüentemente girar a chave simétrica fazendo com que o transmissor gere uma nova chave em intervalos fixos.2. Um protocolo de comunicação pode freqüentemente girar a chave simétrica fazendo com que o transmissor gere uma nova chave em intervalos fixos.

Aumentando a dificuldade de explorar o aplicativo

Explorações do código do aplicativo são uma preocupação para dispositivos de baixo custo que não têm suporte de hardware para isolar o software para conter explorações. Explorações de código vêm em duas variedades. O primeiro estilo de ataque tenta manipular a memória usando uma interface existente cujas entradas não são validadas corretamente de maneira inesperada.

O ataque mais conhecido desse tipo é um estouro de buffer (Fig. 3), em que um invasor envia mais dados do que o esperado para uma interface, o que resulta na substituição de códigos ou dados de aplicativos com seus próprios valores. Esse ataque pode ser usado para ativar o código do aplicativo de maneira não intencional, como obter um comando destinado a recuperar uma variável para recuperar informações de configuração. Na pior das hipóteses, o código pode ser injetado na memória, fazendo com que a CPU salte para esse código e permitindo que o invasor execute código arbitrário e assuma o controle do hardware.

3. Um estouro de buffer ocorre quando um invasor envia mais dados do que o esperado para uma interface.3. Um estouro de buffer ocorre quando um invasor envia mais dados do que o esperado para uma interface.

O segundo estilo de ataque tenta causar o mau funcionamento do código injetando indiretamente uma falha, como uma fonte de alimentação ou falha no relógio. O objetivo deste ataque é modificar o fluxo do programa. Isso geralmente é realizado injetando uma falha ou perturbação no momento exato em que a CPU está tomando uma decisão de segurança (ou respondendo a uma) corrompendo uma instrução de ramificação ou as instruções que levam a uma instrução de ramificação. Por exemplo, pode haver código de teste que envie informações secretas de um UART para fins de teste que não deveriam ser executados em operação normal. No entanto, um invasor pode conseguir executar esse código injetando uma falha que faz com que uma instrução if tome a decisão errada.

Leia Também  Arduino Blog »Modelo em escala Oldsmobile Dynamic 88 vagão manipula como a coisa real

A melhor maneira de mitigar esse tipo de ataque é reduzir a superfície de ataque, por exemplo, reduzir o número de interfaces que podem ser atacadas e reduzir a complexidade do aplicativo geral. Por exemplo, é tentador criar uma única imagem contendo o aplicativo e o código de teste necessários para o teste do painel. Esta imagem pode ser programada, um teste de placa pode ser executado e o produto enviado. No entanto, isso resulta na presença de código de teste e uma interface de teste de placa em dispositivos em campo.

Em vez disso, podemos criar imagens separadas de teste e aplicativo. Programe a imagem de teste da placa, execute os testes e aplique a imagem do aplicativo. Isso simplificará o aplicativo final e eliminará um possível ponto de ataque. Da mesma forma, as imagens de produção não devem conter código desnecessário. Por exemplo, se um recurso for parcialmente desenvolvido e, em seguida, eliminado por razões de custo ou tempo de colocação no mercado, esse código deverá ser removido da imagem de produção e não deixado no local. Da mesma forma, em vez de incluir recursos opcionais que podem ser ativados em campo, crie duas imagens separadas e ative os recursos opcionais por meio de uma atualização de firmware.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

As atualizações de firmware também são uma boa maneira de reduzir as explorações de código. As atualizações regulares de firmware têm dois efeitos benéficos. Primeiro, se um invasor desenvolver uma exploração permanente que se instala no flash, pressionar uma atualização substituirá essa exploração por uma nova imagem ou forçará o invasor a não instalar a nova imagem, o que provavelmente será detectado quando as mudanças de comportamento esperadas não ocorrerem. não observado.

As atualizações de firmware também podem incluir alterações intencionais (ou não intencionais) no código, que interrompem a função de explorações da versão anterior. Por exemplo, se a estrutura dos dados na RAM ou do código no flash for alterada, uma exploração que depende da substituição de um endereço específico não funcionará, pois esse endereço não contém mais a variável que a exploração estava tentando sobrescrever. Da mesma forma, se um protocolo de comunicação for alterado em uma atualização e um dispositivo comprometido optar por suprimir (não instalar) a atualização, será imediatamente óbvio que o dispositivo não foi atualizado corretamente.

A funcionalidade de hardware também pode ser reduzida para limitar as ferramentas disponíveis para um invasor. Por exemplo, muitos ICs permitem que a RAM seja desativada para economizar energia. É possível que um aplicativo seja executado em um dispositivo com 4K de RAM, mas usando apenas 2K para desativar os outros 2K e impedir que um invasor o use. Da mesma forma, as páginas não utilizadas do flash podem ser bloqueadas para impedir que invasores instalem uma exploração nelas.

Outras opções fáceis disponíveis em alguns hardwares incluem a implementação de detecção de limite / estouro de pilha (ou canário de pilha), a configuração do bit “no execute” na memória de dados (se disponível) e a randomização do layout do espaço de endereço (ASLR). O ASLR é um recurso de classe de processador de aplicativos, mas os recursos de limite de pilha e “não execução” também são encontrados nos microcontroladores. Uma variedade de técnicas de codificação pode tornar o código mais robusto a ataques de falhas (Fig. 4) e observações de canal lateral.

4. Um ataque com falha abre uma vulnerabilidade do sistema, forçando uma falha de hardware.4. Um ataque com falha abre uma vulnerabilidade do sistema, forçando uma falha de hardware.

Além dessas técnicas, é recomendável realizar testes de penetração nas imagens de firmware para identificar e corrigir vulnerabilidades. Isso pode ser realizado por terceiros ou internamente usando ferramentas de código aberto. É recomendável uma combinação de testes internos e de terceiros. A forma mais comum de análise para explorações de interface é difusa; vários recursos online explicam essa técnica.

Protegendo o Flash contra adulteração

Embora uma inicialização segura verdadeira exija uma raiz de confiança imutável (típica na ROM), muitos MCUs de baixo custo podem criar uma raiz de confiança razoavelmente segura no flash. Isso depende da capacidade do hardware de bloquear páginas de flash para impedir seu apagamento ou programação. Se esse recurso estiver disponível, um carregador de inicialização não atualizável pode ser colocado em uma página flash e essa página está bloqueada.

Além de fornecer serviços de carregamento de inicialização, o carregador de inicialização imutável também pode fornecer serviços de inicialização segura para verificar a assinatura do aplicativo antes de permitir sua execução. Nesse caso, o carregador de inicialização contém uma chave pública usada para validar imagens a serem instaladas e para validar o conteúdo do flash na inicialização. Se um invasor tentar editar o conteúdo do aplicativo, o carregador de inicialização detectará que a assinatura não corresponde mais e impedirá a execução do código adulterado.

Leia Também  Faça um micro: bot com micro: bit - Notícias

Protegendo dados confidenciais

Proteger dados confidenciais em um IC de baixo custo é difícil. Embora algumas técnicas tornem mais difícil para os invasores extrair dados confidenciais, os hackers encontrarão uma maneira de extrair as informações se elas forem valiosas o suficiente.

A principal defesa de um sistema de baixo custo é simplesmente não ter dados valiosos presentes em primeiro lugar. Dados persistentes (flash) e transitórios (RAM) devem ser avaliados para verificar se são necessários. Caso contrário, os dados devem ser removidos do sistema. Se necessário, ele deve ser armazenado pelo menor tempo possível. Se o sistema tiver outros componentes que podem armazenar dados confidenciais, como um aplicativo para smartphone ou nuvem, mova os dados para essas plataformas, porque normalmente eles têm melhores recursos para proteger fisicamente os dados armazenados.

Além disso, a implementação de recursos que requerem armazenamento de dados confidenciais deve ser cuidadosamente avaliada. Se um recurso desejado não puder ser adequadamente protegido em um dispositivo de baixo custo, ele não deve ser implementado ou o sistema deve ser atualizado para um IC mais seguro.

Os ICs de elemento seguro externo fazem um bom trabalho de armazenamento de dados confidenciais, mas se o aplicativo for comprometido, o invasor poderá fazer tudo o que puder. Por exemplo, embora armazenar uma chave em um Elemento Seguro impeça um aplicativo comprometido de obter o valor da chave, ele não impedirá que o aplicativo use essa chave para assinar ou descriptografar mensagens. Essa capacidade pode ser tão prejudicial quanto obter acesso ao próprio valor da chave. Tudo o que o aplicativo pode fazer usando um Elemento Seguro externo também pode ser executado por uma versão comprometida desse aplicativo.

Lembre-se de que dados confidenciais estão acessíveis além do dispositivo. Proteger uma chave simétrica em um dispositivo é ineficaz se a chave estiver sendo enviada por e-mail para o escritório de engenharia ou armazenada em um repositório de controle de origem não seguro.

Os usuários de criptografia devem considerar como os dados confidenciais (ou seja, chaves criptográficas, imagens de firmware ou código-fonte) são armazenados e acessados ​​em seu escritório de desenvolvimento. Isso é essencial para garantir que as informações confidenciais estejam bem protegidas. Os desenvolvedores devem usar mecanismos de armazenamento reforçado, como um módulo de segurança de hardware (HSM) ou módulo de plataforma confiável (TPM), instituir políticas e procedimentos para acessar informações seguras, implementar controles de acesso e implementar procedimentos corretos de registro e auditoria.

Limitações fundamentais de sistemas de baixo custo

É importante entender as razões pelas quais os fornecedores de IC incluem mecanismos de segurança de hardware em seus chips e por que muitos OEMs pagam por eles. Os sistemas de baixo custo têm limitações fundamentais e nunca serão tão seguros quanto um sistema com o hardware dedicado apropriado:

  • Sistemas sem contramedidas de ataque de canal lateral de hardware vazarão informações importantes.
  • Sistemas sem hardware de isolamento de processo estarão vulneráveis ​​a explorações de código de aplicativos.
  • Os sistemas sem uma inicialização segura integrada estarão vulneráveis ​​à violação do firmware.
  • Sistemas sem um elemento seguro (armazenamento seguro de chaves) estarão vulneráveis ​​à extração de chaves.

Como essas vulnerabilidades não podem ser eliminadas em sistemas de baixo custo, concentre-se em manipular o cálculo de custo / benefício do invasor (Fig. 5). Os atacantes desenvolverão uma exploração se o benefício que obtiverem (dinheiro, fruição, notoriedade, objetivos geopolíticos) exceder o custo (dinheiro, esforço) necessário para gerá-lo. Em vez de impossibilitar a extração da chave, reduza o valor da chave e aumente o custo da extração até o ponto em que esse custo seja maior que o valor da chave.

5. Concentre-se em adicionar recursos de segurança que aumentem o custo de um ataque que os benefícios potenciais da exploração.5. Concentre-se em adicionar recursos de segurança que aumentem o custo de um ataque que os benefícios potenciais da exploração.

Se o custo do ataque exceder o valor dessa exploração, o designer deve considerar a possibilidade de mudar para um dispositivo habilitado para segurança mais caro.

Conclusões

Embora os dispositivos de baixo custo ou herdados tenham limitações, você pode executar várias etapas para tornar os produtos e sistemas finais mais seguros. Os projetistas devem considerar cuidadosamente os requisitos de segurança dos novos sistemas e as atualizações dos sistemas existentes. Em alguns casos, esses requisitos exigirão recursos avançados de hardware. A aplicação de técnicas simples e de bom senso e práticas recomendadas também pode permitir que dispositivos legados ou de baixo custo prosperem e tenham sucesso no mercado de IoT de hoje.

Josh Norem é engenheiro de sistemas da equipe, produtos de IoT, na Silicon Labs.

Sites imperdíveis:

https://holidayservice-tn.com/como-criar-um-blog-de-viagens-profissional-e-viajar-ao-vivo/

https://draincleaningdenverco.com/11-multimilionarios-que-deixaram-seus-estudos/

https://clipstudio.com.br/a-minha-maior-de-milhoes-de-dolares-erros/

https://proverasfestas.com.br/como-otimizar-o-conteudo-que-sera-lido-e-compartilhado/

https://coniferinc.com/marketing-de-afiliados-as-melhores-maneiras-de-promover-programas-de-afiliados/

https://weeventos.com.br/escape-de-javascript-em-c-um-c-equivalente-para-o-escape-funktion/

https://testmygeekstuff.com/onpage-seo-vs-offpage-seo-qual-otimizacao-do-search-engine-e-mais-importante-2/

https://responsibleradio.com/rakesh-jhunjhunwala-portfolio-2018-networth-house-dicas-e-mais/

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br