Entsprechen private, nicht erratbare URLs der kennwortbasierten Authentifizierung?

128

Ich möchte eine Ressource im Web verfügbar machen. Ich möchte diese Ressource schützen: um sicherzustellen, dass sie nur bestimmten Personen zugänglich ist.

Ich könnte eine Art Passwort-basierte Authentifizierung einrichten . Zum Beispiel könnte ich den Zugriff auf die Ressource nur über einen Webserver zulassen, der eingehende Anforderungen auf korrekte Anmeldeinformationen überprüft (möglicherweise anhand einer Sicherungsdatenbank von Benutzern), bevor die Datei bereitgestellt wird.

Alternativ könnte ich auch eine private URL verwenden . Das heißt, ich könnte die Ressource einfach auf einem unvorhersehbaren Pfad hosten https://example.com/23idcojj20ijf..., der den Zugriff auf diejenigen einschränkt, die die genaue Zeichenfolge kennen.

Sind diese Ansätze aus der Sicht eines Übeltäters, der auf diese Ressource zugreifen möchte, gleichwertig? Wenn nicht, was unterscheidet sie? Und was die Wartbarkeit anbelangt, gibt es Vor- und Nachteile für einen Ansatz, den ich kennen sollte, bevor ich den einen oder anderen implementiere?

GladstoneKeep
quelle
45
Dieser Ansatz wird im Allgemeinen nur ohne Authentifizierung zum Zurücksetzen von Kennwörtern verwendet. Der nicht erratbare Link verfällt normalerweise innerhalb kurzer Zeit und kann nur von einer Person verwendet werden, die bereits semi-authentifiziert ist (dh die Website kennt bereits die E-Mail-Adresse, an die der Link gesendet wurde).
Robert Harvey
6
Verwandte Diskussion über security.SE: security.stackexchange.com/q/58215/37496
Mark
9
@MonkeyZeus es ist keine Sicherheit durch Dunkelheit. Das Geheimnis, das normalerweise ein Passwort ist, ist in diesem Fall eine URL.
Davidmh
16
@MonkeyZeus: Security-through-Obscurity bezieht sich darauf, die Implementierung des Mechanismus geheim zu halten und keine undurchsichtigen Schlüssel zu verwenden. Wenn nicht zu erratende URLs Sicherheit durch Verschleierung bedeuten, sind es auch sichere Passwörter.
JacquesB
1
@ LadstoneKeep Beachten Sie die URL-Kürzel. Sobald ein Angreifer einen von ihnen benutzt, ist der Link viel einfacher zu erraten / aufzuschreiben.
RookieTEC9

Antworten:

203

Eine private URL ist etwas schwächer als die Authentifizierung mit Anmeldeinformationen, selbst wenn die Bitgröße der URL mit der der Anmeldeinformationen übereinstimmt. Der Grund ist, dass die URL leichter "auslaufen" kann. Es wird im Browser zwischengespeichert, auf dem Server angemeldet und so weiter. Wenn Sie ausgehende Links haben, wird die private URL möglicherweise auf anderen Websites im Referrer-Header angezeigt. (Es kann auch von Personen gesehen werden, die über die Schulter schauen.)

Wenn es leckt (aus Versehen oder aufgrund von Unachtsamkeit des Nutzers), kann es öffentlich und sogar von Google indiziert werden, wodurch ein Angreifer problemlos nach allen leckenden URLs auf Ihrer Website suchen kann!

Aus diesem Grund werden private URLs in der Regel nur für einmalige Vorgänge wie das Zurücksetzen von Kennwörtern verwendet und sind in der Regel nur für eine begrenzte Zeit aktiv.


Bei Informationssicherheit gibt es einen verwandten Thread: Sind zufällige URLs ein sicherer Weg, um Profilfotos zu schützen ? - Eine Antwort teilt diese Geschichte: Dropbox deaktiviert alte freigegebene Links, nachdem Steuererklärungen bei Google eingegangen sind . Es ist also nicht nur ein theoretisches Risiko.

