In diesem Vortrag werde ich die folgenden Anwendungen von Logik in der IT-Sicherheit präsentieren: Software Verifikation, Hardware Verifikation, Runtime Verifikation.
4. Warum formale Verifikation?
Binäre Suche
■ Erste Veröffentlichung 1946
| Folie 4 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
5. Warum formale Verifikation?
Binäre Suche
■ Erste Veröffentlichung 1946
■ Erste korrekte Veröffentlichung 1962
| Folie 4 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
6. Warum formale Verifikation?
Binäre Suche
■ Erste Veröffentlichung 1946
■ Erste korrekte Veröffentlichung 1962
■ Implementierung in der Java Standard Bibliothek ist fehlerhaft 2006
Nearly All Binary Searches and Mergesorts are Broken, Joshua Bloch.
Google Research Blog, 2006
| Folie 4 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
7. Warum formale Verifikation?
Binäre Suche
■ Erste Veröffentlichung 1946
■ Erste korrekte Veröffentlichung 1962
■ Implementierung in der Java Standard Bibliothek ist fehlerhaft 2006
Nearly All Binary Searches and Mergesorts are Broken, Joshua Bloch.
Google Research Blog, 2006
int mid = (low + high) / 2;
int midVal = a[mid];
| Folie 4 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
8. Warum formale Verifikation?
Binäre Suche
■ Erste Veröffentlichung 1946
■ Erste korrekte Veröffentlichung 1962
■ Implementierung in der Java Standard Bibliothek ist fehlerhaft 2006
Nearly All Binary Searches and Mergesorts are Broken, Joshua Bloch.
Google Research Blog, 2006
int mid = (low + high) / 2;
int midVal = a[mid];
⇝
int mid = low + (high - low) / 2;
int midVal = a[mid];
| Folie 4 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
11. Warum formale Verifikation?
Softwarefehler …
■ treten häufig auf
■ stören
■ können hohe Kosten verursachen
| Folie 5 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
12. Warum formale Verifikation?
Softwarefehler …
■ treten häufig auf
■ stören
■ können hohe Kosten verursachen
■ können Menschenleben in Gefahr bringen
| Folie 5 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
13. Warum formale Verifikation?
Softwarefehler …
■ treten häufig auf
■ stören
■ können hohe Kosten verursachen
■ können Menschenleben in Gefahr bringen
Instead of debugging a program, one should prove that it meets its specification, and
this proof should be checked by a computer program
— John McCarthy, A Basis for a Mathematical Theory of Computation, 1961
| Folie 5 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
15. Why3 Logic
Jean-Christophe Filliâtre: One Logic To Use Them All. In: CADE. Springer. 2013
■ Terme
5int
3.14152real
xθ
if c then t else f
match t with p1 → t1 | . . . | pn → tn end
. . .
■ Formeln
■ Typ-Regeln
■ Semantik
XZ,I
int
∈ Z
. . .
| Folie 7 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
16. Theorembeweiser
■ Ansatz: Axiomatisierung Theorien in Prädikatenlogik
■ Probleme:
Theorie reele Zahlen
Theorie endlicher Bäume
Theorie ganzer Zahlarithmetik mit Multiplikation
Inakzeptable Performanz
| Folie 8 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
17. Theorembeweiser
■ Ansatz: Axiomatisierung Theorien in Prädikatenlogik
■ Probleme:
Theorie reele Zahlen
Theorie endlicher Bäume
Theorie ganzer Zahlarithmetik mit Multiplikation
Inakzeptable Performanz
Satisfiability Modulo Theories (SMT) Solver
■ Variablen repräsentieren Constraints über ganze Zahlen, Arrays, …
■ Theorie-Operationen wie Gleichheit, Addition, …
■ SAT-Solver interagiert mit Constraint Solver
| Folie 8 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
26. Ada / SPARK
Ada
■ imperative Programmiersprache
■ strenge Typisierung
■ ausführbare Verträge
SPARK
■ leicht verifizierbare Teilmenge von Ada
■ keine Pointer, keine dynamischen Datenstrukturen
■ gnatprove generiert Verifikationsbedingungen
Programmintegrität
Assertions, Schleifeninvarianten
Vor- und Nachbedingungen
| Folie 10 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
28. SPARK Checks
■ Informationsfluss
■ Aliasing
■ Programmintegrität
■ Spezifikationen
| Folie 12 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
29. Aliasing
■ Aliasing Modifikationen einer Variable haben Einfluss auf andere
■ Pointer
procedure Foo (A : in out A_Type)
is
procedure Helper (B : in out A_Type)
is
begin
-- Helper has two variables: A and B, pointing to the same memory
end Helper;
begin
Helper (B => A);
end Foo;
| Folie 13 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
30. Programmintegrität
Laufzeitfehler sind Fehler während der Programmausführung:
■ array access errors, range violations, overflows, …
| Folie 14 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
31. Programmintegrität
Laufzeitfehler sind Fehler während der Programmausführung:
■ array access errors, range violations, overflows, …
type Nat_Array is array (Integer range <>) of Natural;
A : Nat_Array (1 .. 10);
I, J, P, Q : Integer;
A (I + J) := P / Q;
| Folie 14 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
32. Programmintegrität
Laufzeitfehler sind Fehler während der Programmausführung:
■ array access errors, range violations, overflows, …
type Nat_Array is array (Integer range <>) of Natural;
A : Nat_Array (1 .. 10);
I, J, P, Q : Integer;
A (I + J) := P / Q;
Die folgenden Fehler können auftreten:
■ I+J kann überlaufen
| Folie 14 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
33. Programmintegrität
Laufzeitfehler sind Fehler während der Programmausführung:
■ array access errors, range violations, overflows, …
type Nat_Array is array (Integer range <>) of Natural;
A : Nat_Array (1 .. 10);
I, J, P, Q : Integer;
A (I + J) := P / Q;
Die folgenden Fehler können auftreten:
■ I+J kann überlaufen
■ I+J kann außerhalb des Indexbereiches von A sein
| Folie 14 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
34. Programmintegrität
Laufzeitfehler sind Fehler während der Programmausführung:
■ array access errors, range violations, overflows, …
type Nat_Array is array (Integer range <>) of Natural;
A : Nat_Array (1 .. 10);
I, J, P, Q : Integer;
A (I + J) := P / Q;
Die folgenden Fehler können auftreten:
■ I+J kann überlaufen
■ I+J kann außerhalb des Indexbereiches von A sein
■ P/Q kann überlaufen
| Folie 14 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
35. Programmintegrität
Laufzeitfehler sind Fehler während der Programmausführung:
■ array access errors, range violations, overflows, …
type Nat_Array is array (Integer range <>) of Natural;
A : Nat_Array (1 .. 10);
I, J, P, Q : Integer;
A (I + J) := P / Q;
Die folgenden Fehler können auftreten:
■ I+J kann überlaufen
■ I+J kann außerhalb des Indexbereiches von A sein
■ P/Q kann überlaufen
■ P/Q kann außerhalb des Element-Subtypen sein
| Folie 14 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
36. Programmintegrität
Laufzeitfehler sind Fehler während der Programmausführung:
■ array access errors, range violations, overflows, …
type Nat_Array is array (Integer range <>) of Natural;
A : Nat_Array (1 .. 10);
I, J, P, Q : Integer;
A (I + J) := P / Q;
Die folgenden Fehler können auftreten:
■ I+J kann überlaufen
■ I+J kann außerhalb des Indexbereiches von A sein
■ P/Q kann überlaufen
■ P/Q kann außerhalb des Element-Subtypen sein
■ Q kann Null sein
| Folie 14 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
37. Spezifikationsfeatures – Überblick
■ Funktionale Ausdrücke
■ Vor- und Nachbedingungen
■ Ghost Code
■ Assertions
■ Schleifeninvarianten
■ Terminierung
■ Typinvarianten
■ Informationsflüsse
■ Zustandsabstraktionen
■ . . .
| Folie 15 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
38. Funktionale Ausdrücke
type Variable_Type is mod 2**64;
type Literal_Type is
record
Polarity : Boolean;
Variable : Variable_Type;
end record;
type Clause_Type is array (Natural range <>) of Literal_Type;
function Compl (Literal : Literal_Type) return Literal_Type
is ((Polarity => not Literal.Polarity, Variable => Literal.Variable));
function Appears (C : Clause_Type; L : Literal_Type) return Boolean
is (for some Lp of C => L = Lp);
function Resolve_Spec
(C : Clause_Type;
D : Clause_Type;
L : Literal_Type;
R : Clause_Type) return Boolean
is ((for all Lp of C => (if Lp /= L then Appears (R, Lp))) and
(for all Lp of D => (if Lp /= Compl (L) then Appears (R, Lp))));
| Folie 16 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
39. Vor- und Nachbedingungen
function Resolve
(C : Clause_Type;
D : Clause_Type;
L : Literal_Type)
return Clause_Type
with
Pre =>
C'First = 0 and
D'First = 0 and
C'Last < 2**16 and
D'Last < 2**16 and
Appears (C, L) and
Appears (D, Compl (L)),
Post =>
Entails (C, D, Resolve'Result);
| Folie 17 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
40. Ghost Code
■ Ghost Code wird wie normaler Code beim Beweisprozess behandelt
■ Ghost Code wird nicht kompiliert
Ghost Code hat keinen Einfluss auf die reguläre Implementierung
function Entails
(C : Clause_Type;
D : Clause_Type;
R : Clause_Type)
return Boolean
with
Ghost,
Import;
procedure Resolution_Lemma
(C : Clause_Type;
D : Clause_Type;
L : Literal_Type;
R : Clause_Type)
with
Ghost,
Pre => Resolve_Spec (C, D, L, R),
Post => Entails (C, D, R);
| Folie 18 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
41. Assertions
function Resolve
(C : Clause_Type;
D : Clause_Type;
L : Literal_Type)
return Clause_Type
is
Result : Clause_Type (0 .. C'Length + D'Length - 3);
L_Pos : Natural := Get_Literal_Pos (C, L);
Compl_L_Pos : Natural := Get_Literal_Pos (D, Compl (L));
begin
Copy (Data => C,
From => C'First,
Length => L_Pos - C'First,
Dest => Result,
Index => Result'First);
pragma Assert (for all I in C'First .. L_Pos - 1 => Result (I) = C (I));
...
pragma Assert (Resolve_Spec (C, D, L, Result));
Resolution_Lemma (C, D, L, Result);
return Result;
end Resolve;
| Folie 19 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
57. Anwendungen Interaktive Theorembeweiser
■ Isabelle/HOL
Offene Verifikationsbedingungen beweisen
Formales Modell von Muen
| Folie 25 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
58. Anwendungen Interaktive Theorembeweiser
■ Isabelle/HOL
Offene Verifikationsbedingungen beweisen
Formales Modell von Muen
■ Coq:
2005: CompCert: Verified optimizing C-Compiler
2008: 4-Color Theorem
| Folie 25 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
59. Anwendungen Interaktive Theorembeweiser
■ Isabelle/HOL
Offene Verifikationsbedingungen beweisen
Formales Modell von Muen
■ Coq:
2005: CompCert: Verified optimizing C-Compiler
2008: 4-Color Theorem
■ ACL2
1995: Korrekheit Floating Point Divison vom AMD K5 (Pentium FDIV Bug)
2006: Eigenschaften der Sun Java Virtual Machine, Bytecode verifier
| Folie 25 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
60. Anwendungen Interaktive Theorembeweiser
■ Isabelle/HOL
Offene Verifikationsbedingungen beweisen
Formales Modell von Muen
■ Coq:
2005: CompCert: Verified optimizing C-Compiler
2008: 4-Color Theorem
■ ACL2
1995: Korrekheit Floating Point Divison vom AMD K5 (Pentium FDIV Bug)
2006: Eigenschaften der Sun Java Virtual Machine, Bytecode verifier
■ F*
2017: HACL Cryptographic Library ⇝ HTTPS stack
| Folie 25 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
71. Runtime Verifikation
■ Problem: Beweisen von Millionen Zeilen Code ist (noch) nicht machbar.
| Folie 31 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
72. Runtime Verifikation
■ Problem: Beweisen von Millionen Zeilen Code ist (noch) nicht machbar.
■ Idee: Beweisen, dass ein Lauf abstrakte Eigenschaften erfüllt.
| Folie 31 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
73. Runtime Verifikation
■ Problem: Beweisen von Millionen Zeilen Code ist (noch) nicht machbar.
■ Idee: Beweisen, dass ein Lauf abstrakte Eigenschaften erfüllt.
Eigenschaften
Monitor
System
FeedbackEvents
| Folie 31 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
74. Runtime Verifikation
■ Problem: Beweisen von Millionen Zeilen Code ist (noch) nicht machbar.
■ Idee: Beweisen, dass ein Lauf abstrakte Eigenschaften erfüllt.
Eigenschaften LTL, MSO, DL+CWA
Monitor Automaten, Theorembeweiser, Prolog
System
FeedbackEvents
| Folie 31 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
75. Runtime Verifikation
■ Problem: Beweisen von Millionen Zeilen Code ist (noch) nicht machbar.
■ Idee: Beweisen, dass ein Lauf abstrakte Eigenschaften erfüllt.
Eigenschaften LTL, MSO, DL+CWA
Monitor Automaten, Theorembeweiser, Prolog
System
FeedbackEvents
Beschreibung, Verarbeitung und Überprüfung clientseitiger Policies für vertrauenswürdige
Cloud-Anwendungen, Jörg Kebbedies. Dresden University of Technology, 2018
| Folie 31 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
77. Zusammenfassung
■ Logik
hilft bei der effizienten Softwareentwicklung
ist zentral für Software Verifikation und Programmanalyse
ist praxistauglich
| Folie 33 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
78. Zusammenfassung
■ Logik
hilft bei der effizienten Softwareentwicklung
ist zentral für Software Verifikation und Programmanalyse
ist praxistauglich
■ Anwendungen
Scheduling
Smoke Tests
Muen Separationskernel
Kryptographische Bibliotheken
| Folie 33 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
79. Zusammenfassung
■ Logik
hilft bei der effizienten Softwareentwicklung
ist zentral für Software Verifikation und Programmanalyse
ist praxistauglich
■ Anwendungen
Scheduling
Smoke Tests
Muen Separationskernel
Kryptographische Bibliotheken
| Folie 33 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
80. Jobs
■ Wir suchen Informatiker in allen Karrierestufen
Werkstudenten
Bachelor- und Masterarbeiten
Graduierte
Berufserfahrene
| Folie 34 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
81. Jobs
■ Wir suchen Informatiker in allen Karrierestufen
Werkstudenten
Bachelor- und Masterarbeiten
Graduierte
Berufserfahrene
■ Kultur
Flache Hierachien
Respekt vor anderen Persönlichkeiten
Hochmotivierte Teams
Spannende Themen
| Folie 34 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
82. Jobs
■ Wir suchen Informatiker in allen Karrierestufen
Werkstudenten
Bachelor- und Masterarbeiten
Graduierte
Berufserfahrene
■ Kultur
Flache Hierachien
Respekt vor anderen Persönlichkeiten
Hochmotivierte Teams
Spannende Themen
■ Benefits
| Folie 34 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit
83. Jobs
■ Wir suchen Informatiker in allen Karrierestufen
Werkstudenten
Bachelor- und Masterarbeiten
Graduierte
Berufserfahrene
■ Kultur
Flache Hierachien
Respekt vor anderen Persönlichkeiten
Hochmotivierte Teams
Spannende Themen
■ Benefits
https://www.secunet.com/de/das-unternehmen/karriere/
| Folie 34 | 27. Mai 2019 | Anwendungen der Logik in der IT-Sicherheit