OS Fingerprinting in Python

Hallo,
Ich wollte mein Programm in Python ein wenig anonymer gestalten und will deshalb die gespooften daten packete so verändern,dass es aussieht als würde ich ein anderes OS benutzen.Dazu brauche ich natürlich diese Daten von den Betriebssystemen.Da ich mir jetzt nicht alle möglichen OS downloaden/kaufen wollte nur um den traffic zu analysieren,wollte ich fragen,ob es nicht eine Auflistung der wichtigen Daten im Internet gibt.
Hab beim googlen schon folgendes entdeckt:
Hacker Geek: OS Fingerprinting With TTL and TCP Window Sizes
Jedoch ist da das Problem,dass da nur ältere OS sind und ich auch neuere "benutzen" wollte.

Vielen Dank für Antworten,
TheNew3000
 
Schau doch einfach mal in die Quelltexte von Nmap und dort speziell die Teile für's OS-Fingerprinting. Da dürften die Daten recht aktuell sein.
 
Was bringt es, wenn dein Programm zwar TCP-Parameter verändert, aber ein einfacher Zugriff auf einen beliebigen anderen Port die Wahrheit verrät? Die Änderung musst du schon am OS selbst machen, ansonsten bringt dir dein Vorhaben keinerlei Vorteile.
 
Default TTL Values in TCP/IP

Grundsätzlich kannst dich an folgenden halten

Windows 95 und ältere NT Versionen: 32
Windows 2000, XP, Vista usw: 128
Solaris 2.x: 255
FreeBSD: 64
openBSD: bin mir nicht mehr sicher glaub 60 oder so
Linux: 64 oder 255 je nach Kernel
IBM/Irix usw: 60
 
Danke für die schnelle Antwort,aber so weit ich das in der Datenbank gesehen habe,ist das aktives OS Fingerprinting,ich bräuchte jedoch passives Fingerprinting.
 
@SchwarzeBeere: Es geht mir um das IPSpoofing,also kann ich ja auch die
Source IP verändern.

@overflow:vielen dank :thumb_up: aber gibt es nicht noch andere Faktoren,als die TTL?
 
@SchwarzeBeere: Es geht mir um das IPSpoofing,also kann ich ja auch die
Source IP verändern.

Im Kontext eines DDoS-Angriffs würde ich dir da zustimmen. Das Problem ist, dass sobald ein NIDS im Einsatz ist, dass TCP Parameter untersucht, du schon sehr stark eingeschränkt sein wirst. Hier macht es also fast gar mehr Sinn, den "Standardhost" zu untersuchen, der auf den anzugreifenden Host zugreift.

Im Kontext von MitM macht das einfache Ändern der Parameter durch dein Programm ebenfalls keinen Sinn, da die gespoofte IP ja in deine MAC-Adresse übersetzt wird und damit alle Pakete, die an die IP gesendet werden, an dich gehen. Ein einfacher Portscan eines der Opfers an die gespoofte IP würde dich damit verraten.

Im Kontext von Angriffen gegen Systeme, die eine Authentifizierung auf IP-Basis erfordern, würde ich wiederum den Standardhost auf bestimmte Parameter untersuchen und diese dann automatisch anpassen.

Alles in allem würde ich dir empfehlen, statt trockener Dokumentation und theoretischer TTL- und Sequenz-Nummern, oder Paketreihenfolgen, reale Systeme zu betrachten (z.B. einfache SYN-Scans) und die Parameter dynamisch an die Umgebung anzupassen. Damit kommst du sowohl in reinen Linux-, als auch in reinen Windows-, als auch in heterogenen Umgebungen zurecht.
 
Alles in allem würde ich dir empfehlen, statt trockener Dokumentation und theoretischer TTL- und Sequenz-Nummern, oder Paketreihenfolgen, reale Systeme zu betrachten (z.B. einfache SYN-Scans) und die Parameter dynamisch an die Umgebung anzupassen
Auch wenn die Frage jetzt warscheinlich dämlich klingt(Ich fange halt gerade erst mit dem Thema richtig an...),aber wieso SYN-Pakete?Oder meintest du mit dem SYN-Scan einen Portscan?
 
Ein SYN-Scan ist normalerweise ein Portscan der Form:

Code:
"Halber" Verbindungsaufbau:
A ---TCP(flags="S")---> B
A <---TCP(flags="A")--- B

Verbindungsabbruch:
A  ---TCP(flags="R")---> B
oder
A       (timeout)        B

Der Vorteil ist, dass ein SYN-Scan oft nicht geloggt wird, da kein kompletter Verbindungsaufbau zustande und daher die Applikation, die auf einem bestimmten Port lauscht, letzten Endes nichts mitbekommt.

Damit kannst du mit einem simplen Portscan schon erste Informationen sammeln, z.B. für TCP Sequenznummern oder TTL-Werten, über Roundtrip-Zeiten, Hops, Timeout-Zeiten, Netzwerkstackverhalten, ... und diese dir zunutze machen. Der SYN-Scan war hier nur als Beispiel angedacht.

