Ich möchte den Raspberry Pi in einem kommerziellen Produkt verwenden, aber ich möchte ein Reverse Engineering der Software auf dem Gerät verhindern. Die fragliche Software wäre in Ruby geschrieben. Ich gehe davon aus, dass der Endbenutzer physischen Zugriff auf die SD-Karte hat und intelligent genug ist, um Root-Zugriff auf den Pi zu erhalten.
Aus meiner Sicht können die Optionen Folgendes umfassen:
- Verschlüsseln Sie einen Teil (oder die gesamte) SD-Karte
- Verschleiern Sie den Ruby-Code oder kompilieren Sie ihn in Bytecode (JRuby oder Rubinius)
Verschlüsselung wäre die beste Lösung, aber ich kann mir keine Möglichkeit zum Entschlüsseln vorstellen, ohne den Benutzer nach dem Schlüssel zu fragen. Codeverschleierung ist definitiv möglich, aber meiner Meinung nach weniger sicher.
Ist es möglich, einen Teil der SD-Karte zu verschlüsseln, ohne den Benutzer aufzufordern, einen Schlüssel zum Entschlüsseln einzugeben? Oder gibt es eine bessere Möglichkeit, um sicherzustellen, dass der Code nur auf dem gewünschten Gerät verfügbar ist?
quelle
Antworten:
Natürlich ist es möglich, verschlüsselte Dateien / Container / etc. Zu entschlüsseln. ohne nach einem Passwort zu fragen. Es reicht aus, das (verschlüsselte) Passwort auf der SD-Karte zu speichern und zum Entschlüsseln Ihrer Daten zu verwenden. Eine einfache
openssl
Demo könnte beispielsweise sein:Die Verschlüsselung würde durchgeführt, während die Software auf dem Pi installiert wird, und die Entschlüsselung würde zur Laufzeit durchgeführt, möglicherweise im RAM. Beispielsweise könnte das Passwort eine Kombination aus einer (Ihnen bekannten) Pseudozufallssequenznummer und der spezifischen Seriennummer von Pi sein, die Sie von a erhalten haben
cat /proc/cpuinfo
. Dann müssen Sie einen geeigneten versteckten Ort finden, um diese Pseudozufallszahl zu speichern, die in jeder Hinsicht " das Passwort " und damit die Schwachstelle des gesamten Verschlüsselungsmechanismus ist. Beispielsweise wäre ein Ersatzsektor auf der SD die typische Wahl, aber Sie können ihn sogar in eine Ihrer ausführbaren Dateien einbetten.In jedem Fall besteht Ihre beste Option darin, Ihre Software sowohl zu verschlüsseln als auch zu kompilieren, um Ihrer Software verschiedene Ebenen der Verschleierung hinzuzufügen.
Wenn Ihre Software eine Internetverbindung benötigt, können Sie den Pi sogar jedes Mal nach dem Kennwort fragen lassen. Sie müssen das Kennwort weiterhin in der Verbindung verbergen, es muss auch verwendet werden,
https
und Sie müssen unter Verwendung der aktuellen Zeit wiesalt
für die Verschlüsselung vor Antwortangriffen schützen .Sie haben viele (billige) Möglichkeiten, um Ihre Software sicher zu machen. Aber Sie müssen wissen, dass Ihre Software, wenn sie eine genau festgelegte Bekanntheitsschwelle erreicht, mit Sicherheit geknackt wird, auch wenn Sie beträchtliche Beträge in ihren Schutz investieren.
quelle
Praktisch, wenn der Code und Schlüssel auf einer SD - Karte Maschine sind, sie werden der Lage sein , es de-zu kompilieren, sie werden der Lage sein , die Schlüssel zu entdecken und sie werden die sensiblen Daten extrahieren können.
Es ist wie beim Verschlüsseln von Filmen, eine DVD muss alle Informationen enthalten, die zum Entschlüsseln des Films erforderlich sind, damit er dem Betrachter angezeigt werden kann, damit alle Kopierschutzmechanismen für Filme endgültig zum Scheitern verurteilt sind.
Das Beste, was Sie tun können, ist die Wirtschaftlichkeit des Reverse Engineering Ihres Produkts zu ändern.
Lohnt sich die Verschlüsselung und / oder Verschleierung?
Jetzt haben wir festgestellt, dass es keine Möglichkeit gibt, sich vollständig zu schützen, die Fragen werden
Wenn dies eine erhebliche wirtschaftliche Notwendigkeit zum Schutz Ihres Algorithmus / Ihrer Daten darstellt, sollten Sie dies prüfen. Wenn beispielsweise der Wert des Dienstes und die Kosten für den Kunden hoch sind, die Kosten für das Reverse Engineering Ihres Codes jedoch viel niedriger sind als die Kosten für die Entwicklung selbst, können die Benutzer es versuchen.
Das führt zu Ihrer Frage
Verschleierung
Die von Ihnen vorgeschlagene Option, den Code zu verschleiern, wirkt sich negativ auf die oben genannte Wirtschaftlichkeit aus. Sie versucht, die Kosten für sie erheblich zu erhöhen (5 oben), ohne die Kosten für Sie (6) erheblich zu erhöhen. Das Problem ist, dass es wie bei der DVD-Verschlüsselung zum Scheitern verurteilt ist und wenn es genug Unterschiede zwischen 3, 4 und 5 gibt, wird es irgendwann jemand tun.
Eine andere Option ist möglicherweise eine Form der Steganografie , mit der Sie identifizieren können, wer Ihren Code entschlüsselt und mit der Verteilung begonnen hat. Wenn Sie beispielsweise 100 verschiedene Gleitkommawerte als Teil Ihrer Daten haben und ein 1-Bit-Fehler im LSB jedes dieser Werte für Ihre Anwendung kein Problem darstellt, codieren Sie eine eindeutige (für jeden Kunden) Kennung in diese Bits . Das Problem ist, wenn jemand Zugriff auf mehrere Kopien Ihrer Anwendungsdaten hat, ist es offensichtlich, dass diese unterschiedlich sind, was die Identifizierung der versteckten Nachricht erleichtert.
Schutz
Die einzig wirklich sichere Möglichkeit besteht darin, einen wichtigen Teil Ihrer Software als Service bereitzustellen , anstatt ihn in Ihre Anwendung aufzunehmen.
Konzeptionell sammelt Ihre Anwendung alle Daten, die zum Ausführen Ihres Algorithmus erforderlich sind, und packt sie als Anforderung an einen (von Ihnen kontrollierten) Server in der Cloud . Anschließend berechnet Ihr Service Ihre Ergebnisse und gibt sie an den Client zurück. was würde es anzeigen.
Auf diese Weise bleiben alle Ihre proprietären, vertraulichen Daten und Algorithmen in einer Domäne, die Sie vollständig kontrollieren, und es wird verhindert, dass ein Client diese Daten extrahiert.
Der offensichtliche Nachteil ist, dass Kunden in Ihre Servicebereitstellung eingebunden sind und Ihren Servern und ihrer Internetverbindung ausgeliefert sind. Positiv zu vermerken ist, dass sie immer auf dem neuesten Stand der Fehlerbehebungen sind. Leider lehnen viele Leute SaaS aus genau diesen Gründen ab.
Dies wäre zwar ein großer Schritt und könnte enorme Kosten verursachen (siehe oben), aber ich sehe nur so, dass Ihr Algorithmus und Ihre Daten absolut sicher sind .
quelle
Ich habe kürzlich eine sehr elegante Lösung für dieses unlösbare Problem erfunden. Es wurde von diesem xkcd-Comic inspiriert:
Die Lösung heißt also Sekundenkleber . Wenn eine SD-Karte auf den PI aufgeklebt wird, ist es fast unmöglich, die Karte herauszunehmen, ohne sie zu beschädigen.
Sie können sogar eine externe SSD-Festplatte verwenden, die mit einem auf SD gespeicherten Passwort verschlüsselt ist und sich sicher fühlt!
quelle
dd
) daraus erstellen und diese entsprechend verwenden!Das Kompilieren in Bytecode wäre das beste Repellent. In Bezug auf die Verschlüsselung kann Software auf einem TrueCrypt-Volume gespeichert werden, jedoch nur, wenn der Benutzer keinen Root-Zugriff hat. Es gibt einfach keine Möglichkeit, das Kennwort sicher zu speichern, da der Speicher / die Festplatte jederzeit zur Überprüfung entleert werden kann. Selbst die Hilfe sicherer Geräte (Smartcards) würde nicht viel bewirken, wenn Software mit einer Vielzahl von Linux-Dienstprogrammen ausgeführt wird. Soweit ich weiß, ist sicheres Booten auf R-Pi keine Option, die verhindern würde, dass Benutzer innerhalb des Betriebssystems basteln.
quelle
Wenn Sie eine echte kommerzielle Anwendung erstellen möchten, ist der Pi in seiner Endbenutzerform nicht gut für Sie!
Sie müssen Ihre eigene Platine entwerfen, den Prozessor verwenden, der sich beispielsweise auf dem Pi befindet, und einen Flash-Speicher auf der Platine einbetten.
TIPPS
Ende des Tages. Der Raspberry Pi ist für Bildungszwecke gedacht, damit Kinder den Umgang mit Linux erlernen und einige Programme schreiben können.
Es ist nicht für die hochkarätige kommerzielle Nutzung geeignet. Sie müssen Ihr eigenes Gerät erstellen und Ihre eigenen Schutzsysteme entwickeln. Denn wenn nur Sie und niemand sonst wissen, wie Sie Ihre Eigentumsinformationen schützen, ist die Wahrscheinlichkeit, dass jemand sie mit einem bekannten Exploit oder Brute hackt, 0,001%.
ALTERNATIVEN
quelle
Eine der Lösungen besteht darin, die MAC-Adresse des RaspberryPi zu verwenden, die für einen bestimmten Pi fast eindeutig ist. Überprüfen Sie diese Adresse in Ihrem Code und geben Sie die kompilierte Version an. Dies erschwert das Reverse Engineering.
Für Leute, die die SD-Karte blindlings auf eine neue kopieren, funktioniert dies auf einem anderen Pi nicht. Dies wird die große Mehrheit der Leute davon abhalten, Ihre Software zu stehlen. Andere, die klug genug sind, dies zu unterbrechen, sind möglicherweise klug genug, um die Software neu zu gestalten. Sie sind nicht zahlreich und ich glaube nicht, dass sie Ihren Umsatz beeinträchtigen werden.
quelle
Sie können eine Piggy-Back-basierte Lösung verwenden: Software Serial Protection für Raspberry Pi
quelle
Fügen Sie Ihrer Trägerplatine einen SPI-basierten Flash-Speicher hinzu und speichern Sie Ihren Code darauf. Ich denke über diese Option für mein eigenes Produkt nach. Falls die SD beschädigt wird, möchte ich, dass der Endbenutzer eine neue schreiben kann, die einen benutzerdefinierten Raspbian und den Code zum Einhängen des SPI-Flashs und Ausführen der ausführbaren Datei enthält.
Eine andere Option ist das Speichern eines Verschlüsselungsschlüssels in Ihrer Echtzeituhr. Die meisten RTC-Chips haben Speicherplatz und können mit dem Schlüssel vorprogrammiert werden, mit dem die ausführbare Datei von SD oder SPI-Flash entsperrt und gemountet werden kann.
quelle
Ich glaube, dass alle CPUs der Raspberry Pi-Reihe einen eigenen sicheren Start unterstützen. Ich glaube, es erfordert 12 Volt, um die 4,8,16,32 oder 64K internen Flash oder EEPROM, die der Pi selbst nicht hat, neu zu flashen. Von dort aus können Sie die Trustzone mit Ihrem Code einrichten, sodass nicht alle wichtigen Informationen angezeigt werden. Ich verstehe auch, dass beide Formen des statischen RAM nur für eine bestimmte Anzahl von Umschreibungen stabil sind. Mein erster Schritt wäre, eine Ersatz-CPU zu haben und zu versuchen, diesen sicheren Startspeicher für ein paar Stunden oder Tage neu zu flashen. Schließlich werden alle Bits fixiert, sodass niemand Ihren Code ändern kann. Abhängig vom tatsächlichen Produkt können Sie regelmäßig eine 2-Faktor-Identifikation (wie bei Banken) anfordern, sodass das Produkt einen Code ausgibt und der Reaktivierungscode an gesendet wird Die E-Mail Adresse. Wenn Sie den Pi ein wenig modifizieren, Ich glaube, dass ARM auch eine CPUID hat, so dass es eine Reihe von Sicherheitsstufen gibt, für die Sie sich entscheiden können. Ich meine, Sie könnten einer bestimmten Nummer auch eine SMS anbieten. Viele Möglichkeiten.
quelle