6.4 Zugriffsschutz in Datenbanken Relationale Datenbank besteht aus einer Menge von Tabellen (Relationen). Tabellen werden über Referenzen verbunden. Tabellen werden mengentheoretisch verknüpft und verarbeitet. Datenbank-Schema beschreibt die Tabellen. Zeilen der Tabelle werden als Tupel, die Spalten als Attribute bezeichnet. Wir beschäftigen uns nun mit Zugriffsschutzmechanismen in relationalen Datenbanken. Eine relationale Datenbank besteht aus einer Menge von Tabellen (Relationen), die durch Referenzen verknüpft sind. Die in den Tabellen gespeicherten Daten werden durch Operatoren mengenorientiert verknüpft und verarbeitet. Ein Datenbank-Schema beschreibt eine Tabelle, eine Instanz eines Schemas ist dann eine spezielle Ausprägung, d.h. Belegung der Tabelle mit Daten. Eine Zeile in einer Tabelle wird als Tupel bezeichnet, die Spalten als Attribute. 1 6.4 Zugriffsschutz in Datenbanken Primärschlüssel Beispiel: Signatur Bücher ISBN30 ISBN32 Tupel Autor Titel Grass Heinz BenutzerNr Name Blechtrommel Benutzer Kochrezepte Adresse 100 Fritz Berlin 200 Anna Hamburg ISBN40 Attribute Ausleihe Buch Leser ISBN32 200 enthält Fremdschlüssel Der Primärschlüssel identifiziert die Tupel in der Tabelle eindeutig. Fremdschlüssel realisieren Verweise zwischen Tupeln unterschiedlicher Tabellen. 2 6.4 Zugriffsschutz in Datenbanken SQL ist Anfragesprache, die die Definition, Anfrage und Änderung einer Datenbank ermöglicht. Schemadefinition: create table Bücher (Signatur varchar(12) not null, Autor varchar(15), Titel varchar(30) not null); Einfügen von Tupeln: insert into Bücher values (`ISBN32`, `Heinz`, `Kochrezepte`); SQL ist eine deklarative Anfragesprache, bei der der Benutzer angibt, welche Daten ihn oder sie interessieren. Eine neue Tabelle wird mit dem create table Befehl erzeugt. Um eine Tabelle mit Daten zu füllen, wird der Befehl insert verwendet. 3 6.4 Zugriffsschutz in Datenbanken Einfache SQL-Anfragen: liefert Menge von Paaren (Signatur, Titel) vom Autor Grass select Signatur, Titel from Bücher where Autor = 'Grass'; liefert Menge von Tripeln select * from Benutzer where Name = ‚Fritz'; Anfragen können mit dem select Befehl gestellt werden. Beispiele zeigt die Folie. 4 6.4 Zugriffsschutz in Datenbanken Anfragen über mehrere Relationen select Titel from Bücher, Ausleihe, Benutzer where Name = ‚Anna' and BenutzerNr = Leser and Signatur = Buch; 5 6.4 Zugriffsschutz in Datenbanken Sichten (views) sind virtuelle Tabellen die bei jeder Verwendung ad-hoc aus den realen Tabellen generiert werden. create view Präferenzen(Name, Titel) as select Name, Titel from Bücher, Ausleihe, Benutzer where Benutzer = Leser and Signatur = Buch; ∨ select Titel from Präferenzen where Name = ‚Anna'; Sichten bieten virtuelle Tabellen an, die nur einen Ausschnitt des gesamten Modells zeigen. Für virtuelle Tabellen werden keine neuen Tabellen angelegt, sondern sie werden bei jeder Verwendung neu berechnet. 6 6.4 Zugriffsschutz in Datenbanken Formulierung von Schutzstrategien in SQL Zugangskontrolle meist über Passwörter. Autorisierung erfolgt über die Kommandos grant und revoke zum Zuweisen bzw. Entziehen von Privilegien. Privilegien: – Rechte, Typen von SQL Statements auf Daten auszuführen (z.B. SELCET, INSERT, DELETE etc.) – Werden Benutzern und Rollen zugeordnet. – Erzeuger hat alle Privilegien auf den Daten. Die Zugangskontrolle bei Datenbanken erfolgt meistens über Passwörter. Die Passwörter werden üblicherweise bei der Einrichtung der Benutzererkennung verschlüsselt gespeichert. In SQL existiert ein Befehl zur Vergabe von Privilegien (grant) und einer zum Entzug von Privilegien (revoke). Privilegien sind Rechte, Typen von SQL Statements auf Daten auszuführen. So kann einem Benutzer beispielsweise das SELECT-Kommando auf einer Tabelle gewährt oder das INSERT-Kommando auf einer View entzogen werden. Die Privilegien können direkt an Benutzer, aber auch an Rollen vergeben werden. In diesem Fall haben dann alle Mitglieder einer Rolle die der Rolle zugewiesenen Privilegien. Der Erzeuger von Daten hat alle Privilegien auf den Daten. 7 6.4 Zugriffsschutz in Datenbanken GRANT-Kommando zum Zuweisen von Privilegien. GRANT <privileges> ON <object> TO [<users>|<role>] [WITH GRANT OPTION] GRANT OPTION: Recht, Privilegien an andere Benutzer weiterzureichen. Nach dem GRANT-Kommando hat der <user> das <privilege> auf dem <object> (Zugriffsmatrix) Das Grant-Kommando weist ein Privileg (z.B. SELECT, UPDATE) auf einem Objekt (z.B. eine Tabelle, Sicht) einem Benutzer oder einer Rolle zu. Betrachtet man die Zugriffsschutzmatrix als unterliegendes Modell, bewirkt das Grant-Kommando das Zufügen des Privilegs in die Matrix in der Spalte des Objekts und der Zeile des Benutzers bzw. der Rolle. Wird die GRANT OPTION verwendet, so darf der Benutzer das zugewiesene Privileg ebenfalls anderen Benutzern gewähren. 8 6.4 Zugriffsschutz in Datenbanken Beispiele: GRANT INSERT, SELECT ON Movie TO Klaus Klaus darf anfragen an die Tabelle Movie stellen und neue Tupel zufügen. GRANT DELETE ON Movie TO Anna WITH GRANT OPTION Anna kann Tupel der Tabelle Movie löschen und andere Benutzer ebenfalls dazu autorisieren. GRANT UPDATE (price_Day) ON Movie TO movie_staff Alle Mitglieder der Rolle movie_staff können das Attribut price_Day (und nur dieses) von Tupeln der Tabelle Movie ändern. Diese Folie zeigt einige Beispiele für das Grant-Kommando. 9 6.4 Zugriffsschutz in Datenbanken Revoke-Kommando zum Entziehen von Privilegien. REVOKE <privileges> ON <object> FROM [<users>|<role>] RESTRICT RESTRICT: entziehe das Privileg nur, wenn das Privileg nicht von einem der <users> an andere weitergereicht wurde. Wird ein Privileg von mehreren Benutzern gegeben, muss das Privileg von allen diesen Benutzern entzogen werden, um das Privileg zu verlieren. Mit dem Revoke-Kommando lassen sich einem Benutzer oder einer Rolle Privilegien wieder entziehen. Das Schlüsselwort Restrict spezifiziert, dass Privilegien einem Benutzer jedoch nicht entzogen werden können, wenn dieser das Privileg schon weitergegeben hat, da dann auch allen diesen Benutzen das Privileg entzogen werden müsste. Ein solches transitives Entziehen des Privilegs ist mit diesem einfachen Revoke-Kommando jedoch nicht möglich. Außerdem wird einem Benutzer das Privileg durch ein Revoke-Kommando nicht entzogen, wenn dem Benutzer das Privileg noch von anderen Benutzern gewährt wurde. Um ein Privileg zu verlieren, müssen also alle Benutzer, die dieses Privileg gewährten, ein Revoke ausführen. 10 6.4 Zugriffsschutz in Datenbanken Beispiel 1: Owner: GRANT Update ON Movie TO Klaus; Owner: GRANT Update ON Movie TO Anna; Owner: REVOKE Update ON Movie FROM Klaus RESTRICT; Owner und Anna haben das Privilege Update Klaus hat das Privileg Update nicht mehr In diesem Beispiel wird Klaus das Update-Privileg auf die Tabelle Movie vom Owner entzogen. 11 6.4 Zugriffsschutz in Datenbanken Beispiel 2: Owner: Klaus: GRANT Update ON Movie TO Klaus WITH GRANT OPTION; GRANT Update ON Movie TO Anna; Owner: REVOKE Update ON Movie FROM Klaus RESTRICT; Revoke hat keinen Effekt: Owner, Anna und Klaus haben das Privileg Update. In diesem Beispiel hat das Revoke-Kommando keinen Effekt auf die Privileg-Zuordnung. Klaus kann das Update-Privileg nicht entzogen werden, da Klaus das Update-Privileg schon an Anna weitergegeben hat. 12 6.4 Zugriffsschutz in Datenbanken Revoke-Kommando zum transitiven Entziehen von Privilegien. REVOKE [GRANT OPTION FOR] <privileges> ON <object> FROM <users> {RESTRICT | CASCADE} CASCADE: Entziehe das Recht auch allen Benutzern, denen das Privileg von diesen <users> gegeben wurde. RESTRICT: Entziehe das Privileg nur, wenn das Privileg nicht von einem der <users> an andere weitergereicht wurde. Es gibt auch eine Variante des Revoke-Kommandos zum transitiven Entziehen von Privilegien. Dies wird durch das Schlüsselwort Cascade spezifiziert, bei dem dann auch allen Benutzern das Privileg entzogen wird, die das Privileg von dem Benutzer bekamen, auf dem das Revoke-Kommando aufgerufen wird. 13 6.4 Zugriffsschutz in Datenbanken GRANT OPTION FOR: Entziehe das Recht zum Weiterreichen des Privilegs an andere Benutzer. Außerdem kann das Recht zum Weiterreichen von Privilegien einem Benutzer wieder entzogen werden. Dies geschieht mit dem Ausdruck GRANT OPTION FOR. 14 6.4 Zugriffsschutz in Datenbanken Beispiel 1: Owner: Klaus: Owner: GRANT Update ON Movie TO Klaus WITH GRANT OPTION; GRANT Update ON Movie TO Anna; REVOKE Update ON Movie FROM Klaus CASCADE; Owner hat das Privileg Update. Anna und Klaus wurde das Privileg entzogen. In diesem Beispiel hat das Entziehen des Update-Privilegs vom Benutzer Klaus auch den Entzug des Privilegs vom Benutzer Anna zur Folge, da Anna das Privileg von Klaus gewährt wurde. Da Klaus dieses Privileg nicht mehr hat, darf es somit auch Anna nicht mehr von ihm haben. 15 6.4 Zugriffsschutz in Datenbanken Beispiel 2: Owner: Klaus: Owner: GRANT Update ON Movie TO Klaus WITH GRANT OPTION; GRANT Update ON Movie TO Anna; REVOKE GRANT OPTION FOR Update ON Movie FROM Klaus CASCADE; Owner und Klaus haben das Privileg Update. Anna wurde das Privileg Update entzogen. Klaus wurde das GRANT-Recht entzogen. In diesem Beispiel wird Klaus das Recht zum Weiterreichen des Update-Privilegs entzogen. Da das Revoke-Kommando mit der Option CASCADE aufgerufen wurde, muss das Update-Privileg auch allen Benutzern entzogen werden, die das Privileg von Klaus gewährt bekamen. Da Anna das UpdatePrivileg von Klaus gewährt wurde, muss Anna das Privileg somit entzogen werden. Klaus selbst hat noch das Update-Privileg, da der Owner nur das Recht zum Weiterreichen des Privilegs entzogen hat, nicht das Privileg selbst. 16 6.4 Zugriffsschutz in Datenbanken Beispiel 3: Owner: Owner: Klaus: Owner: GRANT Update ON Movie TO Klaus WITH GRANT OPTION; GRANT Update ON Movie TO Anna; GRANT Update ON Movie TO Anna; REVOKE GRANT OPTION FOR Update ON Movie FROM Klaus CASCADE; Owner, Klaus und Anna haben das Update Privileg. Klaus hat das GRANT-Privileg nicht mehr. In diesem Beispiel wird Klaus wieder das Recht zum Weiterreichen des Update-Privilegs vom Owner entzogen. Da Klaus das Privileg an Anna weitergereicht hat, müsste es demnach auch Anna entzogen werden. Da Anna das Update-Privileg jedoch auch vom Owner selbst gewährt wurde, behält sie das Privileg. 17 6.4 Zugriffsschutz in Datenbanken Explizite Verwaltung der Zugriffsrechte mit GRANT und REVOKE ist für große Systeme aufwendig. Implizite Autorisierung für Subjekte und Operationen durch Anordnung in Hierarchien. Rollenhierarchie: Rolle A Rolle B Rolle C Rolle D Rolle B und C haben implizit die Privilegien von D. Rolle A hat implizit die Privilegien von Rolle B und C (und damit D). Die Grant- und Revoke-Kommandos geben die Möglichkeit, explizit Zugriffe auf Daten zu erlauben. Existieren viele Datenobjekte, wird die Menge der Autorisierungsregeln komplex und schwer verwaltbar. Daher existiert eine implizite Autorisierung. Bei dieser werden Subjekte bzw. Operationen hierarchisch angeordnet. Eine Autorisierung auf einer bestimmten Stufe der Hierarchie bewirkt, dass implizit Autorisierungen auf anderen Hierarchiestufen gelten. Für eine implizite Autorisierung von Subjekten werden Rollenhierarchien eingeführt. Eine Rolle hat dann implizit alle Privilegien der in der Hierarchie unter der Rolle liegenden Rollen. 18 6.4 Zugriffsschutz in Datenbanken Operationshierarchie: UPDATE-Privileg beinhaltet SELECT- und DELETE-Privileg. UPDATE SELECT DELETE Analog zu Rollenhierarchien können Operationshierarchien festgelegt werden. Bei der Hierarchie der Folie beinhaltet beispielsweise ein Privileg zum Update auch die Privilegien Select und Delete. 19 6.4.1 SQL Injection Einschleusen eigener Befehle in die SQL-Datenbank. Beispiel: Ein häufiger Angriff auf relationale Datenbanken ist SQL-Injection. SQL-Injection bezeichnet das Einschleusen von eigenen Befehlen in eine SQL-Datenbank. Als Beispiel betrachten wir eine WebSchnittstelle, bei der man sich mit seinem Benutzernamen und seinem Passwort anmelden muss. 20 6.4.1 SQL Injection Code, der den Login durchführt: <% @ Language=VBScript %> <% ... If Request.ServerVariables("CONTENT_LENGTH") > 0 Then strUsername = Trim(Request.Form("UName")) strPassword = Trim(Request.Form("UPwd")) Set rs = Server.CreateObject("ADODB.Recordset") rs.Open "select * from users where UserName='" & strUsername &_ "' AND UserPassword='" & strPassword & "'" ... End If %> Das dahinterliegende Skript konstruiert aus den Eingaben für das Passwort und den Benutzernamen eine SQL-Anfrage. 21 6.4.1 SQL Injection SQL String, wenn sich der Administrator mit admin / admin einloggt: select * from users where UserName='admin' AND UserPassword='admin' SQL String, wenn man sich mit ' OR '1'='1 und ' OR '1'='1 einloggt: select * from users where UserName='' OR '1'='1' AND UserPassword='' OR '1'='1' Gibt man nun für Benutzername und Passwort den String „admin“ ein, so ergibt sich die erwartete SQL-Anfrage, bei der der UserName und das UserPassword auf admin geprüft werden. Gibt man jedoch für Benutzername und Passwort folgende Kombination ein: ' OR '1'='1 und ' OR '1'='1, so ergibt sich eine SQL-Anfrage, deren where-Bedingung immer erfüllt ist und womit ohne das gültige Passwort auf Daten zugegriffen werden kann. 22 6.4.1 SQL Injection Weitere Angriffe sind möglich, um über Fehlermeldungen Informationen über das Datenbank-Schema zu erlangen. Problem bei SQL-Injection: Keine Überprüfung der Eingaben auf Quotes (‘) Gegenmaßnahme: Validieren der SQL-Statements auf ihre Gültigkeit. Das grundlegende Problem bei SQL-Injection ist die fehlende Filterung der Eingaben auf mögliche Quotes. Eine Gegenmaßnahme gegen SQL-Injection Angriffe liegt daher in der Validierung der SQLAnfragen, bevor die SQL-Anfrage auf die Datenbank angewendet wird. 23 6.5 XACML XACML = eXtensible Access Control Markup Language XML-basierter Standard zur Beschreibung von Zugriffsschutzpolitiken. Universelle Sprache für beliebige Werkzeige und Umgebungen (Interoperabilität). OASIS Spezifikation 1.1 (7.8.03) Existierende Implementierungen: Parthenon Computing http://www.parthenoncomputing.com SUN http://sunxacml.sourceforge.net Lagash Systems: XACML.NET: http://mvpos.sourceforge.net/ Die eXtensible Access Control Markup Language (XACML) ist ein XML-basierter Standard der OASIS zur Beschreibung von Zugriffsschutzstrategien. Die XACML stellt eine universelle Sprache für Zugriffsschutzstrategien zur Verfügung, mit der Strategien für eine Vielzahl von Werkzeugen und Umgebungen beschrieben werden können. 24 6.5 XACML Organization for the Advancement of Structured Information Standards (OASIS) 1993: SGML Open • Konsortium zur Entwicklung von Interoperabilitäts-Richtlinien für Produkte, die die Standard Generalized Markup Language (SGML) unterstützen. 1998: OASIS • Standards für Sicherheit (PKI, XACML), Web services, elektronisches Veröffentlichen, Interoperabilität in und zwischen elektronischen Marktplätzen etc. http://www.oasis-open.org Die OASIS (Organization for the Advancement of Structured Information Standards) ist ein Konsortium, dass die Entwicklung weltweiter Standards für E-Business Anwendungen zum Ziel hat. Diese Standards betreffen Sicherheit, Web Services, elektronisches Veröffentlichen, Interoperabilität zwischen elektronischen Marktplätzen etc. Die Standards sollen helfen, dass Produkte verschiedener Hersteller miteinander interagieren können. OASIS ist aus der SGML Open entstanden, die sich mit der Entwicklung von Interoperabilitäts-Richtlinien bzgl. der Standard Generalized Markup Language (SGML) befasste. 25 6.5 XACML XACML-Komponenten Policy Administration Point (PAP) Erstellt die Sicherheitsstrategie (security policy) und speichert diese in einem Repository. Policy Enforcement Point (PEP) Setzt dien Zugriffsschutz durch. Policy Information Point (PIP) Hält Informationen bereit, die zur Auswertung der Politik bzgl. einer Anfrage benutzt werden können. Policy Decision Point (PDP) Wertet die Politiken aus und bestimmt, ob der Zugriff der Anfrage erlaubt oder verboten ist. Die Folie zeigt und beschreibt kurz die wichtigsten Komponenten im XACML-Modell. 26 6.5 XACML Ablauf einer Zugriffsschutzentscheidung für den Zugriff eines Subjekts auf eine Ressource: 1. PAPs schreiben Politiken und machen diese für den PDP verfügbar. 2. Das Subjekt (Access Requester) sendet eine Anfrage an den PEP. 3. Der PEP sendet die Anfrage an den Context Handler im Anfrage-Format weiter. Der PEP kann weitere Information hinzufügen (über Subjekt, Ressource oder Aktion). 4. Der Context Handler erstellt eine XACML-Anfrage, möglicherweise mittels weiterer Informationen vom PIP. Der Context Handler schickt die XACML-Anfrage an den PDP. Möchte ein Subjekt auf eine Ressource mittels einer bestimmten Aktion zugreifen, wird mittels des XACML-Modells der Zugriff entschieden. Der Ablauf dieser Zugriffsschutzentscheidung ist wie folgt. 1. Zunächst müssen PAPs Politiken schreiben, die sie dem PDP verfügbar machen. 2. Der Access Requester sendet eine Anfrage (z.B. eine CORBA-, J2EE- oder SOAP-Anfrage) zum Zugriff auf eine Ressource zum PEP. 3. Der PEP sendet diese Anfrage im ursprünglichen Format weiter zum Context Handler. Dabei können vom PEP neben der eigentlichen Anfrage weitere Information an den Context Handler geschickt werden, die das Subjekt, die auszuführende Aktion oder die Ressource näher beschreiben. 4. Der Context Handler erzeugt aus diesen Informationen eine XACML-Anfrage. Dazu können weitere Informationen zum Subjekt, der Ressource oder der Umgebung vom PIP angefordert werden. Der Context Handler schickt die XACML-Anfrage and den PDP. 27 6.5 XACML 5. Der PDP wertet die für die Anfrage anwendbaren Politiken aus. Sendet einen Antwort-Kontext (inklusive Zugriffsentscheidung) an den Context Handler. 6. Der Context Handler transformiert den Antwort-Kontext in das vom PEP benötigte Format und sendet ihn an den PEP. 7. PEP setzt die Antwort um (Zugriff erlaubt/verboten) 5. Der PDP identifiziert die anwendbaren Politiken und wertet die XACML-Anfrage bzgl. dieser Politiken aus. Der PDP gibt einen Antwort-Kontext inklusive der Zugriffsschutzentscheidung an den Context Handler zurück. 6. Der Context Handler transformiert den Antwort-Kontext in das Antwort-Format des PEP und sendet die Antwort an den PEP. 7. Der PEP setzt die Antwort um: Wenn der Zugriff erlaubt ist, erlaubt der PEP den Zugriff auf die Ressource. Ansonsten wird der Zugriff auf die Ressource abgelehnt. 28 6.5 XACML Überblick setzt Zugriffsschutzentscheidung durch Policy Enforcement Point (PEP) request (native) Access Requester request + [subject + resource + action] decision request Policy Decision Point (PDP) entscheidet Zugriff bzgl. Politik response context handler permit access Ressource response (native) erzeugt XACML Anfrage, Erzeugt Antwort Attribute für Subjekt, Ressource,Umgebung Policy Administration Point (PAP) erstellt die Politik Policy Information Point (PIP) Enthält Informationen zu Attributen von Subjekten, Ressourcen, Aktionen, Umgebungen Diese Folie zeigt nochmals den gesamten Ablauf in einem Diagramm: Möchte ein Benutzer auf eine Ressource in einer bestimmten Weise zugreifen (z.B. ein Bankangestellter möchte sich ein Konto ansehen), so würde das System des Benutzers eine Anfrage zum Zugriff auf die Ressource stellen. Diese Anfrage würde vom Policy Enforcement Point (PEP) entgegengenommen. Der PEP erstellt dann seinerseits eine Anfrage basierend auf der Identität und den Attributen des Benutzers, der Aktion, die ausgeführt werden soll und möglicherweise weitere benötigte Informationen. Der PEP sendet diese Anfrage an den Context Handler, der die Anfrage des Client-Systems in eine XACML-Anfrage transformiert und an den Policy Decision Point weitersendet. Zur Konstruktion der XACML-Anfrage kann der Context Handler weitere Informationen vom Policy Information Point erfragen. Der PDP wertet die XACML-Anfrage auf Grundlage der anwendbaren Zugriffsschutzstrategien (die der PAP definiert hat) aus. Der PDP liefert eine Antwort an den Context Handler zurück, die entweder den Zugriff erlaubt oder verbietet. Der Context-Handler wandelt die XACML-Antwort in das ursprüngliche Anfrage-Format um und schickt es an den PEP. Der PEP setzt dann die Antwort durch. 29 6.5 XACML Politik-Sprachmodell Policy Target 1..* Subject 1 1 1..* 0..1 1 1 0..1 1 Resource 1..* Action Rule Combining Algorithm 1 1 0..* Rule 1 1 Condition 0..1 1 Effect Aus welchen Elementen eine Politik in XACML aufgebaut ist, zeigt das Klassendiagramm der Folie. Einer Politik (policy) ist ein Rule Combining Algorithm und eine Menge von Regeln (rule) zugeordnet. Jede Regel kann eine Bedingung (condition) haben, hat genau einen Effekt (effect) und möglicherweise ein Target. Ein Target kann aus einer Menge von Subjekten, Ressourcen oder Aktionen bestehen. Auch eine Politik kann einem Target zugeordnet werden. 30 6.5 XACML Rule Beschreibt eine Zugriffsschutzregel. Besteht aus einen Target, einem Effect und einer Condition. Das Target einer Regel kann entfallen, wenn es mit dem Target der Policy übereinstimmt. Rule Target Menge von Ressourcen, Subjekten und Aktionen, auf die die Regel anwendbar ist. Falls anwendbar auf alle Entitäten eines Datentyps: <AnySubject/>, <AnyResource/> bzw. <AnyAction/> Regeln bestehen aus einem Target, einem Effect und möglicherweise einer Condition. Das Target einer Regel identifiziert die Ressourcen, Subjekte und/oder Aktionen, auf die die Regel anwendbar ist. Wenn die Regel zu allen Entitäten eine bestimmten Datentyps anwendbar ist, wird ein XML-Element <AnySubject/>, <AnyResource/> oder <AnyAction/> verwendet. Wenn die Regel kein Target hat, dann stimmt es mit dem Target der Policy überein. 31 6.5 XACML Condition Funktion, die True, False oder Indeterminate zurückgibt. Bei Indeterminate liegen nicht genug Informationen für eine Entscheidung vor. Effect Wenn Rule-Condition True, wird entweder Permit oder Deny zurückgegeben. Ansonsten ist die Regel NotApplicable. Eine Condition ist eine Funktion, die entweder zu True, False oder Indeterminate ausgewertet wird. Indeterminate zeigt an, dass nicht genug Informationen vorlagen, um die Condition zu True oder False auszuwerten. Der Effect einer Regel ist entweder Permit oder Deny. 32 6.5 XACML Policy Besteht aus Target, Rules und Rule-Combination Algorithmus. Policy Target Subjekte, Ressourcen und Aktionen, auf die die Politik angewendet werden soll. Kann explizit angegeben werden oder implizit aus den Rule-Targets berechnet werden. Eine Policy besteht aus einem Target, einer Menge von Regeln und einem Rule-Combination Algorithmus. Das Policy-Target spezifiziert die Subjekte, Ressourcen und Aktionen, auf die die Politik anwendbar ist. Die Target-Elemente der Politik können explizit angegeben werden oder anhand der Targets der Regeln der Policy berechnet werden. Jede Policy hat einen Rule-Combination Algorithmus zum Kombinieren der Politik-Regeln im Falle einer Zugriffsschutzentscheidung. Verschiedene von der Spezifikation vorgeschlagene Algorithmen zeigen die nächsten Folien. 33 6.5 XACML Rule-Combination Alghoritmus Bestimmt, wie die Ergebnisse der Regelauswertung für die Auswertung der Politik ausgewertet werden. Deny-Overrides Wenn eine Regel in der Politik zu Deny ausgewertet wird, ist das Gesamtergebnis Deny. Wenn einige Regeln zu Permit ausgewertet werden und der Rest der Regeln zu NotApplicable, ist das Gesamtergebnis Permit. Sind alle Regeln NotApplicable, so ist die gesamte Politik NotApplicable. Der Deny-Overrides Algorithmus gibt Deny-Entscheidungen Priorität, d.h. wenn nur eine Regel der Politik den Zugriff verbietet, so ist die Gesamtzugriffsentscheidung ein Deny. Nur wenn keine der Regeln ein Deny liefert, kann es für das Gesamtergebnis ein Permit geben. Dazu muss allerdings mindestens eine der Regeln ein Permit liefern. Sind alle Regeln der Politik nicht anwendbar für die Zugriffsentscheidung, so ist auch die Politik nicht anwendbar. 34 6.5 XACML Permit-Overrides Wenn eine Regel in der Politik zu Permit ausgewertet wird, ist das Gesamtergebnis Permit. Wenn einige Regeln zu Deny ausgewertet werden und der Rest der Regeln zu NotApplicable, ist das Gesamtergebnis Deny. Sind alle Regeln NotApplicable, so ist die gesamte Politik NotApplicable. Der Permit-Overrides Algorithmus gibt im Gegensatz zum Deny-Overrides Algorithmus einer PermitEntscheidung Priorität. 35 6.5 XACML First-applicable Regeln werden nach der Reihe ausgewertet, die durch die Politik gegeben ist. Sobald eine Regel anwendbar ist (d.h. Target ist identifiziert und Rule-Condition ist True), dann ist das Gesamtergebnis der Effect der Regel, d.h. entweder Permit oder Deny. Ist keine Regel anwendbar, so ist die Politik NotApplicable. Der Algorithmus First-Applicable läuft die Regeln der Politik der Reihe nach durch und sucht nach der ersten anwendbaren Regel. Die Auswertung dieser Regel (entweder Deny oder Permit) ist dann das Ergebnis der Zugriffsschutzentscheidung bzgl. der Politik. Falls keine der Regeln anwendbar sein sollte, ist die gesamte Politik nicht anwendbar. 36 6.5 XACML Politiken können in einer PolicySet zusammengefasst werden. 1 Policy Set 0..* 1 PolicySet besteht aus einer Menge von Policies, einem Target und einem Policy Combining Algorithmus. 1 1 Policy Combining Algorithm 1 1 Target 0..1 1 0..* Policy Man kann mehrere Politiken auch zu einer PolicySet zusammenfassen. Diese Menge von Politiken wird dann ebenfalls einem Target zugeordnet und man muss einen Policy-Combining Algorithmus definieren, der die Zugriffsschutzergebnisse der einzelnen Politiken der PolicySet zu einem Gesamtergebnis kombiniert. Beispiele solcher Kombinierungsalgorithmen zeigen die nächsten Folien. Viele dieser Algorithmen sind analog zu den Algorithmen zum Kombinieren von Regeln. 37 6.5 XACML Policy Combining Algorithmus Deny-Overrides • eine Policy Deny => PolicySet Deny • mindestens eine Policy Permit, Rest NotApplicable => PoliySet Permit • Alle Policies sind NotApplicable => PoliySet NotApplicable Der Deny-Overrides Algorithmus gibt dem Deny einer Politik Priorität. 38 6.5 XACML Permit-Overrides • eine Policy Permit => PolicySet Permit • mindestens eine Policy Deny, Rest NotApplicable => PoliySet Deny • Alle Policies sind NotApplicable => PoliySet NotApplicable Der Permit-Overrides Algorithmus gibt dem Permit einer Politik Priorität. 39 6.5 XACML First-applicable • Auswertung der Policies nach Liste in der PolicySet • Erste anwendbare Policy wird ausgewertet (Target ist anwendbar und Policy wertet zu Permit oder Deny aus) • Ergebnis der Policy-Auswertung wird Ergbenis der PolicySet-Auswertung • Ist keine Policy Anwendbar, ist die PolicySet NotApplicable. Der First-Applicable Algorithmus benutzt die erste anwendbare Politik zur Zugriffsschutzentscheidung. 40 6.5 XACML Only-one-applicable • Wenn keine Policy der PolicySet anwendbar ist, ist die PolicySet NotApplicable. • Wenn mehr als eine Policy der PolicySet anwendbar ist, dann ist die PolicySet Indeterminate. • Wenn genau eine Policy der PolicySet anwendbar ist, dann ist die Auswertung der PolicySet gegeben durch die Auswertung der einen Policy. Der Only-one-applicable Algorithmus betrachtet das Ergebnis einer anwendbaren Politik nur dann, wenn es die einzige anwendbare Politik der PolicySet ist. Ist keine Politik anwendbar, dann ist die PolicySet nicht anwendbar. Sind mehrere Politiken anwendbar, dann liefert die Auswertung der PolicySet Indeterminate. 41 6.5 XACML Beispiel: Politik: Jeder Benutzer mit einer E-Mail im medico.com Namensraum darf jede Aktion auf jeder Ressource durchführen. Abschließend noch ein Beispiel einer in XACML spezifizierten Politik und einer XACML-Anfrage. Die in natürlicher Sprache formulierte Politik zeigt die Folie. Sie gestattet jedem Benutzer mit einer EMail von medico.com jede Aktion auf jeder Ressource auszuführen. 42 6.5 XACML Policy-Header <Policy xmlns="urn:oasis:names:tc:xacml:1.0:policy" http://www.oasis-open.org/tc/xacml/1.0/ cs-xacml-schema-policy.xsd" PolicyId="identifier:example:SimplePolicy" RuleCombiningAlgId= "identifier:rule-combining-algorithm:deny-overrides"> <Description> Medi Corp access control policy </Description> Die XACML-Politik startet mit einem Header, in dem der Namensraum und die XACML-Version spezifiziert werden. Außerdem bekommt die Politik einen Namen und der Algorithmus zum Kombinieren der Regeln wird angegeben. In diesem Beispiel wird der Deny-overrides Algorithmus benutzt. Es kann noch eine Beschreibung der Politik hinzugefügt werden. 43 6.5 XACML Politik-Target Politik ist anwendbar für jeden Benutzer, jede Ressource und jede Aktion <Target> <Subjects> <AnySubject/> </Subjects> <Resources> <AnyResource/> </Resources> <Actions> <AnyAction/> </Actions> </Target> Das PolicyTarget dieser Politik sind alle Subjekte, alle Ressourcen und alle Aktionen. Daher gibt es für die entsprechenden Einträge die Werte <AnySubject/>, <AnyRessource/>, <AnyAction/>. 44 6.5 XACML Es gibt eine Regel in der Politik. Wenn die Regel anwendbar ist, dann liefert sie Permit. <Rule RuleId= "urn:oasis:names:tc:xacml:1.0:example:SimpleRule" Effect="Permit"> <Description> Any subject with an e-mail name in the medico.com domain can perform any action on any resource. </Description> In der Politik gibt es nur eine Regel, die Benutzern mit E-Mail medico.com Zugriff auf alle Ressourcen und Aktionen erlaubt. Zunächst gibt man der Regel einen Namen und spezifiziert ihren Effekt. In diesem Beispiel ist der Effekt Permit, d.h. wenn die Regel anwendbar ist, liefert sie als Ergebnis Permit. Eine Beschreibung der Regel kann zusätzlich gegeben werden. 45 6.5 XACML Rule-Target Alle Benutzer mit E-Mail im medico.com Namensraum Wenn die Subjekte, Ressourcen und Aktionen der Anfrage nicht auf das Rule-Target zutreffen, ist die Regel für diese Anfrage NotApplicable. <Target> <Subject> <SubjectMatch MatchId=" function:Name-match"> <SubjectAttributeDesignator AttributeId="subject:subject-id" DataType="datatype:Name"/> <AttributeValue DataType="datatype:Name"> medico.com </AttributeValue> </SubjectMatch> </Subject> Das Rule-Target spezifiziert die Subjekte, Ressourcen und Aktionen, auf die die Regel anwendbar sein soll. Es wird gefordert, dass die Regel auf alle Subjekte angewandt werden soll, die eine E-Mail von medico.com besitzen. Dies wird im Rule-Target spezifiziert unter dem Element <Subject> spezifiziert. 46 6.5 XACML Regel soll anwendbar sein auf alle Ressourcen und alle Aktionen. <Resources> <AnyResource/> </Resources> <Actions> <AnyAction/> </Actions> </Target> </Rule> </Policy> Da die Regel für alle Ressourcen und Aktionen gilt, gibt es für die Einträge der Elemente <Ressources> und <Actions> die Werte <AnySubject/> und <AnyAction/>. 47 6.5 XACML XACML-Anfrage: Bart Simpson, mit E-Mail "[email protected]", will seine medizinische Akte bei Medi Corp. lesen. <Request xmlns="urn:oasis:names:tc:xacml:1.0:context" http://www.oasis-open.org/tc/xacml/1.0/cs-xacml-schema-context-01.xsd"> <Subject> <Attribute AttributeId="subject:subjectid" DataType="data-type:Name"> <AttributeValue> [email protected] </AttributeValue> </Attribute> </Subject> Können mehrere Subjekte und Attribute sein. Wir betrachten nun eine Anfrage, für die der Zugriffsschutz bzgl. der XACML-Politik der vorigen Folien entschieden werden soll. Die Anfrage stammt von Bart Simpson mit der E-Mail [email protected]. Er möchte auf seine Akte bei der Medi Corp. Lesend zugreifen. Die XACMLAnfrage muss diese Information über Subject (Bart Simpson mit E-Mail [email protected]), über Ressource (Akte bei Medi Corp) und die Aktion (lesen) enthalten. Das <Subject>-Element der XACML-Anfrage spezifiziert daher, dass der Anfragende die E-Mail [email protected] besitzt. In einer XACML-Anfrage können mehrere Subjekte definiert werden. 48 6.5 XACML Ressource, auf die das Subjekt (bzw. die Subjekte) zugreifen wollen. Es kann nur eine Ressource pro Anfrage angegeben werden. <Resource> <Attribute AttributeId="resource:ufspath" DataType="http://www.w3.org/2001/XMLSchema#anyURI"> <AttributeValue> /medico/record/patient/BartSimpson </AttributeValue> </Attribute> </Resource> Das Element <Ressource> spezifiziert die Ressource, auf die das Subjekt eine Aktion ausführen will. Im Beispiel ist das die Datei /medico/record/patient/BartSimpson. Pro XACML-Anfrage kann es immer nur einen <Ressource>-Eintrag geben. 49 6.5 XACML Aktion, die das Subjekt (bzw. die Subjekte) auf der Ressource durchführen will. Es kann nur eine Aktion pro Anfrage angegeben werden. <Action> <Attribute AttributeId="action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string"> <AttributeValue> read </AttributeValue> </Attribute> </Action> </Request> Im <Action>-Element wird die gewünschte Aktion spezifiziert. In diesem Beispiel ist die Aktion read, da die Akte von Bart gelesen werden soll. Wie bei Ressourcen, kann es auch bei Aktionen nur einen Eintrag pro XACML-Anfrage geben. 50 6.5 XACML Der Prozess Decision Point (PDP) erhält den Anfrage Kontext und sucht nach anwendbaren Policies. Dazu wird das Subject, Ressource und Aktion der Anfrage mit dem Subjekt, Ressource und Aktion des Policy verglichen. Im Beispiel: Policy-Ressource <AnySubject/> beinhaltet Anfrage-Ressource. Policy-Aktion <AnyAction/> beinhaltet Anfrage-Aktion. Policy-Subject *@medico.com betrifft nicht das AnfrageSubjekt [email protected] Regel nicht anwendbar für diese Anfrage Wird diese XACML-Anfrage nun vom PDP des XACML-Systems bzgl. der XACML-Politik ausgewertet, wird zunächst entschieden, ob die Politik für die Anfrage anwendbar ist. Dies ist der Fall, da das PolicyTarget alle Subjekte, Ressourcen und Aktionen betrifft. Dann werden die Regeln der Politik auf ihre Anwendbarkeit bzgl. der XACML-Anfrage untersucht. Die einzige Regel der Politik war anwendbar für alle Ressourcen und Aktionen, jedoch nur für Subjekte mit einer E-Mail bei medico.com. Da das Subjekt der Anfrage jedoch die E-Mail [email protected] hat, ist die Regel bzgl. Der Anfrage nicht anwendbar. Da dies die einzige Regel der Politik ist, ist damit auch die gesamte Politik nicht anwendbar (nach Definition des Rule-Combining Algorithmus deny-overrides). 51 6.5 XACML Erstellen der Antwort Rule Combining Algorithmus: Deny-overrides Policy-Auswertung ergibt NotApplicable <Response xmlns="urn:oasis:names:tc:xacml:1.0:context" http://www.oasis-open.org/tc/xacml/1.0/cs-xacml-schema-context-.xsd"> <Result> <Decision> NotApplicable </Decision> </Result> </Response> Der PDP erstellt daher eine Antwort mit NotApplicable für die Zugriffsentscheidung. 52