rest - hypermedia und sicherheit

41
© 2012 Mayflower GmbH REST Hypermedia und Sicherheit Jens Broos I 15.12.2011

Upload: mayflower-gmbh

Post on 28-Nov-2014

2.491 views

Category:

Technology


2 download

DESCRIPTION

REST nutzt mit Hypermedia eines der grundlegendsten Konzepte des www: die Verknüpfung zwischen Ressourcen und die damit verbundene Steuerung der Applikation. Doch dieses Konzept gilt nicht nur für uns, die wir mit dem Browser interagieren, sondern auch für die Kommunikation von Anwendung-zu-Anwendung. Doch erfolgt REST immer vom Server bis direkt zum Client? Ab wann ist eine Anwendung vielleicht doch nicht mehr so RESTful, wie sie gegenüber dem Product Owner versprochen wurde? Spätestens mit der Implementierung von Sicherheitskonzepten muss man sich dieser Frage zwingend stellen. Denn wenn man Authentifizierungsinformationen überträgt, kippt ein weiteres Hauptkonzept von REST: die statuslose Kommunikation. Jens Broos, Developer bei Mayflower, vermittelt Beispiele und Grundgedanken zum Thema Hypermedia und gibt einen Einstieg in die Sicherheitsmechanismen von RESTful WebServices. Die Präsentation erweitert den Vortrag „RESTful WebServices“ von Paul Seiffert, der am 20.10.2011 gehalten wurde. Den Foliensatz findet man unter: http://www.slideshare.net/mayflowergmbh/restful-webservices-10103497

TRANSCRIPT

Page 1: REST - Hypermedia und Sicherheit

© 2012 Mayflower GmbH

REST Hypermedia und Sicherheit

Jens Broos I 15.12.2011

Page 2: REST - Hypermedia und Sicherheit

2

I Ressourcen mit eindeutiger Identifikation

I Standardmethoden (Verbs)

• GET, HEAD, POST, PUT, DELETE…

I Unterschiedliche Repräsentationen

• XML, JSON, HTML, Image, Video, PDF, uvm.

I Statuslose Kommunikation

I Verknüpfungen / Hypermedia

Rückbesinnung: Grundprinzipien von REST

Vorführender
Präsentationsnotizen
Eindeutige Identifikation URI als ID -> Ressource weltweit eindeutig identifizierbar Namensschema ist standardisiert und muss nicht neu erfunden werden Standardmethoden Verben Idempotenz: Im Falle einer Unterbrechung Ressource wieder abfragen und dasselbe Ergebnis bekommen Unterschiedliche Repräsentationen Header: Accept: Standardisiert HTML hat höchste Priorität im Header und wird abgefragt, wenn nichts gesetzt wird Statuslosigkeit Nicht gewollt: serverseitig abgelegter, transierter, clientspezifischer Status Über Dauer eines Requests hinweg Zustand soll auf Client bleiben, Zustand dabei Bestandteil von Repräsentation vom Server Zustand alternativ in Ressource umwandeln Bsp. Warenkorb als Ressource und damit „Linkfähig“ Warum? Skalierbarkeit Koppelung: Mehrere Server möglich Aufeinander folgende Anforderungen müssen nicht von selben Serverinstanz bearbeitet werden
Page 3: REST - Hypermedia und Sicherheit

3

Hyper! Media!

Vorführender
Präsentationsnotizen
Hypertext: Nicht linear verbundene textuelle Informationen Hypermedia: Grafik, Videos, andere Multimediaformate
Page 4: REST - Hypermedia und Sicherheit

4

I Links bestimmen Möglichkeiten des Clients

I Link wird in Repräsentation eingebettet

I Keine externe Beschreibung notwendig

I Server verwendet Format, das Client versteht

I Anwendungsstatus bestehend aus

• Ressourcenrepräsentation im Client

• serverseitigen Ressourcenstatus

• NICHT aus Sitzungsinformationen

