Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Embarqué

Les chaînes de texte sont-elles une vulnérabilité dans les logiciels embarqués ?

Pendant de nombreuses années, la sécurité des ordinateurs de bureau a été une préoccupation. Une fois qu'une machine est connectée à Internet, il existe intrinsèquement une possibilité d'attaque. De telles infiltrations peuvent consister à voler des données, endommager le système ou modifier son fonctionnement d'une manière ou d'une autre. Les moyens de protection sont bien connus et largement appliqués. Les systèmes embarqués semblaient toujours à l'abri de tels problèmes, car ils étaient rarement mis en réseau et leur code était normalement dans une ROM quelconque. Les choses ont changé. Une grande partie des systèmes modernes sont connectés à Internet et il est courant que le code soit copié dans la RAM et exécuté à partir de là. Cela signifie que la sécurité est désormais une considération importante pour la conception de logiciels embarqués.

La langue anglaise est un excellent outil de communication. C'est un langage très expressif qui permet de communiquer avec une grande précision et subtilité. Cependant, dans le langage courant, la plupart d'entre nous sont paresseux et utilisent souvent des mots sans précision à 100 %. L'exemple que j'ai en tête ici est la façon dont la sécurité et sécurité sont utilisés de manière presque interchangeable, comme s'ils étaient synonymes. Je pense que la meilleure définition que j'ai entendue ressemble à ceci :la sécurité est le processus de protection du monde contre l'appareil; la sécurité protège l'appareil du monde. La sécurité est mon sujet d'aujourd'hui.

Si un système doit vraiment être totalement à l'épreuve des balles, un cryptage de qualité industrielle est nécessaire. Cela nécessite normalement un support matériel spécifique, qui, bien que facilement disponible, peut être considéré comme excessif pour une application où une telle sécurité n'est pas nécessaire. Dans de tels cas, il existe d'autres options et c'est ce que j'aimerais explorer.

Si un pirate informatique peut accéder au contenu de la mémoire d'un appareil, il peut commencer à comprendre ce qu'il fait et comment il le fait. C'est la première étape pour modifier son fonctionnement. Le code peut être désassemblé et, par conséquent, la logique peut être révélée. Sans cryptage, il n'y a pas grand-chose à faire pour empêcher cela. La prochaine chose que le pirate pourrait faire est de regarder un vidage hexadécimal/ASCII des données et de voir ce qu'il peut y trouver qui a du sens. Ils recherchent des motifs et des structures reconnaissables. C'est là que certaines précautions peuvent être prises. Bien que le cryptage ne soit pas une option, l'obscurcissement est une possibilité.

Le but de l'obscurcissement des données est de retarder ou de dissuader le pirate informatique en rendant simplement les données moins reconnaissables pour ce qu'elles sont. En parcourant un vidage de mémoire, l'une des choses faciles à repérer est les chaînes de texte. C'est donc ce sur quoi je vais me concentrer ici.

Dans le code C/C++, les chaînes de texte ne sont normalement que des séquences d'octets contenant des codes ASCII terminés par un octet nul. C'est très facile à repérer, donc je vais le changer. Premièrement, au lieu du terminateur null, le premier octet de chaque chaîne sera un spécificateur de longueur. Les caractères de la chaîne auront leurs données légèrement brouillées, pour les rendre moins familières - tout ce que je ferai est d'échanger les deux quartets de chaque octet. J'ai besoin d'un programme utilitaire dans lequel j'alimenterais les chaînes de texte en clair et qui génère la déclaration d'un tableau avec une initialisation appropriée. Voici la fonction au cœur de cet utilitaire :

void scramble(int index, unsigned char *input){    unsigned char *charpointer, character ; printf("unsigned char string%d[%d] ={0x%02x,", index,           strlen(input)+1, strlen(input)); pointeur de caractère =entrée ; while(*charpointer)    {        character =*charpointer++ ; caractère =((caractère &0x0f) <<4) | ((caractère &0xf0)>> 4); printf("0x%02x", caractère); if (*charpointer)            printf(","); }    printf("};  // \"%s\"\n", input);}

Si je passais à cette fonction un index de 4 et une chaîne "Hello world" (original hein ?), la sortie serait :

chaîne de caractères non signée4[12] ={0x0b, 0x84, 0x56, 0xc6, 0xc6, 0xf6, 0x02, 0x77, 0xf6, 0x27, 0xc6, 0x46} ; // "Bonjour tout le monde"

Je peux copier et coller cela dans mon code, puis tout ce que j'ai à faire est d'écrire une fonction pour déchiffrer le texte lorsque j'ai besoin de l'afficher. Au lieu de donner à chaque chaîne un numéro d'index, je pourrais lui donner un nom arbitraire en remplaçant l'index paramètre avec une chaîne. Notez que le code généré est quelque peu auto-documenté, car le commentaire montre la chaîne sous une forme lisible, mais, bien sûr, cela n'apparaît que dans le code source. Si le pirate a accès à votre code source, alors vous avez suffisamment de problèmes pour que je ne puisse pas vous aider davantage !

Voici du code pour illustrer le processus de désembrouillage :

void main(){    unsigned char temp, buffer[50] ; int count =string4[0], index=0 ; while(count--)    {        temp =string4[index+1] ; temp =((temp &0x0f) <<4) | ((temp &0xf0)>> 4); tampon[index] =temp; indice++ ; }    buffer[index] =0 ; printf("-%s-\n", tampon);}

L'échange de quartets dans chaque octet est l'une des nombreuses manières différentes dont le brouillage peut être effectué. Une autre possibilité consiste, par exemple, à faire pivoter chaque caractère de trois bits vers la gauche. Voici un code pour le faire :

char non signé leftrotate3(char non signé c){    c =(c <<3) | (c>> 5); retour c;}

Les techniques d'obscurcissement que j'ai décrites brouillent la chaîne caractère par caractère. Il serait possible de faire des choses à toute la chaîne à la place. Par exemple, traitez la chaîne comme une longue séquence de bits et faites-la pivoter d'un nombre arbitraire vers la gauche. Je laisserai le codage de cet algorithme au lecteur plus enthousiaste.

Il convient de noter qu'un effet secondaire de la localisation de toutes les chaînes de texte est que la création de différentes versions du logiciel pour d'autres langues est assez simple.

Je dois réitérer et souligner que l'obscurcissement des données est loin d'être à l'épreuve des balles et ralentira, au mieux, le pirate informatique sérieux. Si rien d'autre, le code de désembrouillage pourrait être désassemblé. L'astuce avec cette technique est de faire de l'obscurcissement une piste difficile à suivre. Si vous avez vraiment besoin d'une plus grande sécurité, vous devez envisager un cryptage complet.


Embarqué

  1. Piano
  2. Rôle des systèmes embarqués dans les automobiles
  3. Bases du système et des applications embarqués
  4. L'architecture SOAFEE pour la périphérie embarquée permet des voitures définies par logiciel
  5. Utiliser DevOps pour relever les défis des logiciels embarqués
  6. Les robots se rapprochent de votre usine ?
  7. Les logiciels embarqués changent la nature des chaînes d'approvisionnement matérielles
  8. Quels sont les bénéfices de l'interconnexion logicielle pour l'usine intelligente ?
  9. Pourquoi les institutions religieuses mettent en place un logiciel de gestion des installations