• Keine Ergebnisse gefunden

GRUNDLEGENDE ATTACKEN

Einführung Grundlegende Attacken Implementierungsfehler

ATTACKEN - SOFTWAREFEHLER & SECURITY

Es werden verschiedene Angriffsmöglichkeiten unterschieden:

Ciphertext only – Attacke

Erich hat (mehrere) Ciphertexte, die alle mit der gleichen

Encryption-Funktion berechnet wurden. Aufgabe ist die Nachricht zu entschlüsseln und sogar das Geheimnis des Empfängers (Key) zu ermitteln.

Known-plaintext – Attacke

Erich hat (mehrere) Ciphertexte und die dazugehörigen Plaintexte. Aufgabe ist die Ermittlung des Keys.

Einführung Grundlegende Attacken Implementierungsfehler

ATTACKEN - SOFTWAREFEHLER & SECURITY

Es werden verschiedene Angriffsmöglichkeiten unterschieden:

Ciphertext only – Attacke

Erich hat (mehrere) Ciphertexte, die alle mit der gleichen

Encryption-Funktion berechnet wurden. Aufgabe ist die Nachricht zu entschlüsseln und sogar das Geheimnis des Empfängers (Key) zu ermitteln.

Known-plaintext – Attacke

Erich hat (mehrere) Ciphertexte und die dazugehörigen Plaintexte. Aufgabe ist die Ermittlung des Keys.

17

Einführung Grundlegende Attacken Implementierungsfehler

ATTACKEN - SOFTWAREFEHLER & SECURITY

Es werden verschiedene Angriffsmöglichkeiten unterschieden:

Ciphertext only – Attacke

Erich hat (mehrere) Ciphertexte, die alle mit der gleichen

Encryption-Funktion berechnet wurden. Aufgabe ist die Nachricht zu entschlüsseln und sogar das Geheimnis des Empfängers (Key) zu ermitteln.

Known-plaintext – Attacke

Erich hat (mehrere) Ciphertexte und die dazugehörigen Plaintexte.

Aufgabe ist die Ermittlung des Keys.

Einführung Grundlegende Attacken Implementierungsfehler

GRUNDLEGENDE ATTACKEN (II) Choosen-plaintext – Attacke

Erich hat nicht nur einige Ciphertexte und Plaintexte, sondern kann auch die Plaintexte vorgeben und verschlüsseln.

Choosen-ciphertext – Attacke

Erich kann mehrere Ciphertexte auswählen, die für Ihn entschlüsselt werden (z. B. hat er eine Black-Box gestohlen). Social Engineering

Beeinflussung von Personen, so dass diese vertrauliche Informationen preisgeben (Sehr effektive Methode). Torture – Attacke

Erich foltert den Empfänger so lange, bis er sein Geheimnis offenbart (Sehr mächtige Methode und meist der beste Weg eine Verschlüsselung zu brechen!).

18

Einführung Grundlegende Attacken Implementierungsfehler

GRUNDLEGENDE ATTACKEN (II) Choosen-plaintext – Attacke

Erich hat nicht nur einige Ciphertexte und Plaintexte, sondern kann auch die Plaintexte vorgeben und verschlüsseln.

Choosen-ciphertext – Attacke

Erich kann mehrere Ciphertexte auswählen, die für Ihn entschlüsselt werden (z. B. hat er eine Black-Box gestohlen).

Social Engineering

Beeinflussung von Personen, so dass diese vertrauliche Informationen preisgeben (Sehr effektive Methode). Torture – Attacke

Erich foltert den Empfänger so lange, bis er sein Geheimnis offenbart (Sehr mächtige Methode und meist der beste Weg eine Verschlüsselung zu brechen!).

Einführung Grundlegende Attacken Implementierungsfehler

GRUNDLEGENDE ATTACKEN (II) Choosen-plaintext – Attacke

Erich hat nicht nur einige Ciphertexte und Plaintexte, sondern kann auch die Plaintexte vorgeben und verschlüsseln.

Choosen-ciphertext – Attacke

