Mehr Netzwerk-Sicherheit

Ports scannen mit Nmap und Zenmap

24.07.2009 von Hans-Christian Dirscherl
Offene Ports sind potenzielle Einfalltore für Angreifer. Für die Konfiguration von Firewalls ist ein Verständnis der Ports daher unerlässlich. Mit dem Port-Scanner Nmap lassen sich die Sicherheit im Netzwerk überprüfen und Sicherheitslücken stopfen.

Der Löwenanteil der Internetkommunikation zum Browsen und für E-Mails läuft über das TCP- und das UDP-Protokoll ab. Jeder Anwendung, die mit dem Internet in Verbindung steht, weisen die Protokolle TCP und UDP eine Portnummer zu. So „weiß“ jedes Datenpaket, zu welcher Anwendung es gehört, der Port ist sozusagen die Adresse für einen bestimmten Typ von Internet-Daten. Ein HTTP-Paket für den Browser landet also nicht im Mailprogramm und ein Paket mit Mail findet den Weg in Ihren Mailclient und landet nicht im Browser, jedes Datenpaket erreicht dank der Portnummern sein richtiges Ziel.

Sockets sind die Adressen von PC und Servern

Komplettiert wird die Adresse eines Datenpaketes mit der IP-Adresse des Zielrechnerns. Die Kombination aus IP-Adresse des Zielrechners und Portnummer der Zielanwendung auf dem Zielrechner nennt man Socket. Zwei Sockets definieren eine Verbindung, einer für den Ausgangs- und einer für den Zielrechner. Dank des Sockets landet jedes Datenpakt auf dem richtigen Rechner in der richtigen Anwendung. Umgekehrt gibt es natürlich auch auf dem Server, der die Daten bereit stellt, die Sockets, sprich: Auch dort müssen die entsprechenden Ports geöffnet sein. Womit wir wieder beim Thema wären.

Der für eingehende Mails zuständige POP3-Server arbeitet beispielsweise am Port 110, ein Webserver lauscht am Port 80. Soll es ein andere Port sein, weil Sie zum Beispiel zwei Webserver gleichzeitig betreiben, müssen Sie das ausdrücklich so festlegen, beispielsweise bei Apache in dessen Konfigurationsdatei.

Jedes Datenpaket weiß also, an welchen Port es gerichtet ist. Dafür wird ihm nämlich im Header des Datensegments die Absender- und Ziel-Portnummer hinzugefügt. Das gilt sowohl für das TCP- als auch für das UDP-Protokoll.

Serverprozesse haben immer statische Portnummern, Clientanfragen bekommen dagegen bei jeder Anfrage eine dynamische Portnummer zugewiesen. Ein eindeutiges Socket für eine Anfrage an einen Webserver mit der IP-Adresse 192.168.1.18 kann beispielsweise folgendermaßen aussehen: 192.168.1.18:80. Und wenn der anfragende Clientrechner die IP-Adresse 192.168.100.12 hat, dann würde das Socket für die ausgelieferte Website folgendermaßen aussehen: 192.168.100.12:49152 – wobei letzteres der dynamisch zugeteilte Port für die Antwort wäre.

Typische Portnummern: Well known und registrierte Ports

Bei den Portnummern unterscheidet man drei Gruppen: Well Known (0-1023) Ports, registrierte Ports (1024-49151) und dynamische/private Ports (49152-65535). Die Well Known Ports umfassen bekannten Nummern für gängige Dienste wie HTTP, IMAP, POP3, SMTP, Telnet, FTP, um nur einige Beispiele zu nennen. TCP und UDP verwenden oft, aber nicht immer, die gleichen Portnummern, einige Portnummern kommen auch nur unter einem der beiden Protokolle zum Einsatz.

Beispiele für Well Known Ports

7 Echo

20 FTP-Datentransfer vom Server zum Client

21 FTP-Steuerbefehle durch den Client

