Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Eingebettet

Sind Textzeichenfolgen eine Schwachstelle in eingebetteter Software?

Seit vielen Jahren ist die Sicherheit von Desktop-Computern ein Anliegen. Sobald eine Maschine mit dem Internet verbunden ist, besteht grundsätzlich die Möglichkeit eines Angriffs. Solche Infiltrationen können dazu dienen, Daten zu stehlen, das System zu beschädigen oder seinen Betrieb in irgendeiner Weise zu ändern. Schutzmittel sind allgemein bekannt und werden weithin angewendet. Eingebettete Systeme schienen vor solchen Problemen immer immun zu sein, da sie selten vernetzt waren und ihr Code normalerweise in irgendeiner Art von ROM lag. Dinge haben sich geändert. Ein Großteil moderner Systeme ist mit dem Internet verbunden und es ist üblich, dass Code in den Arbeitsspeicher kopiert und von dort ausgeführt wird. Dies bedeutet, dass Sicherheit jetzt ein wichtiger Aspekt beim Design von eingebetteter Software ist.

Die englische Sprache ist ein großartiges Kommunikationsmittel. Es ist eine sehr ausdrucksstarke Sprache, die eine Kommunikation mit großer Präzision und Subtilität ermöglicht. In der alltäglichen Sprache sind die meisten von uns jedoch faul und verwenden Wörter oft ohne 100%ige Genauigkeit. Das Beispiel, das ich hier im Hinterkopf habe, ist die Art und Weise, wie Sicherheit und Sicherheit werden fast synonym verwendet, als wären sie Synonyme. Ich denke, die beste Definition, die ich gehört habe, lautet ungefähr so:Sicherheit ist der Prozess, die Welt vor dem Gerät zu schützen; Sicherheit schützt das Gerät vor der Welt. Sicherheit ist mein heutiges Thema.

Wenn ein System wirklich absolut kugelsicher sein muss, ist eine Verschlüsselung in Industriequalität gefragt. Dies erfordert normalerweise eine spezielle Hardwareunterstützung, die zwar leicht verfügbar ist, aber für eine Anwendung, bei der eine so hohe Sicherheit nicht erforderlich ist, als übertrieben angesehen werden könnte. In solchen Fällen gibt es andere Möglichkeiten und das möchte ich erkunden.

Wenn ein Hacker Zugriff auf den Speicherinhalt eines Geräts erhält, kann er herausfinden, was es tut und wie es es tut. Dies ist der erste Schritt zur Änderung des Betriebs. Code kann zerlegt werden und somit kann die Logik enthüllt werden. Ohne Verschlüsselung lässt sich dies kaum verhindern. Das nächste, was der Hacker tun könnte, ist, sich einen Hex/ASCII-Dump der Daten anzusehen und zu sehen, was er dort finden kann, was sinnvoll ist. Sie suchen nach Mustern und erkennbaren Strukturen. Hier können einige Vorsichtsmaßnahmen getroffen werden. Auch wenn Verschlüsselung möglicherweise keine Option ist, ist eine Verschleierung möglich.

Das Ziel der Datenverschleierung besteht darin, den Hacker zu verzögern oder abzuschrecken, indem die Daten einfach weniger erkennbar gemacht werden. Beim Durchsuchen eines Speicherabbilds sind Textzeichenfolgen am einfachsten zu erkennen. Darauf werde ich mich hier konzentrieren.

In C/C++-Code sind Textzeichenfolgen normalerweise nur Sequenzen von Bytes, die ASCII-Codes enthalten, die mit einem Null-Byte abgeschlossen sind. Das ist sehr leicht zu erkennen, also werde ich es ändern. Erstens ist das erste Byte jeder Zeichenfolge anstelle des Nullabschlusszeichens ein Längenbezeichner. Die Daten der Zeichen der Zeichenfolge werden leicht verschlüsselt, damit sie weniger vertraut aussehen – ich vertausche nur die beiden Nibbles jedes Bytes. Ich benötige ein Dienstprogramm, in das ich die Klartext-Strings einspeisen würde, und es generiert die Deklaration für ein Array mit entsprechender Initialisierung. Hier ist die Funktion im Herzen dieses Dienstprogramms:

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)); Zeichenzeiger =Eingabe; while(*charpointer)    {        Zeichen =*charpointer++; Zeichen =((Zeichen &0x0f) <<4) | ((Zeichen &0xf0)>> 4); printf("0x%02x", Zeichen); if (*charpointer)            printf(","); }    printf("};  // \"%s\"\n", input);}

