To top
Resources Resources
[Translate to German:]

Kategorien: Software-Schutz

Blurry Box® Technologie

Software hat einen immer größeren Anteil an der Wertschöpfung. Daher ist Softwareschutz ein immer wichtiger werdendes Teilgebiet der IT-Sicherheit. Softwareschutz verhindert Kopieren und Reverse Engineering von Softwareprodukten und schützt so vor Industriespionage.

Kerckhoffs’ Prinzip

Kerckhoffs’ Prinzip sagt: „Der Schlüssel ist das Geheimnis und nicht das Verfahren.“

Die bisher in der Praxis verwendeten Softwareschutzlösungen verletzen Kerckhoffs’ Prinzip, da die Geheimhaltung der dort verwendeten Methoden essentiell für deren Wirksamkeit ist. Ein Angreifer, der diese Methoden genau kennt, hat einen erheblich verminderten Aufwand, den Softwareschutz zu brechen. In der Theorie sind Methoden bekannt, die einen wirksamen Softwareschutz zusammen mit Kerckhoffs’ Prinzip beweisbar garantieren. Diese sind allerdings in der Praxis aus Ressourcen- und Performancegründen nicht einsetzbar. Code Moving, die Ausführung des zu schützenden Programms in einer sicheren Spezialhardware (Dongle), ist in der Praxis ebenfalls zu langsam, um es flächendeckend für komplexe Anwendungen einzusetzen.

Das Blurry Box-Verfahren

Mit dem Blurry Box-Verfahren wird Softwareschutz nach dem Kerckhoffs’schen Prinzip möglich. Das Blurry Box-Verfahren wurde gemeinsam vom FZI Forschungszentrum Informatik, Karlsruher Institut für Technologie und Wibu-Systems entwickelt und wird Mitte 2015 für Softwarehersteller zur Verfügung stehen.

Beim Blurry Box-Verfahren kennt der Angreifer das Blurry Box-Verfahren und das ausgelieferte Softwareprodukt ist für den Angreifer keine Blackbox. Er kann die Software benutzen und den ausgeführten Code im Klartext inspizieren. Das Blurry Box-Verfahren macht eine statische Codeanalyse nachweislich unmöglich und erschwert eine dynamische Codeanalyse substantiell.

Ausgangspunkt des Blurry Box-Verfahrens und des Sicherheitsnachweises sind empirische Beobachtungen aus der Softwareentwicklung und der Hackerszene der letzten zwanzig Jahre:

  • Eine typische Software ist so komplex, dass niemand durch Bedienung der Software den gesamten Code durchlaufen kann. Ein typischer Anwender durchläuft 10–20 %, ein typischer Power User 30–50 % und die interne Qualitätssicherung 80–90 % des Codes.
  • Ein Hacker verfügt über ein hohes Maß an Wissen um den Vorgang des Hackens selbst. Er kann beispielsweise verschlüsselte Codestellen finden, Rückgabewerte ändern, Codefragmente zusammenfügen oder Code aus dem Speicher auslesen und wieder einfügen.
  • Ein Hacker kennt den eigentlichen Zweck der Software und die interne Funktionsweise nicht. 

Auf den oben genannten Erkenntnissen, speziell dem fehlenden Fachwissen, wird ein Softwareschutz aufgebaut, der ohne massive Verlagerung der Programmausführung in den Dongle auskommt.

Die Methoden des Blurry Box-Verfahrens

Das Blurry Box-Verfahren kombiniert mehrere Methoden, die im Folgenden erläutert werden.

Vervielfältigung von Funktionsblöcken zu Varianten

Ein Programm lässt sich in mehrere Funktionsblöcke unterteilen. Ein Funktionsblock f[i] hat Eingabeparameter pIn[i] und Ausgabeparameter pOut[i]. In Abhängigkeit der jeweiligen pIn[i] liefert der Funktionsblock entsprechende pOut[i] zurück. Beim Blurry Box-Verfahren werden einzelne Funktionsblöcke zu m Varianten vervielfältigt: Aus einem Funktionsblock f[i] werden die Blöcke f[i,1] bis f[i,m] generiert. Die Funktionsblöcke f[i,j] werden durch eine Wrapperfunktion fw[i] in Abhängigkeit der Aufrufparameter pIn[i] aufgerufen. Die Ausgabe der Variante f[i,j] wird als Rückgabewert pOut[i] von der Wrapperfunktion fw[i] zurückgegeben. Damit wird erreicht, dass die Codeabdeckung bei einem Durchlauf verringert wird und zusätzlich von den verwendeten Eingabeparametern abhängig ist.

Modifikation der Varianten

Ein trivialer Ansatz, die Varianten zu umgehen, ist das Ändern der Wrapperfunktion fw[i], so dass immer die gleiche Variante ausgeführt wird. Um diesen Ansatz unwirksam zu machen, werden durch das Blurry Box-Verfahren die Varianten eines Funktionsblocks so modifiziert, dass sie nur noch für den vorgesehenen Wertebereich korrekt funktionieren. Aus nur einer oder wenigen Varianten andere, noch unbekannte Varianten oder den ursprünglichen Funktionsblock abzuleiten, ist dem Angreifer wegen seines fehlenden Fachwissens nicht möglich.