Erich kann mehrere Ciphertexte auswählen, die für Ihn entschlüsselt werden (z. B. hat er eine Black-Box gestohlen).

Social Engineering

Beeinflussung von Personen, so dass diese vertrauliche Informationen preisgeben (Sehr effektive Methode).

Torture – Attacke

Erich foltert den Empfänger so lange, bis er sein Geheimnis offenbart (Sehr mächtige Methode und meist der beste Weg eine Verschlüsselung zu brechen!).

18

Einführung Grundlegende Attacken Implementierungsfehler

GRUNDLEGENDE ATTACKEN (II) Choosen-plaintext – Attacke

Erich hat nicht nur einige Ciphertexte und Plaintexte, sondern kann auch die Plaintexte vorgeben und verschlüsseln.

Choosen-ciphertext – Attacke

Erich kann mehrere Ciphertexte auswählen, die für Ihn entschlüsselt werden (z. B. hat er eine Black-Box gestohlen).

Social Engineering

Beeinflussung von Personen, so dass diese vertrauliche Informationen preisgeben (Sehr effektive Methode).

Torture – Attacke

Erich foltert den Empfänger so lange, bis er sein Geheimnis offenbart (Sehr mächtige Methode und meist der beste Weg eine Verschlüsselung zu brechen!).

IMPLEMENTIERUNGSFEHLER

Einführung Grundlegende Attacken Implementierungsfehler

PUFFERÜBERLAUF

Sicherheitslücken durch Pufferüberläufe sindextremverbreitet.

Prinzip:Zu große Datenblöckewerden in einenzu kleinen Speicherbereich geschrieben.

Ein (üblicher) Stackframe ist wie folgt aufgebaut:

→ Der Stack wächst nach unten.

→ Für eine Funktion wirderst(oben) dieRücksprungadresse abgelegt, dann (unten) die lokalen Variablen.

→ Felder werden

”nach oben“abgelegt.

Adressen

buffer[0]

b buffer[1] buffer[2] buffer[3] buffer[4] a Ret. Adr.

Stack

Einführung Grundlegende Attacken Implementierungsfehler

PUFFERÜBERLAUF (II)

Durch Schreiben inbuffer[5]kann man die Variablea manipulieren und durch Veränderungbuffer[6]sogar die Rücksprungadresse!

Überschreibt man den Stack mit einem (kleinen) Codestück, so kann die Rücksprungadresse auf dieses Codestück gesetzt werden

beliebiger Codekann ausgeführt werden.

Grund: (fehlerhaftes) Design vonCundC++. Mögliche Abhilfen sind i) Keine”von Neumann-Architektur“verwenden oder MMU

einsetzen, um denStackals

”nicht ausführbar“ zu markieren (vgl. NX-Flag).

ii) Bessere Programmiersprachen wie z.B.JavaoderAda iii) Compilersupport(z.B.

”Memory-Wall“oder Rücksprungadresse kopieren)

21

Einführung Grundlegende Attacken Implementierungsfehler

PUFFERÜBERLAUF (II)

Durch Schreiben inbuffer[5]kann man die Variablea manipulieren und durch Veränderungbuffer[6]sogar die Rücksprungadresse!

Überschreibt man den Stack mit einem (kleinen) Codestück, so kann die Rücksprungadresse auf dieses Codestück gesetzt werden

beliebiger Codekann ausgeführt werden.

Grund: (fehlerhaftes) Design vonCundC++. Mögliche Abhilfen sind i) Keine”von Neumann-Architektur“verwenden oder MMU

einsetzen, um denStackals

”nicht ausführbar“ zu markieren (vgl. NX-Flag).

ii) Bessere Programmiersprachen wie z.B.JavaoderAda iii) Compilersupport(z.B.

”Memory-Wall“oder Rücksprungadresse kopieren)

Einführung Grundlegende Attacken Implementierungsfehler

PUFFERÜBERLAUF (II)

Durch Schreiben inbuffer[5]kann man die Variablea manipulieren und durch Veränderungbuffer[6]sogar die Rücksprungadresse!

