7. Informationsflusskontrolle

Werbung
7. Informationsflusskontrolle
1
7. Informationsflusskontrolle
Informationsflusskontrolle (information flow
control):
sicherstellen, dass sensitive Daten nicht
aufgrund von Informationsflüssen an Unbefugte
gelangen können
Zugriffsschutzmaßnahmen sind hierfür meist
unzureichend.
Zugriffsschutz beschränkt die Rechte von Benutzern, kann aber nicht den Informationsfluss in
einem System kontrollieren. Informationsflussstrategien definieren daher die Wege, auf denen
Informationen durch ein System fließen kann und stellt sicher, dass sensitive Daten nicht
aufgrund von Informationsflüssen an Unbefugte gelangen.
2
7. Informationsflusskontrolle
Beispiel (Löhr SS02): Rechnergestützte Abgabe und
Auswertung von Klausuren.
Abgabe(Lösung):
wenn
Lösung hat falsches Format, dann
Bildschirm.ausgeben(Fehlermeldung);
sonst: Ergebnis = Vergleich(Lösung, Musterlösung);
Ergebnisse.anhängen(Lösung, Ergebnis) .
Bösartige Variante dieses Programms könnte bei Benutzung
einer Geheimtür vertrauliche Informationen nach außen
durchsickern lassen:
Die Folie zeigt ein Beispiel, in dem Zugriffsschutz unerlaubte Informationsflüsse nicht
verhindern kann. In diesem Beispiel haben wir ein Programm Abgabe, welches ein Ergebnis
für eine abgegebene Lösung einer Klausur berechnet. Falls die Lösung im richtigen Format
vorliegt, wird die Lösung mit der Musterlösung verglichen. Zur Berechnung des Ergebnisses
braucht das Programm also Zugriff auf die Musterlösung. Es könnte nun jedoch eine bösartige
Variante des Programms geben, welche den notwendigen Zugriff auf die Musterlösung
missbraucht und diese Informationen an unberechtigte Benutzer weitereicht.
3
Informationsflüsse:
Lösung
Fehlermeldung
Bildschirm
Vergleich
Musterlösung
Ergebnisse
Der unerwünschte Informationsfluss kann nicht mit Zugriffsschutz-Mechanismen
verhindert werden, denn das Programm benötigt die missbrauchten Rechte
für legitime Zwecke !
In diesem Fall gibt es einen unerwünschten Informationsfluss von der Musterlösung zu einem
unautorisierten Benutzer (z.B. über die Ausgabe der Musterlösung am Bildschirm).
Zugriffsschutz kann dies nicht verhindern, da das Programm die missbrauchten Rechte auch
für legitime Zwecke benötigt.
4
7. Informationsflusskontrolle
Beispiel:
Benutzer hat Lese- und Schreibrecht auf einer
geheimen Datei.
Benutzer kann Inhalt der geheimen Datei in eine
öffentliche Datei kopieren.
Informationsflusskontrolle hilft diese „Sicherheitslöcher“
zu entdecken.
Traditionelles Anwendungsgebiet: Militärinformatik
(militärische Geheimhaltung)
Ein zweites Beispiel ist eine Datei, auf die ein spezieller Benutzer Lese- und Schreibrechte hat,
alle anderen Benutzer jedoch nicht zugreifen dürfen. Ein Beispiel solch einer Datei könnte die
Passwort-Datei sein, die nur vom Administrator modifiziert werden darf. Der Administrator
könnte nun jedoch seine Rechte missbrauchen und den Inhalt der Datei in eine öffentlich
lesbare Datei kopieren. Damit hätten alle Benutzer die Informationen der Passwort-Datei. Mit
der Informationsflusskontrolle können solche unerlaubten Informationsflüsse aufgedeckt
werden. Traditionelles Anwendungsgebiet der Informationsflusskontrolle ist die
Militärinformatik zur Geheimhaltung militärischer Informationen.
5
7. Informationsflusskontrolle
Zugriffsschutz
reguliert den Zugriff auf Objekte, aber nicht was
Subjekte mit der in den Objekten enthaltenen
Information tun kann.
Informationsflusskontrolle
betrachtet die Rechte zur Weitergabe bzw.
Verbreitung von Informationen. Es werden gültige
Kanäle spezifiziert, entlang denen die Information
fließen darf.
Zusammenfassend kann man festhalten, dass Zugriffsschutz den Zugriff auf Objekte reguliert,
aber nicht, was Subjekte mit den Informationen in den Objekten tun, für die sie autorisiert sind.
Informationsflusskontrolle betrachtet die Weitergabe bzw. die Verbreitung von Informationen,
unabhängig davon, in welchen Objekten die Information steckt und wer Zugriff darauf hat.
Informationsflusskontrolle spezifiziert die gültigen Kanäle, entlang denen Information fließen
darf.
6
7.1 Elemente der Informationstheorie
Erhalt einer Nachricht (Daten) verringert den Grad der
Unwissenheit beim Empfänger.
„Informationsgehalt“ einer Nachricht X hängt von den
Wahrscheinlichkeiten p(xi) der möglichen
Ausprägungen x1, x2, ... von X ab,
z.B. wenn ich eine von zwei möglichen Nachrichten erwarte
und feststeht, dass die eine sehr viel wahrscheinlicher ist als die
andere, erhalte ich beim Eintreffen der Nachricht weniger
Information als wenn beide Nachrichten gleichwahrscheinlich
sind.
Um Informationsfluss präzise definieren zu können, werden Konzepte der Informationstheorie
verwendet. Dazu wird zunächst der Informationsgehalt einer Nachricht betrachtet, welcher die
Unwissenheit des Empfängers über bestimmte Daten verringert. Grundlage des
Informationsgehalts einer Nachricht sind die Wahrscheinlichkeiten der möglichen
Ausprägungen der Nachricht. Wenn beispielsweise eine von zwei Nachrichten erwartet werden
und die eine sehr viel wahrscheinlicher ist als die andere, erhält man beim Eintreffen der
Nachricht weniger Information als wenn beide Nachrichten gleichwahrscheinlich sind.
7
7.1 Elemente der Informationstheorie
Beispiel:
Würfeln im Nebenzimmer mit 6-seitigem Würfel.
Die Ungewissheit/Unsicherheit vor dem Würfeln ist
groß.
Durch die Nachricht W>3 wird die Unsicherheit
reduziert.
 Der Informationsgehalt der Nachricht ist der
