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.