PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Information Gathering - Fingerprint Methoden



Lidloses_Auge
06.06.2009, 19:07
Der Sicherheitsgrad eines Webservers lässt sich an vielen Faktoren messen, ein wichtiger Faktor sind hierbei die Informationen die preisgegeben werden.
Es gibt viele Informationen, die einem Angreifer wichtige Details zum aufgesetzten Server geben können, und bei vielerlei Dingen ist es sehr einfach Informationen zu bekommen, auch
Wenn diese zunächst uninteressant erscheinen.

Einige Quellen aus denen man Informationen beziehen kann sind folgende:

1. Server Banner:

Das Server Banner wird bei jeden HTTP Request mitgeschickt.
Ein Austausch von Nachrichten besteht aus Request und Answer.
Im Request fragt der Nutzer eine bestimmte Quelle auf dem Webserver an,
und versieht diese optional mit einigen Zusatzinformationen wie Cookie, Content-Type o.Ä. Diese stehen im sogenannten Header.
Diesen gibt es auch bei der vom Webserver gelieferten Antwort, in der zum einen
Das angefragte Dokument zu finden ist, und einige Informationen, wie je nach Optionen des Webservers mitgeliefert werden.

Ein Feld im Antwort-Header kann zum Beispiel das „Server“ Feld, oder auch „Server-Banner“ sein. Dieses könnte wie folgt aussehen:

Server: Apache/2.2.11 (Debian) mod_fastcgi/2.4.6

An den Inhalt des Headers kann man mit den Firefox Erweiterungen „Live HTTP Headers“ oder „Server Spy“ kommen. Es würde allerdings auch ausreichen manuell ein HTTP Request abzusetzen, etwa mit Telnet. Dort wird auch direkt der Antwort Header ausgegeben.
Welche Informationen wofür relevant sind werde ich später noch ausführen.

2. Verhalten des Webservers

Am Verhalten, wie der Webserver auf Veränderungen reagiert lässt sich auch sinnvolles extrahieren. Es gibt zum Beispiel bestimmte Anzeichen an Darstellung und
Parsing Routinen an denen man Skriptsprache oder auch Versionen von Datenbanksystemen erkennen lassen.

3. Automatisiertes Fingerprinting

Mit dem Netzwerktool „nmap“ lassen sich automatisiert Fingerprinting Routinen ausführen, die detaillierte Informationen herausfinden können, bei denen man von Hand nicht unbedingt weiterkommt.

Was an also über den Webserver herausfinden möchte liegt am Benutzer selbst, doch gibt es eine Reihe von Standardinformationen, die man sich auf jeden Fall anschauen sollte.


1. Betriebssystem
2. Webserver
3. Scriptsprache
4. Datenbanksystem
5. Services + Ports
6. Weitere Websites auf Server 1. Betriebssystem

Es gibt einige Hinweise die auf das entsprechende Betriebssystem hindeuten können.
Als eine der wichtigsten Quellen steht hier der Webserver. Man kann diesen in den meisten Fällen aus dem Server Banner auslesen.
Steht hier etwa : „Microsoft-IIS/6.0“ kann man sich sicher sein auf ein Windows Betriebssystem gestoßen zu sein. Der Microsoft IIS Server läuft unter keinem anderen System als Windows.
Findet man allerdings nur ein „Apache“ vor kann man sich nicht 100% sicher sein, da hier nur die Minimal-Angabe eingeschaltet ist.
Die Webserver bieten 6 Optionen, mit denen sich die Ausgabe im Server Banner beeinflussen lässt. Diese nennen sich Server Tokens.


1. Prod (“Apache”)
2. Major (“Apache/2”)
3. Minor (“Apache/2.0”)
4. Min (“Apache/2.0.41”)
5. OS (“Apache/2.0.41 (Unix)”)
6. Full (“Apache/2.0.41 (Unix) mod_fastcgi/2.4.6”)Man erkennt in diesen Beispielen die Ausgaben, die entweder nur vom Produkt, bis hin zu Versionsnummern und detaillierten Server Angaben über installierte Modifikationen reichen können. Ist hier „OS“ oder „Full“ eingeschaltet, ist die Suche nach dem Betriebssystem relativ schnell beendet.

