Errate meinen geteilten Link
4 Min. Lesezeit – Das Teilen von Links ist eine gängige Methode, um Dateien über öffentlich zugängliche URLs für nicht authentifizierte Benutzer freizugeben. Haben Sie sich jemals gefragt, wie sicher das Teilen von Links eigentlich ist?

Das Teilen von Links ist eine gängige Methode, um Dateien über öffentlich zugängliche URLs für nicht authentifizierte Benutzer freizugeben. Haben Sie sich jemals gefragt, wie sicher das Teilen von Links eigentlich ist?
Betrachten wir die folgende URL-Struktur: https://example.com/{valid token}, die je nach gültigem Token auf verschiedene sensible Webinhalte weiterleitet. Die gültigen Token werden in der Regel vom Server mithilfe einer Hash-Funktion zufällig generiert und sollten für Aussenstehende schwer zu erraten sein.
Die Frage ist nun: Kann ein Angreifer durch Brute-Force-Angriffe auf verschiedene Token in dieser URL ein {valid token} finden und sensible Informationen abgreifen? Genauer gesagt: Wie hoch ist die Wahrscheinlichkeit, nach n verschiedenen Versuchen mindestens eine gültige URL zu finden, wenn es k gültige und unterschiedliche URLs gibt, deren zugehörige geheime Token Hex-Strings der Länge l sind, die alle eindeutig und gleichmässig verteilt sind?

Definieren wir Surl als die Menge aller möglichen URLs der Form https://example.com/{token}, wobei token ein beliebiger Hex-String der Länge l ist. Daraus können wir eine Teilmenge Sshared links (siehe Abb. 1) bilden, die Menge aller gültigen URLs der Form https://example.com/{valid token}, wobei valid token ein Hex-String der Länge l ist, sodass https://example.com/{valid token} auf sensible Informationen weiterleitet.
Definieren wir die Folge von Zufallsvariablen (Xi : i ∈ {1, …, k}) als die Sequenz der URLs, die nach k gleichmässig zufälligen Ziehungen ohne Zurücklegen aus Surl ausgewählt wurden. Wir können die Wahrscheinlichkeit dann wie folgt berechnen:

Nebenbei bemerkt kann das in Gl. 1 erzielte Ergebnis auch mithilfe der kumulativen Verteilungsfunktion (CDF) der hypergeometrischen Verteilung ermittelt werden:

Betrachten wir nun ein reales Szenario und berechnen diese Wahrscheinlichkeit mithilfe eines Python-Skripts (siehe Skript 3). Microsoft OneDrive ermöglicht es Ihnen, Dateien oder Ordner (mit spezifischen Zugriffsberechtigungen) über Link-Sharing freizugeben.
Dabei wird eine URL mit einer eindeutigen ID der Länge 46 erzeugt, die aus einer Menge von Gross- und Kleinbuchstaben, Zahlen, Bindestrichen und Unterstrichen besteht, d. h. {a − z, A − Z, 1 − 9, −, _}.
Wir gehen von folgenden Schätzungen aus:
1. Ein böswilliger Angreifer führt einen Brute-Force-Angriff mit 10 000 Anfragen pro Sekunde über eine ganze Woche hinweg durch. Dies ist eine grosszügige Obergrenze, die etwa 1 TB an HTTP-Datenverkehr entspricht.
2. Es gibt etwa |Sshared links| := 108 verschiedene freigegebene Links, die aus Surl generiert werden, wobei |Surl| = (26 ∗ 2+ 10 + 2)^46
Wir erhalten eine Wahrscheinlichkeit von 4,9∗10−66. Wie man sieht, ist das Ereignis aus Sicht einer probabilistischen Risikoanalyse äusserst unwahrscheinlich, und wir sind in dieser Hinsicht ziemlich sicher. Um es zu verdeutlichen: Diese Wahrscheinlichkeit ist in etwa vergleichbar damit, ein ganz bestimmtes Atom aus allen Atomen unserer Galaxie (≈ 10^68) auszuwählen.
In einem realen Szenario können jedoch verschiedene Dinge schiefgehen. Hier ist eine nicht erschöpfende Liste:
1. Fehlende SSL-Verschlüsselung beim Zugriff auf den freigegebenen Link. Dies führt dazu, dass die aufgerufene URL durch Mitlesen (Eavesdropping) preisgegeben werden kann. Heutzutage sind die meisten Verbindungen durch SSL gesichert, wodurch URLs verschlüsselt übertragen werden.
2. Leicht erratbare Token (z. B. wenn das Token durch einen einfachen Iterator erzeugt wird;
https://example.com/0000,
https://example.com/0001 usw.)
3. Minderwertiger oder schlecht implementierter Zufallszahlengenerator für Token. Weitere Details hierzu finden Sie im Blogbeitrag von crazycontini.
4. Der freigegebene Link (oder das Token) kann nach aussen dringen. Dies kann beispielsweise durch Crawling-Bots, den Referer-Header, Web-Logs, Browserverlauf, Add-ons, Cache oder durch „Shoulder Surfing“ (Mitlesen über die Schulter) geschehen.
5. Meist mangelt es bei der Linkfreigabe an Nachvollziehbarkeit, da häufig Funktionen wie Ablaufdaten oder Zugriffsprotokolle fehlen.
6. Jede Schwachstelle, die eine Pfadaufzählung auf dem Webserver ermöglicht, führt zum Durchsickern aller externen Links.

Referenzen
Crazycontini. Warnhinweis: UUIDs erfüllen im Allgemeinen keine Sicherheitsanforderungen.