Wenn ich dieser Funktion einen Index von 4 und einen String „Hello world“ (Original oder?) übergeben würde, wäre die Ausgabe:

unsigned char string4[12] ={0x0b, 0x84, 0x56, 0xc6, 0xc6, 0xf6, 0x02, 0x77, 0xf6, 0x27, 0xc6, 0x46}; // "Hallo Welt"

Ich kann dies kopieren und in meinen Code einfügen, dann muss ich nur noch eine Funktion schreiben, um den Text zu entschlüsseln, wenn ich ihn anzeigen muss. Anstatt jedem String eine Indexnummer zu geben, könnte ich ihm einen beliebigen Namen geben, indem ich den Index ersetze Parameter mit einer Zeichenfolge. Beachten Sie, dass der generierte Code etwas selbstdokumentierend ist, da der Kommentar den String in lesbarer Form anzeigt, dieser aber natürlich nur im Quellcode vorkommt. Wenn der Hacker Zugriff auf Ihren Quellcode hat, sind Sie in so vielen Schwierigkeiten, dass ich nicht weiterhelfen kann!

Hier ist ein Code zur Veranschaulichung des Entschlüsselungsprozesses:

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); Puffer[Index] =Temp; index++; }    Puffer[index] =0; printf("-%s-\n", Puffer);}

Das Vertauschen von Halbbytes in jedem Byte ist eine von vielen verschiedenen Möglichkeiten, wie die Verwürfelung durchgeführt werden kann. Eine andere Möglichkeit besteht darin, beispielsweise jedes Zeichen um drei Bits nach links zu drehen. Hier ist ein Code, um genau das zu tun:

unsigned char leftrotate3(unsigned char c){    c =(c <<3) | (c>> 5); c zurückgeben;}

Die Verschleierungstechniken, die ich skizziert habe, verwürfeln die Zeichenfolge Zeichen für Zeichen. Es wäre möglich, stattdessen Dinge mit der gesamten Zeichenfolge zu tun. Behandeln Sie die Zeichenfolge beispielsweise als lange Bitfolge und drehen Sie sie um eine beliebige Zahl nach links. Die Codierung dieses Algorithmus überlasse ich dem begeisterteren Leser.

Es ist erwähnenswert, dass ein Nebeneffekt der Lokalisierung aller Textzeichenfolgen darin besteht, dass die Erstellung verschiedener Versionen der Software für andere Sprachen recht einfach ist.

Ich muss wiederholen und betonen, dass die Verschleierung von Daten alles andere als kugelsicher ist und den ernsthaften Hacker bestenfalls bremsen wird. Wenn nichts anderes, könnte der Entschlüsselungscode zerlegt werden. Der Trick bei dieser Technik besteht darin, die Verschleierung zu einer schwierigen Spur zu machen. Wenn Sie wirklich mehr Sicherheit benötigen, müssen Sie auf die vollständige Verschlüsselung achten.


Eingebettet

  1. Klavier
  2. Rolle eingebetteter Systeme in Automobilen
  3. Grundlagen eingebetteter Systeme und Anwendungen
  4. 10 Funktionen einer 3D-Druck-Workflow-Software, die wirklich unverzichtbar sind 
  5. SOAFEE-Architektur für Embedded Edge ermöglicht softwaredefinierte Autos
  6. Einsatz von DevOps zur Bewältigung von Herausforderungen mit eingebetteter Software
  7. Kommen Roboter auf Ihre Fabrik zu?
  8. Eingebettete Software verändert die Natur der Hardware-Lieferketten
  9. Welche Vorteile bietet die Softwarevernetzung für die Smart Factory?
  10. Warum religiöse Institutionen eine Facility-Management-Software implementieren