Überschreibt man den Stack mit einem (kleinen) Codestück, so kann die Rücksprungadresse auf dieses Codestück gesetzt werden

beliebiger Codekann ausgeführt werden.

Grund: (fehlerhaftes) Design vonCundC++. Mögliche Abhilfen sind

i) Keine”von Neumann-Architektur“verwenden oder MMU einsetzen, um denStackals

”nicht ausführbar“ zu markieren (vgl. NX-Flag).

ii) Bessere Programmiersprachen wie z.B.JavaoderAda iii) Compilersupport(z.B.

”Memory-Wall“oder Rücksprungadresse kopieren)

21

Einführung Grundlegende Attacken Implementierungsfehler

PUFFERÜBERLAUF (II)

Durch Schreiben inbuffer[5]kann man die Variablea manipulieren und durch Veränderungbuffer[6]sogar die Rücksprungadresse!

Überschreibt man den Stack mit einem (kleinen) Codestück, so kann die Rücksprungadresse auf dieses Codestück gesetzt werden

beliebiger Codekann ausgeführt werden.

Grund: (fehlerhaftes) Design vonCundC++. Mögliche Abhilfen sind i) Keine

”von Neumann-Architektur“verwenden oder MMU einsetzen, um denStackals

”nicht ausführbar“ zu markieren (vgl. NX-Flag).

ii) Bessere Programmiersprachen wie z.B.JavaoderAda iii) Compilersupport(z.B.

”Memory-Wall“oder Rücksprungadresse kopieren)

Einführung Grundlegende Attacken Implementierungsfehler

PUFFERÜBERLAUF (II)

Durch Schreiben inbuffer[5]kann man die Variablea manipulieren und durch Veränderungbuffer[6]sogar die Rücksprungadresse!

Überschreibt man den Stack mit einem (kleinen) Codestück, so kann die Rücksprungadresse auf dieses Codestück gesetzt werden

beliebiger Codekann ausgeführt werden.

Grund: (fehlerhaftes) Design vonCundC++. Mögliche Abhilfen sind i) Keine

”von Neumann-Architektur“verwenden oder MMU einsetzen, um denStackals

”nicht ausführbar“ zu markieren (vgl. NX-Flag).

ii) Bessere Programmiersprachen wie z.B.JavaoderAda

iii) Compilersupport(z.B.

”Memory-Wall“oder Rücksprungadresse kopieren)

21

Einführung Grundlegende Attacken Implementierungsfehler

PUFFERÜBERLAUF (II)

Durch Schreiben inbuffer[5]kann man die Variablea manipulieren und durch Veränderungbuffer[6]sogar die Rücksprungadresse!

Überschreibt man den Stack mit einem (kleinen) Codestück, so kann die Rücksprungadresse auf dieses Codestück gesetzt werden

beliebiger Codekann ausgeführt werden.

Grund: (fehlerhaftes) Design vonCundC++. Mögliche Abhilfen sind i) Keine

”von Neumann-Architektur“verwenden oder MMU einsetzen, um denStackals

”nicht ausführbar“ zu markieren (vgl. NX-Flag).

ii) Bessere Programmiersprachen wie z.B.JavaoderAda iii) Compilersupport(z.B.

”Memory-Wall“oder Rücksprungadresse kopieren)

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN Aufgrund des Sprachdesigns von C und C++ ist eine

automatisierte Erkennung von Bufferüberläufenim Allgemeinen nicht / schwer möglich.

Bessere Sprache für kritische Anwendungen verwenden?

Bemerkung: Für die Erkennung vonÜberläufen auf dem Heapist eine Vielzahl von Tools (z.B. valgrind) und Libraries (z.B. dmalloc) bekannt.

MancheC-Compiler bieten speziellen Debug-Supportzur Erkennung von Überläufen von Stackvariablen (z.B. Clang/llvm C-Compiler,-fbounds-checking(run-time) und

AddressSanitizer).

Kryptocode (auch für IoT-Anwendungen) ist oft sehr portabel gehalten (aufgrund der vielfältigen Anwendungen).