HATEOAS - Hypermedia as the engine of application state

Vorführender
Präsentationsnotizen
Überführung eines Clients in verschiedene Zustände durch das Entlanghangeln an Links Benutzer wird nicht zugemutet ID zu konstruieren notwendige Metainformationen mit Daten in Repräsentation geliefert Negativbeispiel: Domain Masking Einzelne URI, die sich bei Bearbeitung nicht ändert Schlecht für: Bookmarks, Refresh, Back/Forward, nicht indizierbar
Page 5: REST - Hypermedia und Sicherheit

5

I Anchor Elemente

<a href=“http://www.mayflower.de“>Mayflower</a>

I Formulare

<form action=“nextSite.php“ method=“GET/POST“>

Hypermedia – Im Browser

Vorführender
Präsentationsnotizen
Link Browser kennen das Format, einfache Darstellung. Client folgt HTML Kernprinzip von HTML, mit GET ausgeführt Server teilt Client mit, welchen Links er folgen kann Formular GET oder POST POST: application/x-www-urlencoded GET in query parametern Guter Stil: Redirect after POST
Page 6: REST - Hypermedia und Sicherheit

6

Hypermedia – Anwendung-zu-Anwendung

I Entkoppelung von Client und Server

I Transparenz bei Änderungen an Ressourcen

I Serverseitig steuerbarer Anwendungsfluss

I Reduktion von separaten Metadaten

Vorführender
Präsentationsnotizen
Entkoppelung: Client muss nicht an Serveränderungen angepasst werden Transparenz: Client folgt „stumpf“ den Servervorgaben Reduktion von Metadaten: Beschreibung, was mit bestimmter Ressource und deren Repräsentation getan werden kann ist nicht Bestandteil einer EXTERNEN, MENSCHEN- oder MASCHINENLESBAREN Dokumentation Bestandteil der Ressourcenrepräsentation selbst AUSSERDEM: Unterteilung in Browserbasiertes Web und Anwendung-zu-Anwendung-Kommunikation ist sinnlos Browser ist auch Anwendung Jede Serverseitige Aktion sollte auf ein Bedürfnis des Menschen zurückgehen API automatisieren an einem UI sichtbare Aktionen
Page 7: REST - Hypermedia und Sicherheit

7

Ressource: http://example.com/orders/1848 Subressource: http://example.com/orders/1848/shipping-address

Hypermedia – Ressourcen verknüpfen

Page 8: REST - Hypermedia und Sicherheit

8

http://example.com <?xml version=“1.0“ encoding=“UTF-8“?> <serviceDescription xml:base=“http://example.com“>

<link rel=“orders“ href=“/orders/“ />

<link rel=“customers“ href=“/customers/“ />

<link rel=“products“ href=“/products/“ />

</serviceDescription>

Hypermedia – Listenressource

Page 9: REST - Hypermedia und Sicherheit

9

<?xml version=“1.0“ encoding=“UTF-8“?> <orders href=“/orders/“ xml:base=“http://example.com“>

<link rel=“1848“ href=“/orders/1848“ />

<link rel=“4711“ href=“/orders/4711“ />

<link rel=“1701“ href=“/orders/1701“ />

</orders>

Hypermedia

Page 10: REST - Hypermedia und Sicherheit

10

<order href=“/orders/1848“ xml:base=“http://example.com“

xmlns=“http://example.com/schemas/order“ > ….

<shippingAddress>

http://example.com/order/1848/shipping-address

</shippingAddress> …

<shippingAddress>

<city>Bochum</city>

<link>http://example.com/ord…</link> </shippingAddress> …

Hypermedia

Vorführender
Präsentationsnotizen
Kein Wissen über spezifische URIs Ausnahme: Einstiegspunkt Alle anderen Links werden „entdeckt“
Page 11: REST - Hypermedia und Sicherheit

11

Sicherheit

arREST

