schritt für schritt zur geschützen java-anwendungen
TRANSCRIPT
Schritt für Schritt zur geschützten Java-Anwendung
Wolfgang Völker| Produktmanagement
Günther Fischer| Professional Services
1
Agenda
Java Rückblick
Schutz-Technologien für Java-Anwendungen
Grundprinzip des AxProtector Java
Optionen des AxProtetcor Java
Schutz auf Klassen-Ebene / Methoden-Ebene
Kurze Einführung in die Lizenzierung von Java-Anwendungen
2
JAVA RÜCKBLICK
3
Java und die JVM/JRE
Java: von Sun 1995 entwickelte Programmiersprache.
Die JVM ist eine abstrakte Maschine.
Der Befehlssatz ist der Java Byte Code.
Kompilierte Java Programme bestehen aus vielen Klassendateien, die Bytecode (keinen
nativen Code) enthalten.
JARS sind ZIP-Archive mit zusätzlichem Manifest
Bytecode wird zur Laufzeit durch Java Virtual Machine (JVM) interpretiert und ausgeführt.
Bytecode lässt sich einfach Reverse Engineeren.
Mit dem OpenJDK gibt es eine quelloffene Implementierung der JVM.
4
JAVA - Write Once, Run Anywhere (WORA)
Java Program (.java)
Interpreter (JVM)
Java Compiler
JAVAC
Java Byte Code (.class /.jar)
Windows
Interpreter (JVM)
Linux
Interpreter (JVM)
MacOS
…
5
Java Architektur
ClassloaderJava Program
*.class Files
Bytecode Verifier
Interpreter (JVM)
Host Operating System
(Windows, Linux, MacOS,..)
Java API
*.class Files
6
7
Java und Sicherheit
Java-Klassen lassen sich
Leicht extrahieren
Leicht ersetzen (auch Systemklassen!)
Leicht modifizieren
Der Java Byte Code ist kein „Geheimnis“
Fazit
Alles was in Java geschrieben ist, ist generell unsicher!
Java Byte Code / Native Code
8
Java Runtime
(Java)
Java Virtual Machine
(Native Code)
JNI
(Native Code)
C/C++ kann via JNI (Java Native Interface) genutzt werden
Schutzziele
Schutz gegen Raubkopien (Lizenzierung)
Schutz des geistigen Eigentums (Reverse Engineering)
Schutz gegen Analyse durch Mitbewerber
Schutz gegen Verwendung von Code
Integritätsschutz von Daten und Code
Schutz von Daten als Bestandteil des Produktes (Wettbewerbsvorteil)
9
Das Waffenarsenal der Angreifer (Java Decompiler .jar/.class -> .java)
10
SCHUTZ-TECHNOLOGIEN FÜR JAVA-ANWENDUNGEN
11
Betrachtete Optionen
Obfuskierung
Basic Obfuscation
Heavy Duty Protection (Klassmaster)
Java2Exe (JET Engine)
Umwandlung in nativen Code
Evtl. weitere Verschlüsselung durch native Tools
Java Verschlüsselung
AxProtector
Sonstige Methoden
Beispiel CodeMeter Core API
12
Java Obfuscation Tools (KlassMasterAltaori/ProGuard….)
13
BASIC OBFUSCATION
14
Basic Obfuscation (Name Obfuscation)
Quelle: Zelix Webseite
15
Decompilieren einer Basic Obfuscation
Quelle: Zelix Webseite
Decompile
16
HEAVY DUTY PROTECTION
17
Zelix KlassMaster
18
Heavy Duty Protection (Flow, Exception, String Obfuscation …)
Quelle: Zelix Webseite
19
JDO: Java Deobfuscator / JMD: Java bytecode deobfuscation tool
20
JAVA2EXE
Excelsior JET Engine
21
Prinzip Java2ExeJa
va C
ode
Java
Byt
e C
ode
Nat
iver
Cod
e
JAVAC
Compiler
Excelsior
JIT
Compiler
22
Zusätzlicher Schutz durch VerschlüsselungJa
va C
ode
Java
Byt
e C
ode
Nat
iver
Cod
e
Ver
schl
üsse
lter
nativ
erC
ode
JAVAC
Compiler
Excelsior
JIT
CompilerAxProtector
23
VERSCHLÜSSELUNG
24
Verschlüsselung des Codes
25
Verschlüsselung des ausführbaren Codes vor der Auslieferung
Entschlüsselung der benötigten Klassen/Methoden
zur Laufzeit im Speicher
VerschlüsselungUngeschützte
Anwendung
Entschlüsselung
AxEngine
AxEngine
Die AxProtector Suite
AxProtector nativ
Windows 32-/64-bit
Mac OS X
Linux
AxProtector .NET
.Net 2.0, 3.0, 3.5, 4.0, 4.5
AxProtector Java
Java 1.6
Java 1.7
Java 1.8
Java Anwendungen
Java Applets
Java Servlets
26
Prinzip des AxProtectors
Unprotected
application
Win32 Executable
Win32 Dynamic Link Library
Win64 Executable
Win64 Dynamic Link Library
Mac OS X 32-Bit
Mac OS X 64-Bit
Mac OS X Universal Binary
.NET 2.0 Assembly (Exe)
.NET 2.0 Assembly (Dll)
.NET 3.0 Assembly (Exe)
.NET 3.0 Assembly (Dll)
.NET 3.5 Assembly (Exe)
.NET 3.5 Assembly (Dll)
.NET 4.0 Assembly (Exe)
.NET 4.0 Assembly (Dll)
.NET 4.5 Assembly (Exe)
.NET 4.5 Assembly (Dll)
Java 1.6 Application
Java 1.7 Application
Java 1.8 Application
AxEngine
Protection
Licenses
Encryption
AxProtector
27
AxProtector Java - Funktionsprinzip
AxProtector Java automatischer Schutz auf Klassenebene durch Verschlüsselung des Bytecodes
Jede Klasse wird automatisch beim Laden entschlüsselt. Dazu muss die AxProtector Runtime initialisiert werden. Dafür gibt es mehrere Möglichkeiten (Java-Anwendungen mit Main-Klasse => Wrapper, manuelles Laden durch EntryPoint / ProtectionManager)
Instanziierung kann manuell erfolgen (z.B. Application Server)
Einbau erweiterter Schutzmaßnahmen (IxProtector)
Einbau von Lizenzabfragen (CoreAPI)
28
Unterstützte Anwendungstypen
Welche Anwendungstypen kann der AxProtector Java schützen?
Konsolen- und Desktopanwendungen
Applets, Web Start Anwendungen
Servlets
Eclipse RCP, Eclipse Plugin
OSGi
29
Prinzip des AxProtector Java
Verschlüsselte Klasse auf der
Festplatte
Klasse im Speicher
AxProtector RuntimeJVM
loadClass
30
AxProtector Klassen
Automatischer Schutz (in das JAR integriert oder als WibuXpm4JRuntime.jar)
Anpassungen im Code
Laufzeit der geschützten Anwendung
Integriert in die geschützte Anwendung
WibuXpm4JRuntime.jar im classpath
31
AxProtector Java 9.1 - Neuerungen
IxProtector– Schutz von Methoden
Annotationen
EntryPoint
Protected
Unprotected
Trap
Parsebare Classdateien (Unterstützung von Annotationsparsern)
Parameterdatei im XML-Format (Lizenzliste)
32
Beispiel
33
DECOMPILIEREN NACH VERSCHLÜSSELUNG
34
Java Class File Struktur
Magic Number Version
Constant Pool
Access Flag
this Class
super Class
Interfaces
Fields
Methods
Attributes
35
Unverschlüsselter Code (CAFEBABE)
36
Mit AxProtector Java geschützter Code
37
Enigma
38
D4J
39
Lython
40
JD-GUI
41
Besondere Schutzmaßnahmen
Java VM Signatur Prüfung
Verifiziert die JVM in der das geschützte Programm ausgeführt wird
WibuXPM4J32/64.dll Absicherung
Callback Check
Prüft, dass keine JNI Funktionen geändert wurden
JVMPI / JVMTI Check
Prüft, ob ein JVMPI/JVMTI Agent vorhanden ist
42
JVM Manipulation / Ändern des JVM Quellcodes
43
OpenJDK ist eine quelloffene Implementierung der JVM
Seit Version 6
Kann somit mit Hintertür gebaut werden
Einfügen von Code, der geladene Klassen mitschreibt, somit einfach möglich
Lösung:
JVM Verifizierung
Update der Signaturen
44
Angriffe via Tools
45
In Java gibt es einige „Tools“ Interfaces
Gedacht, um Byte-Code zu analysieren / modifizieren
Debugger, Profiler
JVMPI: Java Virtual Machine Profiling Interface
Bis einschließlich Java 6
JVMTI: Java Virtual Machine Tools Interface
Ab Java 7, Nachfolger von JVMPI
WEITERE VERFAHREN
46
Schutz von Daten
Annahme
Geistiges Eigentum sind die Daten
z.B. Fahrzeugdaten für Werkstätten
Schutzziel
Schützen der Daten gegen unbefugte Benutzung (Lizenzierung)
Schützen der Daten gegen „Extraktion“ und Nachbau durch Mitbewerber
Lösung:
Verschlüsselung der Daten
47
Schutz von Daten
Nur sicher, wenn die Schlüssel in einem vertrauenswürdigem Speicher liegen.
48
CodeMeter Core API
com.wibu.CodeMeter
Grundlage aller Schutzmechanismen
Schnittstelle zur Kommunikation mit CodeMeter
Erweiterte Schutzmöglichkeiten
Einheitliches Interface durch CodeMeter License Server
Lizenz in einem Dongle oder in einer verschlüsselten Lizenzdatei
Einheitliche Lizenzoptionen
Mischen in einer Anwendung möglich
Dongle
Ihre Software
Aktivierung
Java Native Interface
CodeMeter License Server
49
Schutz von Daten - Verschlüsselung
Schutz durch Ver-/Entschlüsselung in der Anwendung
cmCrypt2 ()
50
Integritätsschutz - Signatur
Integritätsschutz von Daten/Bibliotheken
cmCalculateDigest()
cmCalculateSignature()
cmValidateSignature()
51
Core API – Dokumentation und Beispiele
CodeMeter Java API Help (HTML Format)
Servlet Sample
CmCalculator
CmDemo
Lizenzzugriff
Auslesen von Lizenzen
Verschlüsselung
…
52
EIN PAAR WORTE ÜBER CODEMETER
53
Das Herz des CmDongles
Smartcard Chip
Schutz gegen Seitenkanalattacken
Differential Power Analysis (DPA)
Firmware Update
Neue Sicherheits-Features
Neue Features
Gesicherter Update-Kanal
64 kByte | 384 kByte Speicher für Lizenzen
54
Integration in die Software
Automatische Verschlüsselung (AxProtector Java)
Verschlüsselung der einzelnen Klassen vor der Auslieferung
Einpacken in ein JAR-File
Wrapper zur automatischen Entschlüsselung beim Laden der Klassen
Integration mit CodeMeter Core API
Verschlüsselungs-API
Freischaltung unterschiedlicher Module
Zählen von gleichzeitigen Sessions
55
Flexible Lizenzierungs Modelle für Lizenzgeber
Single User
Network
Feature On Demand
Perpetual
Trial version
Rent / Leasing / Subscription
Pay-Per-Use
Maintenance period
Downgrade
Grace Period
Volume
Version
Standby
High Availability
Overflow
Borrowing
Name/PC
Time zone
56
Automatische Verwaltung der Lizenzen
Ticket
Artikel-Nr.
Lizenz
Ticket
Liz
enzg
eber
Liz
enzn
ehm
er
Ticket
57
ZUSAMMENFASSUNG
58
Erreichung Schutzziele bei Obfuscation
Schutz gegen Raubkopien (Lizenzierung)
Schutz des geistigen Eigentums (Reverse Engineering)
Schutz gegen Analyse durch Mitbewerber
Schutz gegen Verwendung von Code
Integritätsschutz von Daten und Code
Schutz von Daten als Bestandteil des Produktes (Wettbewerbsvorteil)
59
Erreichung Schutzziele bei Java2Exe
Schutz gegen Raubkopien (Lizenzierung)
Schutz des geistigen Eigentums (Reverse Engineering)
Schutz gegen Analyse durch Mitbewerber
Schutz gegen Verwendung von Code
Integritätsschutz von Daten und Code
Schutz von Daten als Bestandteil des Produktes (Wettbewerbsvorteil)
60
Erreichung Schutzziele bei Verschlüsselung
Schutz gegen Raubkopien (Lizenzierung)
Schutz des geistigen Eigentums (Reverse Engineering)
Schutz gegen Analyse durch Mitbewerber
Schutz gegen Verwendung von Code
Integritätsschutz von Daten und Code
Schutz von Daten als Bestandteil des Produktes (Wettbewerbsvorteil)
61
Wir sind gewappnet!
62
Vielen Dank!
WIBU-SYSTEMS
Germany +49-721-93172-0
USA +1-425-775-6900
China +86-21-55661790
www.wibu.com | [email protected]
63