Portscanner
Ein Portscanner ist eine Software mit der überprüft werden kann, welche Dienste ein mit TCP/IP oder UDP arbeitendes System anbietet. Der Portscanner nimmt dem Anwender dabei die Arbeit ab, das Antwortverhalten eines Systems selbst mit einem Sniffer zu untersuchen und zu interpretieren. Da es sich bei Portscans um ein protokollkonformes Verhalten handelt (Siehe TCP/IP), sind diese in der Regel legal. Ausnahmen bestehen, wenn ein Portscan als Denial of Service Angriff durchgeführt wird. Mögliche Folgen sind Pufferüberläufe oder Überlastung des Betriebssystens. Oft wird durch ein DoS Portscan auch die gesamte verfügbare Bandbreite ausgenutzt. Oft bieten Portscanner auch Zusatzfunktionen wie Betriebssystem- und Diensterkennung an, obwohl sie nichts mit dem eigentlichen Portscannen zu tun haben.
TCP SYN Scan
Diese Technik wird auch als halb-offener Scan genannt, da keine vollständige TCP-Verbindung aufgebaut wird. Als erstes wird ein SYN Paket an den Host gesendet, als ob man eine normale Verbindung aufbauen wollte. Wenn der Host ein SYN|ACK Paket sendet, ist der Port offen. Sendet der Host ein RST Paket, ist der Port geschlossen. Danach wird die Verbindung mit einem RST Paket beendet. Wurde kein SYN|ACK oder RST Paket empfangen, ist ein Paketfilter vorgeschaltet.
Der Vorteil bei dieser Methode ist, dass die gescannte Anwendung keinen Verbindungsversuch erkennt. Deshalbt erscheint die Verbindung auch nicht in den Logdateien. Aber jede bessere Firewall erkennt diesen Scan relativ einfach. Auf den meisten System sind außerdem Systemverwalterrechte notwendig.
TCP connect() Scan
Diese ist die einfachste Scanmethode. Der Portscanner nutzt den connect() Systemaufruf für den Portscan. Den eigentlich 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 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 sich 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 nicht direkt vom System des Portscanners ausgeführt, sondern über einen Mittelsmann der als Zombie bezeichnet wird. Der Idlescan ist zur Zeit die einzige komplett unsichtbare Scanmethode. Falls ein Firewall auf dem Zielhost installiert ist, sieht es für ihn so aus, als ob der Scan vom Zombiehost kommt.
Zombiehost
Um als Zombiehost für den Idlescan geeeignet zu sein, muss er mehrere Bedingungen erfüllen.
- Der Zombiehost muss eine Verbindung zum Ziel aufbauen können
- Die IPID (IP Identification Number, ein Teil des IP-Headers) muss für den Portscanner vorhersehbar sein. (Linearer Anstieg)
- Der Zombiehost sollte möglichst wenig Netzwerkverkehr haben (daher auch der Name Idlescan)
Ablauf
Für den eigentlichen Scan braucht der Portscanner die aktuelle IPID des Zombies. Um die IPID herauszufinden, wird einfach eine TCP Verbindung halb geöffnet (wie beim SYN Scan) (1). Der Zustand des Ports spielt nur eine untergeordnetet Rolle. Das Anwortpaket des Zombies 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). 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 Begin nach der aktuellen IPID (5). Ist die IPID um 2 gestiegen, ist der Port offen. Ist die IPID nur um 1 höher, 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 keine Antwort, ist der Port offen. Wird eine "Port Unreachable" Fehlermeldung empfangen, ist der Port geschlossen. Auf den meisten System ist die Ausgabe von ICMP Fehlermeldungen gedrosselt, um einen Denial of Service Angriff zu verhindern. Daher sind UDP Scans sehr zeitaufwändig.
Zusatzfunktionen
Die o.g. Zusatzfunktionen wie Betriebssystems-OS-Fingerprinting und Dienst-Erkennung, für die z.B. der Portscanner nmap bekannt ist, sind strenggenommen keine Portscans mehr und ihr Einsatz kann nicht nur aufgrund eines nicht ganz auszuschließenden Absturzrisikos beim Ziel problematisch sein.
Bekannte Portscanner
Lokale Portscanner
- nmap (Unix/Windows) [1]
- GFI-LANguard Port Scanner [2]
- unicornscan (Unix) [3]
- DSNS network scanner (Windows) [4]
- Superscan (Windows) [5] oder [6]
- paketto scanrand (Unix) [7]
Online Portscanner
- Sygate Online Scan erweiterte Sicherheitsprüfung (Stealth Scan, Trojan Scan)
- Planet Security Firewall-Check Schnell, erweiterte Prüfung, prüft aktuell stark bedrohte Ports (TCP Scan)
- Crucialtests übersichtlich + Ratgeber
- ShieldsUP (Gibson Research Corporation) Schnell & übersichtlich
