360 likes | 540 Views
Hauptseminar Software-Sicherheit Thema Überprüfung der Sicherheit von Informationsflüssen in Programmen. Übersicht. Einführung Sicherheitsklassen Sicherer Informationsfluss Expliziter und impliziter Informationsfluss Überprüfung der Sicherheit von Informationsflüssen in Programmen
E N D
Hauptseminar Software-Sicherheit Thema Überprüfung der Sicherheit von Informationsflüssen in Programmen Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Übersicht • Einführung • Sicherheitsklassen • Sicherer Informationsfluss • Expliziter und impliziter Informationsfluss • Überprüfung der Sicherheit von Informationsflüssen in Programmen • Typ-basierter Ansatz • Semantik-basierter Ansatz • Einführung • Postdominanz und unmittelbare Postdominanz • -Sicherheit • Überprüfung der -Sicherheit mit Hilfe einer abstrakten Semantik • Zusammenfassung Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Motivation • Szenario: • Programm kompiliert nach Java Bytecode (JVML), heruntergeladen über das Internet und ausgeführt in einem Java-fähigen Browser • Benötigt zur Ausführung Zugriff auf vertrauliche Daten des Benutzers • Problem: • Sichtbarkeit der vertraulichen Daten des Benutzers z.B. über das Internet? Überprüfung der Sicherheit der Informationsflüsse im Programm! Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Einführung • Einführung • Sicherheitsklassen • Sicherer Informationsfluss • Expliziter und impliziter Informationsfluss • Überprüfung der Sicherheit von Informationsflüssen in Programmen • Typ-basierter Ansatz • Semantik-basierter Ansatz • Einführung • Postdominanz und unmittelbare Postdominanz • -Sicherheit • Überprüfung der -Sicherheit mit Hilfe einer abstrakten Semantik • Zusammenfassung Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Sicherheitsklassen • Information kann man anhand von Sicherheitsstufen (z.B. low, high, usw.) klassifizieren.Bildung von Sicherheitsklassen • Objekte (z.B. Programmvariablen) können Information halten. • Jedem Objekt wird eine Sicherheitsklasse zugeordnet. • Statische Zuordnung:Die Sicherheitsklasse eines Objekts ist konstant. • Dynamische Zuordnung:Die Sicherheitsklasse eines Objekts variiert mit der von dem Objekt gehaltenen Information. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Sicherer Informationsfluss • Die Menge SC der Sicherheitsklassen muss einen vollständigen Verband bilden. Partielle Ordnung auf der Menge SC der SicherheitsklassenBeispiel: Sei SC = {L, M, H} die Menge der Sicherheitsklassen unclassified (L),confidential (M) und secret (H). LMH ist eine mögliche partielle Ordnung auf SC. • Sicherer Informationsfluss: Es darf keine Information von einem Objekt mit höherer Sicherheitsklasse zu einem Objekt mit niedrigerer Sicherheitsklasse fließen.Beispiel: Sei (SC, ) wie oben.Seien x, y Programmvariablen mit Sicherheitsklassen M, L SC. Die Zuweisung x:=y ist sicher, da LM. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Expliziter und impliziter Informationsfluss • Expliziter Informationsfluss • Aufgrund von Zuweisungen • Beispiel:x:=y; • Impliziter Informationsfluss • Aufgrund von bedingten oder repetitiven Anweisungen • Beispiel:if z=0 then x:=0; else x:=1; Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Überprüfung der Sicherheit vonInformationsflüssen in Programmen • Einführung • Sicherheitsklassen • Sicherer Informationsfluss • Expliziter und impliziter Informationsfluss • Überprüfung der Sicherheit von Informationsflüssen in Programmen • Typ-basierter Ansatz • Semantik-basierter Ansatz • Einführung • Postdominanz und unmittelbare Postdominanz • -Sicherheit • Überprüfung der -Sicherheit mit Hilfe einer abstrakten Semantik • Zusammenfassung Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Annahmen Schlussfolgerung p : Typisierungsrelation : Programmanweisung : Typ Typen und Typsysteme • Ein Typ legt den Wertebereich einer Programmvariablen fest. • Ein Typsystem besteht aus einer Typisierungsrelation, die jeder Programmvariablen einen Typ zuordnet, und aus einer Menge von Typinferenzregeln der Form mit H1,...,Hn und C in der Form • Bemerkung:Typsysteme werden gewöhnlich dazu verwendet, die Typkorrektheit von Programmen in einer streng typisierten Programmiersprache zu überprüfen.Im Folgenden wird gezeigt, wie man Typsysteme zur Überprüfung der Sicherheit von Informationsflüssen in Programmen einsetzen kann. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Typsysteme und sicherer Informationsfluss • Ein Typ entspricht einer Sicherheitsklasse aus SC. • Unterscheidung zwischen Typen für Ausdrücke ( ), Typen für Programmvariablen (var) und Typen für Anweisungen (cmd) • Erweiterung der partiellen Ordnung auf SC zu einer Subtypbeziehung Bemerkung: Die Subtypbeziehung ist kontravariant bzgl. der Typen für Anweisungen, d.h. falls ´ gilt, dann ist ´cmd cmd. Beispiel:Sei wie oben L M. Dann ist M cmd L cmd. Man beachte dabei, dass eine Anweisung c genau dann den Typ cmd hat, wenn für jede Zuweisung x:=y in c gilt: Die Sicherheitsklasse von x ist mindestens . Bemerkung: Typcoercion ist ebenfalls möglich. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Typsysteme und sicherer Informationsfluss... • Typkonsistenz (Type Soundness): Programmvariablen mit höherer Sicherheitsklasse dürfen keine Programmvariablen mitniedrigerer Sicherheitsklasse beeinflussen (non-interference). • Simple Security (für Ausdrücke): In einem Ausdruck vom Typ darf von keiner Programmvariablen mit höherer Sicherheitsklasse als gelesen werden (no read up). • Confinement (für Anweisungen): In einer Anweisung vom Typ cmddarf auf keine Programmvariable mit niedrigerer Sicherheitsklasse als geschrieben werden (no write down). Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Zu (2): • Typcoercion: Konvertierung des Typs von y von L nach M • Anwendung folgender Typinferenzregel für Zuweisungen mit = M: Beispiel • Gegeben sei folgender Programmabschnitt (1)if z=0 then x:=0; else x:=1; (2)x:=y; mit (x) = M var, (y) = L var, (z) = H var. SC = {L, M, H} mit LMH Typinferenzregeln für sicheren Informationsflussgarantieren sicheren expliziten und implizitenInformationsfluss in Programmen. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Beispiel... • Gegeben sei folgender Programmabschnitt (1)if z=0 then x:=0; else x:=1; (2)x:=y; mit (x) = M var, (y) = L var, (z) = H var. • Zu (1): • Anwendung der Typinferenzregel für Zuweisungen ergibt: x:=0 : M cmd und x:=1 : M cmd SC = {L, M, H} mit LMH Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
() x:=0 : M cmd x:=1 : M cmd Beispiel... • Gegeben sei folgender Programmabschnitt (1)if z=0 then x:=0; else x:=1; (2)x:=y; mit (x) = M var, (y) = L var, (z) = H var. • Zu (1)... • Betrachte die Typinferenzregel für bedingte Anweisungen: • Gesucht: SC, sodass obige Typinferenzregel angewendet werden kann • Gegeben sei folgender Programmabschnitt (1)if z=0 then x:=0; else x:=1; (2)x:=y; mit (x) = M var, (y) = L var, (z) = H var. • Zu (1)... • Betrachte die Typinferenzregel für bedingte Anweisungen: • Gesucht: SC, sodass obige Typinferenzregel angewendet werden kann • Typcoercion: , da z vom Typ H ist • Gegeben sei folgender Programmabschnitt (1)if z=0 then x:=0; else x:=1; (2)x:=y; mit (x) = M var, (y) = L var, (z) = H var. • Zu (1)... • Betrachte die Typinferenzregel für bedingte Anweisungen: • Gesucht: SC, sodass obige Typinferenzregel angewendet werden kann • Typcoercion: , da z vom Typ H ist • Kontravarianz der Subtypbeziehung bzgl. der Typen für Anweisungen: , da ausM HH cmd M cmd folgt, aber () gilt SC = {L, M, H} mit LMH Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Überprüfung der Sicherheit vonInformationsflüssen in Programmen • Einführung • Sicherheitsklassen • Sicherer Informationsfluss • Expliziter und impliziter Informationsfluss • Überprüfung der Sicherheit von Informationsflüssen in Programmen • Typ-basierter Ansatz • Semantik-basierter Ansatz • Einführung • Postdominanz und unmittelbare Postdominanz • -Sicherheit • Überprüfung der -Sicherheit mit Hilfe einer abstrakten Semantik • Zusammenfassung Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Einführung • Ziel: Statische Überprüfung der Sicherheit von Informationsflüssen in einem Programm (notiert in Java Bytecode (JVML), siehe unten) mit Hilfe abstrakter Interpretation einer operationalen Semantik • Vorgehensweise: • Definition einer konkreten operationalen Semantik, in der Werte und Sicherheitsklassen von Variablen betrachtet werden(d.h. der Wert einer (konkreten) Variablen setzt sich zusammen aus einer Sicherheitsklasseund dem tatsächlichen Wert)Dynamische Überprüfung der Sicherheit von Informationsflüssen in einem Programm ( konkrete Ausführung(en) des Programms) • Definition einer abstrakten operationalen Semantik, in der nur noch Sicherheitsklassen von Variablen betrachtet werden Statische Überprüfung der Sicherheit von Informationsflüssen in einem Programm ( abstrakte Ausführung des Programms) Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Befehlssatz ophole zwei Operanden vom Stack, führe die Operation aus und schreibe das Ergebnis zurück auf den Stack pophole den obersten Wert v vom Stack pushkschreibe die Konstante k auf den Stack loadxschreibe den Wert der Programmvariablen x auf den Stack storexhole den obersten Wert v vom Stack und speichere ihn in der Programmvariablen x (x:=v) ifjhole den obersten Wert v vom Stack und, falls v 0, springe zur Adresse j gotojspringe zur Adresse j jsrjbei Adresse i: springe zur Adresse j und schreibe die Rücksprungadresse i + 1 auf den Stack retxspringe zu der Adresse, die in der Programmvariablen x gespeichert ist haltstoppe • Beispiel: if z=0then x:=0; else x:=1; x:=y; 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
1 2 3 5 4 zugehöriger Kontrollflussgraph 6 7 8 9 Kontrollflussgraph • Beispiel: 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
1 1 2 2 3 3 5 5 4 4 6 6 7 7 Postdominanz und unmittelbare Postdominanz • Seien i und j Knoten in einem Kontrollflussgraphen.Knoten j postdominiert Knoten i, j pd i, falls j i und j ist auf jedem Pfad ausgehend von i nach halt.Knoten j postdominiert Knoten i unmittelbar, j ipd i, falls j pd i und esgibt keinen Knoten r mit j pd r pd i. Häufig verwendet man auch die Notation j = ipd(i). Man beachte: Für jeden Knoten i , für den ipd(i) nicht existiert, setzt man ipd(i) = . • Beispiel:Gegeben sei obiger Kontrollflussgraph. Dann ist z.B.ipd(2) = 6. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
m2: x: m2: 0 x: 0 m1: x: 0 m1: x: 0 m2: x: 0 m2: x: 1 z: z: 0 z: 0 z: 0 z: 1 z: 1 m1: x: 0 m2: x: 1 z: 0 z: 1 -Sicherheit • Sei (SC, ) ein endlicher Verband von Sicherheitsklassen, SC und die Menge der Programmvariablen mit einer Sicherheitsklasse . • Dann garantiert -Sicherheit, dass Änderungen an Werten von Variablen aus nicht die Werte von Variablen aus beeinflussen. Bemerkung:-Sicherheit garantiert zudem, dass geheime Informationen nicht durch den Zugriff auf den Stack oder durch die Beobachtung der Beendigung eines Programms sichtbar werden. • Beispiel: Sei x M und z H mit M, H SC und M H. Bemerkung: bezeichnet die Menge der Programmvariablen mit Sicherheitsklasse . Der Programmabschnitt if z=0 then x:=0; else x:=1; istnicht M-sicher. Man betrachte dazu folgende Speicherbelegungen m1, m2 mit m1(x) = m2(x): Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
-Sicherheit und konkrete Semantik • Werten von Variablen wird eine Sicherheitsklasse zugeordnet. • Sicherheitsklasse von Werten während der Ausführung eines Programms: Kleinste obere Grenze der Sicherheitsklassen aller expliziten undimpliziten Informationsflüsse, von denen die Werte der Variablen abhängen • Befehle werden in einer Sicherheitsumgebung ausgeführt. • Die Sicherheitsumgebung entspricht stets der kleinsten oberen Grenzeder Sicherheitsklassen aller offenen impliziten Informationsflüsse. • Die konkrete (operationale) Semantik wird durch eine Menge von Inferenzregeln definiert und kann als Transitionssystem beschrieben werden, in dem ein Zustand wie folgt angegeben wird: I=i, M, S, • Mit Hilfe der konkreten Semantik kann die -Sicherheit einer bestimmten Ausführung eines Programms überprüft werden. SC: Sicherheitsumgebung, i: Inhalt des Befehlszählers, M: Speicherbelegung, S: Stack für Operanden, : ipd-Stack zur Protokollierung impliziter Informationsflüsse Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt Inferenzregel 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt z: x: y: SpeicherbelegungM Operanden-StackS ipd-Stack z: (1, H) x: (0, M) y: (0, L) Inferenzregel Beispiel Gegeben: SC = {L, M, H} mit LMH, y L, x M, z H. Gesucht: Ist folgender Programmabschnitt M-sicher? 1 load z 2 if 5 3 push 0 4 goto 6 5 push 1 6 store x 7 load y 8 store x 9 halt (1, H) Sicherheits- umgebung: ! (0, L) (1, H) H L L (1, H) (0, L) (1, H) (6, L) Befehlszähler: 8 6 5 2 9 1 7 if z=0 then x:=0; else x:=1;x:=y; • Damit obiger Programmabschnitt M-sicher ist, muss nun gelten: • Die Speicherbelegung ist M-geschützt,d.h. für alle v M gilt: Der Speicherinhalt von v hat eine Sicherheitsklasse M. • Der Operanden-Stack ist M-geschützt,d.h. alle Elemente im Operanden-Stack haben eine Sicherheitsklasse M. • Die Sicherheitsumgebung entspricht einer Sicherheitsklasse M. Es muss gelten: Die Speicherbelegung ist in einem -konsistenten Zustand, d.h. die Variablen mit einer Sicherheitsklasse halten einen Wert mit Sicherheitsklasse . Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
-Sicherheit und abstrakte Semantik • Keine statische Überprüfung der -Sicherheit eines Programms mit Hilfe der konkreten Semantik möglich, da damit nur der Informationsflusseiner bestimmten Ausführung des Programms untersucht werden kann!Problem: Das konkrete Transitionssystem ist unendlich. Statt Betrachtung von Werten und Sicherheitsklassen von Variablennur noch Betrachtung der Sicherheitsklassen! Definition einer abstrakten (operationalen) Semantik Grundlage: Konkrete Semantik Abstraktion: Von konkreten Werten wird dadurch abstrahiert, dass ihre Sicherheitsklasse beibehalten und ihr Wert nicht mehr berücksichtigt wird. Man beachte: Das abstrakte Transitionssystem ist endlich. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Zusammenfassung Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Kritik • Typ-basierter Ansatz:effizient, aber Fehlalarme möglich • Semantik-basierter Ansatz:genauer (Stichwort„konservative Approximation“), aber höherer Rechenaufwand • Sogenannte „physikalische Seitenkanäle“ können von beiden Ansätzen nicht aufgedeckt werden! Darunter versteht man das Ausspionieren geheimer Informationen durch die Beobachtung des Programmverhaltens (z.B. Programmlaufzeit) u.ä. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Literatur [1] R. Barbuti, C. Bernardeschi, N. de Francesco,Checking Security of Java Bytecode by Abstract Interpretation,ACM Symposium on Applied Computing (SAC), 2002 [2] D. Volpano, G. Smith, C. Irvine,A Sound Type System for Secure Flow Analysis,Journal of Computer Security, 1996 [3] D. E. Denning,A Lattice Model of Secure Information Flow,Communications of the ACM, 1976und ACM Symposium on Operating Systems Principles, 1975 Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Vielen Dank für die Aufmerksamkeit! Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Ergänzungen Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Vollständiger Verband der Sicherheitsklassen • Sei SC = {A, B, ...} eine Menge von Sicherheitsklassen. • Sei SC SC eine Relation (Informationsfluss). • Sei ein assoziativer und kommutativer binärer Verknüpfungsoperator auf SC. Man kann zeigen, dass SC, , einen vollständigen Verband bildet. Es gilt dann: • SC, bildet eine partielle Ordnung. • SC ist endlich. • SC hat eine untere Grenze L, sodass LA für alle A SC. • A B ist die kleinste obere Grenze von A, B SC. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Annahmen Schlussfolgerung Formale Systeme • Inferenzregeln: • Syntaktische Herleitbarkeit: H C, falls C durch Anwendung von Inferenzregeln aus H herleitbar ist. • Semantische Gültigkeit: Sei FS ein formales System, d.h. eine Menge von Axiomen ( C) und Inferenzregeln. FSI= C C gilt in FS • Konsistenz (Soundness): C I= C (jede syntaktisch herleitbare Aussage ist auch semantisch gültig) • Vollständigkeit (Completeness): I= C C (jede semantisch gültige Aussage ist auch syntaktisch herleitbar) Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Transitionssysteme • Ein TransitionssystemT ist ein Tripel (S, , s0), wobei S eine Menge von Zuständen bezeichnet, s0 S ist der Anfangszustand und SSist die Übergangsrelation. Es gibt genau dann einen Übergang von s nach s´, wenn (s, s´) . Man schreibt dann s s´. * bezeichnet die reflexive und transitive Hülle von . s S ist genau dann ein Endzustand des Transitionssystems (Schreibweise: s ), wenn kein s´ existiert mit s s´. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
Kontrollflussgraph • Gegeben sei ein Programm c bestehend aus n Anweisungen.Der Kontrollflussgraph des Programms c ist der gerichtete Graph (V, E), wobei V = {1, ..., n + 1} die Menge der Knoten ist und EVV genau dann eine Kante (i, j) enthält, wenn die Anweisung bei Adresse j unmittelbar nach der Anweisung bei Adresse i ausgeführt werden kann; zudem ist eine Kante (i, n+1) für jede Adresse i enthalten, für die gilt: c[i] = halt. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
-Sicherheit • Sei P = c, ein Programm und SC.Man sagt, P ist -sicher, falls für jede Zuweisung von Werten an Variablen aus gilt: Seien m1 und m2 zwei beliebige Speicherbelegungen mitD(m1) = D(m2) = Var(c) und für alle x gilt: m1(x) = m2(x). Dann muss gelten: 1, m1, i, m1´, s impliziert es existiert m2´ mit 1, m2, i, m2´, s und für alle x gilt: m1´(x) = m2´(x). • Beispiel zur Verletzung der -Sicherheit durch Beobachtung der Beendigung eines Programms:1 load y2 if 13 halt Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
-Geschütztheit • Sei P = c, ein Programm und SC. • Eine konkrete Speicherbelegung M mit D(M) = Var(c) ist genau dann-geschützt bzgl. P, wenn gilt: für alle x ist M(x) V . • Ein konkreter Operanden-Stack S ist genau dann -geschützt bzgl. P,wenn gilt: S (V )*. Dabei bezeichnet V alle Werte mit Sicherheitsklasse . V = (Ve SC). Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
-Sicherheit und konkrete Semantik Man kann beweisen: • Sei P = c, ein Programm und SC.Falls jede terminierende Ausführung von P, die in einer -konsistenten Speicherbelegung startet und in einem Zustand I=i, M, S, endet, sodass dann gilt: M und S sind -geschützt bzgl. P und es ist ,dann ist P-sicher. Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,
upgradeM, upgradeS • Sei W = {x | c[j] = store x und j liegt auf einem Pfad des Kontrollfluss-graphen, der bei i startet und bei ipd(i) endet, ipd(i) ausgenommen}.Für alle xW mit M(x) = (k, ): upgradeM(M, i, )(x) = (k, ) • upgradeS(S, ): Setzt die Sicherheitsklasse jedes Wertes v in S auf die kleinste obere Grenze von und der Sicherheitsklasse von v. • Beispiel zur Notwendigkeit von upgradeS:1 push 12 push 03 load y4 if 65 pop6 store x7 halt Überprüfung der Sicherheit von Informationsflüssen in Programmen - Stefan Kurz,