Skip to content

Angriffe auf TCP/IP (14) - Fingerprinting

Beim Fingerprinting wird ein System oder Programm anhand bestimmter Charakteristika erkannt. Hier geht es zunächst um die Erkennung von Systemen anhand ihres TCP/IP-Stacks.

TCP/IP-Fingerprinting

Unter TCP/IP-Fingerprinting versteht man das Erkennen von Systemen anhand ihres TCP/IP-Stacks. Dabei wird ausgenutzt, dass verschiedene Betriebssysteme auf bestimmte TCP/IP-Pakete unterschiedlich reagieren. Beim Fingerprinting wird eine festgelegte Folge von TCP/IP-Paketen an das Zielsystem gesendet und dessen Antworten protokolliert. Durch den Vergleich dieser Daten mit den gespeicherten Fingerprints verschiedener Betriebssysteme kann das verwendete System erkannt werden.

Ein Programm zur Durchführung von TCP/IP-Fingerprinting-Scans ist der Netzwerkscanner Nmap. Wie das Fingerprinting damit funktioniert wird in der Dokumentation unter "Remote OS Detection" ausführlich beschrieben. Hier sollen daher ein kurzer Überblick reichen.

Beim IPv4-Fingerprinting sendet Nmap 16 TCP-, UDP- und ICMP-Pakete an bekannte offene und geschlossene Ports des Ziel-Rechners. Diese Pakete nutzen Mehrdeutigkeiten in den entsprechenden Standards aus, auf die die TCP/IP-Stacks der verschiedenen Systeme unterschiedlich reagieren. Jeder Test wird mindestens einmal wiederholt wenn keine Antwort eintrifft. Die Antworten auf die Tests werden aufgezeichnet und ausgewertet. Zusammen mit weiteren Informationen wie dem Timing werden daraus charakteristische Muster (die Fingerprints) ermittelt, die dann mit den bekannten Mustern von Systemen verglichen werden.

Auch über IPv6 ist ein Fingerprinting möglich, und das läuft im Grunde genau so ab wie das für IPv4, nur dass andere Tests verwendet werden und der Vergleich mit bekannten Werten anders abläuft. Während bei IPv4 der erzeugte Fingerprint direkt mit den gespeicherten Werten verglichen wird kommt bei IPv6 Maschinelles Lernen zum Einsatz,

HTTP-Fingerprinting

Es gibt nicht nur TCP/IP-Fingerprinting, sondern noch weitere Varianten. Beim HTTP- oder Webserver-Fingerprinting wird nicht das Betriebssystem, sondern der eingesetzte Webserver ermittelt. Wo beim TCP/IP-Fingerprinting Unterschiede in der Implementierung des TCP/IP-Stacks ermittelt werden, werden beim HTTP-Fingerprinting Unterschiede in der Implementierung des HTTP-Protokolls betrachtet. Die erste (mir bekannte) Beschreibung des HTTP-Fingerprintings wurde 2004 von Saumil Shah veröffentlicht.

Das Problem, mit dem HTTP-Fingerprinting zu kämpfen hat, ist die weitgehende Konfigurierbarkeit der Webserver. Während jedes Betriebssystem einen TCP/IP-Stack besitzt, der seine Charakteristiken weitgehend unabhängig von der Konfiguration des Systems beibehält, ändern sich die Antworten eines Webservers durch eine einfache Änderung der Konfigurationsdateien oder das Hinzufügen und/oder Entfernen von Plug-ins oder Modulen. So kann z.B. der 'Server'-HTTP-Header, der eigentlich die Identität des verwendeten Webservers enthält, beliebig geändert sein.

Um den Webserver zu identifizieren, werden Eigenheiten der HTTP-Implementierung getestet, z.B. die Anordnung der HTTP-Header-Felder, die Reaktion auf falsche oder verbotene Anweisungen oder die ausgegebenen Fehlermeldungen.

Das erste Tool zum HTTP-Fingerprinting war das von Saumil Shah entwickelte httprint, dessen aktuelle Version von 22.12.2005 ist. Etwas neuer sind httprecon (von 2009) und der Web-Schwachstellen-Scanner Uniscan (von 2012), der auch Webserver per Fingerprinting erkennen kann.

Damit ist der Themenkomplex "Schwachstellen in und Angriffe auf/über TCP/IP" abgeschlossen. Womit es nächste Woche weiter geht habe ich noch nicht entschieden.

Carsten Eilers

>
        </div>
                
        <footer class= Kategorien: Grundlagen

Trackbacks

Keine Trackbacks