JacquesB
quelle
7
Geringfügiges Problem, aber "normalerweise nur für einmalige Vorgänge verwendet" scheint zu viel zu bedeuten, da Dropbox (und möglicherweise andere Cloud-Dienste) sie verwenden, um den Zugriff auf Dateien zu "schützen".
Steve Jessop
4
Ich möchte hinzufügen, dass Benutzer mit begrenztem Erfolg darin unterrichtet werden, ihre Passwörter zu schützen, aber nicht ihre URLs.
Svavil
1
Sie sollten hinzufügen, dass viele der technischen Probleme durch die Verwendung eines Parameters in der privaten URL "so xzy.com/myDoc?auth=8502375" und eine automatische Weiterleitung zu einer einfachen URL nach dem Auschecken der Authentifizierung behoben werden können. - Aber das löst nicht alle möglichen Probleme
Falco
3
TL; DR - es gibt keine geheime URL. Es gibt einen aktuellen Angriff, bei dem URLs an WiFi-Hotspots einem böswilligen Akteur ausgesetzt werden, selbst wenn Sie die URL normalerweise über HTTPS senden. Der Angriff missbraucht die Web Proxy Autodiscovery (WPAD) und zwingt Ihren Browser, alle Ihre URLs an den Angreifer zu senden. Siehe (z. B.) arstechnica.com/security/2016/07/…
Harald,
5
@JacquesB Werden einige der von Ihnen identifizierten Risiken nicht gemindert, indem Sie den privaten Teil in den Fragmentteil der URL einfügen (dh nach dem "#", wie dies z. B. Stack Exchange für die Oauth-Authentifizierungsantworten tut)? Beispielsweise darf der Referer-Header das Fragment nicht enthalten .
Jason C
48

Hinweis:

Viele Leute scheinen eine "private" URL mit der Authentifizierung zu verwechseln. Es scheint auch einige Verwirrung zu geben, dass das Senden des Links über eine vertrauenswürdige Entität ein Versuch einer Zwei-Faktor-Authentifizierung ist. Klar ist, dass es sich um eine öffentlich zugängliche Ressource handelt, die jedoch schwer zu erraten ist.

Wenn Sie eine private URL verwenden, sollten Sie immer davon ausgehen, dass sie kompromittiert werden kann. Sie sollten eine solche URL so entwerfen, dass die Ressource auch dann keine Informationen an den Angreifer weitergibt, wenn sie kompromittiert wird.


Private / schwer zu erratende URLs entsprechen nicht der kennwortbasierten Authentifizierung. Private URLs sind von Natur aus überhaupt nicht privat - sie sind öffentlich zugängliche Ressourcen. Ich denke, der Begriff "private" URL ist eine falsche Bezeichnung, eher "obskure" URLs.

Es gibt bestimmte Fälle, in denen die Verwendung einer "privaten" URL akzeptabel ist, die jedoch von Natur aus weniger sicher ist als herkömmliche Authentifizierungsmethoden wie die Kennwortauthentifizierung oder die schlüsselbasierte Authentifizierung.

Einige der Orte, an denen ich häufig "private" URLs gesehen habe, sind:

  1. E-Mails zum Zurücksetzen des Passworts
  2. E-Mails zur Zertifikatserstellung
  3. Konto- / E-Mail-Bestätigungs-E-Mails
  4. Lieferung von gekauften Inhalten (E-Books usw.)
  5. Andere andere Dinge wie das Einchecken im Flugzeug, das Drucken der Bordkarte und die Verwendung privater URLs zusätzlich zur herkömmlichen Authentifizierung

Die Gemeinsamkeit besteht darin, dass zufällige URLs in der Regel nur für One-Shot-Vorgänge geeignet sind. Traditionelle Authentifizierung und zufällige URLs schließen sich nicht gegenseitig aus . Sie können sogar zusammen verwendet werden, um zusätzliche Sicherheit bei der Bereitstellung einer Ressource zu bieten.


