schritt für schritt zur geschützen java-anwendungen

63
Schritt für Schritt zur geschützten Java-Anwendung Wolfgang Völker| Produktmanagement [email protected] Günther Fischer| Professional Services [email protected] 1

Upload: team-wibu

Post on 22-Jan-2018

881 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Schritt für Schritt zur Geschützen Java-Anwendungen

Schritt für Schritt zur geschützten Java-Anwendung

Wolfgang Völker| Produktmanagement

[email protected]

Günther Fischer| Professional Services

[email protected]

1

Page 2: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 3: Schritt für Schritt zur Geschützen Java-Anwendungen

JAVA RÜCKBLICK

3

Page 4: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 5: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 6: Schritt für Schritt zur Geschützen Java-Anwendungen

Java Architektur

ClassloaderJava Program

*.class Files

Bytecode Verifier

Interpreter (JVM)

Host Operating System

(Windows, Linux, MacOS,..)

Java API

*.class Files

6

Page 7: Schritt für Schritt zur Geschützen Java-Anwendungen

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!

Page 8: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 9: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 10: Schritt für Schritt zur Geschützen Java-Anwendungen

Das Waffenarsenal der Angreifer (Java Decompiler .jar/.class -> .java)

10

Page 11: Schritt für Schritt zur Geschützen Java-Anwendungen

SCHUTZ-TECHNOLOGIEN FÜR JAVA-ANWENDUNGEN

11

Page 12: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 13: Schritt für Schritt zur Geschützen Java-Anwendungen

Java Obfuscation Tools (KlassMasterAltaori/ProGuard….)

13

Page 14: Schritt für Schritt zur Geschützen Java-Anwendungen

BASIC OBFUSCATION

14

Page 15: Schritt für Schritt zur Geschützen Java-Anwendungen

Basic Obfuscation (Name Obfuscation)

Quelle: Zelix Webseite

15

Page 16: Schritt für Schritt zur Geschützen Java-Anwendungen

Decompilieren einer Basic Obfuscation

Quelle: Zelix Webseite

Decompile

16

Page 17: Schritt für Schritt zur Geschützen Java-Anwendungen

HEAVY DUTY PROTECTION

17

Page 18: Schritt für Schritt zur Geschützen Java-Anwendungen

Zelix KlassMaster

18

Page 19: Schritt für Schritt zur Geschützen Java-Anwendungen

Heavy Duty Protection (Flow, Exception, String Obfuscation …)

Quelle: Zelix Webseite

19

Page 20: Schritt für Schritt zur Geschützen Java-Anwendungen

JDO: Java Deobfuscator / JMD: Java bytecode deobfuscation tool

20

Page 21: Schritt für Schritt zur Geschützen Java-Anwendungen

JAVA2EXE

Excelsior JET Engine

21

Page 22: Schritt für Schritt zur Geschützen Java-Anwendungen

Prinzip Java2ExeJa

va C

ode

Java

Byt

e C

ode

Nat

iver

Cod

e

JAVAC

Compiler

Excelsior

JIT

Compiler

22

Page 23: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 24: Schritt für Schritt zur Geschützen Java-Anwendungen

VERSCHLÜSSELUNG

24

Page 25: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 26: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 27: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 28: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 29: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 30: Schritt für Schritt zur Geschützen Java-Anwendungen

Prinzip des AxProtector Java

Verschlüsselte Klasse auf der

Festplatte

Klasse im Speicher

AxProtector RuntimeJVM

loadClass

30

Page 31: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 32: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 33: Schritt für Schritt zur Geschützen Java-Anwendungen

Beispiel

33

Page 34: Schritt für Schritt zur Geschützen Java-Anwendungen

DECOMPILIEREN NACH VERSCHLÜSSELUNG

34

Page 35: Schritt für Schritt zur Geschützen Java-Anwendungen

Java Class File Struktur

Magic Number Version

Constant Pool

Access Flag

this Class

super Class

Interfaces

Fields

Methods

Attributes

35

Page 36: Schritt für Schritt zur Geschützen Java-Anwendungen

Unverschlüsselter Code (CAFEBABE)

36

Page 37: Schritt für Schritt zur Geschützen Java-Anwendungen

Mit AxProtector Java geschützter Code

37

Page 38: Schritt für Schritt zur Geschützen Java-Anwendungen

Enigma

38

Page 39: Schritt für Schritt zur Geschützen Java-Anwendungen

D4J

39

Page 40: Schritt für Schritt zur Geschützen Java-Anwendungen

Lython

40

Page 41: Schritt für Schritt zur Geschützen Java-Anwendungen

JD-GUI

41

Page 42: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 43: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 44: Schritt für Schritt zur Geschützen Java-Anwendungen

Update der Signaturen

44

Page 45: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 46: Schritt für Schritt zur Geschützen Java-Anwendungen

WEITERE VERFAHREN

46

Page 47: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 48: Schritt für Schritt zur Geschützen Java-Anwendungen

Schutz von Daten

Nur sicher, wenn die Schlüssel in einem vertrauenswürdigem Speicher liegen.

48

Page 49: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 50: Schritt für Schritt zur Geschützen Java-Anwendungen

Schutz von Daten - Verschlüsselung

Schutz durch Ver-/Entschlüsselung in der Anwendung

cmCrypt2 ()

50

Page 51: Schritt für Schritt zur Geschützen Java-Anwendungen

Integritätsschutz - Signatur

Integritätsschutz von Daten/Bibliotheken

cmCalculateDigest()

cmCalculateSignature()

cmValidateSignature()

51

Page 52: Schritt für Schritt zur Geschützen Java-Anwendungen

Core API – Dokumentation und Beispiele

CodeMeter Java API Help (HTML Format)

Servlet Sample

CmCalculator

CmDemo

Lizenzzugriff

Auslesen von Lizenzen

Verschlüsselung

52

Page 53: Schritt für Schritt zur Geschützen Java-Anwendungen

EIN PAAR WORTE ÜBER CODEMETER

53

Page 54: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 55: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 56: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 57: Schritt für Schritt zur Geschützen Java-Anwendungen

Automatische Verwaltung der Lizenzen

Ticket

Artikel-Nr.

Lizenz

Ticket

Liz

enzg

eber

Liz

enzn

ehm

er

Ticket

57

Page 58: Schritt für Schritt zur Geschützen Java-Anwendungen

ZUSAMMENFASSUNG

58

Page 59: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 60: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 61: Schritt für Schritt zur Geschützen Java-Anwendungen

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

Page 62: Schritt für Schritt zur Geschützen Java-Anwendungen

Wir sind gewappnet!

62

Page 63: Schritt für Schritt zur Geschützen Java-Anwendungen

Vielen Dank!

WIBU-SYSTEMS

Germany +49-721-93172-0

USA +1-425-775-6900

China +86-21-55661790

www.wibu.com | [email protected]

63