Durch die Modifikation des Codes liefert eine Variante für nicht vorgesehene Parameterwerte falsche Ergebnisse. Ohne Fachwissen ist es dem Angreifer nicht möglich, diese zu korrigieren. Somit kann der Angreifer unbekannte Varianten nicht durch eine ihm bekannte ersetzen.

Verschlüsselung aller Varianten

Jede einzelne Variante wird verschlüsselt. Die Schlüssel der Varianten werden im CmDongle abgelegt. Zum Entschlüsseln bietet der CmDongle eine API-Funktion, bei der die verschlüsselten Daten in den CmDongle übertragen und mit dem Schlüssel intern im CmDongle entschlüsselt werden. Der entschlüsselte Programmcode wird als Rückgabewert der CmDongle-API zurückgeliefert und in der Software als Code der Variante ausgeführt. Ohne CmDongle mit dem passenden Schlüssel kann eine Variante nicht entschlüsselt werden. Zur Verschlüsselung wird der Advanced Encryption Standard (AES) verwendet. Um Blöcke mit gleichem Inhalt auf unterschiedliche Chiffrate abzubilden, fließt in die Berechnung ein zufällig gewählter Wert mit ein.

Einfügen von Fallen

Um zu verhindern, dass ein Angreifer nun alle Varianten unabhängig von einem Programmlauf durch den CmDongle entschlüsseln lässt, werden sogenannte Fallen eingefügt. Bei einer Falle handelt es sich um eine verschlüsselte Variante, bei deren Entschlüsselung der CmDongle die Lizenz als ungültig markiert. Damit diese Fallen nicht nur bei statischen Angreifern wirksam sind sondern auch bei Angreifern, die den Quellcode des Programms analysieren, werden im Programm Verweise auf diese Blöcke eingefügt. Diese werden jedoch bei einem regulären Programmablauf nie aufgerufen, da nur Variablenbelegungen zu ihnen führen, die bei normalem Gebrauch des Programmes nicht angenommen werden.

Berechnung der Variantenauswahl im CmDongle

Code Moving, das Ausführen von Code in einen Dongle, ist meist nicht praktikabel. Die geschützte Anwendung wird zu langsam. Die Auswahl von sinnvollem Code für das Ausführen in einem Dongle ist zu aufwändig und die Implementierung ist kompliziert. Der Code zur Berechnung der Variantenauswahl ist hingegen sehr gut in einen Dongle wie den CmDongle auslagerbar. Er ist kurz, aber essentiell für die Ausführung. Auswahl und Implementierung erfolgen unabhängig vom Hersteller der Software und komplett automatisch. Der Index der Wrapperfunktion i und die relevanten Parameter pIn[i] werden an den CmDongle übergeben. Im CmDongle wird der Index der anzuspringenden Variante berechnet und zurückgegeben (j). Somit ist es selbst bei Kenntnis des gültigen Wertebereichs eines Parameters unmöglich, die verwendeten oder nicht verwendeten Varianten (Fallen) vorherzusagen, ohne den Code mit den entsprechenden Parametern zu durchlaufen.

Nutzung des CmDongles als State Engine

Die Reihenfolge, in der Blöcke während eines regulären Ablaufs des Programms entschlüsselt werden, ist nicht beliebig. Auf einen Block kann nur eine kleine Teilmenge aller Blöcke folgen. Ein Gedächtnis des CmDongles ermöglicht es der Blurry Box-Technologie, gültige von ungültigen Abfolgen zu unterscheiden und im Falle einer ungültigen Abfolge eine Sperre auszulösen.

Sicherheit des Blurry Box-Verfahrens

Ein Angreifer (Hacker) hat zwar hohe Kenntnis von Angriffsmethoden, ihm fehlt aber das Wissen um die Funktionsweise des geschützten Programmes. Diese fehlende Fachkenntnis lässt sich formalisieren. Darauf aufbauend wurde die Sicherheit des neuartigen Verfahrens vom FZI Forschungszentrum Informatik und Karlsruher Institut für Technologie formal nachgewiesen. Es wurde gezeigt, dass alle erfolgreichen Angriffe auf das Verfahren äquivalent zu Angriffen sind, die prinzipiell nicht verhinderbar sind. Der Nachweis betrachtet alle Angriffe und damit auch die Angreifer, die vom Verfahren Kenntnis haben. Diese Wahrung des Kerckhoffs’schen Prinzips erlaubt die unabhängige Untersuchung und Beurteilung der Sicherheit – anders als bei geheim gehaltenen Verfahren. Dies bietet Vorteile beim Schutz gegen Industriespionage und -sabotage.

Verfügbarkeit

Die Methoden des Blurry Box-Verfahrens werden in CodeMeter und AxProtector integriert. Als Softwarehersteller werden Sie ab Mitte 2015 ein Framework zur Verfügung haben, welches es Ihnen einfach ermöglicht, das Blurry Box-Verfahren in Ihre Software zu integrieren.