Wie Robert Harvey ausgeführt hat, besteht die einzige Möglichkeit, eine zufällige / private URL sicher zu verwenden, darin, die Seite dynamisch zu generieren und die URL so an den Benutzer zu übermitteln, dass der Benutzer als semi-authentifiziert betrachtet werden kann. Dies können E-Mails, SMS usw. sein.

Eine zufällig generierte / private URL hat normalerweise einige Eigenschaften:

  1. Es sollte nach einer angemessenen Zeit ablaufen
  2. Es sollte eine Einweg-URL sein: IE sollte nach dem ersten Zugriff ablaufen.
  3. Die Authentifizierung des Benutzers sollte auf eine andere Entität verschoben werden, der es zur sicheren Authentifizierung des Benutzers vertraut. (Durch Versenden des Links per E-Mail oder SMS usw.)
  4. Es sollte für einen modernen Computer unmöglich sein, die URL in dem Zeitraum vor dem Ablauf zu erzwingen - entweder durch Beschränken der Geschwindigkeit, mit der die Ressource verfügbar gemacht wird, oder durch Erstellen eines URL-Endpunkts mit einer ausreichenden Entropie, die nicht erraten werden kann.
  5. Es sollte keine Informationen über den Benutzer preisgeben. IE: Wenn die Seite ein Passwort zurücksetzen soll: Die Seite sollte nicht die Kontoinformationen des Anforderers anzeigen. Wenn Alice einen Link zum Zurücksetzen des Passworts anfordert und Bob die URL errät, sollte Bob keine Möglichkeit haben, zu wissen, wessen Passwort er zurücksetzt.
  6. Wenn Informationen über den Benutzer verloren gehen, sollten diese zusätzlich zur herkömmlichen Authentifizierung verwendet werden. Beispielsweise kann eine Seite die Authentifizierung eines Benutzers in Betracht ziehen, wenn ein Cookie gesetzt ist oder wenn dessen Sitzungs-ID noch gültig ist.

Unterschiedliche Ressourcen erfordern unterschiedliche Sicherheitsstufen. Wenn Sie beispielsweise ein geheimes Rezept mit einigen Freunden teilen möchten, ist es akzeptabel, eine zufällige / private URL zu verwenden, um es mit ihnen zu teilen. Wenn die Ressource jedoch verwendet werden könnte, um die Identität einer Person zu stehlen oder deren Konten bei anderen Dienstanbietern zu gefährden, wäre es Ihnen wahrscheinlich wichtiger, den Zugriff auf diese Ressource zu beschränken.

Charles Addis
quelle
4
Wenn ich das geheime Rezept für Cola mit meinem Produktentwicklungsteam teilen wollte, würde das etwas anderes erfordern als wenn ich das Rezept für den Kartoffelsalat teilen wollte, den ich den Nachbarn während einer Grillparty in der Nachbarschaft servierte. Wieder Kontext. :-)
ein CVn
7
@ MichaelKjörling Ich bin mir nicht sicher, wie jemand einen Unterschied von meinem Beitrag ableiten würde. Ganz klar stellte ich fest, dass unterschiedliche Ressourcen unterschiedliche Authentifizierungsebenen erfordern. Das Rezept für Cola wäre viel wertvoller als das Rezept für Omas Kekse.
Charles Addis
9
@CharlesAddis Offensichtlich haben Sie noch nie die Kekse meiner Oma probiert!
Brian
1
Ich denke, obwohl ich mich irren könnte, dass @ Michaels Aussage, dass Ihre 5-Punkte-Beschreibung der Eigenschaften, die eine geheime URL haben sollte, bereits übertrieben ist, um ein geheimes Rezept mit Freunden zu teilen. Insbesondere die einmalige Verwendung (und damit das Erfordernis einer separaten URL pro Freund, der auf das Rezept zugreift) ist ein erheblicher Aufwand für den zu vernachlässigenden Nutzen, insbesondere wenn auch eine Ablaufzeit vorliegt. Ich habe Ihre Antwort gelesen und gemeint: "Es ist akzeptabel, eine private URL zu verwenden, aber private URLs sollten diese 5 Eigenschaften haben", und IMO ist das etwas falsch.
Steve Jessop
1
@BenjaminHodgson das ist genau der Grund für Punkt # 5 => wenn der Link / die URL in die falschen Hände gerät, sollte es keine Informationen über den Benutzer geben, der ihn angefordert hat.
Charles Addis
8