Wert, um den die Unsicherheit reduziert wird.
Bei einem 6-seitigen Würfel ist die Unwissenheit über das nächste Würfelergebnis und damit
der Informationsgehalt des Würfelergebnisses beispielsweise höher, als wenn ich vorher schon
weiß, dass der Würfel eine Zahl größer 3 würfeln wird. Im ersten Fall habe ich 6 mögliche
Ergebnisse, im zweiten Fall nur noch 3 mögliche Ergebnisse.
8
7.1 Elemente der Informationstheorie
Quantifizierung des Informationsgehalts durch den
Begriff
Entropie einer Nachricht X (Shannon 1948):
H ( X ) = ∑ p ( xi ) log 2 (1 / p ( xi ))
Grad der Ungewissheit/Unsicherheit über den Inhalt der
Nachricht.
Die Entropie ist am größten, wenn alle Ausprägungen
xi gleichwahrscheinlich sind.
Um den Informationsgehalt statistisch quantifizieren zu können, hat Shannon den Begriff der
Entropie eingeführt. Die Entropie ist ein Maß für die Unsicherheit über den Inhalt einer
bestimmten Nachricht. Die Entropie ist am größten, wenn alle Ausprägungen der Nachricht
gleichwahrscheinlich sind, da ich mir dann am „unsichersten“ bin, welchen Inhalt die
Nachricht haben wird. Sind die Wahrscheinlichkeiten der Ausprägungen stark unterschiedlich,
bin ich nicht sehr „überrascht“, wenn dass am meisten wahrscheinlichste Ereignis besonders
oft auftritt.
9
7.1 Elemente der Informationstheorie
Bei nicht gleichwahrscheinlichen Nachrichten
geringere Entropie:
p(heute)
= 1/2
p(morgen) = _
p(übermorgen) = _
H(X) = _ log 2 + _ log 4 + _ log 4
= _ + _ + _ = 1,5
Erinnerung: log2(x)= log10(x) / log10(2)
Betrachten wir die Entropie des Beispiels der Folie mit drei möglichen Ausprägungen (heute,
morgen, übermorgen), die eine unterschiedliche Wahrscheinlichkeit besitzen. Für die Entropie
ergibt sich ein Wert von 1,5.
10
7.1 Elemente der Informationstheorie
Zum Vergleich: Entropie bei gleicher Wahrscheinlichkeit
p(heute) = 1/3
p(morgen) = 1/3
p(übermorgen) = 1/3
H(X) = log 3 = 1,58
Betrachten wir nun dasselbe Beispiel, in dem alle Ereignisse gleichwahrscheinlich sind, ergibt
sich eine (leicht) höhere Entropie.
11
7.1 Elemente der Informationstheorie
Beispiel: Entropie eines perfekten Würfels
p(i)= 1/6, also H(X) = log 6 = 2,58
Betrachtung anderer Aussagen,
z.B. Würfelergebnis i < 3, i = 3, i > 3
p(i<3) = 1/3, p(i=3) = 1/6, p(i > 3) = _,
also
H(X)= 1/3 log 3 + 1/6 log 6 + _ log 2 = 1,68
Ein weiteres Beispiel, das zeigt das gleichwahrscheinliche Ereignisse eine höhere Entropie und
damit Unsicherheit ergeben, zeigt diese Folie anhand eines Würfels. Die Entropie eines 6seitigen Würfels, bei dem alle Zahlen gleichwahrscheinlich sind, hat eine Entropie von 2,58.
Betrachtet man nur die Ereignisse: Würfelzahl kleiner 3, Würfelzahl gleich 3 und Würfelzahl
größer 3, so ergeben sich unterschiedliche Wahrscheinlichkeiten für die Einzelereignisse.
Damit sinkt auch die Entropie auf einen Wert von ca. 1,68.
12
7.1 Elemente der Informationstheorie
Bedingte Entropie
Verbleibende Unsicherheit unter der Voraussetzung,
dass bereits gewisse Information vorliegt.
Bedingte Wahrscheinlichkeit eines Ereignisses:
p(F|E) = p(E und F) / p(E)
wobei p(F|E) die Wahrscheinlichkeit von F unter der
Bedingung E ist.
Betrachten wir nun die bedingte Entropie, d.h. die Entropie einer Nachricht unter der
Voraussetzung, dass bereits gewisse Information vorliegt. Die bedingte Entropie baut auf der
bedingten Wahrscheinlichkeit auf. Die bedingte Wahrscheinlichkeit eines Ereignisses F unter
dem bedingenden Ergebnis E ist die Wahrscheinlichkeit des Ereignisses F, falls E schon
eingetreten ist. Die Formel für die bedingte Wahrscheinlichkeit zeigt die Folie: sie ist der
Quotient aus der Wahrscheinlichkeit für das Eintreffen beider Ereignisse und der
Wahrscheinlichkeit für das bedingende Ereignis.
13
7.1 Elemente der Informationstheorie
Beispiel Würfel:
X = {gerade, ungerade}
p(i gerade) = _, p(i ungerade)=1/2
Y = {i<3, i=3, i>3}
p(i<3) = 1/3, p(i=3) = 1/6, p(i > 3) = _,
p( i>3 | i gerade) = p( i>3 und i gerade) / p( i gerade)
= 1/3 / 1/2
= 2/3
Ein Beispiel für eine bedingte Wahrscheinlichkeit zeigt diese Folie. Es zeigt die
Wahrscheinlichkeit, dass man eine Zahl größer 3 würfelt, unter der Annahme, dass die
Würfelzahl gerade ist.
14
7.1 Elemente der Informationstheorie
Bedingte Entropie von X unter der Bedingung Y:
H ( X | Y ) =∑ p ( yk )∑ p ( xi | yk ) log 2 1
k
i
p ( xi | yk )
Mit der bedingten Wahrscheinlichkeit lässt sich dann die Formel für die bedingte Entropie
ausdrücken.
15
7.2 Entropie-basierte Analyse
Entropie zur Bestimmung des Informationsflusses
Gegeben seien Objekte x und y und eine Sequenz von
Kommandos c, die das System von Zustand s in den
Zustand t transformiert.
Es existiert ein Informationsfluss von x nach y,
wenn H(xs|yt) < H(xs|ys).
Falls y im Zustand s nicht existiert, gilt
H(xs|ys) = H(xs).
D.h.: Information fließt von x nach y, wenn aus ys
Informationen über den Wert von x vor der Ausführung
der Kommandos abgeleitet werden kann.
Die bedingte Entropie wird nun zur Bestimmung des Informationsflusses verwendet. Intuitiv
fließt Information von einem Objekt x zu einem Objekt y, wenn die Information in y durch die
Anwendung einer Sequenz von Operationen durch die Information in x beeinflusst wird. Um
dies formal auszudrücken, betrachten wir zunächst eine Sequenz von Kommandos, die das
System vom Zustand s in den Zustand t transformiert. Der Zustand der Variable x im Zustand s
sei xS. Der Zustand der Variable y im Zustand t sei yt, falls y schon im Zustand s existierte,
wird dessen Zustand mit ys bezeichnet. Es fließt durch die Kommandos Information von x
nach y, wenn für die bedingte Entropie H(xs|yt) < H(xs|ys) gilt, d.h. die Unsicherheit über den
Wert von xS ist nach der Ausführung der Kommandos geringer (unter dem Wissen der Werte
für y). Wenn y nicht im Zustand s existieren sollte, so fließt Information, wenn H(xs|ys) =
H(xs). Diese Definition sagt also, dass Information von x nach y fließt, wenn der neue Wert
von y es erlaubt, Informationen über den Wert von x vor der Ausführung der Kommandos
abzuleiten.
16
7.2 Entropie-basierte Analyse
y:=x;
H(xs|yt) = 0, da keine Unwissenheit über den Wert xs
nach dem Kommando besteht.
x:=y+z;
y = {0,...,7} mit gleicher Wahrscheinlichkeit p(yi) = 1/8
z = {1,2,3} mit p(z1)=1/2 und p(z2)=p(z3)=1/4
 H(ys) = H(yt) = 3 und H(zs) = H(zt) = 3/2
