HTTP2 und TLS
HTTP2 und TLS
Öffnen Sie die Datei HTTPs-NYTimes.pcapng
- Welche TCP Verbindungen verwenden HTTP/2?
Datei verkleinern
Es wird schnell auffallen, dass die Datei etwas länger zum Laden benötigt. Der Grund ist schnell ersichtlich, wenn man einen Blick in die Verbindungsstatistiken wirft. Ein Download, der über die gesamte Zeit geht, überträgt 184 MB.
Wir filtern auf die genannte Verbindung
Es stellt sich heraus, dass es sich um einen Cent OS ISO Download handelt
Da in der Aufgabenstellung klar gesagt wird, dass uns nur verschlüsselter Verkehr (und andere Protokolle, die Hinweise geben wie DNS) interessiert, können wir diesen Download herausfiltern, um uns das Leben einfacher zu machen. Dies geht zum Beispiel per Tshark
tshark -r .\HTTPs-NYTimes.pcapng -Y "!(ip.addr==192.168.1.140 && tcp.port==20520 && ip.addr==193.144.61.75 && tcp.port==80)
" -w .\HTTPs-NYTimes-filtered1.pcapng
Die resultierende Datei ist wesentlich handlicher
Welche Webseiten verwenden HTTP2?
Diese Frage lässt sich nur beantworten, indem man die Verbindungen entschlüsselt. Hierzu benutzen wir das HTTPs-NYTimes-sslkeylogfile.txt Keylog file.
Danach können wir auf HTTP2 filtern.
Es macht Sinn eine weitere Spalte für den Host Header, bei HTTP2 jetzt Authority Header hinzuzufügen (http2.headers.authority
).
Es gibt jetzt mehrere Wege alle Domänen zu finden, die HTTP2 benutzen. Man könnte zum Beispiel die Paketliste als CSV exportieren.
Einfacher ist es auf der Kommandozeile mit Tshark (hier Powershell).
Falls Sie Ihre Pfad Variable nicht für Wireshark konfiguriert haben, geben Sie folgenden Befehl in jeder Powershell Session ein, damit nicht der absolute Pfad aufgerufen werden muss
$env:Path += ";C:\Program Files\Wireshark"
Zunächst injizieren wir das SSL Keylogfile in das PCAP. Dies macht es einfacher, da wird nicht mehr abhängig vom Wiresharkprofile und dessen Einstellungen sind.
editcap --inject-secrets tls,.\HTTPs-NYTimes-sslkeylogfile.txt .\HTTPs-NYTimes-filtered1.pcapng .\HTTPs-NYTimes-filtered1-w
-keys.pcapng
Danach extrahieren wir alle Hosts und deduplizieren diese.
tshark -r .\HTTPs-NYTimes-filtered1-w-keys.pcapng -T fields -e http2.headers.authority -Y "http2.headers.authority" | sort -Unique
tshark -r .\HTTPs-NYTimes-filtered1-w-keys.pcapng -T fields -e http2.headers.authority -Y "http2.headers.authority" | sort -Unique | measure
24 Hosts verwenden HTTP2.
Ohne sslkeylog file
Deaktivieren Sie das SSL Keylog File und öffnen Sie die Datei HTTPs-NYTimes-filtered1.pcapng
Wenn wir das SSL Keylog File deaktivieren, können wir versuchen, nur anhand des verschlüsselten TLS die http/2 Verbindungen zu finden. Wir fügen dazu die Spalten tcp.stream
und tls.handshake.extensions_server_name
hinzu. Dann filtern wir auf h2 im ALPN beim TLS Handshake.
Wie sehen nun sowohl Client Hello als auch Server Hello. Leider enthält nur das Client Hello ein SNI. Bei dem Server Hello ist dies immer leer. Wir können jedoch anhand der Stream ID das Client Hello mit dem Server Hello korrelieren. Das bedeutet, das wir nach tcp.stream sortieren und dann schauen welches Client Hello mit einem Server Hello beantwortet wird. Da wir bereits auf h2
gefiltert haben bedeutet dies, dass beide Seiten http/2 unterstützen und es ist davon auszugehen, dass dann HTTP/2 verwendet wird.
Bei TLS 1.3 werden mehr Teile des Handshakes verschlüsselt, so auch der ALPN Teil. Daher können wir hier nicht feststellen, ob der Server ALPN unterstützt, ohne die Pakete zu entschlüsseln.
Alle Server Hellos, bei denen der ALPN sichtbar ist sind TLS1.2 (hier haben wir vorher das SSL Keylogfile deaktiviert)
Im TLS Handshake sehen wir „Application Data“
Hier das gleiche im Decode
Diese verschlüsselte Application Data enthält die ALPN Extension und kann nur mit dem SSL Keylog File sichtbar gemacht werden. Hier das gleiche Paket entschlüsselt:
Mit sslkeylog file anhand des Handshakes
Wir können die Aufgabe also anhand des TLS Handshakes lösen. Hierzu verwenden wir wieder die Datei HTTPs-NYTimes-filtered1-w-keys.pcapng.
In Wireshark sehen wir welche Handshakes h2 unterstützen (wieder anhand des tcp.streams
und der SNI), jetzt jedoch auch mit TLS1.3.
Mit Powershell kann man einen schönen Einzeiler schreiben, der alle Hosts raussucht, die http/2 verwenden, diesmal nur anhand des Handshakes.
tshark -r .\HTTPs-NYTimes-filtered1-w-keys.pcapng -Y '(tls.handshake.extensions_alpn_str == "h2")' -T fields -E separator=',' -e tcp.stream -e tls.handshake.extensions_server_name | ConvertFrom-Csv -Delimiter ',' -Header Stream,Domain | Group-Object Stream | Where-Object Count -GT 1
Wieviele Bilder sind in der nytimes Seite per image Tag eingebunden?
Hierzu müssen wir die Indexseite der NYTimes entschlüsseln und speichern und im Texteditor nach dem HTLM Tag <img
suchen. Leider unterstützt Wireshark bislang noch nicht den Export von http/2 Objekten. Daher müssen wir hier manuell vorgehen.
Die erste Verbindung zur NYTimes beginnt in Paket 236. Wir isolieren diese Verbindung. In Paket 320, sehen wir das GET Request nach dem Root (GET /
).
Bei http können wir einfach nach http.response filtern (mit Reassembly), um das letzte Antwortpaket zu erhalten. Bei HTTP2 können wir dazu http2.body.reassembled.length
benutzen
Der Frame 583 enthält die zusammengefügte Antwort.
Wählen Sie im Decode „Line-based text data: text/html“ aus. Achten Sie darauf, dass im Hexview im Reiter „Uncompressed entity body“ alles augewählt ist. Klicken Sie dann im „Datei“ Menü auf „Packetbytes exportieren…“
Speichern Sie die Packetbytes mit dem Namen „nytimes-index.html“. Jetzt können wir in der exportierten Datei nach dem entsprechenden Tag suchen
Es sind 6 Bilder per Image Tag eingebunden.
Welche Domänen können direkt NYtimes zugeschrieben werden?
Gemeint sind Webseite, CDN, nicht verlinkte externe Inhalte. Hierfür können wir DNS, TLS Header und http/2 header betrachten.
tshark -r .\HTTPs-NYTimes-filtered1-w-keys.pcapng -T fields -e "dns.qry.name" -Y "dns.qry.name" > dns.txt
tshark -r .\HTTPs-NYTimes-filtered1-w-keys.pcapng -T fields -e "http.host" -Y "http.host" > http.txt
tshark -r .\HTTPs-NYTimes-filtered1-w-keys.pcapng -T fields -e "http2.headers.authority" -Y "http2.headers.authority" > http2.txt
tshark -r .\HTTPs-NYTimes-filtered1-w-keys.pcapng -T fields -e "tls.handshake.extensions_server_name" -Y "tls.handshake.extensions_server_name" > tls.txt
Danach können wir die Dateien manuell betrachten oder wieder Skripting bemühen.
Get-Content .\dns.txt, .\http.txt, .\http2.txt, .\tls.txt | Group-Object | Sort-Object Count | Select-Object Count,Name | Where-Object {$_.Name -notlike '*arpa*'} | Where-Object {$_.Name -like '*ny*'}
Zusätzlich können wir noch Reverse DNS Lookups machen (Achtung! Tshark geht hierfür auf das Netzwerk)
tshark -r .\HTTPs-NYTimes-filtered1-w-keys.pcapng -T fields -e "ip.src_host" -Y "ip.src_host" -N nN
Dies gibt uns in diesem Fall nicht mehr Informationen, kann jedoch in anderen Fällen hilfreich sein:
tshark -r .\HTTPs-NYTimes-filtered1-w-keys.pcapng -T fields -e "ip.src_host" -Y "ip.src_host" -N nN > .\reversedns.txt
Get-Content reversedns.txt,.\dns.txt, .\http.txt, .\http2.txt, .\tls.txt | Group-Object | Sort-Object Count | Select-Object Count,Name | Where-Object {$_.Name -notlike '*arpa*'} | Where-Object {$_.Name -like '*ny*'}