Zurück zum Blog

Folgen und abonnieren

Erkennung von Unregelmäßigkeiten mithilfe von Client Hints

Fastly Security Research Team

Fastly Security Research Team, Fastly

Simran Khalsa

Staff Security Researcher

Jedes Mal, wenn ein Gerät einen HTTP-Request an einen Server stellt, sendet es traditionell einen User-Agent (UA) Header mit. Dieser Header enthält Informationen über das Gerät und seine Umgebung, sodass Server Analysen durchführen und ihre Antworten anpassen können. In der Praxis gibt der User-Agent Header passiv Informationen preis, die in Verbindung mit anderen Attributen zur Identifizierung eines bestimmten Nutzers verwendet werden können. Das Google Chrome Team hat einen neuen Standard namens Client Hints (CH) eingeführt, der den datenschutzfreundlichen Zugriff auf diese Informationen ermöglichen soll. 

Eine Website kann drei Arten von Client Hints anfordern: User-Agent Client Hints, Device Client Hints und Network Client Hints. In diesem Blogpost konzentrieren wir uns auf User-Agent Client Hints (UA-CH). Wir befassen uns mit ihrer Funktionsweise, untersuchen datenschutzrelevante Features und Aspekte und zeigen Ihnen, wie Sie die mangelnde Akzeptanz in der Branche sowie die Unvollständigkeit dieses neuen Standards nutzen können, um Unterschiede zu erkennen, böswillige Akteure zu entlarven und unerwünschten Traffic aufzudecken. 

Funktionsweise von Client Hints 

Es gibt zwei Kategorien von Client Hints, und zwar welche mit geringer und welche mit hoher Entropie. Client Hints mit geringer Entropie enthalten grundlegende Informationen, die von vielen Nutzern verwendet und standardmäßig bei jeder Anfrage übermittelt werden. Client Hints mit hoher Entropie enthalten zusätzliche Details. Da sie mehr Informationen enthalten, müssen sie vom Server explizit angefordert werden.

Ein Server gibt an, an welchen Client Hints er interessiert ist, indem er sie im Antwort-Header Accept-CH auflistet. Wenn ein Client diesen Antwort-Header erhält, fügt er die aufgelisteten Client Hint Header zu nachfolgenden Requests hinzu.  

Schauen wir uns im folgenden Beispiel an, wie das Ganze funktioniert. 

Schritt 1: Der Server fordert bestimmte Hints mit hoher Entropie an, indem er sie im Antwort-Header Accept-CH auflistet:

Accept-CH: Sec-Ch-Ua-Platform-Version, Sec-Ch-Ua-Bitness

Schritt 2: Der Browser sendet bei nachfolgenden Requests sowohl Client Hints mit geringer Entropie als auch die angeforderten Hints mit hoher Entropie zurück:

Sec-CH-UA: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "macOS"
Sec-CH-UA-Platform-Version: "12.6.0"
Sec-CH-UA-Bitness: "64"

Client Hints sind auch in JavaScript über die User-Agent Client Hints API verfügbar. Probieren Sie es selbst aus. Starten Sie einen Browser, der Client Hints unterstützt, und experimentieren Sie mit ihnen auf dieser Testseite

Datenschutzfreundliche Features

In der Vergangenheit wurden sowohl Typen mit geringer als auch mit hoher Entropie im UA-String zusammengefasst und standardmäßig für Erst- und Drittanfragen an die Server gesendet.

Hier sehen wir ein Beispiel für einen UA-String bei einer Anfrage von einem Chrome Browser auf einem Mac OS Gerät:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/106.0.5249.62 Safari/537.36

Die nachfolgende Tabelle ordnet die im UA-String enthaltenen Werte der jeweiligen CH-Entropiekategorie zu.