Fast alle Authentifizierungsschemata beschränken sich darauf, zu beweisen, dass Sie ein Geheimnis kennen. Sie authentifizieren sich bei einem Dienst, indem Sie nachweisen, dass Sie ein geheimes Passwort oder eine geheime URL kennen oder ...

Mit einigen erweiterten Protokollen (z. B. OAUTH, Kerberos, ...) können Sie nachweisen, dass Sie das Geheimnis kennen, ohne es tatsächlich zu übertragen . Dies ist wichtig, da es neben der Vermutung noch weitere Möglichkeiten gibt, ein "unermessliches" Geheimnis zu erlangen.

Ich könnte im selben Internetcafé sitzen wie Sie und Ihre WLAN-Verbindung abhören, wenn Sie Ihre "nicht erratbare" URL eingeben. Wenn Sie zu diesem Zeitpunkt kein SSL verwenden oder den neuesten Fehler in Ihrer SSL-Implementierung ausnutzen können, dann würde ich auch Ihr Geheimnis kennen.

Solomon Slow
quelle
1
Um fair zu sein, gilt dies auch für die Authentifizierung oder jegliche Kommunikation.
Andy
"Abhören Ihrer WiFi-Verbindung" funktioniert auf allen Gebieten: URLs, CSRF-geschützte <form>s, JavaScript-verschlüsselte Daten (möglicherweise ist aktives Schnüffeln erforderlich). Es ist einfach zu beheben: Verwenden Sie HTTPS.
Gustavo Rodrigues
@GustavoRodrigues Zuallererst, wenn das Abhören wirklich auf irgendetwas " funktioniert ", dann würde es auf HTTPS funktionieren. Was bedeutet sonst "irgendetwas"? Oder welche Magie steckt Ihrer Meinung nach in HTTPS, die es über alles andere stellt?
Solomon Slow
2
... aber es gibt Magie, die Lauschangriffe abwehrt: Es ist die Kryptographie mit öffentlichen Schlüsseln. Ein einfaches Beispiel: Ein Dienst sendet mir eine Abfrage mit einer Zufallszahl und einem Zeitstempel. Ich unterschreibe die Aufforderung mit meinem privaten Schlüssel und gebe ihn zurück. Wenn sie meine Antwort mit meinem registrierten öffentlichen Schlüssel validieren können, beweist dies, dass ich das Geheimnis kenne (das Geheimnis ist mein privater Schlüssel), aber ich habe es bewiesen, ohne es jemals einem potenziellen Lauscher preiszugeben. Es wird dem Lauscher nicht helfen, meine Antwort erneut abzuspielen, da der Dienst niemals die gleiche Herausforderung zweimal sendet.
Solomon Slow
HTTPS (das heißt HTTP über SSL) verwendet Krypto mit öffentlichem Schlüssel, aber FYI, die beliebtesten Implementierungen von SSL, weisen eine Reihe von Fehlern auf, die es den Abhörern ermöglicht haben, trotz der Kryptografie eine ausgeglichene Leistung zu erzielen. Zwei- bis dreimal im Jahr scheinen neue Fehler (auch bekannt als "Exploits") entdeckt zu werden, und alle Entwickler aller Produkte, die SSL verwenden, müssen mit offenen Haaren herumlaufen, bis der neueste Exploit gepatcht ist. (Frag mich nicht, woher ich das weiß!)
Solomon Slow
3

Viele gute Antworten schon in diesem Thread, aber um die Frage direkt anzusprechen:

Sind diese Ansätze aus der Sicht eines Übeltäters, der auf diese Ressource zugreifen möchte, gleichwertig? Wenn nicht, was unterscheidet sie?