Vorführender
Präsentationsnotizen
Kunden klar machen: Mit Verschlüsselung, Signaturen, und anderen Sicherheitsmechanismen Steigende Kosten für Lizenzen, Zertifikate, zusätzliche Hardware Steigender Entwicklungs- und Administrationsaufwand DAHER: Erster Schritt: Kritische Betrachtung der tatsächlichen Sicherheitsrisiken Konkrete Anforderungen
Page 12: REST - Hypermedia und Sicherheit

12

I Warum brauchen wir Sicherheit?

– Geschütze Ressourcen

• Bestellsystem

• Pay Content, z.B. Maxdome

• Nachrichten abrufen

• Kreditkarteninformationen

• Etc.

REST und Sicherheit

Page 13: REST - Hypermedia und Sicherheit

13

I Nachrichtenorientierte Sicherheit

• Ist Nachricht / Inhalt geeignet geschützt?

• Verschlüsselung, Signatur

• Übertragung über ungesicherten Transportmechanismus

I Transportbasierte Sicherheit

• Ungesicherte Nachricht über gesicherten Kanal

• Vorrangige Nutzung in der Praxis

Sicherheitsmechanismen unterscheiden

Page 14: REST - Hypermedia und Sicherheit

14

Transportbasierte Sicherheit

Vorführender
Präsentationsnotizen
Transportmechanismus
Page 15: REST - Hypermedia und Sicherheit

15

I HTTP über SSL / TSL

I Server beweist Identität gegenüber Client mit Zertifikat

I Zertifikat von vertrauenswürdiger Zertifizierungsstelle

I Clientseitig

• Benutzername / Passwort

• Clientzertifikat

I Keine „Man-in-the-middle Attacken“

I Ignorieren von Proxy-Caches

SSL und HTTPS

Vorführender
Präsentationsnotizen
Clientzertifikat erfordert hohen Aufwand Verhindert Gedanken der Unabhängigkeit Man in the middle: Abhören der Leitung durch Intermediäre Auch Ändern der Daten möglich
Page 16: REST - Hypermedia und Sicherheit

16

I Der Unterschied liegt im Detail …

• Identifizierung mit einem Benutzernamen

• Authentisierung mit einem Passwort

• Authentifizierung beider Eingaben via Server

• Autorisierung gewährt Recht zum Aufruf einer Ressource

I Im englischen nur: Authentication and Authorization

Begrifflichkeiten in der Sicherheit

Vorführender
Präsentationsnotizen
authentisieren: rechtgültig machen, glaubwürdig machen authentifizieren: Echtheit bezeugen, beglaubigen
Page 17: REST - Hypermedia und Sicherheit

17

I Ressource für anonymen Zugriff gesperrt

• Rückgabe HTTP Statuscode: 401 Unauthorized

I „Authentication Challenge“

I WWW-Authenticate im Header legt Schema fest

• Basic

• Digest

I Header: „Realm“ - Geltungsbereich der Authentifizierung

I REST Spielregeln: Keine Session aufbauen!

HTTP-Authentifizierung

Vorführender
Präsentationsnotizen
Auth Challenge: Client muss richtige Authentisierungsinformationen mitsenden, die zum einen dem Schema entsprechen (z.B. basic) und Geltungsbereich Realm Weitere Auths ClientLogin von Google
Page 18: REST - Hypermedia und Sicherheit

18

HTTP/1.1 401 Unauthorized

WWW-Authenticate: Basic realm=“Private Area“

Content-Type: text/html; charset=iso-8859-1

<html>

<head>

<title>Authorization Required</title>

</head>

<body>

You are not allowed to do this.

….

Beispiel Authentication Challenge

Vorführender
Präsentationsnotizen
Page 19: REST - Hypermedia und Sicherheit

19

I base64enc(‘admin‘ + ‘:‘ + ‘secret‘)

• RtaW46c2VjcmV0Cg==