23 Telnet-Kommunikation (unsichere Verbindungsmethode aus den Urzeiten des Internets, weil sie Daten unverschlüsselt überträgt)

25 SMTP-Mail-Versand

43 Whois

53 DNS-Auflösung von Domainnamen in IP-Adressen

80 http-Webserver

110 POP3-Client-Zugriff für Mail-Server

143 IMAP

194 IRC

389 LDAP

443 HTTPS

531 AIM, ICQ

666 DOOM-Online-Spiel

901 SWAT

989 FTPS-Daten

990 FTPS-Steuerbefehle

Registrierte Ports gibt es für bestimmte Anwendungen von Herstellern, die ein Benutzer selbst installiert. Proxy-Server sind hierfür ein Beispiel oder SIP mit dem Port 5060. Den Port 3306 nutzen MySQL-Datenbanken, 8080 und 8008 sind ebenfalls relativ bekannte Portnummern, weil sie als Alternative für 80 genommen werden. Die ist sinnvoll, wenn zwei Webserver gleichzeitig auf einem System laufen, beispielsweise ein Apache und ein IIS, oder man einen zusätzlichen Webserver zu Testzwecken betreiben.

Portliste auf einem Linuxsystem

Die Port-Liste eines Linuxrechners findet man unter etc/services. Bei Windows XP liegt diese Übersicht unter %WINDIR%\system32\drivers\etc\services. Die dynamischen/privaten Ports sind keiner Anwendung fest zugewiesen und werden je nach Bedarf eingesetzt. Eine Liste der gängigen Portnummern finden Sie hier bei der IANA.

Portliste auf einem Windowssystem

Ports schließen oder absichern

Damit ein Rechner mit dem Internet kommunizieren kann, müssen also zwingend einige Ports offen sein. Jeder offene Port ist aber ein potenzielles Einfallstor für Angreifer, wenn die an dem Port lauschende (also bereit stehende) Anwendung eine Sicherheitslücke aufweist. Um absolute Sicherheit zu bekommen, müsste man alle Ports schließen, doch dann ist keine Internetverbindung mehr möglich. Ergo müssen einige Ports offen bleiben. Somit gilt die Faustregel: So viele Ports wie nötig und so wenige wie möglich freischalten. Konkret bedeutet das, dass man Dienste, die man nicht benötigt, einfach abschaltet, bevor ein Angreifer diese zum Eindringen in Ihr System ausnutzt.

Der Anwender sollte aber wissen, welche Ports aktuell auf seinem Rechner tatsächlich erreichbar sind und welche Anwendungen an welchen Ports „lauschen“. Ports für Dienste, die man benötigt, beispielsweise für Mails, für das Surfen, für Instant Messaging oder weil man Filesharing macht, sollten zumindest überwacht werden. Beispielsweise durch einen Sniffer, der aufzeichnet, wann welche Datenpakete über welchen Port an welche Zieladresse abgingen beziehungsweise eintrafen. Wireshark ist hierfür ein geeignetes Tool.

Dienste, die Sie benötigen und deshalb nicht abschalten können, sollten Sie möglichst so konfigurieren, dass nicht von jedem beliebigen Rechner der Zugriff darauf möglich ist, sondern nur von bestimmten Rechnern, beispielsweise nur von PCs aus Ihrem Intranet. Unter Linux können Sie den Zugriff auf bestimmte Dienste ergänzend auch via TCP-Wrapper steuern (hosts.deny und hosts.allow). Zudem sollten Sie Ihre Firewall so restriktiv konfigurieren, wie es nur irgendwie möglich und sinnvoll ist.

Für jedes Betriebssystem existieren einige einfache Tools, mit denen Sie in wenigen Sekunden ermitteln können, welche Ports auf Ihrem System geöffnet sind. Diese Tools sollten Sie kennen und zumindest eines davon regelmäßig nutzen, um Ihren Rechner oder Ihr Heim- beziehungsweise Firmennetzwerk auf Einfallstore zu scannen, bevor das ein Angreifer macht.