Lassen Sie mich eine Definition erstellen. "Authentifizierung" ist die Bereitstellung von Berechtigungsnachweisen zum Nachweis eines Identitätsanspruchs. Die Zugangskontrolle basiert normalerweise auf der Identifikation des Benutzers.

Ihre geheime URL ist nicht an einen bestimmten Benutzer gebunden. Wie andere darauf hingewiesen haben, könnte es in der Protokolldatei eines Proxys oder einer Suchanforderung, die von Google indiziert wird, oder auf viele andere Arten herauskommen.

Andererseits ist ein Passwort an ein eindeutiges Benutzerkonto gebunden. Sie können es zurücksetzen oder nur vom Heimatort des Benutzers, von einer bekannten IP-Adresse oder von einer beliebigen Anzahl anderer Steuerelemente aus verwenden.

Mit einem Benutzernamen / Passwort können Sie den Zugriff wesentlich genauer steuern.

Die Zugriffskontrolle ermöglicht einer Identität (Subjekt) den Zugriff auf eine Ressource (Objekt). In Ihrem URL-Beispiel lautet die Identität "Jeder, der die URL jemals auf irgendeine Weise erhält".

Gehen Sie mit dem Benutzernamen / Passwort, wenn Sie können. URLs treten im Laufe der Zeit auf alle möglichen unerwarteten Arten aus.

JesseM
quelle
1

Eine geheime URL ist genauso sicher wie ein geheimes Passwort. Kennwörter sind jedoch einfacher geheim zu halten als URLs, da jeder und seine Programme wissen, dass Kennwörter geheim bleiben müssen.

Beispielsweise zeigt Ihr Browser kein Kennwort auf dem Bildschirm an, speichert Kennwörter nur mit Ihrer Erlaubnis und bietet Möglichkeiten zum Schutz dieses Kennwortspeichers (z. B. durch ein Hauptkennwort entsperrter verschlüsselter Speicher). Im Gegensatz dazu werden auf dem Bildschirm immer URLs angezeigt, die möglicherweise durch den Referrer-Header übertragen werden und ohne weiteren Schutz automatisch im Browserverlauf gespeichert werden.

Ebenso protokollieren HTTP-Proxys normalerweise keine Kennwörter, während URLs normalerweise protokolliert werden.

Das Verwenden von URLs zur Authentifizierung bedeutet auch, dass die Freigabe von URLs die Authentifizierung gemeinsam nutzt, wodurch es schwierig wird, den Zugriff einzeln zu widerrufen (oder aufzuzeichnen).

Und natürlich erben geheime URLs alle Schwächen von geheimen Passwörtern. Insbesondere die Verwendung eines Kennworts zur Authentifizierung gibt dieses Kennwort an den Server und an alle weiter, die Ihre Kommunikation lesen können.

Meriton
quelle
3
Diese Antwort macht viele Annahmen, die falsch sind. Wenn Sie sich bei einer Site mit HTTPS anmelden und Ihren Benutzernamen und Ihr Kennwort eingeben, kennen die dazwischen liegenden Hops und die Proxys Ihr Kennwort nicht.
Pieter B
Mit "Abfangen Ihrer Kommunikation" meine ich die Fähigkeit, deren Inhalt zu rekonstruieren. Dies kann durch HTTPS verhindert werden oder nicht. Insbesondere die Vertrauenswürdigkeit eines einzelnen fehlerhaften Zertifikats (z. B. von einem HTTPS-Proxy eines Unternehmens, der für alle Installationen denselben privaten Schlüssel verwendet) ermöglicht es einem Angreifer, den HTTPS-Datenverkehr in der Mitte zu verwalten.
Meriton
2
Aber indem Sie das Geheimnis in der URL verschlüsseln, machen Sie HTTPS im Grunde genommen völlig unbrauchbar. Jeder Hop zwischen Client und Server hat das Geheimnis. Keine kompromittierten Zertifikate erforderlich.
Pieter B
4
Unsinn; In HTTPS wird die URL nur im verschlüsselten Stream übertragen. Sie müssen es mit der Domain oder IP verwechseln, die in den Feldern DNS-Lookup bzw. IP-Header angezeigt werden.
Meriton
1