I Im Header GET / HTTP 1.0 Accept: text/html Authorization: RtaW46c2VjcmV0Cg==

I Nicht verschlüsselt: Basic ohne weitere Anstrengungen sinnlos

HTTP Basic Authentication

Vorführender
Präsentationsnotizen
Leicht zu implementieren In meisten Bibliotheken enthalten Schwächen: Passwort quasi im Klartext, weil base64 keine Kodierung ist Ursprünglich Übertragung von Texten über Kanäle mit beschränktem Basiszeichensatz Identität des Servers wird nicht sichergestellt Man-in-the-middle-Attacken möglich, d.h. Modifizierung auf dem Weg zum Server Replay Angriff Beobachtet Angreifer auch nur eine einzige Nachricht, kann er sie ganz oder teilweise noch einmal versenden Konsequenz: Ohne weitere Sicherheitsmaßnahmen ungeeignet
Page 20: REST - Hypermedia und Sicherheit

20

I Passwort nicht im Klartext übertragen

I Berechnung von Hashwert mit kryptografischer Funktion

• Vorteil: Passwort bleibt geheim

• Ergebnis der Berechnung nennt man „Digest“

I Server informiert Client über Schema, Geltungsbereich und „nonce“

I Gleicher Berechnungsalgorithmus auf Server und Client

HTTP Digest Authentication

Vorführender
Präsentationsnotizen
nonce: Vom Server generierter Wert Beliebige Zahl oder Zeichenkette, Wird vom Server nur einmal erzeugt Vorteile: Passwort kann nicht mitgelesen werden Nonce und Zeitstempel verhindern Replay-Attacken (Beobachtet Angreifer auch nur eine einzige Nachricht, kann er sie ganz oder teilweise noch einmal versenden) Wenig verbreitet: Nachricht beim Digest immer noch nicht verschlüsselt oder gegen Modifikation geschützt Man-in-the-middle-Attacken möglich Nachricht abfangen, modifizieren weiterleiten, ohne dass es jemand merkt
Page 21: REST - Hypermedia und Sicherheit

21

HTTP/1.1 401 Unauthorized

WWW-Authenticate: Digest

realm=“Private Area“

nonce=“890fds09d908gf890gd890fd“ Authorization: Digest

username=“user“

realm=“Private Area“

nonce=“890fds09d908gf890gd890fd“

uri=“/orders“ response=“265uuid32fdsd8989jkkjl899“

MD5(MD5(Benutzername . “:“ . Realm . “:“ Passwort) . “:“ .

nonce . “:“ . MD5(HTTP-Methode . “:“ . URI))

Beispiel Authentication Challenge bei Digest

Vorführender
Präsentationsnotizen
nonce: Vom Server generierter Wert Beliebige Zahl oder Zeichenkette, Wird vom Server nur einmal erzeugt Vorteile: Passwort kann nicht mitgelesen werden Nonce und Zeitstempel verhindern Replay-Attacken (Beobachtet Angreifer auch nur eine einzige Nachricht, kann er sie ganz oder teilweise noch einmal versenden) Wenig verbreitet: Nachricht beim Digest immer noch nicht verschlüsselt oder gegen Modifikation geschützt Man-in-the-middle-Attacken möglich Nachricht abfangen, modifizieren weiterleiten, ohne dass es jemand merkt
Page 22: REST - Hypermedia und Sicherheit

22

Kurzes Resümee

Page 23: REST - Hypermedia und Sicherheit

23

I Beide Sicherheitsprinzipien ergänzen sich

• SSL tunnelt von Client bis Server

• Authentifizierung durch Basic Authentication

Die 80% Lösung: HTTPS + Basic Authentication

Client WebServer Application

Auth Server

SSL SSL REST

Vorführender
Präsentationsnotizen
Beispiel für Auth Server Konfiguration Apache, Einbinden von LDAP NTLM DB Htaccess Eigentlicher REST Server kümmert sich nicht um SSL , sondern nimmt an, dass Benutzer identifiziert wurde Bzw: STATELESS Nutzen: Trennen von Authentifizierung/Autorisierung und Serverlogik
Page 24: REST - Hypermedia und Sicherheit

