Wie kann ich Software auf dem Pi für die kommerzielle Nutzung schützen?

16

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?

Schrockwell
quelle
Ich suche nach einer ähnlichen Lösung. Die beste Antwort ist, ein Image (eine Partition) bereitzustellen, das nach dem Booten unter bestimmten Bedingungen verschlüsselt wird (möglicherweise ein Ajax-Aufruf wie DRM, um einen dynamischen Entschlüsselungsschlüssel bereitzustellen, eine Seriennummer mit Sperralgorithmus ((SN * date - 1)) - Nur Eine andere Möglichkeit ist, einen Code zu verwenden, der Ihren Code in Binärdateien kompiliert - wie c ++ oder .net (mono) - und zu hoffen, dass gute Softwarecracker nicht auf Ihre Software abzielen - Sie wissen, dass Microsoft dieses Problem schon seit Ewigkeiten nicht mehr hat es gelöst .. Viel Glück!
Piotr Kula

Antworten:

8

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 opensslDemo könnte beispielsweise sein:

openssl enc -a -e -salt -aes-256-cbc -pass pass:abc123 -in /tmp/plaintext.txt -out /tmp/ciphertext.enc

openssl enc -d -a -aes-256-cbc -pass pass:abc123 -in /tmp/ciphertext.enc

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, httpsund Sie müssen unter Verwendung der aktuellen Zeit wie saltfü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.

Avio
quelle
1
Ich kann mich im abgesicherten Modus als root anmelden, die Schlüsseldatei lesen, seine ganze harte Arbeit entschlüsseln und sie für Millionen an die Russen verkaufen. Guter Versuch .. aber nicht kugelsicher. Sogar https kann mit DNS-Weiterleitungen und gefälschten Zertifikaten in einem verwalteten Netzwerk ausgetrickst werden. Oops
Piotr Kula
1
@ Avio: Erstens ist der Sektor nicht unbekannt. Es muss bekannt sein, es ist einfach nicht offensichtlich, wo es ist. Aber da Sie es mit einem Entschlüsselungsskript / einer Entschlüsselungsanwendung herausfinden müssen, kann man es finden. Sie müssen den Code, der die Entschlüsselung bewirkt, irgendwo einfügen. Wo würdest du es hinstellen? In initramfs, einigen SD-Kartenpartitionen oder anderen nicht geschützten Bereichen. Jeder kann die Anwendungen / Skripte sehen, die zum Entschlüsseln der verschlüsselten Partition verwendet werden, und / oder sie einfach ändern, um vor ihrer Ausführung eine Art von Zugriff zu erhalten.
Krzysztof Adamski
1
Alle Ihre Verschlüsselungsmethoden sind in Ordnung - außer der Schlüssel ist auf der SD-Karte gespeichert. Das Unternehmen möchte höchstwahrscheinlich SD-Karten für / mit dem Pi an einen Endbenutzer verkaufen. Dann kann ich die SD-Karte nehmen, sie brachial hacken, den abgesicherten Modus ausnutzen, die Schlüsseldatei als Root lesen und die Kommunikation und den Quellcode aller anderen Geräte infiltrieren. Das ist das Rätsel. Ich bin sicher, dass das OP weiß, wie man Sachen verschlüsselt. Er fragt, wie seine Software vor Entschlüsselung geschützt werden soll, während das System sie automatisch entschlüsseln soll.
Piotr Kula
1
@ Avio: Nein, nicht wirklich. Aber da Sie gefragt haben, wie ?, habe ich darauf geantwortet. Wusste nicht, dass es eine rhetorische Frage ist. Sie haben geschrieben, dass die Implementierung Ihrer Idee ausreicht, um mit der Verteilung von Anwendungen zu beginnen, aber ich glaube, OP (und andere, die dies lesen) sollten sich nur der Schwachstellen dieses Ansatzes bewusst sein. Trotzdem glaube ich nicht, dass es für Raspberry Pi eine viel bessere Lösung gibt. Man kann nur noch mehr verschleiern. Vielleicht ist eine OP-Anwendung einfach zu kostbar, um das Risiko einzugehen, und er entscheidet sich für etwas anderes als RPi, um einen besseren Schutzmechanismus zu schaffen.
Krzysztof Adamski
1
Während alle Antworten hier eine großartige Diskussion der mit meiner Frage verbundenen Kompromisse und Herausforderungen bieten, werde ich diese Antwort vorerst akzeptieren, da sie die konkreteste Lösung bietet. Die Verwendung der Seriennummer aus / proc / cpuinfo kann das fehlende Glied sein.
Schrockwell
6

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

  1. Wie wahrscheinlich ist das?
  2. Welchen Wert haben Ihre Algorithmen und Daten für andere?
  3. Was kostet der Kauf einer Lizenz zur Nutzung Ihrer Software?
  4. Was kostet die Replikation Ihres Algorithmus und Ihrer Daten?
  5. Was kostet das Reverse Engineering Ihrer Algorithmen und Daten?
  6. Was kostet es Sie, Ihren Algorithmus und Ihre Daten zu schützen?

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

  • Wie sichern Sie Ihren Algorithmus und Ihre Daten?

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 .

Mark Booth
quelle
SaaS kann eine Option sein, Sie müssen sich jedoch darüber im Klaren sein, dass Sie die Punkte 1 bis 6 für jeden Server, den Sie online stellen, erneut überprüfen müssen. Sie sind auch DDoS-Angriffen ausgesetzt.
Avio
4

Ich habe kürzlich eine sehr elegante Lösung für dieses unlösbare Problem erfunden. Es wurde von diesem xkcd-Comic inspiriert:

Bildbeschreibung hier eingeben

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!

Bildbeschreibung hier eingeben

ADOConnection
quelle
Jemand könnte jedoch leicht eine Bilddatei ( dd) daraus erstellen und diese entsprechend verwenden!
Vassilis
@Vassilist es unmöglich ohne Login, oder nicht?
ADOConnection
Jeder mit einem Live-Linux-Image kann das! Es ist nicht notwendig, die Wurzel Ihres Systems zu sein.
Vassilis
@Vassilis darf ich Sie bitten, auf einen Artikel zu verweisen, in dem dieses Verfahren erläutert wird
ADOConnection
Das erste, was auf Google auftauchte, ist das
Vassilis
2

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.

Tomas Q.
quelle
1
Die Verschlüsselung beim Booten ist nicht so sicher, wie Sie gedacht hätten. Sie müssen nur auf den normalen Systemstart zugreifen / diesen umgehen, und es ist alles Hackfleisch. Nicht einmal Blurays haben das richtig verstanden. Verdammt!
Piotr Kula
Nur vollständig geschlossene Systeme können Ihre Anwendung schützen. Ich kenne nur eine solche Sache, die etwas programmierbar ist - eine Java-Karte.
Tomas Q.
1
Ja, aber Sie müssen immer eine PIN eingeben - die PIN ist NIE auf der Karte gespeichert.
Piotr Kula
1

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.

  1. Schreiben Sie eine ordnungsgemäße Firmware für das BCM, die einen einzigen Anmeldecode basierend auf einem streng geheimen Algorithmus generiert, der nur innerhalb der nächsten 10 Sekunden verwendet werden kann.
  2. Kompilieren Sie Ihren eigenen Kernel mit Ihrer Propriety-Software und aktivieren Sie einige Linux-Funktionen, mit denen Sie Root-Dateien aus einer verschlüsselten Datei auf dem Flash laden können, die eine weitere verschlüsselte Partition mit Ihrer Software enthält. (Doppelter Schutz)
  3. Ihre BCM-Firmware generiert einen streng geheimen Authentifizierungsschlüssel basierend auf einigen cleveren Algorithmen oder öffentlichen Schlüsseln und übergibt ihn an Ihr benutzerdefiniertes Linux-Kernel, das die verschlüsselte Root-Partition lädt und während des Startvorgangs weitere kryptografische Vorgänge ausführt, um Ihr verschlüsseltes Softwarelaufwerk zu laden innerhalb des verschlüsselten Bildes.

TIPPS

  • Gute Auth-Schlüssel sind nicht 8-16 Zeichen lang. Es ist wichtig, 256/512 Byte lange Auth-Schlüssel zu verwenden, die mehr System-Symbole (HEX) und weniger Zeichen (ASCII) enthalten.
  • Verwenden Sie nicht AES, TKIP, da es leicht rissig wird
  • Bis heute ist die Whirlpool-Verschlüsselung mit 256/512 Schlüsseln eine der kompliziertesten
  • Selbst wenn ein Hacker das Flash-Laufwerk entfernen oder den Inhalt entleeren kann. Ihre Software wird zweimal verschlüsselt.
  • Wenn sie den Auth-Schlüssel abfangen, wird es sehr schwierig sein, von der Firmware rauszukommen (weil der BCM Firmware-Dumps verhindern kann)
  • Einige clevere Flash-ROMs haben auch eine Funktion, um Speicherabbilder zu vermeiden.
  • Wenn Sie eine Leiterplatte entwerfen, implementieren Sie (wie Dell und Apple) Sicherheitschips, die alle Ihre Verschlüsselungsdaten und -schlüssel bereitstellen und Bruteforce-Versuche verhindern. Einige Dell haben eine Selbstzerstörung für militärische Zwecke. Wenn Sie das BIOS-Kennwort zweimal falsch eingegeben haben, werden die Laufwerke mit Streubomben gelöscht. Sie können dasselbe implementieren, wenn Sie Manipulationen mit Authentifizierungsschlüsseln erkennen.

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

  • Schreiben Sie Ihre Software so, dass sie im Binärformat kompiliert und auf dem Zielsystem bereitgestellt werden kann. Beispiel-EXE für Windows, das unter .NET, JAR für Java oder (nicht sicher unter Linux, C ++?) Ausgeführt wird
  • Denken Sie daran, je höher die gewünschte Sicherheit, desto mehr Geld müssen Sie dafür ausgeben. Es gibt keine Ausnahmen.
Piotr Kula
quelle
1

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.

Boulabiar
quelle
0

Sie können eine Piggy-Back-basierte Lösung verwenden: Software Serial Protection für Raspberry Pi

Paulo Arede
quelle
2
Korrigieren Sie mich, wenn ich falsch liege, aber dieses Gerät scheint keinen zusätzlichen Schutz gegen Reverse Engineering zu bieten. Eine einfache, fest codierte Überprüfung der CPU-Seriennummer würde dasselbe bewirken.
EDP,
0

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.

Thomas McNeill
quelle
-4

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.

Sean
quelle
1
Hallo und herzlich willkommen. Es wird viel geraten und an diesen Beitrag geglaubt. Bevor empfohlen wird, 12 V an den Pi anzulegen, ist es sehr ratsam, eine detailliertere Antwort zu geben und diese durch entsprechende Referenzen zu sichern.
Ghanima