Erste Tests auf einer Host-Plattform mit

”clang/llvm“

22

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN Aufgrund des Sprachdesigns von C und C++ ist eine

automatisierte Erkennung von Bufferüberläufenim Allgemeinen nicht / schwer möglich. Bessere Sprache für kritische

Anwendungen verwenden?

Bemerkung: Für die Erkennung vonÜberläufen auf dem Heapist eine Vielzahl von Tools (z.B. valgrind) und Libraries (z.B. dmalloc) bekannt.

MancheC-Compiler bieten speziellen Debug-Supportzur Erkennung von Überläufen von Stackvariablen (z.B. Clang/llvm C-Compiler,-fbounds-checking(run-time) und

AddressSanitizer).

Kryptocode (auch für IoT-Anwendungen) ist oft sehr portabel gehalten (aufgrund der vielfältigen Anwendungen).

Erste Tests auf einer Host-Plattform mit

”clang/llvm“

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN Aufgrund des Sprachdesigns von C und C++ ist eine

automatisierte Erkennung von Bufferüberläufenim Allgemeinen nicht / schwer möglich. Bessere Sprache für kritische

Anwendungen verwenden?

Bemerkung: Für die Erkennung vonÜberläufen auf dem Heapist eine Vielzahl von Tools (z.B. valgrind) und Libraries (z.B. dmalloc) bekannt.

MancheC-Compiler bieten speziellen Debug-Supportzur Erkennung von Überläufen von Stackvariablen (z.B. Clang/llvm C-Compiler,-fbounds-checking(run-time) und

AddressSanitizer).

Kryptocode (auch für IoT-Anwendungen) ist oft sehr portabel gehalten (aufgrund der vielfältigen Anwendungen).

Erste Tests auf einer Host-Plattform mit

”clang/llvm“

22

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN Aufgrund des Sprachdesigns von C und C++ ist eine

automatisierte Erkennung von Bufferüberläufenim Allgemeinen nicht / schwer möglich. Bessere Sprache für kritische

Anwendungen verwenden?

Bemerkung: Für die Erkennung vonÜberläufen auf dem Heapist eine Vielzahl von Tools (z.B. valgrind) und Libraries (z.B. dmalloc) bekannt.

MancheC-Compiler bieten speziellen Debug-Supportzur Erkennung von Überläufen von Stackvariablen (z.B. Clang/llvm C-Compiler,-fbounds-checking(run-time) und

AddressSanitizer).

Kryptocode (auch für IoT-Anwendungen) ist oft sehr portabel gehalten (aufgrund der vielfältigen Anwendungen).

Erste Tests auf einer Host-Plattform mit

”clang/llvm“

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN Aufgrund des Sprachdesigns von C und C++ ist eine

automatisierte Erkennung von Bufferüberläufenim Allgemeinen nicht / schwer möglich. Bessere Sprache für kritische

Anwendungen verwenden?

Bemerkung: Für die Erkennung vonÜberläufen auf dem Heapist eine Vielzahl von Tools (z.B. valgrind) und Libraries (z.B. dmalloc) bekannt.

MancheC-Compiler bieten speziellen Debug-Supportzur Erkennung von Überläufen von Stackvariablen (z.B. Clang/llvm C-Compiler,-fbounds-checking(run-time) und

AddressSanitizer).

Kryptocode (auch für IoT-Anwendungen) ist oft sehr portabel gehalten (aufgrund der vielfältigen Anwendungen).

Erste Tests auf einer Host-Plattform mit

”clang/llvm“

22

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN Aufgrund des Sprachdesigns von C und C++ ist eine

automatisierte Erkennung von Bufferüberläufenim Allgemeinen nicht / schwer möglich. Bessere Sprache für kritische

Anwendungen verwenden?

Bemerkung: Für die Erkennung vonÜberläufen auf dem Heapist eine Vielzahl von Tools (z.B. valgrind) und Libraries (z.B. dmalloc) bekannt.

MancheC-Compiler bieten speziellen Debug-Supportzur Erkennung von Überläufen von Stackvariablen (z.B. Clang/llvm C-Compiler,-fbounds-checking(run-time) und

AddressSanitizer).

