Portscanner

aus Wikipedia, der freien Enzyklopädie

Ein Portscanner ist eine Software, mit der überprüft werden kann, welche Dienste ein mit TCP oder UDP arbeitendes System über das Internetprotokoll anbietet. Der Portscanner nimmt dem Anwender dabei die Arbeit ab, das Antwortverhalten eines Systems selbst mit einem Sniffer zu untersuchen und zu interpretieren.

Oft bieten Portscanner auch Zusatzfunktionen wie Betriebssystem- und Diensterkennung an, obwohl diese nichts mit dem eigentlichen Portscannen zu tun haben.

Funktionsweise

TCP-connect()-Scan

Diese ist die einfachste Scanmethode. Der Portscanner nutzt den connect()-Systemaufruf für den Portscan. Den eigentlichen Verbindungsaufbau übernimmt dann das Betriebssystem. Falls der Systemaufruf erfolgreich war, ist der Port offen. Die Verbindung wird dann sofort mit close() wieder geschlossen. Konnte die Verbindung nicht aufgebaut werden, ist der Port geschlossen.

Vorteilhaft bei dieser Methode ist die sehr einfache Programmierung. Da der connect() Befehl auf fast jedem System zur Verfügung steht, ist ein connect() Portscanner sehr portabel. Spezielle Rechte sind meist nicht erforderlich. Da die Verbindung bei Erfolg komplett aufgebaut wird, erscheint sie meistens in den Logdateien der Dienste.

TCP-SYN-Scan

Beim TCP-SYN-Scan wird ein TCP-Paket mit SYN-Flag an den Ziel-Host gesendet, um einen Verbindungsversuch vorzutäuschen. Die Antwort des Hosts gibt Aufschluss über den Port: Sendet er ein SYN/ACK-Paket, den zweiten Teil des Drei-Wege-Handshakes von TCP, akzeptiert der Port Verbindungen und ist daher offen. Der Quell-Host antwortet dann in der Regel mit einem RST-Paket, um die Verbindung wieder abzubauen (dies geschieht meist allerdings nicht durch den Portscanner, sondern durch das Betriebssystem, da offiziell kein Verbindungsversuch unternommen wurde). Sendet der Host ein RST-Paket, ist der Port geschlossen. Sendet der Ziel-Host überhaupt kein Paket, ist ein Paketfilter vorgeschaltet.

Diese Art von Scan wird auch Stealth-Scan genannt, da TCP-Implementierungen bei nicht vollständig zustande gekommenen Verbindungen den zugehörigen Dienst nicht informieren. Dieser erzeugt daher auch keine Log-Daten für versuchte Verbindungsaufbauten, bzw. bekommt vom Scan überhaupt nichts mit. Aus Anwendungssicht ist der SYN-Scan daher unsichtbar. Dies gilt aber nicht für die Netzwerkebene: Firewalls oder Intrusion Detection Systeme erkennen diese Art von Scan natürlich dennoch und können sie ggf. mit Hilfe des Portknocking-Verfahrens, bei dem der Port erst nach dem Empfangen einer vorvereinbarten Paketsequenz geöffnet wird, blockieren.

Auf den meisten Quell-Systemen sind außerdem Systemverwalterrechte notwendig, weil TCP-Pakete vom Portscanner handgefertigt werden müssen.

TCP-SYN-Scans lassen sich für Denial-of-Service-Attacken in Form von SYN-Flood nutzen.

TCP-FIN/Xmas/Null-Scan

Diese Methoden bauen keine Verbindung auf, sondern untersuchen das Verhalten auf Folgepakete. Falls ein Port offen ist, sollten die Folgepakete ignoriert werden, da sie nicht zu einer bestehenden Verbindung gehören. Ist der Port geschlossen, sollte ein Reset-Paket gesendet werden.

Welche Flags genau gesetzt werden, hängt vom Scantyp ab:

Typ Flags
FIN FIN
Xmas FIN, URG, PUSH
Null (keine)

TCP-Idlescan

Dieser Scan wird über einen Mittelsmann, der als Zombie bezeichnet wird, ausgeführt. Der Idlescan ist zurzeit die einzig bekannte Scanmethode, bei der der gescannte Host keine Rückschlüsse auf den scannenden Host ziehen kann, da er nur Pakete des Zombies zu sehen glaubt.

Zombiehost

Um als Zombiehost für den Idlescan geeignet zu sein, muss er Bedingungen erfüllen:

  1. Der Zombiehost muss Pakete vom Ziel empfangen können
  2. Die IPID (IP Identification Number, ein Teil des IP-Headers) muss für den Portscanner vorhersehbar sein.

Die Vorhersagbarkeit der IPID ergibt sich einerseits aus der Tatsache, dass die meisten Betriebssysteme für die IPID einen systemglobalen Zähler einsetzen, der immer dann wenn das System ein selbst erzeugtes Paket versendet, um einen bestimmten Wert erhöht wird. Die Werte sind je nach Betriebssystem unterschiedlich und typischerweise 1, 4 oder 8. Zudem ist für die Vorhersagbarkeit wichtig, dass der Zombie selbst im Betrieb idealerweise keine der IPID-verändernden Pakete generiert, das System also Idle ist – daher der Begriff Idle-Scan.

Überraschenderweise eignen sich Router recht gut als Zombies, da diese normalerweise Pakete nur durchleiten (wobei sich deren IPID nicht ändert), aber nicht selbst am Netzwerkverkehr teilnehmen.

