| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect2 id="zend.oauth.introduction.security-architecture">
- <title>Architektur der Sicherheit</title>
- <para>
- OAuth wurde speziell designt um über eine unsichere <acronym>HTTP</acronym> Verbindung zu
- arbeiten und deshalb ist die Verwendung von <acronym>HTTPS</acronym> nicht notwendig obwohl
- es natürlich wünschenswert wäre wenn es vorhanden ist. Sollte eine <acronym>HTTPS</acronym>
- Verbindung möglich sein bietet OAuth die Implementation einer Signaturmethode an welche
- PLAINTEXT heißt und verwendet werden kann. Über eine typische unsichere
- <acronym>HTTP</acronym> 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
- <acronym>HTTPS</acronym> aufsetzt. Wenn man aber PLAINTEXT über <acronym>HTTP</acronym>
- 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
- <acronym>HTTP</acronym> 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 <acronym>HTTP</acronym> 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
- <acronym>HTTPS</acronym> nicht aktiv ist. Deshalb ist die naheliegende Feststellung das
- <acronym>HTTPS</acronym>, dort wo es möglich ist zu bevorzugen ist und
- <acronym>HTTP</acronym> nur an solchen Orten eingesetzt wird so es nicht anders möglich oder
- nicht erschwinglich ist.
- </para>
- </sect2>
|