24

I Cookies sind üblicher Weg, Authentifizierungs- bzw. Benutzerinformationen zu übermitteln

I Umgehen den statuslosen Charakter von HTTP

I Server erstellt Schlüssel/Wert-Paare

I Lieferung des Paare per „Set-cookie“ Header

I Client schickt diese Werte bei jeder Anfrage an gleichen Server und Pfad in einem Cookie-Header

I Wenn man Cookies nicht verhindern kann, dann zumindest Auswirkungen begrenzen

Cookies – Statefull Poison

Vorführender
Präsentationsnotizen
Im Hauptspeicher vorgehaltene / benutzerspezifische Datenstruktur zu identifizieren. Hashtabelle Für jeden Benutzer, ob angemeldet oder nicht, gibt es SchlüsselWert Paare��Aber: Skalierbarkeit = mehrere Server: Sitzungsdaten müssen synchronisiert werden Oder sicherstellen, dass Requests eines einzelnen Client von bestimmten Server beantwortet werden, was Skalierung wiederspricht Beim Herunterfahren oder Absturz des Serversprozesses gehen sessionbezogene Daten verloren Auswirkung eines einzelnen Requests nicht mehr nur vom Request selbst, sondern auch von vorherigen Requests abhängig Nicht mehr restful bzw Idempotent Client muss eine Reihe von Schritten als Vorarbeit verrichten um eigentliche Aufgabe zu erledigen
Page 25: REST - Hypermedia und Sicherheit

25

1.) Server berechnet geheimen Wert

2.) Client schickt Logindaten per SSL an Server

3.) Server authentifiziert

4.) Wenn erfolgreich: Server erstellt „Ticket“ oder „Token“ Ticket = hash(Benutzername . “:“ . Secret . “:“ Gültigkeitsdauer)

5.) Server setzt Cookies für Benutzername, Ticket und

Gültigkeitsdauer

6.) Nächster Request: Browser überliefert diese drei Werte

in Form von Cookies als Teil der Anfrage

7.) Browser berechnet Ticket und prüft gegen

Cookies – Auswirkungen begrenzen

Page 26: REST - Hypermedia und Sicherheit

26

Zwei verschiedene Ansätze von Sicherheit

Page 27: REST - Hypermedia und Sicherheit

27

I Daten werden je nach Berechtigung im Webserver gefiltert

I Nicht mehr stateless

I Aushebeln von Caching-Mechanismen

Webserver als „Filter“

Application SSL REST

WebServer

Auth Server

Application SSL REST

WebServer

Auth Server

Application SSL REST

WebServer

Auth Server

Client

Vorführender
Präsentationsnotizen
Eigentlicher REST Server kümmert sich nicht um SSL , sondern nimmt an, dass Benutzer identifiziert wurde Bzw: STATELESS Nutzen: Trennen von Authentifizierung/Autorisierung und Serverlogik
Page 28: REST - Hypermedia und Sicherheit

28

I Daten für jeden zugänglich

I Daten liegen permanent in verschlüsselter Form vor

I Berechtigungen werden hierarchisch via SSL an den Client verschickt

Nur Berechtigungen via SSL verschickt

Client Application SSL

WebServer

Auth Server

unverschlüsselt

Vorführender
Präsentationsnotizen
Probleme: Was ist mit Subressourcen Dekodierung muss im Client stattfinden Was ist, wenn sich Rollen ändern und benutzer die Token für sich speichert
Page 29: REST - Hypermedia und Sicherheit

29

Nachrichtenorientierte Sicherheit

Page 30: REST - Hypermedia und Sicherheit

30

I Anforderung: Verhinderung von unerlaubter Modifikation

I Nachricht mit Signatur anreichern