Ein weiterer Punkt, der nirgends bemerkt wird, ist das Drosseln von "Vermutungen". Bei den meisten Kennwortauthentifizierungssystemen erhalten Sie eine begrenzte Anzahl von Versuchen, ein Kennwort für einen Benutzer zu erraten, bevor weitere Authentifizierungsversuche entweder gesperrt oder begrenzt werden.

Während Sie mit "Vermutungen" gegen Ihr URL-Schema etwas Ähnliches tun könnten, wäre es etwas schwieriger zu implementieren. Wenn Ihre URL-Generierung ein erkennbares Muster aufweist, kann es schwierig sein, jemanden daran zu hindern, sich durch Ihren 'zufälligen' URL-Bereich zu arbeiten.

Paddy
quelle
0

Es gibt einen weiteren Aspekt, den ich noch nicht erwähnt habe - URL-Kürzungen.

In einer kürzlich veröffentlichten Veröffentlichung (April 2016) wurde behauptet, dass URL-Shortener-Dienste die erhöhte Sicherheit durch zufällig generierte "nicht ermittelbare" URLs vollständig zunichte machen. Der URL-Bereich des Shorter-Dienstes ist erheblich kleiner als die zufällig generierte URL. Dies bedeutet, dass eine solche "sichere" URL, die mit einem Shorter-Dienst geteilt wird, einfacher als erwartet erraten werden kann.

Zur Veranschaulichung nehmen wir an, dass Ihre zufällige URL 128 Bit lang ist (dh eine Guid). Nehmen wir außerdem an, dass Ihr Zufallszahlengenerator wirklich stark ist und Sie diese Bits auf einheitliche Weise generieren. Das Erraten einer 128-Bit-Nummer ist sehr schwierig und kann einige Zeit in Anspruch nehmen. Ihre URL ist effektiv durch 128-Bit-Schlüssel geschützt.

Nehmen wir dann an, jemand hat diese URL im Google URL Shortener geteilt. Heute gibt dieser Dienst eine 10-stellige ID aus, die aus Buchstaben und Zahlen besteht. (26 + 10) ^ 10 ~ = 3,6 * 10 ^ 15 <2 ^ 52 - so haben wir die Schlüsselstärke effektiv von 128 Bit auf 52 Bit halbiert.

Hinzu kommt, dass die Generatoren aufgrund anderer Überlegungen nicht den gesamten Speicherplatz nutzen und Sie einen effektiven Angriff starten können, der Brute Force mit Seitenkanälen kombiniert (höchstwahrscheinlich vorab zugewiesene zufällige URL-Puffer).

Der ursprüngliche Artikel: http://arxiv.org/pdf/1604.02734v1.pdf
Ein Blog-Beitrag mit einer Zusammenfassung des Artikels (vom Autor): https://freedom-to-tinker.com/blog/vitaly/gone-in- Sechs-Zeichen-Kurz-URLs-gelten-als-schädlich-für-Cloud-Dienste /

Ran Biron
quelle
2
Nun ja, aber man würde hoffen, dass jeder, der solche Dienste für vertrauliche Daten nutzt, besser weiß, als die URLs irgendwo zu posten , auch bei einem Kürzungsdienst. Das ist nicht wirklich anders als zu sagen, dass Gah! My password/private key is too long and complex. I know! I'll just write it in a text document and put that in a zip file with an easier password.beide transparent scheitern, was man gegen die Hoffnung hofft, dass die Leute nicht albern genug wären, dies zu tun. Aber ja, in Wirklichkeit wird Ihre Warnung wahrscheinlich benötigt;)
unterstrichen_d
@underscore_d ja genau - wenn Sie dieses Thema so ausführlich kennen, dass Sie es kommentieren können, ist dies kein Blog-würdiger Punkt.
Robert Grant