Kryptocode (auch für IoT-Anwendungen) ist oft sehr portabel gehalten (aufgrund der vielfältigen Anwendungen).

Erste Tests auf einer Host-Plattform mit

”clang/llvm“

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN (II) Die folgende Technik (

”Der Memorywall des armen Mannes'") kann auch helfen:

unsigned long A[100];

A[17] = 42;

wird zu

unsigned long AS[102];

unsigned long AS[0] = 0xDEAD; unsigned long AS[101] = 0xBEEF; unsigned long *A = AS + 1; A[17] = 42;

/* Check the Wall */

Diese Technik kann (meistens) fehlerhalfteSchreibzugriffe erkennen (evtl. mit vielen verschiedenen

”Wall-Werten“testen). Diese Technik kann man mit Macros vereinfachen.

23

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN (II) Die folgende Technik (

”Der Memorywall des armen Mannes'") kann auch helfen:

unsigned long A[100];

A[17] = 42;

wird zu

unsigned long AS[102];

unsigned long AS[0] = 0xDEAD;

unsigned long AS[101] = 0xBEEF;

unsigned long *A = AS + 1; A[17] = 42;

/* Check the Wall */

Diese Technik kann (meistens) fehlerhalfteSchreibzugriffe erkennen (evtl. mit vielen verschiedenen

”Wall-Werten“testen). Diese Technik kann man mit Macros vereinfachen.

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN (II) Die folgende Technik (

”Der Memorywall des armen Mannes'") kann auch helfen:

unsigned long A[100];

A[17] = 42;

wird zu

unsigned long AS[102];

unsigned long AS[0] = 0xDEAD;

unsigned long AS[101] = 0xBEEF;

unsigned long *A = AS + 1;

A[17] = 42;

/* Check the Wall */

Diese Technik kann (meistens) fehlerhalfteSchreibzugriffe erkennen (evtl. mit vielen verschiedenen

”Wall-Werten“testen). Diese Technik kann man mit Macros vereinfachen.

23

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN (II) Die folgende Technik (

”Der Memorywall des armen Mannes'") kann auch helfen:

unsigned long A[100];

A[17] = 42;

wird zu

unsigned long AS[102];

unsigned long AS[0] = 0xDEAD;

unsigned long AS[101] = 0xBEEF;

unsigned long *A = AS + 1;

A[17] = 42;

/* Check the Wall */

Diese Technik kann (meistens) fehlerhalfteSchreibzugriffe erkennen (evtl. mit vielen verschiedenen

”Wall-Werten“testen). Diese Technik kann man mit Macros vereinfachen.

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN (II) Die folgende Technik (

”Der Memorywall des armen Mannes'") kann auch helfen:

unsigned long A[100];

A[17] = 42;

wird zu

unsigned long AS[102];

unsigned long AS[0] = 0xDEAD;

unsigned long AS[101] = 0xBEEF;

unsigned long *A = AS + 1;

A[17] = 42;

/* Check the Wall */

Diese Technik kann (meistens) fehlerhalfteSchreibzugriffe erkennen (evtl. mit vielen verschiedenen”Wall-Werten“testen).

Diese Technik kann man mit Macros vereinfachen.

23

Einführung Grundlegende Attacken Implementierungsfehler

TOOLS ZUR ERKENNUNG VON PUFFERÜBERLÄUFEN (II) Die folgende Technik (

”Der Memorywall des armen Mannes'") kann auch helfen:

unsigned long A[100];

A[17] = 42;

wird zu

unsigned long AS[102];

unsigned long AS[0] = 0xDEAD;

unsigned long AS[101] = 0xBEEF;

unsigned long *A = AS + 1;

A[17] = 42;

/* Check the Wall */

Diese Technik kann (meistens) fehlerhalfteSchreibzugriffe erkennen (evtl. mit vielen verschiedenen”Wall-Werten“testen).

Diese Technik kann man mit Macros vereinfachen.

ÄHNLICHE DOKUMENTE