Die gewonnen Daten fütterst du dann deinem Programm. Damit bist du am Ende viel näher an der Realität, als wenn du strikt nach Dokumentation die TTL auf 64 oder 128 setzt.
 
Ahh ok danke :thumb_up:,aber ich hätte trotzdem noch 2 Fragen:
-Wofür brauche ich die TCP-Sequenznummer,ich dachte die wird per Zufallsgenerator ausgerechnet?

-Und was ist mit den RTT und Timeout Zeiten?Werden die bei dem Verbindungsaufbau mit versendet?
 
-Wofür brauche ich die TCP-Sequenznummer,ich dachte die wird per Zufallsgenerator ausgerechnet?
Zufallsgeneratoren werden idR durch Software implementiert und sind vom OS abhängig. Ebenso wird die Berechnung der Sequenznummern durch den Netzwerkstack implementiert.

-Und was ist mit den RTT und Timeout Zeiten?Werden die bei dem Verbindungsaufbau mit versendet?
Nein, das nicht. Aber auch das sind Parameter, die vom OS oder Netzwerstack bestimmt oder definiert werden und können somit zur Bestimmung des OS genutzt werden.
 
Nein, das nicht. Aber auch das sind Parameter, die vom OS oder Netzwerstack bestimmt oder definiert werden und können somit zur Bestimmung des OS genutzt werden.
Aber wie soll der Empfänger dann erkennen,ab wann der Sender eine Timeout-Fehlermeldung sendet 8o ?Und wie kann das OS die RTT festlegen,liegt das nicht auch an den Routing-Tabellen oder habe ich da etwas falsch verstanden?:confused:
 
Aber wie soll der Empfänger dann erkennen,ab wann der Sender eine Timeout-Fehlermeldung sendet 8o ?
Dafür wird dir sicherlich eine Möglichkeit einfallen, wenn du dich näher damit auseinander gesetzt hast, warum ein Timeout auftritt und was passiert, wenn der Sender das Timeout z.B. nicht "mitbekommt" ;)

Und wie kann das OS die RTT festlegen,liegt das nicht auch an den Routing-Tabellen oder habe ich da etwas falsch verstanden?:confused:
Die RTT wird vom Netzwerkstack zum Congestion Control genutzt. Man könnte ja auf die Idee kommen, dass unterschiedliche Congestion Control Algorithmen in unterschiedlichen OS implementiert wurden...
 
Man sollte aber auch die Nachteile der SYN-Portscans nicht vergessen:
- nicht wirklich zuverlässig

Es ist zwar schön, dass man durch SYN Portscans sehr viel an Performance gewinnt (läuft ja den 3WHS nicht durch), aber mit den Daten, die man für die Auswertung erhält, kann man nicht immer arbeiten.

Daher gibt es m.E. nicht den perfekten Portscan. Man sollte je nach Situation selbst entscheiden, was benötigt wird.

Wenn man beispielsweise viel Zeit hat, sollte man die Intervalle sehr hoch setzten (evt. alle 10 Minuten), um den Sysadmin nicht aufzuwecken =)

Wenn hinter dem Server ein Mr. bitmuncher steht, wird er dir schnell auf die Finger hauen, wenn du mit einem 0815 SYN Portscans sein Netzwerk durchforstest.
 
Wenn hinter dem Server ein Mr. bitmuncher steht, wird er dir schnell auf die Finger hauen, wenn du mit einem 0815 SYN Portscans sein Netzwerk durchforstest.

Nein, wird er nicht. Portscans bekomm ich zwar von Snort mitgeteilt, aber wenn man als Admin auf Portscans anspringt, ist man imo ziemlich paranoid. Solche Scans kommen zu Dutzenden jeden Tag von irgendwelchen Botnets.

Aber SchwarzeBeere hat den wichtigsten Punkt bereits angesprochen.

SchwarzeBeere hat gesagt.:
Dafür wird dir sicherlich eine Möglichkeit einfallen, wenn du dich näher damit auseinander gesetzt hast...

OS-Fingerprinting geht noch wesentlich weiter als nur ein paar Manipulationen im TCP-Header. Man kann z.B. die verwendeten Zufallszahlen mit Wahrscheinlichkeitsmodellen der verschiedenen Betriebssysteme abgleichen. Dies ist ein Faktor, der immer wieder gern übersehen wird, so wie die meisten statistischen Datenerhebungen, die genutzt werden können um Abweichungen von der Norm zu erkennen.
Man kann auch mit einem pro-aktiven IDS Hosts mit auffälligen Fingerprints automatisiert scannen und auf diese Weise das System ermitteln.
 
Wozu soll das ueberhaupt gut sein?

Wenn es jemand bemerkt - und selber das System - nämlich dein system - checkt, dann kann er sich die Info ueber dein System auch so besorgen.

Darüber hinaus müsstest du ja auch alle möglichen Label jeglicher Software, die bei dir "offen" ist, aendern. Zb. gibt der Apache oder der sshd aufschluss über das System.

Und wenn sich keiner die Mühe macht - oder es nicht bemerkt, ist es auch egal.

Besser wäre es, deine Anfragen durch irgend nen $SOCKS zu leiten.
 
Zurück
Oben