Kategorien: Software-Schutz
Python is back!
Und nun? Wie kann man Python Anwendungen richtig schützen und lizenzieren?
Laut dem TIOBE Index ist Python derzeit auf dem dritten Platz des Beliebtheitsrankings anzutreffen, direkt hinter C und Java. Sowohl die einfache Bedienung von APIs als auch die Fülle und Qualität der wissenschaftlich aktuellen Bibliotheken im Bereich von Künstlicher Intelligenz und Machine Learning bescheren dieser Programmiersprache eine neue Beliebtheit.
Was für den Entwickler großen Komfort bedeutet, bringt auch seine Schattenseiten mit. In einigen Python-Anwendungen liegt der Code zunächst in Klarform vor, bevor er den Interpreter erreicht, und kann somit von jeder Person leicht eingesehen werden. Andere Python-Anwendungen bestehen aus vorübersetztem Code und sind daher besonders einfach zu dekompilieren. Geistiges Eigentum, wie beispielsweise ein KI-Lernalgorithmus, ist auf diese Weise ungeschützt und ein leichtes Ziel für Angreifer.
Module und Pakete wie cx_Freeze, welche darauf abzielen, ausführbare Binärdaten zu generieren, sind kein echtes Hindernis für Personen mit Sachkenntnis. Leicht können frei verfügbare Werkzeuge verwendet werden, um die enthaltenen Inhalte zu extrahieren und den Quellcode wiederherzustellen. Auch Obfuskationspakete tragen kaum zu einem effektiven Schutz bei.
Daher verfolgt Wibu-Systems die Strategie einer echten Verschlüsselung der schützenswerten Programmelemente mit Hilfe der CodeMeter Protection Suite. Hierfür nutzen wir vorhandene Schnittstellen von Python und die Vorteile einer sehr aktiven Community.
Integration leicht gemacht
Pythons Stärken hören nicht bei denen einer modernen High Level Skriptsprache auf, sondern führen direkt in die maschinennahe Anwendung. Durch die native Verwendung von C-Extensions können gezielt Funktionen in das performantere C und dessen Kompilate ausgelagert werden. Das Resultat sind die Vorteile beider Welten – eine komfortable Syntax bei hoher Performance der Anwendung.
Wibu-Systems kann perfekt in diesen Ansatz der Funktionsauslagerung integriert werden. Die CodeMeter Protection Suite ist unter anderem für Bibliotheken wie .dll und .so entwickelt worden und kann auf diese Kompilate identisch und ohne Einschränkungen angewandt werden.
Das bedeutet nicht nur, dass der Python-Code verschlüsselt wird, sondern auch, dass bereits vorhandene CodeMeter-Schutzmechanismen wie Integritätsschutz, Anti-Debugging- und Anti-Reverse-Engineering-Methoden in Python-Anwendungen benutzt werden können. C-Extensions können automatisch aus dem Python-Code mit Hilfe des Drittanbietermoduls Cython erzeugt werden. Dazu wird der gewählte Code zunächst nach Cython übersetzt und anschließend werden Zwischenkompilate generiert. Die Arbeitsweise der beinhalteten Generatormodule bleibt dadurch transparent und erlaubt etliche Eingriffe in diesen Prozess. Auch ein einfaches Analysetool ist im Paket enthalten, welches Performanceoptimierungen im Code erkennt und Anpassungen vorschlägt. Das Resultat sind .pyd-Dateien, welche mit .dll-Dateien für Windows oder .so-Dateien in Unix gleichzusetzen sind.
Lizenzierung als nächster Schritt
Da die Anwendung verschlüsselt ist, ist diese somit optimal vorbereitet für eine mögliche Lizenzierung. Immer öfter zahlen Kunden nicht mehr pauschal für ein Gesamtpaket, sondern nur noch für die benötigten Module, eine beschränkte Laufzeit oder eine begrenzte Anzahl von Ausführungen bestimmter Funktionen. Sokönnen auch Kunden mit unterschiedlichen Geldbeuteln die passende Software verwenden und beide Seiten – Kunde und Software-Hersteller – sind zufrieden.
Für diesen Schritt bringt die CodeMeter Protection Suite bereits alle notwendigen Einstellungen mit. Neuen flexiblen Lizenzmodellen steht somit nichts mehr im Wege.
Integration mit CodeMeter API
Zusätzlich zu der Verschlüsselung von Code haben Softwarehersteller die Möglichkeit, das CodeMeter API komfortabel direkt im Python-Code zu verwenden. CodeMeter API ist eine Lizenzierungs- und Kryptographie-Schnittstelle, die für folgende Aufgaben benutzt werden kann:
- Prüfung von Lizenzen
- Lizenzeigenschaften auslesen
- Anmeldung an Systemen
- Verschlüsselte Kommunikation
- Symmetrische und asymmetrische Kryptographie
- Hashfunktionen, Challenge-Response-Verfahren
- Verschlüsselung von eigenen Daten im Python-Code
- Verschlüsselung von Konfigurationsdateien und anderen Datendateien
Um unterschiedliche Lizenzmodelle zu unterstützen, kann mit der Funktion „CmAccess2 auf die Lizenzen direkt im Python-Code zugegriffen werden. Die Methode „check“ im Bild 3 zeigt ein mögliches Vorgehen.
Die Funktion „CmCrypt2“ kann verwendet werden, um Daten zu verschlüsseln. Die Beispiel-implementierung im Bild 4 zeigt die Verschlüsselung eines 16-Byte-Puffers.
In letzter Zeit wird der Schutz von Python-Anwendungen immer stärker nachgefragt. Darauf reagiert Wibu-Systems mit einer stetigen Weiterentwicklung der CodeMeter Protection Suite und einer kontinuierlichen Erprobung neuer Anwendungsfälle.
Wir forschen weiter. Python bleibt für uns ein wichtiges Thema.
KEYnote 40 – Ausgabe Herbst 2020