Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial Internet of Things >> Integrado

As strings de texto são uma vulnerabilidade no software incorporado?


Por muitos anos, a segurança dos computadores desktop foi uma preocupação. Uma vez que a máquina está conectada à Internet, existe intrinsecamente a possibilidade de algum tipo de ataque. Essas infiltrações podem ser para roubar dados, danificar o sistema ou alterar sua operação de alguma forma. Os meios de proteção são bem conhecidos e amplamente aplicados. Os sistemas embarcados sempre pareceram imunes a esses problemas, já que raramente estavam em rede e seu código normalmente estava em algum tipo de ROM. As coisas mudaram. Uma grande parte dos sistemas modernos está conectada à Internet e é prática comum que o código seja copiado para a RAM e executado a partir daí. Isso significa que a segurança agora é uma consideração importante no design de software embarcado.

A língua inglesa é uma ótima ferramenta de comunicação. É uma linguagem muito expressiva que possibilita a comunicação com grande precisão e sutileza. No entanto, na fala cotidiana, a maioria de nós é preguiçosa e costuma usar palavras sem 100% de precisão. O exemplo que tenho em mente aqui é a forma como segurança e segurança são usados ​​quase indistintamente, como se fossem sinônimos. Acho que a melhor definição que ouvi é mais ou menos assim:segurança é o processo de proteger o mundo do dispositivo; segurança é proteger o dispositivo do mundo. Segurança é o meu tópico de hoje.

Se um sistema realmente precisa ser totalmente à prova de balas, a criptografia de nível industrial é necessária. Isso normalmente requer suporte de hardware específico, que, embora prontamente disponível, pode ser considerado um exagero para um aplicativo onde tal alta segurança não é necessária. Nesses casos, existem outras opções e é isso que gostaria de explorar.

Se um hacker pode obter acesso ao conteúdo da memória de um dispositivo, eles podem começar a descobrir o que faz e como faz. Esta é a primeira etapa para alterar seu funcionamento. O código pode ser desmontado e, portanto, a lógica pode ser revelada. Sem criptografia, pouco pode ser feito para evitar isso. A próxima coisa que o hacker pode fazer é examinar um dump hex / ASCII dos dados e ver o que eles podem encontrar que faça sentido. Eles procuram padrões e estruturas reconhecíveis. É aqui que algumas precauções podem ser tomadas. Embora a criptografia possa não ser uma opção, a ofuscação é uma possibilidade.

O objetivo da ofuscação de dados é atrasar ou deter o hacker simplesmente tornando os dados menos reconhecíveis pelo que são. Examinando um despejo de memória, uma das coisas fáceis de detectar são as cadeias de texto. Então, é nisso que vou me concentrar aqui.

No código C / C ++, as strings de texto são normalmente apenas sequências de bytes contendo códigos ASCII terminados por um byte nulo. Isso é muito fácil de detectar, então vou mudá-lo. Primeiro, em vez do terminador nulo, o primeiro byte de cada string será um especificador de comprimento. Os caracteres da string terão seus dados ligeiramente embaralhados, para torná-los menos familiares - tudo o que farei é trocar os dois nibbles de cada byte. Preciso ter um programa utilitário no qual alimentaria as strings de texto simples e geraria a declaração de uma matriz com inicialização apropriada. Aqui está a função central deste utilitário:
 void scramble (int index, unsigned char * input) {unsigned char * charpointer, character; printf ("string de caracteres sem sinal% d [% d] ={0x% 02x,", índice, strlen (entrada) +1, strlen (entrada)); charpointer =entrada; while (* charpointer) {character =* charpointer ++; caractere =((caractere &0x0f) <<4) | ((personagem &0xf0)>> 4); printf ("0x% 02x", personagem); if (* charpointer) printf (","); } Printf ("}; // \"% s \ "\ n", input);} 

Se eu passasse a esta função um índice de 4 e uma string “Hello world” (original eh?), A saída seria:
 string4 sem sinal [12] ={0x0b, 0x84, 0x56, 0xc6, 0xc6, 0xf6, 0x02, 0x77, 0xf6, 0x27, 0xc6, 0x46}; // "Olá, mundo" 

Posso copiar e colar isso no meu código, então tudo que preciso fazer é escrever uma função para decodificar o texto quando eu precisar exibi-lo. Em vez de dar a cada string um número de índice, eu poderia dar a ela um nome arbitrário substituindo o índice parâmetro com uma string. Observe que o código gerado é um tanto autodocumentado, já que o comentário mostra a string em um formato legível, mas, é claro, isso só aparece no código-fonte. Se o hacker tiver acesso ao seu código-fonte, você está com problemas suficientes que não posso ajudar mais!

Aqui está um código para ilustrar o processo de desembaralhamento:
 void main () {unsigned char temp, buffer [50]; contagem interna =string4 [0], índice =0; while (contagem--) {temp =string4 [índice + 1]; temp =((temp &0x0f) <<4) | ((temp &0xf0)>> 4); buffer [índice] =temp; index ++; } Buffer [índice] =0; printf ("-% s- \ n", buffer);} 

A troca de nibbles em cada byte é uma das muitas maneiras diferentes de fazer o embaralhamento. Outra possibilidade é, digamos, girar para a esquerda cada caractere em três bits. Aqui está um código para fazer exatamente isso:
 unsigned char leftrotate3 (unsigned char c) {c =(c <<3) | (c>> 5); return c;} 

As técnicas de ofuscação que descrevi embaralham a string caractere por caractere. Seria possível fazer coisas com a string inteira em vez disso. Por exemplo, trate a string como uma longa sequência de bits e gire-a um número arbitrário para a esquerda. Vou deixar a codificação desse algoritmo para o leitor mais entusiasmado.

É importante notar que um efeito colateral da localização de todas as strings de texto é que fazer versões diferentes do software para outros idiomas é bastante simples.

Devo reiterar e enfatizar que a ofuscação de dados está longe de ser à prova de balas e, na melhor das hipóteses, retardará o hacker sério. Se nada mais, o código de desembaralhamento poderia ser desmontado. O truque com essa técnica é tornar a ofuscação uma trilha difícil de seguir. Se você realmente precisa de mais segurança, deve considerar a criptografia completa.

Integrado

  1. Piano
  2. Função de sistemas incorporados em automóveis
  3. Noções básicas de sistema incorporado e aplicativos
  4. 10 Recursos de um software de fluxo de trabalho de impressão 3D que são verdadeiramente essenciais
  5. Arquitetura SOAFEE para borda incorporada permite carros definidos por software
  6. Usando DevOps para enfrentar desafios de software incorporado
  7. Os robôs estão se aproximando de sua fábrica?
  8. O software embarcado está mudando a natureza das cadeias de suprimentos de hardware
  9. Quais são os benefícios da interconexão de software para a fábrica inteligente?
  10. Por que as instituições religiosas estão implementando um software de gerenciamento de instalações