| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 20760 -->
- <!-- Reviewed: no -->
- <sect2 id="zend.oauth.introduction.security-architecture">
- <title>Architektur der Sicherheit</title>
- <para>
- OAuth wurde speziell designt um über eine unsichere HTTP Verbindung zu arbeiten und deshalb
- ist die Verwendung von HTTPS nicht notwendig obwohl es natürlich wünschenswert wäre wenn es
- vorhanden ist. Sollte eine HTTPS Verbindung möglich sein bietet OAuth die Implementation
- einer Signaturmethode an welche PLAINTEXT heißt und verwendet werden kann. Über eine
- typische unsichere HTTP Verbindung muss die Verwendung von PLAINTEXT verhindert werden und
- ein alternatives Schema wird verwendet. Die OAuth Spezifikation definiert zwei solcher
- Signaturmethoden: HMAC-SHA1 und RSA-SHA1. Beide werden von <classname>Zend_Oauth</classname>
- vollständig unterstützt.
- </para>
- <para>
- Diese Signaturmethoden sind recht einfach zu verstehen. Wie man sich vorstellen kann macht
- die PLAINTEXT Signaturmethode nichts das erwähnenswert wäre da Sie auf HTTPS aufsetzt. Wenn
- man aber PLAINTEXT über HTTP verwenden würde, dann würde ein signifikantes Problem bestehen:
- Es gibt keinen Weg um sicherzustellen das der Inhalt einer OAuth-aktivierten Anfrage (welche
- einen OAuth Zugriffstoken enthalten würde) beim Routen verändert wurde. Das ist der Fall
- weil unsichere HTTP Anfragen immer das Risiko des Lauschens, von Man In The Middle (MITM)
- Attacken, oder andere Risiken haben können in denen eine Anfrage weiterbearbeitet werden
- könnten und damit Arbeiten im Sinne des Angreifers ausgeführt werden indem sich dieser
- als Originalanwendung maskiert ohne das dies vom Serviceprovider bemerkt wird.
- </para>
- <para>
- HMAC-SHA1 und RSA-SHA1 vermindern dieses Risiko indem alle OAuth Anfragen mit dem originalen
- von der Anwendung registrierten Konsumentengeheimnis digital signiert werden. Angenommen nur
- der Konsument und der Provider wissen was das Geheimnis ist, dann kann ein Mann in der Mitte
- soviele Anfragen verändern wie er will - aber er wird nicht in der Lage sein sie gültig zu
- signieren und unsignierte oder ungültig signierte Anfragen würden von beiden Parteien
- ausgeschieden werden. Digitale Signaturen bieten deshalb eine Garantie das gültig signierte
- Anfragen von der erwarteten Partei kommen und beim Routen nicht verändert wurden. Das ist
- der Kern warum OAuth über eine unsichere Verbindung arbeiten kann.
- </para>
- <para>
- Wie diese digitalen Signaturen arbeiten hängt von der verwendeten Methode ab, z.B.
- HMAC-SHA1, RSA-SHA1 oder möglicherweise eine andere Methode welche vom Serviceprovider
- definiert wird. HMAC-SHA1 ist ein einfacher Mechanismus welcher einen Nachrichten
- Authentifizierungscode (MAC) erzeugt indem eine kryptographische Hash Funktion (z.B. SHA1)
- in Verbindung mit einem geheimen Schlüssel verwendet wird der nur dem Sender und dem
- Empfänger der Nachricht bekannt sind (z.b. das Konsumentengeheimnis von OAuth kombiniert
- mit dem authorisierten Zugriffsschlüssel). Dieser Hashing Mechanismus wird den Parametern
- und dem Inhalt aller OAuth Anfragen angehängt und zu einem "Basissignatur String"
- zusammengefügt wie es von der OAuth Spezifikation definiert ist.
- </para>
- <para>
- RSA-SHA1 operiert auf ähnlichen Prinzipien ausser dass das Geheimnis welches geteilt wird,
- wie man es erwarten würde, der private RSA Schlüssel jeder Partei ist. Beide Seiten haben
- den öffentlichen Schlüssel des anderen mit dem die digitalen Signaturen geprüft werden. Das
- führt verglichen mit HMAC-SHA1 zu einem Riskolevel da die RSA Methode keinen
- Zugriffsschlüssel als teil des geteilten Geheimnisses verwendet. Dies bedeutet dass wenn
- der private RSA Schlüssel eines Konsumenten kompromitiert ist, sind es alle zugeordneten
- Zugriffstoken dieses Konsumenten auch. RSA führt zu einem alles oder gar nichts Schema.
- Generell tendiert die Mehrheit der Serviceprovider welche OAuth Authorisierung anbieten
- dazu HMAC-SHA1 standardmäßig zu verwenden, und jene welche RSA-SHA1 anbieten können eine
- Fallback Unterstützung für HMAC-SHA1 anbieten.
- </para>
- <para>
- Wärend digitale Signaturen zur Sicherheit von OAuth beitragen sind Sie trotzdem für andere
- Formen von Attacken angreifbar, wie Replay Attacken welche vorhergehende Anfragen
- aufgezeichnet und zu einer Zeit geprüft und signiert wurden. Ein Angreifen können jetzt
- exakt die gleiche Anfrage zum Provider wie er will und zu jeder Zeit senden und seine
- Ergebnisse auffangen. Das führt zu einem signifikanten Risiko aber es ist recht einfach
- sich davor zu schützen - einen eindeutigen String (z.b. eine Nonce) bei allen Anfragen
- hinzufügen welcher sich bei jeder Anfrage ändert (dies verändert laufend den Signaturstring)
- kann aber niemals wiederverwendet werden weil Provider verwendete Nonces zusammen mit einem
- bestimmten Fenster aktiv verfolgen welches vom Timestamp definiert wird der einer Anfrage
- auch angehängt wird. Man würde erwarten das wenn die Verfolgung einer bestimmten Nonce
- gestoppt wird, das wiederabspielen funktionieren würde, aber das ignoriert den Timestamp
- der verwendet werden kann um das Alter einer Anfrage zu ermitteln zu welcher Sie digital
- signiert wurde. Man kann also annehmen dass die eine Woche alte Anfrage in einem
- Wiederholungsversuch abgespielt wird, auf ähnliche Weise verworfen wird.
- </para>
- <para>
- Als letzter Punkt erwähnt, ist dies keine exzessive Ansicht der Sicherheitsarchitektur in
- OAuth. Was passiert zum Beispiel wenn HTTP Anfragen welche sowohl den Zugriffstoken als auch
- das Geheimnis des Konsumenten enthalten abgehört werden? Das System ist auf der einen Seite
- von einer klaren Übermittlung von allem abhängig solange HTTPS nicht aktiv ist. Deshalb ist
- die naheliegende Feststellung das HTTPS, dort wo es möglich ist zu bevorzugen ist und HTTP
- nur an solchen Orten eingesetzt wird so es nicht anders möglich oder nicht erschwinglich
- ist.
- </para>
- </sect2>
|