sicherheit web
Verschlüsselte Verbindungen kann man nicht lesen ohne den Schlüssel zu kennen.
Die Gzip-Komprimierung die im Web genutzt wird komprimiert am besten wenn sich wiederholende Zeichenketten im zu komprimierenden Dokument befinden. Das komprimierte Dokument wird entsprechend kleiner um so öfter sich wiederholende Zeichenketten vorhanden sind.
Es wird ein Request (durch den Angreifer) im Kontext einer bestehenden Benutzer-Session gesendet. Der Request enthält eine geratene Zeichenkette, von der vermutet wird, dass sie in den Daten auf der Seite vorkommt. Dabei wird der die Zeichenfolge als Eingabe zum Beispiel in ein Suchfeld eingegeben. Außerdem wird dem Server mitgeteilt das der Client gzip-Komprimierung unterstützt.
Der Response wird die gesendete Zeichenkette wieder enthalten(zum Beispiel weil sie in einem Suchfeld als Teil der Suche war un din den Suchergebnissen wieder auftaucht).
Der Angreifer kann zwar den Response nicht lesen, weil er verschlüsselt ist, aber wenn er an einer entsprechenden Stelle im Netzwerk sitzt kann er den verschlüsselten Response empfangen.
Wenn er mit mehreren Zeichenketten gleicher Länge zuvor getestet hat, kann er sagen wie groß das Antwort-Paket sein wird, wenn die Zeichenkette auf der Ergebnisseite nur einmal vorkommt (einmal → die geratene Zeichenkette ist nur Teil der Antwort weil sie im Suchfeld steht/eine entsprechende Fehlerseite angezeigt wird die den String enthält) oder mehrfach vorkommt (das Paket wird kleiner, weil Kompression erhöht).
Der Angreifer kann viele Requests senden und dadurch mehr und mehr Daten erraten.
Grundsätzlich alle die auf einer Website sind, der Angreifer muss nur lang genug raten können.
Es können aber vor allem auch Security-Tokens erraten werden, wenn sich diese im Body des Responses befinden (folglich also auch komprimiert werden und somit erkannt werden können wie Website-Inhalte).
Errät ein Angreifer das Token kann er gegebenfalls die Session übernehmen und braucht den Rest der Seite nicht mehr zu erraten.
Es gibt einen ähnlichen Angriff der die (selten aktive) Komprimierung im SSL-Protokoll selbst als Angrifsvektor benutzt. Funktioniert im Prinzip gleich, nur ist da nicht im http die Komprimierung aktiviert, sondern auf TLS/SSL-Ebene.