H(ys| xs) = H(ys)
 Wenn xt bekannt ist, kann ys nur noch drei mögliche
Werte haben, d.h. H(ys| xt) = log 3 = 1,58
 1,58 = H(ys| xt) < H(ys| xs) = 3
 Informationsfluss von y nach x.
Das Kommando y:=x deckt den Wert von x vor dem Kommando auf. De Wert von x ist nach
Zuweisung an y bekannt und es besteht keinerlei Unwissenheit mehr über den Wert von x (d.h
H(xs|yt) = 0) .
Im zweiten Beispiel sei x:=y+z, wobei y einen wert von 0...7 mit gleicher Wahrscheinlichkeit
annehmen kann. Die Variable z nimmt den Wert 1 mit Wahrscheinlichkeit 0,5 und die Werte 2
und 3 mit Wahrscheinlichkeit 0,25 an. Wenn s der Zustand vor der Ausführung des
Kommandos ist und t der Zustand nachher, so ist H(ys) = H(yt) = 3 und H(zs) = H(zt) = 3/2.
Nachdem der Wert xt bekannt ist, kann ys nur noch drei mögliche Werte gehabt haben, so dass
H(ys| xt) = log 3 = 1,58. Somit fließt Information von y nach x.
17
7.2 Entropie-basierte Analyse
if x = 1 then y:=0
else y:=1;
Die Variablen x und y können die Werte 0 oder 1 annehmen.
Die Variable nimmt ihren Wert gleichwahrscheinlich an, d.h.
H(xs)=1.
Wenn y nach dem Kommando den Wert 0 hat, folgt daraus x=1
(und umgekehrt)  H(xs| yt)= 0.
Also H(xs| yt)= 0 < H(xs| ys)= H(xs)=1.
 Informationsfluss von x nach y.