So spüren Sie offene Ports auf

Der einfachste Weg um offene Ports anzuzeigen, sind die Bordmittel der Betriebssysteme. Mit dem unter Windows und Linux gleichermaßen verfügbaren Kommandozeilenbefehl netstat ermitteln Sie, welche Netzwerkverbindungen Ihr PC aufgebaut hat. Unter Windows Vista öffnen Sie beispielsweise über „Start, cmd" eine DOS-Box, in die Sie folgenden Befehl eintippen: „netstat -an". Daraufhin zeigt Ihnen Windows alle Netzwerkverbindungen auf einer Maschine an, laufende Serverdienste sind mit "Listen", "Listening" beziehungsweise "ABHÖREN"gekennzeichnet. Mit der Option "-o" wird zu jedem Port die Prozess-ID PID des dazu gehörigen Prozesses angezeigt.

Netstat unter Windows

Ein beliebtes Hilfsmittel zum Erkennen offener Ports sind jedoch Portscanner, die viel differenzierte Möglichkeiten für das Scannen von Ports bieten und mit denen sich unter Umständen sogar die komplette Struktur eines Netzwerks anzeigen lässt. Ein Portscan ist ganz besonders dann unverzichtbar, wenn Sie auf Ihrem Rechner neue Anwendungen installiert oder neue Dienste gestartet haben. Machen Sie dann einen Portscan Ihres Systems um sich zu vergewissern, ob dadurch neue Ports geöffnet wurden.

Wichtiger rechtlicher Hinweis: Die hier vorgestellten Werkzeuge sind für jeden Anwender, der sich professionell mit seinem Netzwerk oder seinem Internet-PC beschäftigen und Sicherheitslücken entdecken und schließen will, unverzichtbare und im Praxiseinsatz bei Unternehmen und Behörden vielfach erprobte Werkzeuge. Da die Gesetzeslage in der Bundesrepublik Deutschland aber in Bezug auf derartige Sicherheits-Werkzeuge nicht unproblematisch ist, verzichten wir auf eine direkte Download-Verlinkungen zu diesen Tools und auf Schritt-für-Schritt-Anleitungen. Setzen Sie Portscanner und Sniffer aber nur in Ihrem eigenen Netzwerk ein und nur, wenn Sie Ihr Netzwerk alleine nutzen. Scannen Sie keine Ports von fremden Netzwerken und lesen Sie keinen fremden Netzwerk-Traffic mit.

Mit Nmap offene Ports erkennen und analysieren

Der quelloffene und kostenlose Portscanner Nmap (Network Mapper) eignet sich hervorragend um offene Ports in Ihrem Netzwerk zu entdecken. Nmap unterstützt alle gängigen OS und auch weniger bekannte Betriebssysteme wie beispielsweise FreeBSD, OpenBSD, Solaris, IRIX, Mac OS X, HP-UX, NetBSD, Sun OS und Amiga. Für die jeweiligen Betriebssysteme stehen eigene Downloadpakete zur Verfügung (außerdem steht der Quellcode für Anwender bereit, die Nmap selbst kompilieren wollen). Für Windows greifen Sie am besten zum selbstextrahierenden ZIP-Archiv. Darin ist nicht nur der eigentliche Portscanner (also das Kommandozeilentool), sondern auch die grafische Bedienoberfläche Zenmap enthalten, mit der sich Nmap wie eine normale Windows-Anwendung bedienen lässt. Zu Zenmap lesen Sie später mehr.

Nmap unter Linux

Nmap gehören für jeden Netzwerkbetreiber zu den unverzichtbaren Werkzeugen. Sie können damit ganz einfach das Antwortverhalten Ihres Netzwerks nach außen hin überprüfen. Wenn der Scanner installiert ist, können Sie beispielsweise unter Linux mit Rootrechten und dem Befehl nmap localhost Ihr System auf geöffnete Ports hin überprüfen.