Ein weiterer Weg ist, den Webserver zu Fehlermeldung zu zwingen in denen der Pfad der aktuellen Datei stehen kann. Dies kann durch Sonderzeichen geschehen, die der Webserver nicht verarbeiten kann. Mögliche Ausgaben können folgende sein:


Warning: Header may not contain more than a single header, new line detected. in C:\xampp\htdocs\info.php on line 2
Warning: Header may not contain more than a single header, new line detected. In
/var/www/info.php on line 2Hier lässt der Pfad auf das Betriebssystem schließen, sofern es sich um den
absoluten Pfad handelt. Beim ersten ist dies Windows, beim zweiten ein auf Linux
basierendes Betriebssystem.

Eine automatisierte Möglichkeit bietet sich auch mit dem bereits angesprochenen
Tool nmap. Man startet also zunächst einen simplen Portscan mit:
Nmap –v –A Host
Findet man Ports vor wie 3389 oder den NetBIOS Port, ist dies mit großer
Sicherheit ein Windows Rechner, oder man verlässt sich einfach auf
die OS Fingerprint Option von nmap, die wir mit „-A“ eingeschaltet haben.

2. Webserver

Der Webserver lässt sich relativ schnell erschließen, sofern nicht besondere
Maßnahmen zur Verschleierung getroffen wurden.
Helfen wird uns wieder der Server Banner in dem bereits oben gezeigt wurde,
dass in den meisten Fällen der Name des Webservers bereits angezeigt wird,
selbst bei minimaler Darstellung.
Z.b. „Apache“
Sollte man nicht sofort Zugriff zu dem Server Banner haben, kann man auch
Versuchen den Webserver zu einer Fehlermeldung zu zwingen, etwa in dem man
Eine Seite aufruft die nicht existiert. In einigen Fällen wird der Webserver dann
zurückmelden, dass die aufgerufene Seite nicht existiert, und auch gleich den
Webserver mitsamt Version zurückgibt.
Eine weitere Methode ist auch hier das Port und Servicescanning wo wir auf die
Offenen Ports schauen sollten. Auch hier erscheint bei den laufenden Services
In manchen Fällen der Webserver.

3. Skriptsprache

Etwas schwieriger gestaltet sich das Herausfinden der aktuellen Skriptsprache,
denn nicht überall wo .php oder .html dransteht, muss es auch darin sein.

Dieses Versteckspiel wird möglich gemacht vom Zuweisen des Typs auf eine
Frei wählbare Endung, was in der httpd.conf geschieht und wie folgt aussehen
kann:


AddType application/x-httpd-php .php .php4 .htmlDas .html am Ende macht deutlich, dass in diesem Falle auch Dateien mit der
Endung html auf PHP Code geparsed werden und folglich auch eine
index.html?id=1 als Ersatz für index.php?id=1 dienen kann. In den meisten Fällen
ist aber den Endungen glauben zu schenken.
Wer ganz sicher gehen will schaut in den altbekannten http Header, aus dem wir
Auch diesmal nützliche Informationen ziehen können.
Ausgegeben werden könnte z.B. dies:


X-Powered-By: PHP/5.2.9In dem Falle wissen wir sofort, dass es sich um PHP handelt. Dies ist aber nur
möglich, wenn die Option „expose_php“ auf „on“ gestellt ist.

Fehlermeldung die für eine Skriptsprache spezifisch sind, können auch ein starkes
Indiz sein. Eine Blackboxing Methode einen Fehler hervorzurufen, wäre das
Anhängen von Sonderzeichen wie ' " %00 etc. an einen Parameter.
Ein möglicher Fehler wäre bei PHP dieser:


Warning: fopen(/test'.txt): failed to open stream: Permission denied in
/test.php on line 138Über eine Suchmaschine kann man dann anschließend Informationen über die
auftretenden Fehlern beziehen.

PHP wandelt Variablennamen die mit einem Leerzeichen beginnen automatisch in
einen Namen ohne führende Leerzeichen um, also kann man mit folgendem
simplen Test ebenso auf PHP überprüfen:


index.php?page=10
index.php?+page=10Wird in beiden Fällen das gleiche angezeigt, ist dies ein gutes Indiz für ein
Vorhandensein von PHP. ASP zum Beispiel reagiert in diesem Falle anders, und
wird ein anderes Dokument als zuvor anzeigen.
Techniken, die die Dateiendungen verschleiern, wie zum Beispiel Mod Rewrite
schützen nicht unbedingt vor der Informationsgewinnung. Ein Beispiel hat Player
in seinem Artikel beschrieben, wie man eine PHP Installation erkennen kann.
Zu finden ist dieser hier: http://novusec.com/php-easter-egg-sinnvoll-nutzen/

4. Datenbanksystem

Die Auswahl an großen Datenbanksystemen ist glücklicherweise nicht allzu groß
und es gibt einige Möglichkeiten herauszufinden, welches installiert ist.
Der Trick mit den Sonderzeichen greift in vielen Fällen auch hier sodass man zum
Beispiel folgende Fehlermeldungen bekommen könnte:


You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near ''3''' at line 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL
result resource in /var/www/test.php on line 92


Unclosed quotation mark before the character stringWährend die ersten beiden Meldungen auf MySQL hinweisen, ist die dritte eine
Meldung des Microsoft SQL Servers. Die Meldungen können außerdem auf eine
SQL Injection hindeuten. Dies funktioniert nur, solange die Option
„display_errors“ auf „on“ geschaltet ist.

Der Portscanner „nmap“ erledigt auch für die Informationsgewinnung über
Datenbanken gute Dienste. Scannt man einen Webserver und findet den offenen
Port 3306, dann ist dies ein laufender MySQL Server. MSSQL benutzt wiederum
Andere Ports und Oracle Datenbanken ebenso andere.

5. Services + Ports

Sofern die Website mitsamt ihren Implementierungen abgesichert ist, gibt es über
Die Seite selbst wenig Möglichkeiten für einen Angreifer Schaden anzurichten.
Die auf dem Server installierten Services können jedoch auch zur Gefahr werden.
Der Befehl:

nmap –v –A Hostadresse

liefert bei installiertem nmap eine detaillierte Auflistung über offene Ports und
dessen Services. Die Programme können Schwachstellen enthalten wie Buffer
Overflows oder Format Strings, die unter Umständen sogar aus der Ferne
angegriffen werden können, und dem Angreifer die vollständige Kontrolle über
den Server bieten, solange die Prozesse SUID root sind, also dem root Konto
gehören.
In großen Exploitdatenbanken kann man anschließend nachschauen, ob zu einem
Gefundenen Service ein Exploit existiert.

6. Weitere Websites auf dem Server

Wird man auf einer Seite nicht fündig, kann man einen Umweg über die Websites
gehen, die auf dem gleichen Server wie die Zielseite liegen.
Das Stichwort ist hierbei „Reverse-IP“ oder „Reverse-DNS“.
Einige Seiten bieten solch einen Dienst an, und zeigen die Seiten mit gleicher IP
an. Manche Seiten sind weniger zuverlässig als andere, dies ist von der Domäne
abhängig die für die Suche zurate gezogen wird.

Beispiele für Reverse-DNS Dienste sind:

http://www.myipneighbors.com/
http://www.domaintools.com/reverse-ip/
http://www.protect-x.com/reverse/

Dies stellt nur einen groben Überblick an Informationen dar, die man beziehen kann, doch können diese Informationen essentiell für ein weiteres Vorgehen sein.
Wer tiefer in die Materie einsteigen möchte sollte sich mit dem Stichwort „Fingerprinting“ umsehen.

Quelle: http://www.novusec.com (http://www.novusec.com/)

VeN0m
06.06.2009, 19:22
Sehr schön :). Danke Dir ;). Einiges davon wusste ich noch nicht. Z.B. das mit nmap. Werde ich mir vielleicht mal anschauen. Man kann ja nie wissen, welche Informationen man gebrauchen kann. Weiter so :).

bugyc66
07.06.2009, 13:49
Nice wahr sehr lehr reich auch wenn man es teilweise schon angewendet hat