Die UA-CH-Spezifikation zielt darauf ab, die Granularität der UA-Strings zugunsten eingeschränkter Nutzerinformationen zu verringern und den Zugang zu Hints mit hoher Entropie zu schützen. Die Spezifikation legt außerdem fest, dass Client Hints nur über sichere TLS-Verbindungen übermittelt werden sollen. Darüber hinaus werden Client Hints nur bei Requests gleichen Ursprungs gesendet. Um originübergreifende Anfragen (z. B. https://thirdparty.example/tracking.js) zuzulassen, muss bei der Implementierung eine explizite Erlaubnis über den Permissions-Policy Header erteilt werden. 

Umgekehrt können diese Datenschutzvorteile aber auch missbräuchlich genutzt werden. Client Hints bieten eine zusätzliche Möglichkeit, auf personenbezogene Informationen zuzugreifen. Zum Beispiel könnte eine erste Partei Ihren Browser anweisen, alle Werte im Hintergrund an Dritte zu senden, was andernfalls das Einfügen von Skripten erfordern würde. Dies führt dazu, dass mehr personenbezogene Daten an mehr Parteien weitergegeben werden, ohne dass die meisten Nutzer dies überhaupt bemerken.

Darüber hinaus können TLS-terminierende Systeme wie Proxies, CDNs und Firewalls auf diese Informationen zugreifen. Es ist wichtig, dass Sie die Datenschutzrichtlinien der Komponenten, auf denen Ihre Infrastruktur basiert, sorgfältig lesen und verstehen, bevor Sie die Einführung dieses Standards in Erwägung ziehen.

Erkennbare Unregelmäßigkeiten 

User-Agent-Strings werden seit langem verwendet, um Security-Experten eine Möglichkeit zu bieten, Unregelmäßigkeiten zu erkennen, um riskantes Verhalten zu identifizieren, Betrug zu bekämpfen und Sicherheitslücken aufzudecken. Die Überprüfung des UA-Strings ist jedoch eine bekannte Technik, und böswillige Akteure versuchen häufig, ihre Aktivitäten durch Verwendung eines legitimen UA-Strings zu verschleiern.

Einer der Vorteile von Client Hints ist, dass sie sich noch im Versuchsstadium befinden. Browser, die Client Hints unterstützen, senden also vorerst weiterhin bei jeder Anfrage sowohl den üblichen UA-String als auch Client Hints mit. Aus besagtem Grund sind Client Hints aber auch weniger bekannt und werden häufig übersehen. Durch die Kombination der CH-Informationen mit dem UA-String lassen sich Unregelmäßigkeiten erkennen und böswillige Akteure sowie unerwünschter Traffic enttarnen. 

Burp Suite, ein sehr beliebtes Tool für Penetrationstests, wird beispielsweise mit eigenem Chromium Browser ausgeliefert. Der Standard-UA-String lässt sich derzeit wie folgt identifizieren:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/106.0.5249.62 Safari/537.36

Wie sich dem nachstehenden Request entnehmen lässt, führt dies zu einer erkennbaren Unregelmäßigkeit, wenn der Nutzer kein Windows verwendet:

GET /headers HTTP/2
Host: user-agent-client-hints.glitch.me
Sec-Ch-Ua: "Not;A=Brand";v="99", "Chromium";v="106"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/106.0.5249.62 Safari/537.36

Anhand dieser Informationen haben wir Angriffsdaten über einen Zeitraum von einer Stunde untersucht und festgestellt, dass etwa 8 % aller signalisierten Requests mit einem UA-String gesendet wurden, der dem Standard-UA-String des eingebetteten Browsers von Burp ähnelte. Eine weitere Analyse ergab, dass über 90 % der Anfragen mit Unregelmäßigkeiten bei den Client Hints, die bekannte Betriebssysteme darstellen, Linux als Plattform angaben.

Man könnte annehmen, dass dieser Angriffs-Traffic von Burp ausgeht, das auf Kali Linux läuft – einer Debian-basierten Open-Source-Distribution für Penetrationstests. Die Verwendung dieser Informationen zusammen mit anderen Indikatoren wie JA3 könnte ein noch höheres Maß an Gewissheit liefern. 

Weitere Untersuchungen haben außerdem ergeben, dass schädliche Payloads in die Client Hint Header injiziert wurden, darunter SQL Injection, Command Injection und Cross-Site-Scripting (XSS). Es ist wichtig, sich darüber im Klaren zu sein, dass es sich bei Client Hints um Felder in HTTP-Headern handelt. Es gibt also nichts, was einen Nutzer daran hindert, diese Felder genau wie einen UA-String zu manipulieren. Da die CH-Header in der Tat nutzergesteuert sind, kann dies zu einer Reihe von Problemen führen. Ein Angreifer kann über diesen Vektor eine Vielzahl von Schwachstellen ausnutzen, wenn der Server den CH-Headern implizit vertraut und es versäumt, sie ordnungsgemäß zu validieren oder zu umgehen.

Fazit

Client Hints sind ein aufstrebender Standard, der sich noch im Versuchsstadium befindet. Aufgrund seiner mangelnden Akzeptanz in der Branche und seiner Unvollständigkeit eröffnet er einige interessante Forschungsbereiche. Seine datenschutzfreundlichen Features bieten eine Reihe von Vorteilen, doch es gibt auch Bedenken hinsichtlich eines möglichen Missbrauchs dieser Vorteile. Und obwohl sich dieser Standard immer mehr durchsetzt, sind traditionelle Ansätze zur Übermittlung von Geräteinformationen mit geringer und hoher Entropie nach wie vor im Umlauf. Kombiniert man diese Daten, kann man eine Reihe überraschender Entdeckungen machen.