Die Variablen x und y dieses Beispiels können die Werte 0 oder 1 annehmen. Die Variable x
nimmt gleichwahrscheinlich die Werte 0 oder 1 an, so dass H(xs)=1. Es ist jedoch H(xs| yt)= 0 ,
da ein Wert y=0 impliziert für x den Wert 1, ein Wert y=1 den Wert x=0. Somit fließt
Information von x nach y.
18
7.2 Entropie-basierte Analyse
Explizite Flüsse
– Spezieller Transportbefehl
– Beispiele: x:=y (Programmiersprache), call proc(x)
(Parameterübergabe), send(K,x)
(Prozesskommunikation)
Implizite Flüsse
– Entstehen durch Auswerten von Bedingungen, wie if
then else, while do, ...
– Keine explizite Anweisung y:= f(x)
Bei den Informationsflüssen lassen sich explizite und implizite Flüsse unterscheiden. Ein
expliziter Informationsfluss tritt auf, wenn Information durch einen speziellen Transportbefehl
übermittelt wird. Diese Art von Transportbefehl ist beispielsweise die gezeigte Zuweisung
x:=y,
aber
auch
Prozeduraufrufe
mit
Parameterübergabe
oder
Prozesskommunikationsanweisungen. Im Gegensatz zu expliziten Flüssen, gibt es bei
impliziten Flüssen keine expliziten Anweisungen der Form y:=f(x), wobei f ein Ausdruck über
der Variablen x ist. Implizite Flüsse entstehen vielmehr aufgrund der Flusskontrolle im
Programm, die auf Werten von Variablen abhängt.
19
7.3 Informationsflussmodelle
Basieren auf Sicherheitsklassen (security classes).
Sicherheitsklassen bilden einen Verband (S, <), d.h.
– S ist eine Menge von Sicherheitsklassen,
– < ist eine partielle Ordnung auf S (reflexiv, transitiv,
antisymmetrisch)
– für alle a,b in S existiert stets (eindeutig)
• lub(a,b) kleinste obere Schranke von a,b
• glb(a,b) größte untere Schranke von a,b
In einem Informationsflussmodell werden die zulässigen Wege spezifiziert, entlang denen
Information fließen darf. Zur Spezifikation dieser gültigen Wege benutzen die Modelle
Sicherheitsklassen als Markierungen für Objekte. Das Modell hat dann Regeln, unter welchen
Bedingungen Information zwischen Objekten welcher Sicherheitsklasse fließen darf.
In der Regel bilden die Sicherheitsklassen einen Verband (S,<), d.h. S ist eine Menge von
Sicherheitsklassen und < eine reflexive, antisymmetrische und transitive Relation auf dieser
Menge. Außerdem muss für jedes Paar von Sicherheitsklassen aus S die kleinste obere
Schranke (least upper bound, lub) und die größte untere Schranke (greatest lower bound, glb)
existieren.
20
7.3 Informationsflussmodelle
Die grundlegende Idee ist, dass Information nur in
Richtung „höherer“ Geheimhaltungsklassen fließen darf.
x < y bedeutet, dass Informationsfluss von x
nach y erlaubt ist.
Beispiele:
Sachgebiete A oder B
nicht öffentlich
Sachgebiet A
öffentlich
Sachgebiet B
Sachgebiete A und B
Informationsfluss entlang der Pfeile
Die Idee ist dann, dass x < y angibt, dass Information nur von x nach y fließen darf, aber nicht
entgegengesetzt. Die Folie zeigt zwei Beispiele für Verbände von Sicherheitsklassen.
Beispielsweise darf Information von Objekten mit Markierung öffentlich zu Objekten mit
Markierung nicht öffentlich fließen, aber nicht von nicht öffentlich zu öffentlich. Die Notation
der Pfeile bedeutet, dass das Paar (öffentlich, nicht öffentlich) in der Relation < ist.
21
7.3 Informationsflussmodelle
Besonders im militärischen Bereich ist die
Verwendung streng hierarchischer
Geheimhaltungsklassen üblich (multi-level security)
streng geheim
top secret
geheim
secret
vertraulich
confidential
offen
unclassified
Besonders im militärischen Bereich wird diese lineare Anordnung von Sicherheitsklassen
verwendet.
22
7.3 Informationsflussmodelle
Potenzmenge einer Menge M bildet einen Verband
(2M, <), wobei < die Teilmengenbeziehung ist.
Beispiel: Unternehmen mit Krankheitsdaten (K),
Gehaltsdaten (G) und Beurteilungen (B).
{K,G,B}
{K,G}
{K,B}
{G,B}
{K}
{G}
{B}
Eine weitere Möglichkeit zur Erstellung eines Verbandes für Sicherheitsklassen ist die
Potenzmenge zusammen mit der Teilmengenbeziehung. Nehmen wir an, wir hätten ein
Unternehmen, in dem es Krankheitsdaten (K), Gehaltsdaten (G) und Beurteilungen (B) gibt.
Bilden wir für die Sicherheitsklassen die Potenzmenge der Menge {K, G, B} bekommen wir
den Verband auf der Folie. Alle Teilmengen der Menge {K, G, B} bilden die
Sicherheitsklassen. Zwei Sicherheitsklassen A und B stehen in Relation, wenn A Teilmenge
von B. Es darf dann Information von A nach B fließen. Wenn beispielsweise ein Mitarbeiter
die Sicherheitsklasse {K,G} besitzt, kann er auf Krankheits- und Gehaltsdaten zugreifen.
23
7.3 Informationsflussmodelle
Bedeutung von lub(a,b)=c
Fließt bei einer Operation Information aus zwei
Objekten Oa und Ob in ein Objekt Oc, so gibt
lub(a,b) die Klasse an, der das Objekt Oc
(mindestens) angehören muss.
c
*
a
*
b
a
b
Bedeutung von glb(a,b)=c
Fließt bei einer Operation aus einem Objekt Oc
Information in zwei Objekte Oa und Ob, so gibt
glb(a,b) die Klasse an, der das Objekt Oc
(höchstens) angehören darf.
* c *
Die kleinste obere Schranke (least upper bound, lub) ermittelt für zwei Sicherheitsklassen a
und b die kleinste Sicherheitsklasse, die sowohl größer als a als auch als b ist. Fließt bei einer
Operation Information von a und b in ein Objekt c, so muss c mindestens die Sicherheitsklasse
von lub(a,b) haben, damit kein unerlaubter Informationsfluss entsteht. Würde das Objekt c eine
Klasse kleiner lub(a,b) haben (d.h. c < lub(a,b)), so würde entweder not(a <c) oder not(b<c).
Damit würde Information unerlaubt von a nach c (bzw. von b nach c) fließen.
Die größte untere Schranke (greatest lower bound, glb) ermittelt für zwei Sicherheitsklassen a
und b die größte Sicherheitsklasse, die sowohl kleiner als a als auch kleiner als b ist. Fließt bei
einer Operation aus einem Objekt c Information in Objekte a und b, so muss c höchstens die
Sicherheitsklasse glb(a,b) haben, damit kein unerlaubter Informationsfluss auftritt. Würde
beispielsweise das Objekt c eine Klasse größer glb(a,b) haben, so wäre not(c<a) oder not(c<b).
Damit würde Information unerlaubt von c nach a (bzw. nach b) fließen.
24
7.3 Informationsflussmodelle
Ein Informationsflussmodell I ist ein 6-Tupel I= (S,<,O,
s), wobei
- (S,<) ist ein Verband aus Sicherheitsklassen
- O ist eine Menge von Objekten
- s: O  S weist jedem Objekt seine
Sicherheitsklasse zu
Ein Informationsflussmodell besteht dann aus einem Verband aus Sicherheitsklassen, einer
Menge von Objekten und einer Abbildung, de jedem Objekt seine Sicherheitsklasse zuordnet.
25
7.4 Compiler-basierte Analyse
Statische Analyse eines Programms auf unerlaubte
Informationsflüsse bzgl. einer Informationsflussstrategie.
Spezifikation des Programms umfasst die Sicherheitsstrategie.
Beispiel:
proc sum(x: int class {a};
out: int class {b} );
out := out + x;
mit a < b.
Compiler-basierte Analyse prüft die Informationsflüsse innerhalb eines Programms. Der
Mechanismus bestimmt, ob der Informationsfluss innerhalb eines Programms die in der
Informationsflussstrategie spezifizierten erlaubten Informationsflüsse verletzt. Diese Analyse
ist nicht präzise in dem Sinne, dass Informationsflüsse als unzulässig bzgl. einer
Informationsflussstrategie bewertet werden könnten, obwohl das Programm sicher sind. Es
bleibt jedoch kein unerlaubter Informationsfluss unentdeckt, d.h. unsichere Programme werden
immer gefunden.
Voraussetzung für eine Compiler-basierte Analyse ist die Integration der Sicherheitsklassen in
das Programm. Wir schreiben die Sicherheitsklasse von Variablen in die Variablendeklaration.
Im obigen Beispiel ist a die Sicherheitsklasse der Variablen x und b die Sicherheitsklasse der
Variablen out. Die Sicherheitsklassenhierarchie ist a < b, d.h. Information darf von a nach b
fließen.
26
7.4 Compiler-basierte Analyse
Einfache Fluss-Axiome
Zuweisung y:=f(x1,...,xn)
ist sicher, wenn
lub(s(x1),...,s(xn)) < s(y)
Beispiel:
y:= x1 + x2;
ist sicher wenn lub(s(x1),s(x2)) < s(y)
Wir betrachten auf den folgenden Folien einige einfache Fluss-Axiome für
Programmausdrücke. Zunächst betrachten wir Anweisungen der Form y:=f(x1,...,xn), wobei y
und x1,...,xn Variablen sind und f ist eine Funktion. Information fließt von jedem xi nach y.
Daher ist die Anforderung für einen sicheren Informationsfluss lub(s(x1),...,s(xn)) < s(y), d.h.
die Sicherheitsklassen der xi sind kleiner als die Sicherheitsklasse von y. Betrachten wir das
Beispiel der Folie, so ist diese Zuweisung sicher, wenn lub(s(x1),s(x2)) < s(y).
27
7.4 Compiler-basierte Analyse
Sequenz s1;...sn;
ist sicher, wenn alle si sicher sind
(Transitivität von <)
Beispiel:
x:= y+z;
a:=b*c-x;
Sicher, wenn
lub(s(y),s(z)) < s(x)
lub(s(b),s(c),s(x)) < s(a).
Eine Sequenz von Anweisungen s1;...;sn ist sicher, wenn der Informationsfluss in jedem Teil
si sicher ist. Im Beispiel müssen beide Zuweisungen sicher sein, damit die Sequenz sicher ist.
Für die Sicherheit der Anweisungen gelten dann die Bedingungen der vorigen Folie.
28
7.4 Compiler-basierte Analyse
if f(x1,...,xn) then S1 else S2;
ist sicher, wenn
S1 und S2 sicher sind und
lub(s(x1),...,s(xn)) < glb{s(y)| y ist Ergebnis einer
Zuweisung in S1 oder
S2}
Wenn S2 leer ist (d.h. keine else-Teil), ist S2
trivialerweise sicher und enthält keine Zuweisungen.
Bei einer if-Anweisung wird abhängig von der Auswertung der boolschen Funktion f der
Ausdruck S1 oder S2 ausgeführt. Daher müssen beide sicher sein. Die Auswahl von S1 bzw.
S2 gibt Informationen über die Werte von x1,...,xn, so dass Information von diesen Variabeln
zu jeder Variablen fließt, die in S1 oder S2 ein Ergebnis einer Zuweisung ist. Dies ist nur
erlaubt, wenn die kleinste Sicherheitsklasse dieser Variablen in S1 und S2 größer ist als die
größte Sicherheitsklasse der Variablen x1,...,xn. Im speziellen Fall, dass S2 leer ist, muss nur
S1 sicher sein und die Variablen in S1 betrachtet werden.
29
7.4 Compiler-basierte Analyse
Beispiel:
if x + y < z then a := b
else d:= b * c – x;
Beachte: Information fließt von x,y,z nach a und d!
Sicher, wenn s(a) < s(b) und lub(s(b),s(c),s(x))<s(d)
und lub(x,y,z)<glb(a,d).
Damit die if-Anweisung dieses Beispiels sicher ist, müssen zunächst a:=b; und d:=b*c-x;
sicher sein. Dies ist der Fall, wenn s(a) < s(b) und lub(s(b),s(c),s(x))<s(d). Da der ausgeführte
Zweig der if-Anweisung von den Werten der Variablen x,y und z abhängt, fließt auch
Information von x,y und z nach a und d (den Variablen, die Ergebnis einer Zuweisung sind).
Daher muss ebenfalls lub(x,y,z)<glb(a,d) gelten, damit die if-Anweisung sicher ist.
30
7.4 Compiler-basierte Analyse
while f(x1,...,xn) do S end;
ist sicher, wenn while terminiert,
S sicher ist und
lub(s(x1),...,s(xn))< glb{s(y)| y ist
Ergebnis einer
Zuweisung in S}
Der Ausdruck f(x1,...,xn) in einer while-Schleife ist eine Bedingung, die wie bei if-Ausdrücken
Informationen in den Ausdruck S fließen lässt. Auch die Anzahl der Wiederholungen von S
hängt vom Ausdruck f(x1,...,xn) ab, so dass auch darüber Information nach S fließt. Daher
muss (wie beim if) die kleinste gemeinsame Sicherheitsklasse der Variablen in S größer sein
als die größte Sicherheitsklasse der Variablen x1,...,xn. Wenn die while-Schleife nie terminiert,
werden Ausdrücke nach dem while niemals ausgeführt. Auch in diesem Fall ist Information
von x1,...,xn geflossen. Also erfordert ein flusssicheres Programm Termination. Abschließend
muss auch noch der Ausdruck S sicher sein.
31
7.4 Compiler-basierte Analyse
Beispiel:
while i < n do
a[i] := b[i];
i := i + 1;
end;
Die while-Schleife terminiert.
Die Schleife ist sicher, wenn s(b[i]) < s(a[i]) und
s(i)<s(i) und lub(s(i),s(n)) < glb(s(a[i],s(i)).
Die while-Schleife dieses Programms terminiert, da n eine feste natürliche Zahl ist und i bei
jedem Schleifendurchlauf um eins erhöht wird. Die Anweisungen innerhalb der while-Schleife
sind sicher, wenn s(b[i]) < s(a[i]) und s(i)<s(i). Den Variablen a[i] und i werden Ergebnisse
von Ausdrücken zugewiesen. Daher fließt Information von i und n des boolschen Ausdrucks i
< n in diese Variablen. Daher muss ebenfalls lub(s(i),s(n)) < glb(s(a[i],s(i)) für die Sicherheit
der while-Schleife gelten.
32
7.4 Compiler-basierte Analyse
Programm-Beispiel:
prog(x:int class {x}, y:int class {y},
a:int class {a}, b:int class {b})
{
C: if (x<y)
D: { A: a = x;
B: b = x * y; }
}
Nun wollen wir die Flusssicherheit eines etwas größeren Beispieles nachweisen. Das
Programm hat die Variablen x, y, a und b mit den Sicherheitsklassen x, y, a und b.
33
7.4 Compiler-basierte Analyse
...folgender Fluss-Spezifikation
b
x=a
y
{}
Ist das Programm flusssicher?
Die Folie zeigt die hierarchische Anordnung der Sicherheitsklassen.
34
7.4 Compiler-basierte Analyse
A: s(x)<s(a) x < a, somit ist A sicher
B: lub(s(x),s(y))<s(b)  b < b, somit B sicher
D: sicher, da A und B sicher sind.
C: sicher, wenn lub(s(x),s(y)) < glb(s(a),s(b))
Es ist lub(s(x),s(y)) = b und
glb(s(a),s(b)) = a
 Programm nicht sicher!
Zunächst betrachten wir die Sicherheit des Ausdrucks A: a = x; Die Zuweisung ist sicher,
wenn x < a, d.h. wenn Information von x nach a fließen darf. Nach der
Sicherheitsklassenhierarchie ist dies erlaubt, da x=a. Nun betrachten wir den Ausdruck B: b =
x * y;, welcher sicher ist, wenn lub(s(x),s(y))<s(b). Die kleinste obere Schranke der
Sicherheitsklassen x und y ist b. Da die Sicherheitsklasse von b ebenfalls b ist, ist auch B
sicher. Der Ausdruck D ist sicher, da A und B sicher sind. Als letztes ist der Ausdruck C zu
betrachten. Die if-Anweisung ist sicher, wenn D sicher ist und wenn lub(s(x),s(y)) <
glb(s(a),s(b)). D ist sicher, aber die kleinste obere Schranke von x und y ist b, welche nicht
kleiner als a (die größte untere Schranke von a und b ) ist. Das Programm ist somit nicht
sicher.
35
7.4 Compiler-basierte Analyse
Statische Prüfung ist mühsam.
Positiver Ausgang ist nur hinreichende Bedingung für
Flusssicherheit, d.h. auch bei negativem Ausgang
könnte das Programm sicher sein.
Alternative:
dynamisches Mitführen der Sicherheitsklassen
und dynamische Prüfung.
Nachteil: aufwendig, Probleme mit impliziten
Flüssen
Die statische Prüfung eines Programms ist sehr mühsam und aufwendig. Außerdem bietet die
Analyse nur eine hinreichende Bedingung der Flusssicherheit, d.h. es können auch Programme
als unsicher bewertet werden, die sicher sind. Als Alternative werden daher
Sicherheitsprüfungen dynamisch zur Laufzeit durchgeführt. Dies ist einfach bei expliziten
Flüssen wie Zuweisungen, bei denen die Sicherheitsklassen der Beteiligten Variablen geprüft
werden, aber schwierig für implizite Flüsse (wie bei if- oder while-Ausdrücken).
36
7.4.1 JFlow
JFlow ist eine Erweiterung von Java, um statisch
Informationsflüsse zu prüfen.
JFlow Compiler prüft JFlow-Programm und
übersetzt es in ein Standard Java-Programm.
A.C.Myers. JFlow: Practical Mostly-Static Information
Flow Control. Proc. 26th ACM Symposium of
Programming Languages, 1999
JFlow ist eine Anwendung von Informationsfluss auf die Programmiersprache Java. Bei JFlow
können Java-Elemente mit Sicherheitsklassen verknüpft werden. Der JFlow-Compiler prüft
dann anhand dieser Sicherheitsmerkierungen, ob die Informationsflüsse im Programm sicher
sind. Ist dies der Fall, übersetzt er das um Sicherheitsklassen erweiterte Programm in ein
normales Java-Programm.
37
7.4.1 JFlow
Sicherheitslabel für Variablen
z.B. int {public} x; boolean {secret} b;
Dynamische Sicherheitslabel werden zur Laufzeit ausgewertet,
da sie nicht statisch bekannt sind.
z.B. int {*lb} x;
Principals für Variablen (nur diese dürfen zugreifen)
z.B. class Account {
final principal customer;
String {customer:} name;
float {customer:} balance}
Weitere Sicherheitslabel für Methoden und Klassen.
Diese Folie zeigt einige Beispiele, wie Sicherheitsklassen bzw. Sicherheitslabel in JFlow an
Java-Elemente gehangen werden können. Es können Variablen, Methoden und Klassen ein
Sicherheitslabel tragen.
38
7.5 Zugriffsschutz + Flusskontrolle
Modelle, die Zugriffsschutz mit Flusskontrolle
kombinieren.
Chinese-Wall-Modell (Brewer/Nash 1989)
Bell-LaPadula-Modell (Bell/LaPadula 1975)
Im folgenden sollen zwei Modelle vorgestellt werden, die Informationsfluss und
Zugriffskontrolle kombinieren. Dabei handelt es sich um das Chinese-Wall-Modell und das
Bell-LaPadula-Modell.
39
7.5.1 Chinese-Wall-Modell
Schutzziel:
Verhindern unzulässiger Informationsflüsse
zwischen konkurrierenden Unternehmen (z.B.
Bankwesen).
Prinzip:
Rechtevergabe berücksichtigt bereits erfolgte
Zugriffe, d.h. ein Zugriff verändert die Zugriffsrechte.
Das Chinese-Wall-Modell wird eingesetzt, um die unzulässige Ausnutzung von
Mitarbeiterwissen in konkurrierenden Unternehmen zu verhindern. Es soll beispielsweise
verhindern, dass ein Berater eines Unternehmens Informationen über das Unternehmen benutzt,
um einem Konkurrenz-Unternehmen Ratschläge zu erteilen. Die Idee des Chinese-WallModells ist es, die Zugriffsmöglichkeiten eines Subjekts durch die Zugriffe, die es in der
Vergangenheit durchführte, zu beschränken.
40
7.5.1 Chinese-Wall-Modell
Liegt Zugriffsschutzmatrixmodell zugrunde:
Zugriffsrechte R = {read, write, execute}
Subjekte S
agierende Personen im Unternehmen (z.B. Berater)
Objekte O
Werden als Baum mit drei Ebenen strukturiert.
Konfliktklassen K
konkurrierende Unternehmen bilden eine Konfliktklasse
Dem Chinese-Wall-Modell liegt eine Zugriffsschutzmatrix mit den Rechten read, write und
execute zugrunde. Die Menge der Subjekte ist die Menge der Mitarbeiter des Unternehmens,
die Objekte sind die in den Unternehmen zu schützenden Objekte. Die Objekte werden in
einem Baum angeordnet, in dem auch die Konfliktklassen definiert werden. Eine
Konfliktklasse enthält eine Menge konkurrierender Unternehmen.
41
7.5.1 Chinese-Wall-Modell
Objektbaum hat 3 Ebenen
1. Ebene: Konfliktklassen
2. Ebene: Unternehmen
3. Ebene (Blätter): Objekte, die in den
unterschiedlichen Unternehmen verwaltet
werden.
Der Objektbaum besitzt drei Ebenen: In der ersten sind die Konfliktklassen spezifiziert. Deren
Nachfolger in der zweiten Ebene sind die Unternehmen, die in Konflikt stehen. An den
Unternehmen in der dritten Ebene hängen dann die Objekte der Unternehmen.
42
7.5.1 Chinese-Wall-Modell
Beispiel: Objektbaum
Mineralöl
Aral
o1 o2
Bank
Konfliktklassen
Shell
Dresdner
Deutsche
o3 o4 o5
o6 o7 o8
o9
Unternehmen
Objekte
Die Folie zeigt ein Beispiel eines Objektbaumes. Es gibt vier Unternehmen Aral, Shell,
Dresdner Bank und Deutsche Bank. Unter den Unternehmen hängen die zu den Unternehmen
gehörenden Objekte. Auf der höchsten Ebene stehen die Konfliktklassen. Im Beispiel haben
wir eine Konfliktklasse Mineralöl, in der die Unternehmen Aral und Shell sind, und die
Konfliktklasse Bank, in der die Dresdner und Deutsche Bank sind.
43
7.5.1 Chinese-Wall-Modell
Sicherheitsmarke eines Objekts für das Unternehmen
und die Konfliktklasse:
Objekt o = (x(o), y(o)) mit x: O K und y:O U, wobei
U die Menge der Unternehmen.
Öffentlich zugängliche Information bekommt eine
spezielle Markierung y0 und eine Konfliktklasse x0={y0}.
Die Sicherheitsmarke eines Objektes bilden das zugehörige Unternehmen und die
Konfliktklasse, zu dem das Unternehmen gehört. Im vorigen Beispiel währe die
Sicherheitsmarke für das Objekt o1 das Paar (Aral, Mineralöl), für das Objekt o9 das Paar
(Deutsche, Bank). Frei verfügbare Objekte ohne Sicherheitsbeschränkungen bekommen eine
spezielle Sicherheitsmarke (x0, y0).
44
7.5.1 Chinese-Wall-Modell
Zugriffsschutzentscheidung gemäß
Schutzmatrix M +
Sicherheitsmarken +
Zugiffshistorie N
Zugriffshistorie ist eine Matrix N: S x O 2R, wobei
N(s,o) die Menge der bisher benutzten Rechte ist, die
s zum Zugriff auf o benutzte.
Die Zugriffsschutzentscheidung erfolgt anhand der Schutzmatrix, den im Objektbaum
definierten Sicherheitsmarken der Objekte und einer Zugriffshistorienmatrix, die die von den
Subjekten ausgeführten Zugriffe verwaltet. Ein Eintrag N(s,o) in der Matrix N für die
Zugriffshistorie für ein Subjekt s und ein Objekt o gibt die Menge der Rechte an, die das
Subjekt bisher zum Zugriff auf das Objekt o benutzt hat.
45
7.5.1 Chinese-Wall-Modell
Zugriff auf Objekte werden durch zwei systembestimmte
Regeln beschränkt.
Regel 1:
Ein read- bzw. execute-Zugriff auf ein Objekt o für ein
Subjekt s ist zulässig, wenn gilt:
1.) read bzw. execute in M(s,o)
2.) f.a. Objekte o‘: Wenn N(s,o‘) nicht leer, dann ist
y(o‘)=y(o), d.h. gleiches Unternehmen, oder
x(o) = x(o‘), d.h. kein Konflikt,
oder y(o‘)=y0.
Der Zugriff auf ein Objekt wird durch zwei systembestimmte Regeln beschränkt. Die LeseRegel (Regel 1) reglementiert den Lese-Zugriff, während die Schreib-Regel (Regel 2)
Beschränkungen für modifizierende Zugriffe festlegt.
Regel 1 besagt, das ein Subjekt s nur dann einen read- bzw. execute-Zugriff auf ein Objekt o
ausführen darf, wenn s des entsprechende Recht in der Schutzmatrix M hat, s bisher noch auf
kein Objekt o´ zugegriffen hat, das zu einem anderen Unternehmen gehört, aber die gleiche
Konfliktklasse wie o hat. Das Subjekt s darf immer auf öffenltich zugängliche Objekte
zugreifen (y(o‘)=y0).
46
7.5.1 Chinese-Wall-Modell
Beispiel: Subjekt s1 hat auf o2 zugegriffen.
Mineralöl
Aral
o1 o2
Bank
Shell
Dresdner
Deutsche
o3 o4 o5
o6 o7 o8
o9
Durch Regel 1 wird nach dem Zugriff auf ein Objekt o durch ein Subjekt s eine Mauer um alle
diejenigen Objekte o‘ errichtet, die zu anderen Unternehmen derselben Konfliktklasse gehören.
Nehmen wir an, Subjekt s1 greift auf o2 zu, dann verbietet Regel 1 den Zugriff auf alle
Objekte von Shell, da Objekt o1 zum Unternehmen Aral gehört, welches in Konflikt mit dem
Unternehmen Shell steht. Auf die Objekte der Banken kann s1 jedoch noch zugreifen, da Aral
zu keiner Bank in Konflikt steht.
47
7.5.1 Chinese-Wall-Modell
Beispiel: Subjekt s1 hat auf o7 zugegriffen.
Mineralöl
Aral
o1 o2
Bank
Shell
Dresdner
Deutsche
o3 o4 o5
o6 o7 o8
o9
Weiterer Mauerbau nach dem Zugriff von s1 auf Objekt o7.
48
7.5.1 Chinese-Wall-Modell
Regel 1 verhindert noch keine unerwünschten
Informationsflüsse.
Mineralöl
Aral
o1 o2
s1 1:read
Bank
Shell
Dresdner
Deutsche
o3 o4 o5
o6 o7 o8
o9
2:write
3:read
4:write
s2
Informationsfluss von o2 nach o5 !
Regel ist jedoch nicht ausreichend, um unerlaubte Informationsflüsse zu verbieten. Falls
beispielsweise Subjekt s1 lesend auf Objekt o2 und danach schreibend auf Objekt o7 zugreift,
kann Subjekt s2 die Information in o7 lesen und in Objekt o5 schreiben. Dadurch gelangt
Information von o2 nach o5, was nicht erlaubt ist, da die Unternehmen Aral und Shell in
Konflikt stehen.
49
7.5.1 Chinese-Wall-Modell
Regel 2:
Ein write-Zugriff auf ein Objekt o durch ein Subjekt
s ist zulässig, genau dann wenn:
1.) write in M(s,o) und
2.) f.a. Objekte o‘: Wenn read in N(s,o‘), dann
y(o‘)=y(o), d.h. gleiches Unternehmen, oder
y(o‘)=y0.
Regel 2 verhindert diese Art von Informationsflüssen. Die Regel legt fest, dass ein writeZugriff durch ein Subjekt s auf ein Objekt o zulässig ist, wenn s das write-Recht in der
Schutzmatrix M besitzt und s nur read- bzw. execute-Zugriffe auf solche Objekt o‘ hatte, die
entweder zum gleichen Unternehmen wie o gehören oder nur frei zugängliche Informationen
beinhalten.
50
7.5.2 Bell-LaPadula-Modell
Liegt dynamisches Zugriffsschutzmatrixmodell zugrunde:
Rechte = {read-only, append, execute, read-write, control}
Sicherheitsklassen (S, <) (vgl. 7.3)
Objekten und Subjekten wird eine Sicherheitsklasse zugeordnet.
bei Objekten: Einstufung (classification)
bei Subjekten: Ermächtigung (clearance) ist die maximale
Sicherheitsstufe des Subjekts.
Dem Bell-LaPadula-Modell liegt ein dynamisches Zugriffsschutzmatrixmodell mit folgenden
Rechten zugrunde: read-only erlaubt einen Lese-Zugriff, append berechtigt Daten an
existierende Objekte anzuhängen, das read-write-Recht erlaubt den Lese- und Schreibzugriff
und das control-Recht erlaubt die Rechteweitergabe bzw. –rücknahme. Das execute-Rechte
berechtigt zur Ausführung von Programmen. Neben der Zugriffsschutzmatrix gibt es
Sicherheitsklassen mit einer partiellen Ordnung <, um den Objekten und Subjekten
unterschiedliche Vertraulichkeitsstufen zuzuordnen. Die Sicherheitsklasse eines Subjekts
(Ermächtigung, clearance) ist die maximale Sicherheitsstufe, die das Subjekt einnehmen darf.
Bei der Anmeldung gibt das Subjekt seine aktuelle Ermächtigung an.
51
7.5.2 Bell-LaPadula-Modell
Zugriff wird durch zwei systembestimmte Regeln
beschränkt.
Simple Security Property:
Ein Read- oder Execute-Zugriff auf ein Objekt o
durch ein Subjekt s ist zulässig, wenn
1.) read- bzw. execute-Recht in M(s,o)
2.) sc(s) > sc(o)
Der Zugriff auf Objekte wird durch die Simple-Security- und die *-Eigenschaft beschränkt.
Die Simple-Security-Regel besagt, dass ein Lese oder Execute-Zugriff auf ein Objekt o durch
ein Subjekt s nur dann zulässig ist, wenn s das entsprechende Recht in der
Zugriffsschutzmatrix M besitzt und die Objektsicherheitsklasse kleiner oder gleich der
Sicherheitsklasse des Subjekts ist.
52
7.5.2 Bell-LaPadula-Modell
*-Eigenschaft für den Schreib-Zugriff
Ein Append-Zugriff auf ein Objekt o durch ein Subjekt
s ist zulässig, wenn
1.) append-Recht in M(s,o)
2.) sc(s) < sc(o)
Ein Read-Write-Zugriff auf ein Objekt o durch ein
Subjekt s ist zulässig, wenn
1.) read-write-Recht in M(s,o)
2.) sc(s) = sc(o)
Die *-Eigenschaft besagt, dass eine append-Zugriff auf ein Objekt o durch ein Subjekt s nur
zulässig ist, wenn die Sicherheitsklasse des Objekts mindestens so hoch ist, wie die Klasse des
Subjekts. Ein Lese-Schreib-Zugriff auf ein Objekt o ist nur zulässig, wenn die
Objektsicherheitsklasse gleich der Klasse des Subjekts ist.
Die beiden Simple-Security und die *-Eigenschaft-Regel gewährleisten, das Information
höchstens von unten nach oben entlang der partiellen Ordnung < oder innerhalb einer
Sicherheitsklasse fließen kann.
53
7.5.2 Bell-LaPadula-Modell
streng geheim
Doc1
append
geheim
vertraulich
read-write
Doc2
Doc3
S1
append
read
Doc4
append
read-write
unklassifiziert
Doc5 read,
execute
S2
zulässiger
Informationsfluss
Die Folie zeigt ein Beispiel für linear angeordnete Sicherheitsklassen unklassifiziert < geheim
< vertraulich < streng geheim. Dokumente und Subjekte sind dieses Sicherheitsklassen
zugeordnet. Es sind erlaubte und unerlaubte Zugriffe dargestellt.
54
7.5.2 Bell-LaPadula-Modell
Das Modell ist sehr starr, da Informationen nicht dynamisch
eingestuft werden können.
Daher in der Praxis
1. Ermächtigung für Subjekte ist nicht fest zugeordnet:
- aktuelle Ermächtigung kann kleiner sein als maximale
Ermächtigung
- Benutzer wählt aktuelle Ermächtigung beim Einloggen
2. Vertrauenswürdige Benutzer haben eine Sonderrolle und
können sich über die Regeln hinwegsetzen.
Beispiel-System: UNIX System V/MLS (1989)
Um das Bell-LaPadula-Modell flexibler zu gestalten, kann man vertrauenswürdige Benutzer
bzw. Prozesse einführen, bei denen davon ausgegangen wird, dass sie keine Aktionen
durchführen, die die Sicherheitseigenschaften verletzen. Sie dürfen sich daher über die Regeln
hinwegsetzen. Wie schon erwähnt, können Benutzer beim Anmelden auch eine geringere
Ermächtigung wählen, als ihnen maximal zusteht.
55
Herunterladen