I Basis =geheimer Schlüssel, Client und Server bekannt

I Vorteile:

• Stellt sicher, dass Nachricht von vertrauenswürdiger Stelle stammt

• Ausschluss von Man-in-the-middle-Attacken

I Nachteil:

• Nachricht kann immer mitgelesen werden

HMAC Keyed-Hashing for Message Authentication

Vorführender
Präsentationsnotizen
Wird eingesetzt bei: Amazon Webservices Google Commit Hooks-API von Google Code
Page 31: REST - Hypermedia und Sicherheit

31

HMAC Keyed-Hashing for Message Authentication

Page 32: REST - Hypermedia und Sicherheit

32

HMAC Keyed-Hashing for Message Authentication

iPad?!

Page 33: REST - Hypermedia und Sicherheit

33

I Kein generischer, standardisierter Mechanismus

I Verwendung bestehender Mechanismen auf Repräsentationsbasis

• Verschlüsseltes PDF

• Generische PGP-Verschlüsselung und –Signatur

• XML Encryption

• XML Digital Signature (XML DSIG)

I Letztendlich bleibt die Frage: Ist SSL-Übertragung nicht sicher genug?

Nachrichtenverschlüsselung und Signatur

Page 34: REST - Hypermedia und Sicherheit

34

OpenID und OAuth

Page 35: REST - Hypermedia und Sicherheit

35

I Problem: Viele Webseiten, viele Logins

I OpenID: Kooperierende Dienste nutzen einen Authentifizierungsservice

I Zentrale einmalige Registrierung

I Konzept: URL-basierte Identität

I Parteien

• Browser des Endanwenders

• OpenID Provider

• Webanwendung

OpenID

Vorführender
Präsentationsnotizen
Anmeldung bei OpenID Provider erzeugt eine URL, die den Benutzer beschreibt
Page 36: REST - Hypermedia und Sicherheit

36

OpenID

OpenID Provider

User WebService

http://idprovi.der/ids/1848

Vorführender
Präsentationsnotizen
Neben username / password auch möglich: Clientzertifikat Biometrische verfahren, Etc
Page 37: REST - Hypermedia und Sicherheit

37

I Anforderung: „Übertragung“ der Rechte an andere Anwendung

I Notwendig: Spezifische, eingeschränkte Autorisierung

I Parteien

• Service prodiver

• Consumer

• User

OAuth

Page 38: REST - Hypermedia und Sicherheit

38

OAuth Übersicht

Vorführender
Präsentationsnotizen
Page 39: REST - Hypermedia und Sicherheit

© 2012 Mayflower GmbH

Dipl.-Inform. (FH) Jens Broos

[email protected]

+49 89 242054 1129

Mayflower GmbH

Mannhardtstraße 6

80538 München

Referent

Vielen Dank für Ihre Aufmerksamkeit!

Page 40: REST - Hypermedia und Sicherheit

40

I Buch: Stefan Tilkov – REST und HTTP, dpunkt.verlag

I Wikipedia, Artikel HMAC

I Bild zu OAuth: http://www.ubelly.com/2010/02/building-a-simple-oauth-twitter-application

I Foto „Sicherheit“: © Didi01 / pixelio.de

I Foto „Hypermedia“: Wikimedia User: Radiat-r

Quellen

Page 41: REST - Hypermedia und Sicherheit

41

I Keine Abhängigkeiten von spezifischen Kommunikationsprotokollen

I Bestehende Methoden dürfen durch API nicht geändert werden (PUT bleibt PUT, etc.)

I Keine fixen Ressourcennamen oder Hierarchien

I Ressourcen sind nicht getypt, nur deren Repräsentation

I Kein Wissen über spezifische URIs

• Ausnahme: Einstiegspunkt

• Alle anderen Links werden „entdeckt“

Hypermedia – Checkliste

Vorführender
Präsentationsnotizen
Checkliste, ob Design hinreichend Hypertext-getrieben ist