__ __ __ .-----.--.--.----.| |.--.--.--| |.-----.--| | .-----.----.-----. | -__|_ _| __|| || | | _ || -__| _ |__| _ | _| _ | |_____|__.__|____||__||_____|_____||_____|_____|__|_____|__| |___ | by ProXy - member of excluded-team |_____| 09.02.2003 - v.1.0 18.12.2003 - v.1.1 1.0 - WTF? 1.1 - Was ist Fingerprinting? 1.2 - Was ist Footprinting? 2.0 - Fingerprinting - TTL Request 2.1 - Fingerprinting - IP Stack 2.2 - Fingerprinting - Window Size 2.3 - Fingerprinting - ICMP Error Msg 3.0 - Passives Fingerprinting 4.0 - Footprinting - Ports 4.1 - Footprinting - FTPD 4.2 - Footprinting - HTTPD 4.3 - Footprinting - E-Mail 4.4 - Footprinting - Sonstige Server 5.0 - Finger- & Footprinting Tools 6.0 - Tarnen und Verschleiern 7.0 - Credits ============================================================= 1.0 - Wtf !? ======================================================================== 1.1 - Was ist Fingerprinting? ======================================================================== Fingerprinting nennt man das erkennen des Betriebssystems eines entfernten Rechners anhand TCP-Sequenzen. ======================================================================== 1.2 - Was ist Footprinting? ======================================================================== Footprinting nennt man das auslesen des Betriebssystems aus Welcome- und Infobannern (Bannergrabbing), von am Rechner laufenden Daemonen oder anhand offener Ports. /FINGERPRINTING ======================================================================== 2.0 - TTL Fingerprinting ======================================================================== Ihr kennt ja sicher den Network Mapper (besser bekannt unter NMAP), das ist ein Portscanner fuer Linux welcher auch OS-Fingerprinting und diverse andere Scan-Methoden unterstuetzt. Mit NMAP kann man anhand des "-O" Parameters das Betriebssystem des Zielrechners mit ziehmlicher Genauigkeit ermitteln. einige von euch haben sich sicher schon gefragt wie NMAP das wohl macht? ;) Ganz einfach, jeder Host der zB durch einen Ping angesprochen wird liefert ICMP Sequenzen zurueck. Damit wird fuer gewoehnlich festgestellt ob die von uns abgesandten Daten auch am Zielrechner ankommen. Bei einem Ping werden auch die TTL-Werte angezeigt (Time-to-Live) welche die Lebensdauer eines Datenpacketes in Stationsdurchlaeufen bis zum Ziel zeigen. Der Standard-TTL-Wert sollte 64 sein, jedoch hielten sich nicht alle Betriebssystem-Hersteller daran und man kann in vielen Faellen anhand des TTL Wertes das Betriebssystem festellen. Also ein einfacher Ping wuerde reichen! :) Windows-Rechner haben meistens einen TTL-Wert von 128 (pong) und Linux-Rechner liegen etwas darueber mit ca. 255. Die Coder und Mitarbeiter beim Projekt 'nmap' haben viel Aufwand in diese Sache investiert und eine Menge Rechner gescannt um die Genauigkeit von OS-Fingerprinting zu verfeinern und nmap zu dem praezisen Tool zu machen das es heute ist. uebersicht mit den verwendeten TTL-Werten: OS: | TTL: ------------------------+----- Cisco Router ISO 12.2.1 | 255 QNX Neutrino OS | 255 Linux | 255 Solaris 2.x | 255 Windows ME | 128 Windows NT 4.0 | 128 Windows 2000 | 128 Windows XP Professional | 128 VMS/Wollongong | 128 VMS/UCX | 128 NetGear FM114P | 64 OS/2 TCP/IP 3.0 | 64 HP/UX 10.01 | 64 Linux | 64 VMS/Multinet | 64 FreeBSD 2.1R | 64 AIX | 60 Irix 5.3 | 60 Irix 6.x | 60 MacOS/MacTCP 2.0.x | 60 OSF/1 V3.2A | 60 SunOS 4.1.3/4.1.4 | 60 Ultrix V4.1/V4.2A | 60 VMS/TCPware | 60 DEC Pathworks V5 | 30 HP/UX 9.0x | 30 Windows for Workgroups | 32 Windows 95 | 32 Windows 98 | 32 Windows 98 SE | 32 Windows NT 3.51 | 32 ======================================================================== 2.1 - IP Stack Fingerprinting ======================================================================== Bei dieser Art von Remote OS Detection werden verschiedene Pakete an den Zielrechner gesendet und die Replys dann mit den Ergebnissen diverser Betriebssystemen verglichen. TEST | DESCRIPTION ------+-------------------------------------------------------- TSeq: | Eine Reihe SYN-Pakete werden zum Zielrechner geschickt | um zu sehen wie TCP-Sequenz-nummer abgeleitet wird. ------+-------------------------------------------------------- T1: | Ein SYN-Paket wird zu einem geoeffneten TCP-Port geschickt. ------+-------------------------------------------------------- T2: | Ein NULL-Paket wird zu einem geoeffneten TCP-Port geschickt. ------+-------------------------------------------------------- T3: | Ein SYN,FIN,PSH und URG-Paket wird zu einem geoeffneten | TCP-Port geschickt. ------+-------------------------------------------------------- T4: | Ein ACK-Paket wird zu einem geoeffneten TCP-Port geschickt. ------+-------------------------------------------------------- T5: | Ein SYN-Paket wird zu einem geschlossenen TCP-Port geschickt. ------+-------------------------------------------------------- T6: | Ein ACK-Paket wird zu einem geschlossenen TCP-Port geschickt. ------+-------------------------------------------------------- T7: | Ein SYN,FIN,PSH und URG-Paket wird zu einem geschlossenen | TCP-Port geschickt. ------+-------------------------------------------------------- PU: | Ein Paket wird zu einem geschlossenen UDP-Port geschickt. Und hier einige Beispiel-Outputs fuer den Vergleich: Fingerprint Windows 98 v2 TSeq(Class=TD%gcd=<6%SI=FFF) T1(DF=Y%W=402E%ACK=S++%Flags=AS%Ops=MNWNNT) T2(DF=N%W=0%ACK=S%Flags=AR%Ops=) T3(DF=Y%W=402E%ACK=S++%Flags=AS%Ops=MNWNNT) T4(DF=N%W=0%ACK=O%Flags=R%Ops=) T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=) T6(DF=N%W=0%ACK=O%Flags=R%Ops=) T7(DF=N%W=0%ACK=S++%Flags=AR%Ops=) PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) Fingerprint Linux 2.0.38 TSeq(Class=TR) T1(DF=N%W=7FE0%ACK=S++%Flags=AS%Ops=ME) T2(Resp=N) T3(DF=N%W=7FE0%ACK=S++%Flags=ASF%Ops=ME) T4(DF=N%W=0%ACK=O%Flags=R%Ops=) T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=) T6(DF=N%W=0%ACK=O%Flags=R%Ops=) T7(DF=N%W=0%ACK=S%Flags=AR%Ops=) PU(DF=N%TOS=0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) Fingerprint Linux 2.2.16 TSeq(Class=RI%gcd=<6%SI=>FFFF) T1(DF=Y%W=7F53%ACK=S++%Flags=AS%Ops=MENNTNW) T2(Resp=N) T3(DF=Y%W=7F53%ACK=S++%Flags=AS%Ops=MENNTNW) T4(DF=N%W=0%ACK=O%Flags=R%Ops=) T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=) T6(DF=N%W=0%ACK=O%Flags=R%Ops=) T7(DF=N%W=0%ACK=S%Flags=AR%Ops=) PU(DF=N%TOS=0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) Nun die Auswertung: -----+-----------------------------+--------------------------------------- Resp | Y = There was a response | Whether or not the host responded | N = There was no response | to the test packet by sending a reply -----+-----------------------------+--------------------------------------- DF | Y = DF was set | Whether or not the host responding | N = DF was not set | to the test packet sent the | | "Don’t Fragment" bit in response. -----+-----------------------------+--------------------------------------- W | Can be a two-byte integer | Window advertisement size sent | expressed in hexadecimal. | by the host responding to | | the test packet. -----+-----------------------------+--------------------------------------- ACK | 0 = ack zero | The acknowledgement sequence | S = ack sequence number | number response type. | S++ =ack sequence number +1 | -----+-----------------------------+--------------------------------------- Flags| S = SYN F = FIN | Indicate what flags were | A = ACK U = URG | set in the responding packet. | R = RST P = PSH | -----+-----------------------------+--------------------------------------- Ops | M = MSS | Options sent back by the host | E = Echoed MSS | responding to the test packet. | W = Window Scale | There can be any number of options | T = Timestamp | set (including none) in any order. | N = No Option | -----+-----------------------------+--------------------------------------- ======================================================================== 2.2 - Window Size ======================================================================== Hierbei wird auf die TCP Fenster-Groesse von Antwort-Paketen geachtet. Bsp von oben: T1(DF=Y%W=402E%ACK=S++%Flags=AS%Ops=MNWNNT) "W=402E" (= Standard fuer Windows) ======================================================================== 2.3 - ICMP Error Message ======================================================================== Eine weitere Methode waere es ICMP Pakete an einen geschlossenen Port zu senden und auf die Zeit zu achten die das System braucht um diese mit einer "Unreachable Port" Error-Message zu beantworten. Die reply-time ist von OS zu OS unterschiedlich und man kann so das Ziel-OS ausfindig machen. --- Weiters ist noch zu erwaehnen das meist einige dieser Techniken gemeinsam verwendet werden um so die Genauigkeit zu erhoehen. ======================================================================== 3.0 - Passives Fingerprinting ======================================================================== Passives Fingerprinting nennt man die Methode Informationen ueber das Betreibssystem des 'Angreifers' zu bekommen ohne das eigens Pakete an ihn versendet werden muessen. Passives Fingerprinting basiert auf die Auswertung der vom Sniffer aufgefangenen Pakete die vom Angreifer gesendet wurden und funktioniert im Prinzip genau wie aktives Fingerprinting. Zum Beispiel bei Honeypots findet diese Technik ihre Anwendung da passiv Ports gemappt werden koennen und Betreibssysteme erkannt werden. Das passive Fingerprinting hat sich zwar noch nicht so weit wie das aktive entwickelt, es wird aber daran gearbeitet. /FOOTPRINTING ======================================================================== 4.0 - Port Footprinting ======================================================================== Auch anhand offener Ports kann man ein Betriebssystem erkennen, zB fuer Windows typisch: Port 135 - epmap Port 139 - Micosoft Netzwerkumgebung (Netbios) Port 445 - microsoft-ds port 1025 - blackjack ... ======================================================================== 4.1 - FTPD Footprinting ======================================================================== Ist am Zielrechner Port 21 geoeffnet dann bedeutet dies meist das dort ein ftp-daemon laeuft, am einfachsten ist es sich via Telnet als "anonymer user" (falls erlaubt) darauf einzuloggen und die Begruessungszeile abzuwarten. Dort wird meist das OS und die Version des FTP-Servers mitangezeigt. Hier zwei Beispiele: (Bsp-1:) 220 xxx.xxx.xxx.xxx Microsoft FTP Service (Version 5.0). (Bsp-2:) 220 xxx.xxx.xxx.xxx FTP server [SunOS 5.8] ready. Es gibt aber noch eine andere Methode das OS ausfindig zu machen wenn ein FTP-Server aktiv ist. Man loggt sich als anonymer User ein und gibt dann den Befehl "literal syst" ein. Anschliessend sollte das OS ausgegeben werden: (Bsp-1:) 215 Windows_NT (Bsp-2:) 215 UNIX Type: L8 Version: BSD-198911 ======================================================================== 4.2 - HTTPD Footprinting ======================================================================== Falls Port 80 geoeffnet ist laeuft ein HTTP-Server auf dem Rechner und man kann mittels eines simplen Tricks Typ, Version, OS und evtl. noch mehr feststellen... Dazu oeffnet man Telnet um sich mit dem server zu verbinden: telnet xxx.xxx.xxx.xxx 80 und gibt danach folgendes ein: options / http/1.1 host: xxx.xxx.xxx.xxx (die IP/Domain habe ich durch xxx.xxx.xxx.xxx ersetzt) Anschliessend zweimal auf Enter gedrueckt und folgende Information sollte zum Vorschein kommen: HTTP/1.1 501 Method Not Implemented Date: Tue, 21 Jan 2003 02:38:13 GTM Server: Apache/1.3.6.3 (Unix) Allow: GET, HEAD, OPTIONS, TRACE Connection: close Content-Type: text/html Jedoch darf die "versions information"-Abfrage am Webserver nicht deaktiviert sein, da sonst nichts angezeigt wird. Bei den meisten Webservern ist das aber sowieso nicht der Fall, da kaum jemand darauf achtet. ======================================================================== 4.3 - E-MAIL Footprinting ======================================================================== Schreibe an die Person die am entfernten Zielrechner sitzt eine E-Mail, warte auf die Antwort und lass dir von deinem E-Mail Clienten den vollstaendigen Header anzeigen. Suche danach nach der Zeile "X-mailer=" und schon weisst du welcher Client benutzt wird und kannst falls notwendig bei Google nachschlagen fuer welches OS dieser zur Verfuegung steht. X-mailer=Microsoft Outlook = hier handelt es sich mit ziehmlicher Sicherheit um ein Windows OS, ausser jemand hat Outlook unter linux emuliert ;p ======================================================================== 4.4 - Sonstige Server ======================================================================== Bei sonstigen vorhandenen Servern auf dem Zielsystem von denen man nicht auf anhieb weiss worum es sich handelt verbindet man sich einfach mittels telnet darauf und wartet die welcome-message ab! Bei Diensten ohne Welcome-Message hilft meistens Google! ;) ======================================================================== 5.0 - Finger- & Footprinting Tools ======================================================================== Network Mapper - http://www.insecure.org/nmap WinFingerprint - http://www.webattack.com/get/winfinger.shtml MingSweeper - http://www.hoobie.net/mingsweeper LANguard - http://www.gfi.com/languard Superscan - http://www.webattack.com/get/superscan.shtml Passives Fingerprinting: http://project.honeynet.org/papers/finger/passfing.tar.gz http://siphon.datanerds.net http://lcamtuf.coredump.cx/p0f.shtml ======================================================================== 6.0 Tarnen und Verschleiern ======================================================================== 'KOSF' nennt sich der kernel-based OS faker in Kurzform. Er aendert den Kernel so ab das beim naechsten Scan mit NMAP nicht mehr Linux als OS da steht sondern: - Apple color laserwriter 600 - Digital unix osf 1 v3.2 - FreeBSD v2.1.0 oder HP-UX A9.00 Zu finden ist KOSF unter: http://www.hit2000.org/kosf/ Wenn man einfach nur die TTL Werte manipulieren moechte: echo 'number' > /proc/sys/net/ipv4/ip_default_ttl --- Auch fuer Windows NT gibt es entsprechende Tarn-Methoden. die TTL-Request Werte koennen ueber die Registry veraendert werden. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters --- Und fuer Solaris: ndd -set /dev/ip ip_def_ttl 'number' ============================================================= 7.0 - Credits ============================================================= kopieren erlaubt - veraendern verboten! ProXy http://www.excluded.org