Beim Portscan werden sowohl TCP als auch UDP unterstützt. Typischerweise wird Nmap von der Kommandozeile aus gestartet, ganz einfach geht das mit folgendem Befehl: nmap -v -A targethost. Bei targethost geben Sie die IP-Adresse des zu überprüfenden Rechners ein. Doch Nmap besitzt noch viel mehr Optionen für den professionellen Einsatz, die Sie auf der Kommandozeile mit angeben können. Wenn Sie beispielsweise nur Ports für TCP-Verbindungen suchen, sollten Sie nmap –sT eingeben. Eine Liste der Optionen finden Sie auf dieser Seite http://nmap.org/book/man-briefoptions.html .

Fingerprinting: Betriebssysteme identifizieren

In Zusammenhang mit Portscans sollte auch das OS-Fingerprinting erwähnt werden. Jedes Betriebssystem hinterlässt seinen eigenen Fingerabdruck im Internet, beispielsweise anhand der TCP/IP-Stack-Implementation. Diesen Vorgang nennt man OS-Fingerprinting. Ein Portscanner kann versuchen, anhand dieses Fingerabdrucks das Betriebssystem zu identifizieren. Da das auch die Vorgehensweise von Hackern ist, sollten Sie selbst auch einmal Ihr System daraufhin überprüfen, wie es sich nach außen hin zu erkennen gibt.

Man unterscheidet zudem zwischen aktiver und passiver Betriebssystemerkennung. Bei der aktiven wird dem gescannten Rechner quasi ein Datenpaket als Köder geschickt. Das Analyseprogramm schickt selbst Datenpakete an den zu untersuchenden Rechner. Der Zielrechner antwortet auf dieses Paket, aus der Antwort kann dann versucht werden, das System zu identifizieren. Dieses aktive Vorgehen liefert exaktere Ergebnisse, kann aber von einem Administrator auch leichter erkannt werden. Wenn Sie nur Ihr eigenes Netzwerk scannen, stellt das kein rechtliches Problem dar: Ihre eigenen Systeme dürfen Sie scannen, versuchen Sie also ruhig die aktive Methode. Bei der passiven Methode liest das Scannerprogramm nur den Traffic an den überwachten Rechner mit. Hier bleibt der Scannende zwar gut getarnt, weil er nur Pakete analysiert, die für den überwachten Host gedacht sind, dafür bekommt man aber auch weniger exakte Ergebnisse.

Ein aktiver Versuch zur Identifizierung des Betriebssystems des Zielrechners mit abgeschickten TCP-Paketen sieht beispielsweise so aus: nmap -sT -O Clientname (wenn man den Scanvorgang beschleunigen will, kann man zusätzlich mit "–p" auch noch gezielt den Port angeben, an den Nmap das Datenpaket schicken soll). Das "-O" steht für "Enable OS detection". Schutzmaßnahmen gegen Fingerprinting bestehen etwa darin, dass der Zielrechner so konfiguriert ist, dass er keine Informationen über sich preis gibt oder dass er sogar falsche Informationen sendet um den Angreifer zu verwirren.

Admins können einen Portscan unter Umständen mit Intrusion Detection Systemen erkennen. Nmap kann deshalb so konfiguriert werden, das er verborgen scannt und einen Stealth-Scan durchführt. Nmap und das auf der nächsten Seite erklärte Zenmap sind für die Betriebssystemerkennung aber nicht ohne Konkurrenz. Ähnliche Aufgaben übernimmt zum Beispiel Xprobe2. Auch p0f scannt Ports und versucht das Betriebssystem zu ermitteln.

Zenmap: Grafische Oberfläche für Nmap

Nmap besitzt eine Fülle von Optionen, die Sie auf der Kommandozeile eintippen müssen. Kryptisch anmutende Kommandozeilenbefehle mit komplizierten Options- und Parameterfolgen sind nicht jedermanns Sache. Das gilt besonders für Windows-Anwender. Doch es gibt Abhilfe: Zenmap, eine grafische Bedienoberfläche (GUI) für Nmap. Zenmap stellt zudem zusätzliche Funktionen zur Verfügung.