Ablauf
Schematische Darstellung eines TCP Idlescans

Für den eigentlichen Scan braucht der Portscanner die aktuelle IPID des Zombies. Um die IPID herauszufinden, wird z. B. einfach eine TCP-Verbindungsanfrage (SYN) an ihn geschickt. Der Zombie antwortet SYN|ACK oder RST, das Antwortpaket enthält die aktuelle IPID (2).

Für den eigentlichen Portscan schickt der Angreifer ein gespooftes SYN-Paket an das Ziel (3). Als Quell-IP-Adresse setzt der Angreifer die IP-Adresse des Zombiehosts. Falls der Port offen ist, sendet das Ziel ein SYN|ACK-Paket an den Zombie (4a). Da er keine Verbindung geöffnet hat, schickt der Zombie ein RST-Paket an das Ziel (4a). Unter der Annahme, dass der Zombie die IPID immer um den Wert eins inkrementiert, gilt: dieses Reset wird mit einer IPID + 1 an das Ziel gesendet. Ist der Port geschlossen, sendet das Ziel ein RST-Paket an den Zombie (4b). Dieses Paket wird vom Zombie einfach ignoriert. Nun fragt der Angreifer in gleicher Weise wie zu Beginn nach der aktuellen IPID (5). Ist die IPID um 2 gestiegen (1 Paket an Ziel + 1 Paket an Angreifer), ist der Port offen. Ist die IPID nur um 1 höher (nur 1 Paket an Angreifer), so ist der Port geschlossen (6).

UDP-Scan

Ein direkter Scan von UDP-Ports ist nicht möglich, da das Protokoll verbindungslos arbeitet. Über einen Umweg ist ein Scan trotzdem möglich. Dazu wird ein leeres UDP-Paket an den entsprechenden Port geschickt. Kommt ebenfalls ein UDP-Paket zurück, ist der Port offen. Kommt keine Antwort, ist der Port entweder geschlossen oder gefiltert. Wird eine „Port Unreachable“-Fehlermeldung empfangen, ist der Port geschlossen. Auf den meisten Systemen ist die Ausgabe von ICMP-Fehlermeldungen gedrosselt, um einen Denial-of-Service-Angriff zu verhindern. Daher sind UDP-Scans meistens zeitaufwendig.

FTP-Bounce-Scan

Bei einem FTP-Bounce-Scan benötigt der Angreifer einen FTP-Server, der den PORT-Befehl zulässt. Über den PORT-Befehl kann der Angreifer die IP-Adresse des Opfers und einen zu überprüfenden Port übergeben. Kann der FTP-Server mit den übergebenen Daten eine Verbindung etablieren, so läuft ein Dienst auf dem Port, was der Server dem Angreifer bekanntgibt. Diese Spielart von FTP war ursprünglich dazu gedacht, Dateien zwischen Servern bequem kopieren zu können. Der Angreifer bleibt dabei unsichtbar für das Opfer, da nie eine direkte Verbindung zwischen Opfer und Angreifer aufgebaut werden muss.

Zusatzfunktionen

Die oben genannten Zusatzfunktionen wie OS-Fingerprinting (Erkennen des Betriebssystems) und Dienst-Erkennung, für die z. B. der Portscanner nmap bekannt ist, sind streng genommen keine Portscans mehr und ihr Einsatz kann nicht nur aufgrund eines nicht ganz auszuschließenden Absturzrisikos beim Ziel problematisch sein.

Rechtliche Aspekte

Die Legalität von Portscans ist umstritten, da sie als erste Instanz eines Eindringversuches gewertet werden können. In jedem Fall ist eine Benutzung auf eigenen Systemen legal. Sinn ergibt dies z. B. um das System einem Sicherheitscheck zu unterziehen.

Unklarer ist die Rechtslage bei Portscans gegen fremde Systeme und Netzwerke. Da beispielsweise empfindliche Computer durch viele Verbindungsanfragen gestört werden können, kann dies als Angriff auf die Verfügbarkeit eines Systems gewertet und in Deutschland durch § 303b StGB (Computersabotage) bestraft werden. Das SANS-Institut bestätigt in einer Veröffentlichung ebenfalls den Zwiespalt von Portscans.[1]

Portscanner werden jedoch nicht eindeutig als Computerprogramm zum Ausspähen oder Abfangen von Daten nach § 202a StGB oder § 202b StGB(Hackerparagraf) angesehen, da sie keine Sicherheitsmechanismen umgehen und auch keine Daten abfangen können. Je nach Fall kann ein Portscan aber als Vorbereitung zum Ausspähen von Daten gewertet werden. Das Vorbereiten ist nach § 202a StGB ebenfalls strafbar und kann juristisch entsprechend geahndet werden. Die unklare Rechtslage ist also keinesfalls ein Freibrief.

Einfache Implementierung eines Portscanners

Mit folgendem Befehl kann auf einem unixoiden System mit dem Programm Netcat nach offenen TCP-Ports gesucht werden.

$ nc -vz $zu_scannender_host 1-65535

Bekannte Portscanner

  • Nmap (Unix/Windows/Mac)
  • netcat (Unix)
  • Scanmetender (Windows und GNU/Linux)
  • Blue's Port Scanner (Windows)
  • Superscan (Windows)
  • Unicornscan (Unix)
  • ZMap (Unix)
  • scanrand (Unix)
  • Angry IP Scanner (Unix/Windows/Mac)
  • iNet Network Scanner (Mac/iOS)

Siehe auch

Einzelnachweise