PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fingerprinting / Footprinting



HurricanX
27.09.2004, 17:28
. . . written by ProXy - 09.02.2003
+-------------------------------------------------+
| Fingerprinting / Footprinting |
| (Remote OS Detection) |
+-------------------------------------------------+


<1.0> Wtf !? :)
<1.1> Was ist Fingerprinting?
<1.2> Was ist Footprinting?
<2.0> Fingerprinting - TTL Request
<3.0> Fingerprinting - IP Stack
<3.1> Fingerprinting - Window Size
<3.2> Fingerprinting - ICMP Error Msg
<4.0> Footprinting - Ports
<5.0> Footprinting - FTPD
<6.0> Footprinting - HTTPD
<7.0> Footprinting - E-Mail
<8.0> Finger- & Footprinting -Tools


================================================== ===========
1.0 - Wtf !? :)
================================================== ===========

1.1 - Was ist Fingerprinting?

Fingerprinting nennt man das erkennen des Betriebssystems
eines entfernten Rechners anhand TCP-Sequenzen.
In Absatz 2.0 - 3.2 werde ich etwas näher darauf eingehen.

================================================== ===========

1.2 - Was ist Footprinting?

Footprinting nennt man das auslesen des Betriebssystems
aus Welcome- und Infobannern von am Rechner laufenden
Daemonen oder anhand offener Ports.
Absatz 4.0 - 7.0 erklären das genauer..

================================================== ===========
2.0 - TTL Fingerprinting
================================================== ===========

Ihr kennt ja sicher den Network Mapper (besser bekannt unter NMAP),
das ist ein Portscanner für Linux welcher auch OS-Fingerprinting
und diverse andere Scan-Methoden unterstützt.
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 zurück. Damit wird für gewöhnlich 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 Stationsdurchläufen bis
zum Ziel zeigen. Der Standard-TTL-Wert sollte 64 sein, jedoch hielten
sich nicht alle Betriebssystem-Hersteller daran und man kann in vielen
Fällen anhand des TTL Wertes das Betriebssystem festellen.
Also ein einfacher Ping würde reichen! :)

Windows-Rechner haben meistens einen TTL-Wert von 128 (pong)
und Linux-Rechner liegen etwas darüber 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 präzisen Tool
zu machen das es heute ist.

Übersicht 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

================================================== ===========
3.0 - 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 geöffneten TCP-Port geschickt.
------+--------------------------------------------------------
T2: | Ein NULL-Paket wird zu einem geöffneten TCP-Port geschickt.
------+--------------------------------------------------------
T3: | Ein SYN,FIN,PSH und URG-Paket wird zu einem geöffneten
| TCP-Port geschickt.
------+--------------------------------------------------------
T4: | Ein ACK-Paket wird zu einem geöffneten 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.


Einige Beispiel-Outputs:

Fingerprint Windows 98 v2
TSeq(Class=TD%gcd=<6%SI=<F)
T1(DF=Y%W=2017%ACK=S++%Flags=AS%Ops=M)
T2(DF=N%W=0%ACK=S%Flags=AR%Ops=)
T3(DF=Y%W=2017%ACK=S++%Flags=AS%Ops=M)
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 Windows 95 (ws2)
TSeq(Class=TD%gcd=<6%SI=<1F)
T1(DF=Y%W=2017%ACK=S++%Flags=AS%Ops=MNWNNT)
T2(DF=N%W=0%ACK=S%Flags=AR%Ops=)
T3(DF=Y%W=2017%ACK=S++%Flags=AS%Ops=MNWNNT)
T4(DF=N%W=0%ACK=S%Flags=R%Ops=)
T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=)
T6(DF=N%W=0%ACK=S%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 Windows NT4 sp6a
TSeq(Class=TD%gcd=1|2|3%SI=<5A)
T1(DF=Y%W=2017%ACK=S++%Flags=AS%Ops=M)
T2(DF=N%W=0%ACK=S%Flags=AR%Ops=)
T3(DF=Y%W=2017%ACK=S++%Flags=AS%Ops=M)
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 Windows 2000
TSeq(Class=RI%gcd=1|2%SI=<5FFF&>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%UC K=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%UC K=E%ULEN=134%DAT=E)


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 |
-----+-----------------------------+------------(sans.org)-----------------


3.1 - Window Size

Hierbei wird auf die TCP Fenster-Grösse von Antwort-Paketen geachtet.
Bsp von oben: T1(DF=Y%W=402E%ACK=S++%Flags=AS%Ops=MNWNNT)
"W=402E" (= Standard für Windows)

================================================== ===========

3.2 - ICMP Error Message

Eine weitere Methode wäre 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.

...

Es gibt noch einige andere Fingerprinting Methoden
jedoch denke ich jetzt die wichtigsten beschrieben zu haben
und wende mich nun dem Footprinting zu :)

================================================== ===========
4.0 - Port Footprinting
================================================== ===========

Auch anhand offener Ports kann man ein Betriebssystem
erkennen, zB für windows typisch:

Port 135 - epmap
Port 139 - Micosoft Netzwerkumgebung (Netbios)
Port 445 - microsoft-ds
port 1025 - blackjack
...

================================================== ===========
5.0 - FTPD Footprinting
================================================== ===========

Ist am Zielrechner Port 21 geöffnet dann bedeutet dies meist
das dort ein ftp-daemon läuft, am einfachsten ist es sich
via Telnet als "anonymer user" (falls erlaubt)
darauf einzuloggen und die Begrüssungszeile abzuwarten.
Dort wird meist das OS und der ftpd-typ 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 via DOS 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

================================================== ===========
6.0 - HTTPD Footprinting
================================================== ===========

Falls Port 80 geöffnet ist läuft ein http-Server auf dem
Rechner und man kann mittels eines simplen Tricks
Typ, Version, OS und evtl. noch mehr feststellen...
Dazu öffnet 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 gedrückt 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.

================================================== ===========
7.0 - 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 vollständigen Header anzeigen.
Suche danach nach der Zeile "X-mailer=" und schon weisst
du welcher Client benutzt wird und kannst falls notwendig
bei Google nachschlagen für welches OS dieser zur Verfügung steht.

X-mailer=Microsoft Outlook = hier handelt es sich mit ziehmlicher
Sicherheit um ein MS WINDOWS ausser
jemand hat es unter linux emuliert ;p

================================================== ===========
8.0 - Finger- & Footprinting -Tools
================================================== ===========

Network Mapper - http://www.insecure.org/nmap
MingSweeper - http://www.hoobie.net/mingsweeper
LANguard - http://www.gfi.com/languard
Superscan - http://www.webattack.com/get/superscan.shtml
WinFingerprint - http://www.webattack.com/get/winfinger.shtml
_more_ - http://www.zone-h.org/en/download/category=14

================================================== ===========
9.0 - Credits
================================================== ===========

kopieren erlaubt - verändern verboten!

ProXy <proxy@es-crew.de>
http://www.es-crew.de