Mit Zenmap wird der Netzwerkscan deutlich vereinfacht. Geben Sie einfach die zu scannende IP-Adresse (oder den IP-Adressbereich) oder den Hostnamen und die Art des Scans ein. Der Benutzer kann bei Zenmap unter unterschiedlich umfangreichen Scans wählen. Beispielsweise ein kompletter Scan (mit oder ohne UDP), ein schneller Scan für die gängigsten TCP-Ports oder ein reiner Ping-Scan, um die Verfügbarkeit eines Rechners zu testen und sich erst einmal einen Überblick über die in einem bestimmten Adressraum verfügbaren Rechner zu verschaffen. Je nach Umfang des Scans erscheinen schon nach wenigen Sekunden oder erst nach einigen Minuten die Resultate. Die von Zenmap zur Auswahl gegebenen Scanprofile lassen sich nach Belieben anpassen und ergänzen.

Insense Scan

Der Abschluss der kompletten Scans kann Zeit in Anspruch nehmen. Im rechten Ausgabefenster dokumentiert Nmap daher seine Arbeitsschritte: Welche Ports überprüft werden, welche Art von Scan gerade erfolgt und wie die Ergebnisse aussehen. Geschlossene Ports werden nicht separat angezeigt, zu den geöffneten Ports gibt es dagegen Detailinformationen wie "offen" oder "gefiltert", welcher Dienst konkret an einem offenen Port lauscht und welche Softwareversion des jeweiligen Dienstes Nmap zu erkennen glaubt. Wenn der Port 80 offen ist, weil ein Webserver auf dem gescannten System läuft, dann liefert Nmap beispielsweise die Angabe, welche Apacheversion er entdeckt zu haben glaubt. Oder welche MySQL-Datenbankversion auf dem Server ihre Dienste verrichten soll. Und welcher Mailserver vermutlich die Post zustellt.

Netzwerk-Topologie erstellen mit Zenmap

Zudem gibt Nmap an, wieviele Hops (also Sprünge von einem Netzknoten zum nächsten) nötig sind, bevor das Datenpaket vom Ausgangsrechner aus den Zielrechner erreicht hat. Nmap liefert auch gleich die Route dafür mit, sprich: die Ergebnisse der Netzwerk-Befehle Traceroute/tracert.

Tracerouteergebnis mit Nmap

Auch bei Zenmap versucht Nmap herauszubekommen, welches Betriebssystem vermutlich auf dem Zielrechner installiert ist - hierfür wird die oben beschriebene Fingerprintmethode eingesetzt. Die OS-Erkennung soll nicht nur mit typischen PC-Systemen wie Windows (einschließlich Vista mit SP1), Linux und MacOS, sondern auch mit Wii-Konsolen und iPhones klappen. Die Scanergebnisse können zur späteren Analyse bequem in Dateien gespeichert werden.

Einfacher Ping-Scan

Wenn Sie gleich mehrere Rechner auf einmal scannen wollen: Kein Problem, bei Target können Sie auch IP-Ranges eingeben. Wenn Sie dabei aber "intense Scan" wählen, kann der Scanvorgang sehr lange dauern.

Zenmap erstellt Netzwerk-Topologie

In Nmap ist seit Version 4.75 Radialnet integriert. Damit lassen sich die Netzwerke visuell darstellen. So entsteht quasi eine Karte des Netzwerks, auf der die geöffneten Ports pro Host angezeigt werden. Jeder Kreis stellt einen PC dar, Farbe und Größe eines solchen Punktes hängen von der Zahl der offenen Ports ab. Router werden als Quadrate dargestellt. (ala)

Dieser Beitrag basiert auf einem Artikel unserer Schwesterpublikation PCWelt.